Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

8.4.1 早期融合、晚期融合与中间融合方式

在 VLA 中,“多模态融合”不仅仅是一个抽象概念,而是一个非常具体的工程设计问题:视觉、语言、机器人状态 / 动作这几路信息到底在什么阶段合在一起? 从时间位置来看,主流做法可以分为三类:早期融合(early fusion)、中间融合(intermediate / mid-level fusion)、晚期融合(late fusion)(arXiv)。三者各有优劣,并且已经在不同的 VLA 架构中得到应用。

【插图占位 8.4-1:一张流水线示意图,分别画出早期融合(原始模态直接拼接)、中间融合(各自编码后在特征层合并)、晚期融合(各自输出决策后再融合)的结构对比】

8.4.1.1 早期融合

定义: 早期融合是指在“输入阶段”就把各模态的数据合在一起,再交给统一的主干网络学习。例如:

  • 将图像 patch token、语言 token、机器人状态 token 直接串联成一个长序列,送入同一个 Transformer;
  • 或者在进入策略网络之前,先用一个 VLM(如 CLIP)对视觉与语言进行对齐,再将得到的联合视觉–语言特征 与动作 / 状态一起输入策略网络,这类专门强调“Early Fusion VLA”的工作已经出现(OpenReview)。

形式上可以理解为:

\[ \text{输入序列} = [\text{语言 token},\ \text{图像 patch token},\ \text{状态 / 历史 token}] \]

统一送入一个 Transformer,通过自注意力让所有模态在第一层 就开始交互。

优点:

  • 细粒度对齐能力强。 例如“抓起碗左边的红色杯子”,语言 token 中的“红色杯子”“左边”,可以直接在自注意力中与对应图像 patch 建立紧密联系,有利于精准 grounding。
  • 信息损失少。 由于在非常早的阶段就共同建模,模型可以自己决定保留什么细节、丢弃什么细节,而不是先分别压缩各模态后再合并。
  • 对 VLM 预训练能力利用充分。 一些工作在 CLIP 之上做早期融合,将预训练好的图文对齐特征直接用于控制决策,而不是“晚点才考虑语言”(OpenReview)。

缺点与工程挑战:

  • 维度高、计算重。 所有模态 token 放一起,自注意力复杂度是 \(O(n^2)\),视觉 patch 多时,对显存和算力要求很高。
  • 对噪声敏感。 早期融合意味着低层表示就互相影响,视觉噪声、语言歧义都可能放大到整个网络。
  • 训练更加“脆弱”。 如果机器人数据量不够大,很容易把预训练 VLM 学到的“通用知识”扰乱。实际工程中,常见做法是:
    • 冻结大部分预训练视觉–语言编码器;
    • 只训练少量适配层或策略头,或者采用参数高效微调(如 LoRA)。

在本书语境下,可以把早期融合看成**“极端端到端”** 的 VLA 设计:从最原始的多模态输入开始,就只交给一个统一的 Transformer 去学。

8.4.1.2 晚期融合

定义: 晚期融合(late fusion)是指先让每个模态(甚至每个模态自己的决策网络)各自算完,再在输出层或决策层做组合(arXiv)。在 VLA 中常见几种形式:

  • 视觉–语言用一个现成的 VLM 做理解;
  • 动作策略用另一个网络,仅接收“任务 embedding”或“检索结果”;
  • 最终决策由一个小网络或手工规则,把“视觉–语言建议”和“低层控制建议”做加权或门控。

可以形式化为:

\[ \pi(a|o, x) = g\big(\pi_{\text{vision}}(o),\ \pi_{\text{language}}(x),\ \pi_{\text{state}}(s)\big) \]

其中 \(\displaystyle g\) 是一种融合函数,可以是简单加权平均,也可以是门控网络或 Mixture-of-Experts。

优点:

  • 模块化强,易维护。 视觉–语言理解模块、策略模块可以相对独立演化。比如更新 VLM 到更大的版本,不一定要重训整套策略。
  • 利用已有系统更方便。 工程中常见:保留已有的 SLAM、规划器或传统控制器,只用 VLA 模块提供“高层建议”,这本质上就是一种晚期融合。
  • 训练稳定性好。 各模态先在自己的任务上得到较稳定的表示(例如 VLM 保持冻结),最终只微调一个小的融合 / 决策头,出错范围相对可控。

缺点:

  • 跨模态细粒度交互能力弱。 如果视觉和语言各自“先压缩成一个向量”,再合并,模型很难在像素级精确理解“哪个杯子才是‘左边的红色杯子’”。
  • 容易产生“决策割裂”。 视觉模块说 A 更重要,语言模块说 B 更重要,若融合函数设计不当,整体行为可能不稳定。
  • 对 VLA 的统一性有限。 从理念上,晚期融合更接近“模块堆叠”,而不是一个真正统一的“视觉–语言–动作基础模型”。

晚期融合在机器人系统整合阶段非常常见,在第 10 章中讨论“VLA 与传统规划 / 控制模块”接口时,可以与这里形成呼应。

8.4.1.3 中间融合

定义: 中间融合(mid-level / intermediate fusion)介于二者之间:先为每种模态提取中层特征,再通过特征级别的交互模块(往往是 cross-attention 或特征拼接)进行融合(arXiv)。 典型做法是:

  1. 视觉 backbone(CNN/ViT)将图像映射为一组视觉 token;
  2. 语言编码器(LLM 或小型 Transformer)将指令映射为一组语言 token 或一个全局 embedding;
  3. 再用专门的多模态 Transformer / cross-attention 层,将二者、中加机器人状态 token 在中层 融合,最后输出动作。

许多代表性的 VLM/VLA(如 Flamingo、PaLI-X 及在其基础上扩展的 RoboFlamingo、RT-2、OpenVLA 等)都属于此类结构:视觉、语言分别有自己的 encoder,然后在若干层 cross-attention 模块中交互(CVF开放获取)。

中间融合的特点:

  • 保留每个模态的“专业 backbone”。 可以直接复用 ImageNet / 自监督预训练视觉模型,和通用语言模型,不必从头端到端训练。
  • 融合层承担“任务对齐”的角色。 中间的 cross-attention / 特征拼接层负责把视觉、语言、动作历史等映射到对决策友好的公共空间。
  • 在表达能力与工程复杂度之间折中。 相比早期融合,序列长度与相互影响范围更可控;相比晚期融合,又能实现更细粒度的跨模态信息流动。

在实践中,多数 VLA 系统采用“中间融合 + 局部早期 / 晚期融合”的混合结构:例如在视觉内部多尺度早期融合不同传感器,在输出层再做一点晚期融合(如安全过滤),而核心策略部分仍然是中间融合。

【插图占位 8.4-2:典型 VLA 中间融合结构示意图。图像通过 ViT 得到 patch token,语言通过 Transformer 得到 token,状态 / 历史为若干额外 token,中间一个 Cross-Attention Transformer 将所有 token 交互,输出动作 token】


8.4.2 Cross-Attention 在 VLA 中的角色

在第 2 章我们已经介绍了自注意力(self-attention),Cross-Attention 可以看作“查询来自一方,键 / 值来自另一方”的注意力,是多模态模型最常用的“胶水”。当前大量 VLM / VLA 使用 cross-attention 将视觉、语言、动作串联起来(arXiv),例如 RT-2、VLA-Grasp 等都采用了基于 cross-attention 的多模态 Transformer(Embodied AI in Robotics)。

8.4.2.1 语言引导注意力

在 VLA 中,一个非常重要的模式是:“语言作为 Query,引导模型在视觉 / 状态空间中寻找与任务相关的部分。”

具体来说:

  • 语言编码器输出一组语言 token \(({l_i})\);

  • 视觉编码器输出一组图像 patch token \(({v_j})\);

  • 在 cross-attention 中,以语言 token 为 Query,视觉 token 为 Key/Value:

    \[ \text{Attn}(L,V) = \text{softmax}\big(\frac{Q_L K_V^\top}{\sqrt{d}}\big) V_V \]

    这样每个语言 token 会“指向”与其语义相关的图像区域。

直观理解:

  • “红色杯子”这个 token,会给那些呈现红色圆柱形物体的 patch 更高权重;
  • “在碗左边的”会让注意力分布偏向图像左侧相关区域;
  • 机器人状态 token(如末端位姿)也可以被语言 token 查询,用于回答“已经抓住了吗?”这类隐式问题。

RT-2 这类大规模 VLA 将视觉 token、语言 token 和离散动作 token 一起放在 Transformer 中,通过 cross-attention 让语言指令在视觉 patch 上选择与任务相关的区域,从而实现复杂的指令执行(Embodied AI in Robotics)。

【插图占位 8.4-3:Cross-Attention 可视化图。左边是图像上高亮的注意力热力图(红色杯子区域被高亮),右边是一句指令的词向量,箭头表示“红色杯子”“左边”等词 Query 到图像 patch 的注意力连接】

8.4.2.2 多模态交互

Cross-attention 不一定总是“语言查视觉”,在 VLA 中常见几种交互方向:

  1. 动作解码器 Query 视觉 + 语言。
    • 把“历史动作 token + 语言 token + 状态 token”输入一个解码器;
    • 解码器通过 cross-attention 查询视觉特征,得到用于下一步动作预测的上下文;
    • 这种模式类似机器翻译中的 Encoder–Decoder 架构,只不过这里的“源语言”是视觉 / 状态。
  2. 视觉 Query 语言(反向引导)。
    • 有时希望视觉特征根据语言“重构”或“筛选”自身,例如只保留与当前指令相关的物体特征;
    • 这可以通过视觉 token Query 语言 token,实现“从指令中抽取与当前 patch 相关的语义”。
  3. 三模态交互:视觉–语言–动作。
    • 部分 VLA(如 VLA-Grasp 等)显式为视觉、语言、候选动作建立多通道编码器,再用多层 cross-attention 互相查询,以捕获三者之间的内在联系(SpringerLink);
    • 例如针对不同候选抓取姿态,分别计算“该动作与当前视觉–语言任务的匹配程度”,从而选出更合理的动作。

从信息流角度看,cross-attention 提供了一个可控的“信息输送通道”

  • 谁是 Query,谁就有“提问权”;
  • 通过不同方向的 cross-attention,可以有选择地把信息从一个模态灌输到另一个模态。

8.4.2.3 实现细节

在工程上,Cross-Attention 在 VLA 中的落地细节主要体现在以下几个方面:

  1. 插入位置与层数设计。
    • 常见做法是在 Transformer block 中,将自注意力扩展为两段: 1)对解码器内部 token 做 self-attention; 2)再对编码器输出(视觉 / 语言)做 cross-attention;
    • 对于“统一 Transformer”架构,也可以在部分层中专门使用 cross-attention,在其他层继续使用 self-attention,从而控制不同层的模态交互强度(arXiv)。
  2. 模态类型编码(type embedding)。
    • 为视觉 token、语言 token、状态 / 动作 token 添加不同的“模态 ID embedding”,帮助网络区分信息来源;
    • 在 cross-attention 中往往保留这些模态 embedding,使网络学习到“对不同模态应该采用不同的查询策略”。
  3. 尺度与下采样。
    • 如果直接用全部视觉 patch 做 Key/Value,成本过高,因此多数系统会在视觉侧做下采样或压缩,例如:
      • 使用 [CLS] 或若干 pooled token;
      • 使用稀疏注意力,只保留最有信息的 patch;
      • 采用 FPN/多尺度金字塔,只在部分尺度上做 cross-attention。
  4. 参数与训练策略。
    • 实践中,往往会冻结视觉–语言 backbone,只训练 cross-attention 和策略头,以保护预训练知识,一些“知识隔离(knowledge insulating)”的工作更系统地研究了这一点(physicalintelligence.company);
    • 对 cross-attention 层使用比 backbone 更小的学习率,或采用分层学习率,减少训练初期的“剧烈破坏”。
  5. 复杂度与实时性权衡。
    • Cross-attention 的复杂度是 \(O(T_Q \cdot T_K)\)。在机器人应用中,往往控制 Query 长度(例如只用少数动作 token 作为 Query),并压缩 Key/Value,确保在目标控制频率下可以实时运行。

这些实现细节与第 10 章中“在线推理与部署”的实时性要求有关,设计 cross-attention 时需要兼顾表达能力与计算开销。


8.4.3 使用语言作为条件(instruction-conditioning)

前面第 4.4 节讨论了“语言作为任务描述、约束和解释”的角色,本节进一步聚焦在**“如何把语言指令形式化为 VLA 模型的条件”** 上——也就是所谓的 instruction-conditioned policy。 许多研究已经证明,将机器人策略显式地条件化在自然语言指令上,可以得到可泛化、可重用的控制策略(NeurIPS 会议论文集)。

8.4.3.1 条件编码

第一步是把自然语言指令 \(\displaystyle x\) 编码为模型可用的“条件表示”。典型做法包括:

  1. 全局指令向量(sentence embedding)。
    • 使用语言编码器(如 BERT、轻量 Transformer 或大型 LLM 的编码部分)对整句指令编码,得到一个向量 \(c \in \mathbb{R}^d\);
    • 这个向量可以看作“任务 ID 的连续版本”,比手工 one-hot 任务标签表达更丰富的语义(NeurIPS 会议论文集)。
  2. 指令 token 序列。
    • 直接保留子词级 token 序列 \(({l_i})\),供 Transformer 进一步处理;
    • 与视觉 token、动作 token 串联或通过 cross-attention 交互,可以实现更精细的对齐(如“最大杯子”“最右边的物体”)。
  3. 前缀 / 提示(prompt)形式。
    • 在统一 Transformer 中,可以将语言 token 放在序列开头,作为“prompt”;
    • 后续的视觉 / 动作 token 在自注意力中,可以随时读取这个 prompt 的信息。
  4. 特征调制(Feature-wise conditioning)。
    • 使用类似 FiLM(Feature-wise Linear Modulation)的方式:

      \[ h’ = \gamma(c) \odot h + \beta(c) \]

      其中 \(h\) 是视觉或状态特征,\(\gamma(c),\beta(c)\) 由指令向量生成,用于对特征进行按通道缩放和偏移;

    • 直观理解为“指令决定网络的工作模式”,例如“收拾桌面”模式、“分类整理”模式等(clip-rt.github.io)。

无论采用哪种方式,目标都是构造一个**“语义条件”**,能够在不同任务之间平滑插值:

  • “把红杯子放进盒子”和“把蓝杯子放进盒子”对应的条件向量应该“相近”;
  • “打开抽屉”和“关上抽屉”既有相似部分(对象是抽屉),又在动作方向上有明显差异。

8.4.3.2 控制方法

有了“条件编码”之后,下一步是让语言条件真正影响策略 。这里可以理解为“如何在网络内部给语言一个有效的控制通道”:

  1. 输入级控制:拼接 / 加和。
    • 最简单的方式是把指令向量 \(\displaystyle c\) 与其他模态特征直接拼接,或在输入层相加:

      \[ z_0 = [c,\ v,\ s,\ \text{history}] \]

    • 或者对每个视觉 / 状态 token 都加上同一个条件向量(广播),使整个网络在“有条件”的空间中工作。

  2. 门控与加权(gating)。
    • 使用语言条件输出门控系数,控制不同子策略或专家网络的权重:

      \[ \pi(a|o,x) = \sum_k \alpha_k(x),\pi_k(a|o) \]

    • 在多任务、多 robot 的 VLA 中,常见“语言 + robot ID”双门控的 Mixture-of-Experts 结构,用以在联邦场景下共享部分参数,同时根据指令和平台自动选择专家(CVF开放获取)。

  3. Cross-Attention 级控制。
    • 如前节所述,让动作解码器在 cross-attention 中以“语言 + 历史动作 token”为 Query,对视觉特征进行选择性检索;
    • 指令的不同部分会导致注意力模式变化,从而显式地改变策略关注的视觉区域。
  4. 层级控制(高层语言 + 低层动作)。
    • 一些工作将语言用于高层策略:先由语言模型或语言条件策略输出一个子任务序列 或“skill ID”,再由每个 skill 对应的低层策略负责具体控制;
    • 这种“语言 → 动作原语”层级结构,会在第 6.3 和第 11 章“动作原语与层级策略”部分进一步展开。

从控制角度看,instruction-conditioning 实际是在做一种“条件化策略 \(\pi(a|s,x)\)”,其中 \(x\) 不再是一个离散任务索引,而是一个包含丰富语义的自然语言向量。

8.4.3.3 多任务场景

在多任务、多环境的 VLA 系统中,语言条件发挥的作用尤为关键(hulc.cs.uni-freiburg.de):

  1. 用语言统一表示任务。
    • 传统多任务 RL 或 IL 往往为每个任务分配一个整数 ID 或 one-hot 编码;
    • 语言条件则将任务描述提升为自然语言空间,例如:
      • “把桌面上的所有杯子收集到托盘中”;
      • “只整理蓝色的物体”;
    • 这样模型在训练时就学习到“不同任务之间的相似性”,而不是完全独立的标签。
  2. 长尾任务和零样本任务。
    • 对于训练数据中只出现少数样本的长尾任务,通过共享语言空间,模型可以从其他相似指令中迁移知识;
    • 在极端情况下,即使从未见过某个具体指令,只要其语义可以用已知词汇组合表达,模型也可能进行零样本推理和执行(zero-shot instruction following)。
  3. 多机器人、多环境共享策略。
    • 在 Open X-Embodiment 这类跨机器人多任务数据集上,语言指令不仅描述任务,还往往隐含环境信息(“厨房中把盘子放到架子上” vs “实验台上整理试管”);
    • 结合第 8.5.2 节的“多机器人共享策略”,语言条件可以与“embodiment encoding(机器人 ID / 描述)”组合,形成在不同机器人、不同场景下的统一策略表示。
  4. 与反馈 / 偏好学习结合。
    • 在 RLHF 或人类偏好标注场景中,语言不仅作为任务输入,还可以作为反馈通道(例如人类用语言指出“不够小心”“动作太快”)(MDPI);
    • VLA 模型可以同时条件化在“任务指令 + 风格 / 安全偏好”,实现更细致的人机协同。

【插图占位 8.4-4:二维 embedding 可视化图,展示不同语言指令在条件空间中的分布,同一类任务(如收拾桌面)聚成簇,不同任务簇之间有一定距离】


8.4.4 历史动作 / 状态作为上下文的编码方式

现实机器人任务往往是部分可观测的长时序过程

  • 单帧图像看不出“这个抽屉是被我刚刚打开过,还是原来就开着”;
  • 单次力觉读数也难判断“这是刚接触到物体,还是已经推了很久”。

因此,VLA 模型通常需要将历史观察与历史动作 纳入上下文,学习策略 \(\pi(a_t | o_{\le t}, a_{< t}, x)\)。近年来大量基于 Transformer / SSM 的机器人策略都探索了如何编码历史序列(NeurIPS 会议论文)。

8.4.4.1 序列串联

最直接的方式,就是把过去若干步的观察–动作对直接作为更长的输入序列,交给 Transformer 处理:

\[ \underbrace{[x]}_{\text{指令}} ,;, \underbrace{[o_{t-K}, a_{t-K}, \dots, o_{t-1}, a_{t-1}, o_t]}_{\text{历史 + 当前}} \rightarrow \text{Transformer} \rightarrow a_t \]

实现上的常见选择:

  • 每个时刻 \(t’\) 的观察 \(o_{t’}\)(图像 + 状态)编码为若干 token;
  • 动作 \(a_{t’}\)(离散或离散化后的关节命令)编码为一个或多个 action token;
  • 然后将这些 token 按时间顺序串联,送入 Transformer 解码器或统一 Transformer。

相关工作表明,这种“简单串联 + 位置编码”的方式,在多任务策略学习中相当有效,如 BAKU 等工作会把一段观察历史一起输入 Transformer,用以预测下一步动作(NeurIPS 会议论文)。

优点:

  • 架构非常统一,与第 2 章中的序列建模完全一致;
  • 不需要 hand-crafted 特征,只要定义好每个时刻的编码方式即可;
  • 对于中等长度任务(几十步到上百步)已经足够。

缺点:

  • 序列长度随历史窗口线性增长,很快达到上百甚至上千 token,计算和显存压力激增;
  • 长期依赖依然难以完全捕获,模型可能只利用最近几步信息。

在工程实践中,序列串联通常与“滑动窗口”和“时间编码”结合使用(见本节后两小节)。

【插图占位 8.4-5:时间轴示意图,将过去 K 步的图像+动作拼成 token 序列输入 Transformer,箭头指向当前时刻动作输出】

8.4.4.2 时间编码

为了让模型区分“哪一步更早、哪一步更近”,必须显式或隐式地引入时间信息 。在第 2.4.3 节介绍位置编码时我们已经看到,位置编码本质上就是一种时间标记,这里在 VLA 语境下强调几个实践要点:

  1. 绝对时间步编码。
    • 为每个 token 加上一个表示其时间步的 embedding(如 sinusoidal 或可学习位置编码):

      \[ h_{t’}^{(0)} = \text{Embed}(o_{t’}) + p(t’) \]

    • 这样模型可以“知道”哪些是最近的观察、哪些是更久之前的观察。

  2. 相对时间 / 时间间隔编码。
    • 有些任务中,动作间的时间间隔并不一致,需要编码“delta time”;
    • 可以为每个时刻增加一个额外的“时间间隔 token”或把时间差作为数值特征拼接。
  3. token 类型编码。
    • 除了时间,还需要区分“语言 token / 视觉 token / 动作 token / 历史摘要 token”等,常用type embedding 来实现;
    • 在一些 history-aware 的策略中,会为“历史 token”和“当前 token”使用不同的类型 embedding,帮助网络在注意力中重点关注最近几步(arXiv)。
  4. 压缩历史的时间编码。
    • 对于非常长的轨迹,不可能保留全部细节,部分工作会先将历史通过对象跟踪、点轨迹(point tracking)等方式压缩成少量“历史 token”,再给这些 token 添加时间或顺序编码(arXiv);
    • 这可以理解为“对时间维做一次降维”,详见第 12 章世界模型与记忆部分的讨论。

在设计时间编码时,应与动作离散化、控制频率相协调:例如控制频率较高时,更需要精细的时间表示;频率较低时,则可以把若干步合并视为一个“宏步长”。

8.4.4.3 滑动窗口与记忆

单纯增加历史步数会迅速推高复杂度,因此实践中常结合滑动窗口(sliding window)记忆(memory)机制,在“保留必要历史信息”和“控制计算成本”之间做折中(arXiv)。

  1. 滑动窗口:只看最近 \(\displaystyle K\) 步。
    • 设定一个窗口长度 \(\displaystyle K\),模型每一步只接收最近 \(\displaystyle K\) 步的观察–动作历史,其余更久的历史被丢弃;
    • 对于很多桌面操作、短程导航任务,几步到几十步的窗口就足够;
    • 优点是实现简单,与序列串联方式直接兼容;缺点是无法捕获“极长时间跨度”的依赖(如几分钟之前做过的准备工作)。
  2. 显式记忆单元:压缩历史。
    • 为模型引入一个“记忆向量”或“记忆 token”,在每个时间步根据当前观察 / 动作和之前记忆更新:

      \[ m_t = f(m_{t-1}, o_t, a_{t-1}) \]

    • 一些工作采用 RNN、LSTM、Transformer-XL 样式的记忆;更多近期方法使用状态空间模型(SSM)或 Mamba 这类结构,将整条历史轨迹编码为一个压缩隐状态,用于条件化当前动作预测(arXiv);

    • 这样可以在计算复杂度可控的前提下利用更长的历史。

  3. 分层记忆:短期窗口 + 长期记忆。
    • 短期内使用滑动窗口(例如最近 10 步)保留细节;
    • 长期则通过记忆模块存储更加抽象的信息,如“抽屉已经打开”“那只杯子已经被放进盒子里”等;
    • 在世界模型或长序列 VLA 中,这种“局部细节 + 全局摘要”的模式越来越普遍,也是未来统一具身基础模型的重要方向之一。
  4. 历史与指令的联合建模。
    • 在指令导向的历史感知策略中,还会将语言指令和历史一起写入记忆,形成“instruction-oriented memory”,例如 History-aware multimodal instruction-oriented policies 这类工作(MDPI);
    • 这使得模型可以理解“我之前执行的是哪个子指令、现在到了哪一步”,为长任务分解和进度跟踪提供基础。

【插图占位 8.4-6:一张时间轴+滑动窗口+记忆示意图。时间轴上标出一长串时刻,窗口覆盖最近 K 步,窗口前的历史被压缩为一个“Memory token”,在当前决策时既读窗口内 token,也读 Memory token】


本节从融合时机(早/中/晚)cross-attention 的具体角色语言条件化策略历史序列编码 四个维度,补足了 VLA 在“多模态融合与条件建模”层面的核心设计要素。后续 8.5 节会以完整架构为例,把这些组件组合起来,形成贯通视觉–语言–动作的统一 Transformer 视角,与第 9 章的训练范式共同构成一个从“架构设计”到“数据与优化”的完整闭环。