跳转至

50_具身智能VLA框架

第八批 · 专题 8.5:具身智能 VLA 框架——从 RT-1 到 π₀.₅

定位:Vision-Language-Action(VLA,视觉-语言-动作)模型是 2024-2026 年机器人学习的**主旋律**——将互联网级视觉-语言模型(Vision-Language Model, VLM)微调为端到端机器人策略。本专题不是工程教程,而是回答数学问题:多模态 token 化的信息论本质是什么?动作离散化 vs 连续生成的率-失真权衡是什么?语言条件为什么改善组合泛化?VLA 的泛化理论基础是什么?

风格:八段式结构(科研脉络 → 教学目标 → 前置依赖 → 核心知识点 → 前沿与开放问题 → 精读清单 → 练习 → 桥梁)。侧重架构数学、动作表示理论、数据 scaling、泛化分析。

数学深度说明:VLA 领域目前理论化程度不及逼近论(专题 8.1)或扩散模型(专题 8.4),本专题侧重**数学形式化框架**(条件策略定义、率-失真分析、PAC-Bayes 泛化界、复合误差分析)而非定理证明。但凡是能严格推导的部分(复合误差 \(O(T^2\varepsilon)\)、率-失真函数、Flow Matching 损失、InfoNCE 下界),本专题都给出完整推导链;凡是目前只有形式化框架而无完整证明的部分(VLA 泛化的紧致界、AR vs FM 的可分性),都明确标注为开放问题。

与机器人的关系:◉ 直接核心——本专题就是机器人策略学习本身。RT-2/Octo/OpenVLA/π₀ 就是你博士论文可能使用或改进的模型。

与本目录其他文档的分工:本专题(01_数学/90)侧重**数学框架**——条件策略的测度论定义、token 化的信息论、动作生成范式的概率建模、泛化的统计学习理论。05_运动控制/30_复合/260_VLA_Foundation_Model 侧重**工程接口与系统**(输入/输出契约、控制频率分层、S1/S2 系统);06_具身智能 侧重**RL 运控训练管线**。三者互补:本专题回答"为什么这样设计在数学上是对的",260 回答"在系统里怎么接进去",06 回答"怎么训出来"。


科研发展脉络

(引用计数截至 2025 年中,仅供量级参考。)

阶段 年代 代表工作 Venue 引用 核心贡献
G1 端到端视觉策略 2016 Levine et al. JMLR ~3,000 端到端 visuomotor policy(CNN → 关节力矩)
G2 语言条件策略 2022 Brohan et al. (RT-1) RSS 2023 ~1,700 FiLM + TokenLearner + 256-bin 动作离散化;130k episode
2022 SayCan (Ahn et al.) arXiv ~1,500 LLM 规划 + 可行性评分
G3 VLA 范式诞生 2023 Zitkovich et al. (RT-2) CoRL ~1,500 VLA 概念:动作 = 文本 token;PaLI-X 55B 微调
2023 Zhao et al. (ACT) RSS ~800 CVAE + 动作分块:10 分钟演示→80% 成功率
2023 Chi et al. (Diffusion Policy) RSS/IJRR ~2,500 扩散建模动作分布
G4 开源通用策略 2024 Octo Team RSS ~500 开源 93M;800k OXE 轨迹;diffusion head
2024 Kim et al. (OpenVLA) CoRL ~400 开源 7B;SigLIP⊕DINOv2 + Llama 2
G5 基础模型策略 2024 Black et al. (π₀) arXiv ~200 PaliGemma 3B + Flow Matching;68 任务,7 具身
2025 Physical Intelligence (π₀.₅) arXiv 分层 VLM 规划 + 低层 Flow;开放世界泛化
2025 Pertsch et al. (FAST) RSS DCT + BPE 动作 tokenizer:800 Hz 控制
2025 Kim et al. (OpenVLA-OFT) RSS 并行解码 + L1 回归 + 分块:26× 吞吐

关键实验室:Google DeepMind(RT 系列)→ Berkeley(Octo/Bridge/ACT/Diffusion Policy)→ Stanford(OpenVLA/FAST)→ Physical Intelligence(π₀/π₀.₅)→ CMU/Meta/NVIDIA(DROID/GR00T)。

这条脉络的内在逻辑(务必在脑中建立这条主线,后续每个知识点都挂在它上面):

  1. G1→G2 的跃迁是"加语言":纯视觉策略只能学一个固定任务,加上语言条件后,一个网络能执行多任务——但 RT-1 用 FiLM 把语言"注入"视觉特征,语言和视觉仍是两套独立的处理流。
  2. G2→G3 的跃迁是"统一表征":RT-2 的核心洞察是把动作也变成"语言"(离散 token),于是视觉、语言、动作活在同一个 token 序列里,可以直接复用互联网预训练的 VLM。这一步是范式革命——VLA 这个名字就此诞生。
  3. G3→G4 的跃迁是"开源 + 通用":RT-2 是 55B 闭源巨兽,1-3 Hz 推理不可部署。Octo/OpenVLA 用 7B 以下的开源骨干,配合更高效的动作头(diffusion / 双视觉编码器),让 VLA 走出 Google。
  4. G4→G5 的跃迁是"连续动作头 + 基础模型化":离散 token 有量化噪声上限,π₀ 改用 Flow Matching 生成连续动作,配合 VLM+expert 双专家结构,做到 50 Hz 高频控制 + 多具身通用。π₀.₅ 进一步引入分层规划与 web 数据 co-training,迈向开放世界泛化。

本质洞察:VLA 十年演进的主线只有一句话——让机器人动作复用语言模型的预训练先验。每一代工作都在回答同一个问题的不同侧面:"动作和语言到底该怎么共享一个表征空间,才能既继承 Internet 先验、又满足机器人对精度和频率的硬约束?" 离散化(RT-2)、连续生成(π₀)、频域压缩(FAST)都是这个核心矛盾的不同解。


前置自测

📋 答不出 ≥ 3 题 → 先回前置专题复习。本专题硬依赖 Transformer(8.3)与 Diffusion/Flow Matching(8.4),缺一不可。

编号 问题 答不出→回顾
1 Transformer 的自注意力(self-attention)如何用 \(QK^\top\) 计算 token 之间的相关性?因果掩码(causal mask)的作用是什么? 专题 8.3
2 Flow Matching 的训练目标是回归什么量?条件 Flow Matching(CFM)为什么能避免直接计算难以处理的边际速度场? 专题 8.4
3 什么是条件概率分布 \(p(a\mid o)\)?为什么机器人策略要建模分布而不是确定性映射 \(a=f(o)\)?多峰(multimodal)分布的含义是什么? 概率论基础 + 第六批 RL
4 互信息 \(I(X;Y)\) 的定义是什么?为什么对比学习(contrastive learning)能近似最大化互信息? 信息论基础
5 行为克隆(Behavior Cloning, BC)的训练目标是什么?为什么纯 BC 在长时域任务上会失败? 第六批 RL

自测题的设计意图:第 1-2 题筛查硬依赖(不懂注意力和 Flow Matching 完全无法读懂 §8.5.4 的 π₀),第 3 题筛查概率策略的基本观念(VLA 全程在建模 \(\pi(a\mid o)\)),第 4 题为 §8.5.8 的多模态对齐理论铺垫,第 5 题为 §8.5.5 的复合误差分析铺垫。如果第 3、5 题答不出,建议先把第六批 RL 的模仿学习部分过一遍,否则你会把 VLA 误解为"监督回归",错过其本质。


本章目标

学完本专题后,你应该能够:

  1. **形式化定义 VLA 模型**为条件策略 \(\pi_\theta(a\mid v, l, s)\),并用测度论语言写出其潜变量分解,说清它与传统 visuomotor policy 的三个本质区别(任务空间、预训练先验、共享 token 空间)。
  2. 从信息论角度推导多模态 token 化的数学:图像→ViT patch、语言→BPE、状态→线性投影、动作→离散 bin / 连续生成,并解释每条路径的维度与信息率。
  3. 重建 RT-1→RT-2 的架构跃迁:能写出 FiLM 的仿射调制公式并解释其为何是"仿射子空间投影",能说清"动作当语言"为什么能继承组合泛化,能从似然因子化角度论证其有效性。
  4. 比较四种动作生成范式(Autoregressive / Diffusion / Flow Matching / CVAE)的概率建模、多峰表达力、推理复杂度、与 VLM 预训练的契合度,并能为给定任务选型。
  5. 完整推导动作分块的复合误差界 \(O(T^2\varepsilon) \to O(T^2\varepsilon/k)\),理解为什么 chunking 是 ACT 成败的关键。
  6. 完整推导动作 tokenization 的率-失真分析:均匀量化失真 \(D(K)\approx \frac{1}{12}(\text{range}/K)^2\)、信息率 \(R(D)=\frac12\log(\sigma^2/D)\),并解释 FAST 的频域优势。
  7. 推导 Flow Matching 动作头的完整数学:从条件路径、目标速度场到训练损失,理解 π₀ 为何选 Beta 分布采样时间。
  8. 掌握 PAC-Bayes Control 框架(Majumdar 2021)作为 VLA 泛化理论基础,并能把预训练 VLM 解释为结构化先验。
  9. 理解语言条件改善组合泛化与 sim-to-real 的数学机制:组合坐标的 Jacobian 满秩条件、语义条件压制视觉 domain gap 的 Lipschitz 论证。
  10. 了解机器人 scaling laws 与 LLM Chinchilla 律的结构差异,并解释为什么机器人模型不应太大、为什么过训练是合理的。

本章知识导航

在深入推导之前,先用一张图建立本专题的知识结构全景。本专题包含 9 个核心小节,可分为三条逻辑线:

线 A — 表征与架构线(§8.5.1 → §8.5.2 → §8.5.3 → §8.5.4):从 VLA 的形式化定义出发,沿时间线走过 RT-1(FiLM 融合)→ RT-2(统一 token)→ Octo/OpenVLA(开源通用)→ π₀(VLM+expert + Flow Matching)。这条线回答"视觉、语言、动作如何在一个网络里共享表征"。

线 B — 动作生成线(§8.5.5 → §8.5.6 → §8.5.7):聚焦"动作头"这个 VLA 的输出端——ACT 的 CVAE 与动作分块(复合误差数学)、四种生成范式对比、动作 tokenization 的率-失真分析。这条线回答"连续、高频、高相关的动作信号该如何建模与离散化"。

线 C — 理论与 scaling 线(§8.5.8 → §8.5.9):多模态对齐的互信息下界、PAC-Bayes 泛化界、组合泛化的几何、机器人 scaling laws。这条线回答"VLA 为什么能泛化,以及该用多大的模型 / 多少数据"。

                    §8.5.1 VLA 形式化定义(地基)
        ┌───────────────────┼───────────────────┐
        ▼                   ▼                   ▼
   线A 表征架构          线B 动作生成         线C 理论scaling
   8.5.2 RT 系列         8.5.5 ACT+分块       8.5.8 泛化理论
   8.5.3 Octo/OpenVLA    8.5.6 四范式对比     8.5.9 scaling laws
   8.5.4 π 系列          8.5.7 率-失真

知识点之间的关系: - §8.5.1 是**地基**,定义了贯穿全文的核心对象 \(\pi_\theta(a\mid v,l,s)\) 和多模态 token 序列 \(\boldsymbol\tau\)。后续每一节都是对这个对象某个组件的细化。 - 线 A 和线 B 是**正交但耦合**的:线 A 决定"骨干怎么搭",线 B 决定"动作头怎么接"。同一个骨干(如 PaliGemma)可以接不同动作头(FAST 离散 / FM 连续),这正是 π₀.₅ 两阶段训练的设计空间。 - 线 C 是**横切的**:它不引入新架构,而是为线 A、线 B 的设计选择提供理论解释(为什么 RT-2 能泛化 → PAC-Bayes;为什么 FAST 更优 → 率-失真;为什么模型不宜太大 → scaling laws)。

推荐阅读路径: - 第一遍(建立主线):§8.5.1 → §8.5.2 → §8.5.4 → §8.5.6。这条最短路径让你抓住"定义 → RT-2 范式 → π₀ 范式 → 范式对比"的主干。 - 第二遍(补全细节):补 §8.5.3(开源实现)、§8.5.5(复合误差数学)、§8.5.7(率-失真)。 - 第三遍(理论深化):§8.5.8(泛化理论)、§8.5.9(scaling),适合准备做 VLA 理论研究的读者。

注意:导航图只展示**结构**,不展开具体内容。下方"核心知识点"逐节展开。


前置知识桥接

本专题站在三个前置专题的肩膀上。这里用 2-3 行重新激活每个前置的核心要点,让你不翻回去也能跟上。

回顾专题 8.3(Transformer 数学):自注意力的核心是 \(\text{Attn}(Q,K,V)=\text{softmax}(QK^\top/\sqrt{d})V\)——每个 token 通过查询-键内积 \(QK^\top\) 计算它该"关注"哪些 token,再加权聚合 value。因果掩码把 \(QK^\top\) 的上三角置 \(-\infty\),使 token \(i\) 只能看到 \(j\le i\)。在那里我们用它建模文本序列的自回归生成;现在我们用**同一套注意力机制**让动作 token 关注视觉/语言 token——这正是 VLA"统一 token 空间"的实现基础。§8.5.3 的 Octo block-mask 和 §8.5.4 的 π₀ prefix-suffix mask 都是对这个掩码矩阵的定制。

回顾专题 8.4(Diffusion / Flow Matching):Flow Matching 学一个速度场 \(v_\theta(x,\tau)\),使从噪声 \(x^0\sim\mathcal N(0,I)\) 沿 ODE \(\mathrm dx=v_\theta\,\mathrm d\tau\) 积分到 \(\tau=1\) 时得到数据样本。条件 Flow Matching(CFM)的关键技巧是:直接回归边际速度场难以处理,但回归**条件**速度场(给定一对 \((x_0, x_1)\) 的直线插值速度 \(x_1-x_0\))的期望恰好等于边际速度场。在那里我们用它做图像生成;现在我们用它做**动作生成**——把"数据样本"换成"动作块 \(A\in\mathbb R^{H\times d_a}\)",就得到 π₀ 的动作头。§8.5.4 和 §8.5.6 大量复用这个结论。

回顾第六批(RL / 模仿学习):行为克隆(BC)把策略学习当监督回归,最小化 \(\mathbb E_{(o,a)\sim\mathcal D}[\ell(\pi_\theta(o), a)]\)。它的致命弱点是**分布漂移**——训练时策略只见过专家访问的状态,部署时一旦出错就进入没见过的状态,误差滚雪球。在那里我们引入 DAgger 缓解;现在 §8.5.5 会从这个弱点出发,推导复合误差 \(O(T^2\varepsilon)\),并说明动作分块如何把它降到 \(O(T^2\varepsilon/k)\)。VLA 本质上是"用大规模预训练 + 动作分块"对抗 BC 的分布漂移。

如果跳过本专题会怎样

  • 场景 1(误把 VLA 当"大模型套壳"):如果不理解 §8.5.1 的形式化定义和 §8.5.2 的"动作当语言"机制,你会以为 VLA 就是"把 GPT 接个机械臂",从而无法理解为什么动作头设计(离散 vs 连续)、token 对齐、co-fine-tuning 才是关键,调参时会南辕北辙。
  • 场景 2(选错动作头):如果不掌握 §8.5.6 的四范式对比和 §8.5.7 的率-失真分析,在做高精度力控任务时仍用 256-bin 离散化,会被量化噪声 \(\sim 1/K\) 卡死精度上限,怎么调都上不去——而正确做法是换 Flow Matching 或 FAST。
  • 场景 3(误解 chunking):如果不懂 §8.5.5 的复合误差数学,你会把 ACT 的成功归因于 CVAE,忽视真正的关键是动作分块(消融显示 \(k=1\) 时成功率仅 1%),从而在自己的项目里丢掉最重要的设计。

预计阅读时间

阅读方式 时间 适合谁
精读(含全部推导与练习) 12-15 小时 准备做 VLA 研究、需要复现/改进模型的读者
速读(跳过率-失真与 PAC-Bayes 推导细节) 5-7 小时 已有 Transformer/Diffusion 基础、想快速建立 VLA 全景的读者
速查(只看导航图、范式对比表、速查矩阵) 40 分钟 遇到具体选型问题时回来查的读者

核心知识点

核心结果总览表

# 结果 深度 机器人关键词
1 VLA 条件策略的形式化定义 \(\pi(a \mid v, l, s)\)
2 多模态 token 化数学 ViT/BPE/线性投影/bin
3 RT-1 FiLM 条件 + TokenLearner 视觉-语言融合
4 RT-2 动作=文本 token 的数学本质 预训练先验迁移
5 Octo block-wise attention mask 插拔式架构
6 π₀ VLM+action expert 集成 Flow Matching + 双向注意力
7 ACT 动作分块降低复合误差 \(O(T^2\varepsilon/k)\)
8 四种动作范式对比 AR/Diffusion/FM/CVAE
9 动作 tokenization 率-失真分析 离散化 vs 连续回归
10 PAC-Bayes Control 泛化界 策略泛化证书
11 语言条件与组合泛化 CCGP 几何
12 机器人 scaling laws \(D/N\) 比与 LLM 差异

符号说明:◉ = 直接核心;○ = 进阶。下方 §8.5.1-§8.5.9 逐节展开,每节遵循"动机 → 反面 → 历史 → 理论推导 → 陷阱 → 练习"的理论教学结构。

必完证清单:#4(RT-2 似然因子化)、#6(π₀ Flow Matching 损失)、#7(复合误差)、#8(范式概率建模)、#9(率-失真)。这五个是本专题的数学骨架,建议在草稿纸上独立重推一遍。


§8.5.1 VLA 的形式化定义 ◉

动机:一个网络,无穷多任务

先看一个具体的工程困境。假设你要造一台家用机器人,它需要执行的指令包括"把红杯子放到水槽里""把蓝色积木叠到绿色积木上""打开抽屉拿出剪刀"……这样的指令在语言层面是**无穷多**的(任意名词、动词、空间关系的组合)。

传统做法是为每个任务训练一个策略 \(\pi_{\text{task}}(a\mid o)\)。但这立刻撞墙:任务有无穷多,你不可能为每个都收集数据、训练一个网络。即便用多任务学习(multi-task learning)把任务编号 \(\tau\in\{1,\dots,T\}\) 作为 one-hot 条件输入,你也只能覆盖训练时见过的有限任务集 \(\mathcal T\)——遇到"把杯子放到**左边**"这种训练时没出现过的新组合,one-hot 编码无能为力,因为它把每个任务当作彼此孤立的离散符号,无法表达"左边"和"右边"的关系。

这正是 VLA 要解决的问题:如何让一个网络处理语言层面无穷多、且具组合结构的任务?答案是把**自然语言指令本身**作为条件输入——语言天然具有组合性("红色"+"杯子"+"左边"可以自由组合),且互联网上有海量视觉-语言数据可供预训练。

如果不这样做会怎样(反面)

我们逐一审视"不用语言条件"的三种替代方案会遇到什么数学困难:

替代方案 表面可行 深层数学困难
每任务一个策略 \(\pi_{\text{task}}\) 单任务上效果好 任务空间 \(\mathcal T\) 是无穷集,无法枚举;零样本泛化为零
one-hot 任务编号 \(\pi(a\mid o, \mathbf e_\tau)\) 多任务共享网络 \(\mathbf e_\tau\) 是正交基,任务间无相似性结构,\(\langle\mathbf e_i,\mathbf e_j\rangle=0\),模型学不到"叠红块"和"叠蓝块"是相似任务
目标图像条件 \(\pi(a\mid o, g)\) 目标明确无歧义 需要为每个任务提供目标图像,部署时用户难以提供;且目标图像不含"动作意图"(如"轻轻地"放)

第二行的数学困难值得展开——one-hot 编码的根本问题是它把任务空间嵌入到一个没有几何结构的离散集合。两个任务 \(\tau_i, \tau_j\) 的编码 \(\mathbf e_i, \mathbf e_j\) 满足 \(\|\mathbf e_i-\mathbf e_j\|^2=2\) 对**所有** \(i\ne j\) 成立——无论这两个任务多么相似。于是策略网络在任务 \(\tau_i\) 上学到的知识完全无法迁移到 \(\tau_j\)。而语言嵌入 \(\phi^{\text{txt}}(l)\) 把任务嵌入到一个**有几何结构**的连续空间:语义相近的指令("叠红块"vs"叠蓝块")嵌入向量也相近,\(\|\phi(l_i)-\phi(l_j)\|\) 小,于是知识可以沿这个几何结构迁移。这就是 §8.5.8 会严格化的"组合泛化"的几何根源。

本质洞察:VLA 用语言条件替代 one-hot 任务编号,本质上是把**任务空间从离散无结构集合升级为带语义几何的连续流形**。one-hot 是"查表",语言条件是"插值与外推"。这一字之差,决定了模型能否零样本执行未见任务。

历史:从 visuomotor policy 到 VLA

VLA 不是凭空出现的,它是机器人学习两条独立技术线汇流的产物,理清这段历史能帮你理解"为什么 VLA 的公式长这个样子"。

  • 第一条线(机器人侧):Levine et al. (2016) 的端到端 visuomotor policy 证明了 CNN 可以直接从像素映射到关节力矩,确立了"感知-动作端到端"的范式。但它是单任务的,且需要大量该任务的数据。
  • 第二条线(NLP/CV 侧):CLIP (Radford et al. 2021)、PaLI、Flamingo 等 VLM 证明了在互联网图文对上预训练能学到强大的视觉-语言对齐表征。
  • 汇流(2022-2023):RT-1 (Brohan et al.) 先用 FiLM 把语言"注入"机器人策略,迈出语言条件第一步;RT-2 (Zitkovich et al.) 则做出关键一跃——既然 VLM 已经把视觉和语言对齐到一个 token 空间,何不把**动作也变成 token**塞进同一个空间,直接微调 VLM?"Vision-Language-Action"这个名字和范式就此诞生。

理解这段历史的关键:VLA = visuomotor policy 的"端到端"思想 + VLM 的"预训练对齐"红利。前者提供"感知直接出动作"的架构骨架,后者提供"语义已经对齐好"的初始权重。

理论:VLA 的形式化定义

现在给出正式定义。先回顾传统视觉运动策略,它是一个从观测到动作分布的映射:

\[ \pi_\theta(a_t \mid v_t, s_t) : \mathcal{V} \times \mathcal{S} \to \Delta(\mathcal{A}) \]

其中 \(v_t\in\mathcal V\) 是视觉观测(图像),\(s_t\in\mathcal S\) 是本体状态(proprioception,关节角/夹爪开合等),\(\Delta(\mathcal A)\) 是动作空间 \(\mathcal A\) 上的概率分布集合(用分布而非点 \(a=f(o)\) 是为了表达**多峰性**——同一观测下可能有多种合理动作,这一点在 §8.5.6 至关重要)。

**VLA 模型**将语言指令 \(l \in \Sigma^*\)\(\Sigma\) 是词表字母表,\(\Sigma^*\) 是所有有限长字符串集合)提升为一等条件量,并允许策略依赖整个视觉历史 \(v_{\le t}\)

\[ \boxed{\;\pi_\theta^{\text{VLA}}(a_t \mid v_{\leq t}, l, s_t) = \int_{\mathcal Z} \pi_\theta(a_t \mid z_t)\, q_\theta(z_t \mid v_{\leq t}, l, s_t)\, \mathrm{d}z_t\;} \]

这个**潜变量分解**(latent-variable factorization)是理解整个 VLA 架构的钥匙,逐项拆解:

  • \(q_\theta(z_t \mid v_{\leq t}, l, s_t)\) 是**编码器**(encoder / VLM 骨干):它把多模态输入压缩为一个潜表征 \(z_t\in\mathcal Z\)。这一项承载了"视觉-语言对齐"的全部预训练红利——\(q_\theta\) 的权重初始化自 CLIP/SigLIP/PaliGemma 等 Internet-scale 预训练模型。
  • \(\pi_\theta(a_t \mid z_t)\) 是**动作头**(action head / decoder):它从潜表征生成动作。这一项是 §8.5.6 四范式对比的主角——它可以是自回归 softmax、diffusion、flow matching 或 CVAE 解码器。
  • **积分**表示对潜变量 \(z_t\) 的边际化。在实践中 \(z_t\) 通常就是 Transformer 的 hidden states,编码器和动作头共享一个 Transformer 主干,积分被神经网络隐式实现。

为什么要把策略写成这个分解形式,而不是直接写 \(\pi_\theta(a_t\mid v,l,s)\)?因为这个分解**显式分离了"理解"与"行动"两个职能**:\(q_\theta\) 负责"看懂场景、听懂指令"(继承预训练),\(\pi_\theta(a\mid z)\) 负责"把理解转化为动作"(需要机器人数据微调)。这个分离解释了 VLA 的一个核心训练策略——冻结或低秩微调 \(q_\theta\)(保护预训练知识),重点训练动作头。它也解释了 §8.5.4 π₀ 的双专家结构:VLM expert 实现 \(q_\theta\),action expert 实现 \(\pi_\theta(a\mid z)\)

VLA 与 visuomotor policy 的三个本质区别

对照上面两个公式,VLA 相对传统策略有三个不可还原的本质区别(不是程度差异,是结构差异):

  1. 任务空间组合性开放:传统策略的任务隐含在权重里(单任务)或编码为有限集 \(\mathcal T\)(多任务 one-hot)。VLA 的 \(l\in\Sigma^*\) 使策略域从有限任务集扩张到**字符串空间的组合型指令**。数学上,\(|\mathcal T|<\infty\) 变成了 \(|\Sigma^*|=\aleph_0\)(可数无穷),且带组合结构。
  2. 预训练先验外源性:传统策略的所有知识来自机器人数据(内源)。VLA 的骨干 \(q_\theta\) 继承 Internet-scale VLM 的视觉-语言对齐(CLIP/SigLIP/DINOv2),知识是**外源**的——大部分参数在见到任何机器人数据之前就已经训好。这是 §8.5.8 PAC-Bayes 分析中"结构化先验 \(\pi_0\)"的来源。
  3. 共享 token 空间:传统策略中视觉和动作活在不同的张量空间,靠 MLP 连接。VLA 把所有模态投射到**同一 Transformer 序列**,靠 self-attention 做跨模态融合。这是下一小节"多模态 token 化"的主题。

多视角理解(双重解读):VLA 的潜变量分解可以从两个角度理解。 - 角度 1(生成模型视角)\(\pi^{\text{VLA}}\) 是一个条件生成模型,\(z_t\) 是潜码,\(q_\theta\) 是推断网络,\(\pi_\theta(a\mid z)\) 是生成网络——这与 VAE 的结构同构(编码器-解码器 + 潜变量积分)。 - 角度 2(信息瓶颈视角)\(z_t\) 是一个信息瓶颈,它从高维多模态输入 \((v,l,s)\) 中**只保留与动作相关的信息**。理想的 \(z_t\) 满足 \(I(z_t; a_t)\) 大(保留动作相关信息)而 \(I(z_t; (v,l,s))\) 受限(丢弃无关细节)。这个视角解释了为什么 VLA 对视觉 domain gap 鲁棒(§8.5.8)——无关的视觉风格被瓶颈过滤掉了。

多模态 token 化

潜变量分解告诉我们 \(q_\theta\) 要把 \((v,l,s)\) 编码为 \(z\)。但 \((v,l,s)\) 是三种异质模态——图像是稠密像素网格,语言是离散符号序列,状态是低维实向量。Transformer 只吃 token 序列,所以 VLA 的第一步是把每种模态**token 化**为统一的 \(d\) 维 embedding 序列,再拼接:

\[ \boldsymbol\tau = \big[\,\underbrace{\phi^{\text{img}}(v_t)}_{N_v \text{ patches}} \,\big\|\, \underbrace{\phi^{\text{txt}}(l)}_{N_l \text{ BPE}} \,\big\|\, \underbrace{\phi^{\text{state}}(s_t)}_{N_s} \,\big\|\, \underbrace{\phi^{\text{act}}(a_t)}_{N_a}\,\big] \]

这里 \(\|\) 表示序列拼接(concatenation),得到的 \(\boldsymbol\tau\) 是一个长度 \(N_v+N_l+N_s+N_a\) 的 token 序列,每个 token 是 \(d\) 维向量。四条 token 化路径各有其数学:

(1) 图像 → ViT patch。视觉 token 化复用 Vision Transformer(专题 8.3)的做法:把图像 \(v\in\mathbb R^{H\times W\times 3}\) 切成 \(p\times p\) 的不重叠 patch,共

\[ N_v = \left\lceil \frac{H}{p}\right\rceil \cdot \left\lceil \frac{W}{p}\right\rceil \]

个 patch。每个 patch 展平为 \(3p^2\) 维向量,经线性投影 \(W_{\text{patch}}\in\mathbb R^{d\times 3p^2}\) 映到 \(d\) 维,再加位置编码。例如 \(224\times224\) 图、\(p=14\),得 \(N_v=16\times16=256\) 个 token。关键数学性质:patch 化是**有损压缩**——patch 内部的空间细节被线性投影压缩进 \(d\) 维,\(p\) 越大压缩率越高、\(N_v\) 越小(推理越快)但细节损失越大。这是分辨率-效率权衡的源头。

(2) 语言 → BPE。语言用字节对编码(Byte-Pair Encoding, BPE)切成子词 token \((t_1,\dots,t_{N_l})\),词表 \(|V|\approx 32000\)。每个子词 token 经 embedding 查表 \(E\in\mathbb R^{|V|\times d}\) 映到 \(d\) 维。BPE 的数学动机是**用最少的 token 覆盖最多的文本**——高频词作为整 token,低频词拆成子词,本质是一种基于频率的霍夫曼式压缩。这一点在 §8.5.6 的 FAST 中会被复用到动作上。

(3) 状态 → 线性投影。本体状态 \(s_t\in\mathbb R^{d_s}\)(关节角、夹爪等)经 MLP 投影到 \(\mathbb R^d\),通常占 \(N_s=1\) 个 token。一个工程细节体现了 VLA 的"多具身"野心:π₀ 把状态零填充(zero-pad)到 18 维以适配 7 种不同自由度的具身——一个 6-DoF 机械臂和一个 14-DoF 双臂系统共用同一个 18 维状态接口,多出来的维度填零。这让一个网络能跨具身训练。

(4) 动作 → 两条主路径。这是 VLA 最有特色、也最有数学内容的部分,是 §8.5.5-§8.5.7 的核心: - (a) 离散 256-bin(RT-2/OpenVLA):把每维连续动作 \(a^{(j)}\in[-1,1]\) 均匀量化为 256 个 bin,每个 bin 映射到 VLM 词表中的一个保留 token。动作变成"另一种语言",可直接用 next-token prediction 训练。 - (b) 连续生成头(Diffusion/FM/CVAE):动作不离散化,而是用 diffusion / flow matching / CVAE 等连续生成模型直接建模 \(\pi_\theta(a\mid z)\)

离散化通用训练损失。当采用路径 (a),整个 VLA 退化为一个标准的自回归语言模型,训练损失就是动作 token 上的交叉熵(负对数似然):

\[ \mathcal{L}_{\text{VLA}} = -\,\mathbb{E}_{(v,l,s,A)\sim\mathcal D} \sum_{t=0}^{H-1} \sum_{j=1}^{d_a} \log p_\theta\!\left(b_t^{(j)} \,\big|\, \boldsymbol\tau_{<(t,j)}\right) \]

逐项解读:\(A=(a_0,\dots,a_{H-1})\) 是长度 \(H\) 的动作块(action chunk),每个动作 \(a_t\in\mathbb R^{d_a}\)\(d_a\) 维,每维量化为 bin 索引 \(b_t^{(j)}\)\(\boldsymbol\tau_{<(t,j)}\) 表示当前 token 之前的所有 token(视觉、语言、状态,以及已生成的动作 bin)。这个损失的形式与 GPT 训练**逐字符等价**——这正是 RT-2"动作当语言"洞察的直接体现:一旦动作变成 token,VLA 的训练就是普通的语言模型训练,所有 LLM 的工具链(KV cache、teacher forcing、采样策略)直接复用。§8.5.2 会深入这个等价性的数学后果。

理论-工程桥接:上面的潜变量分解 \(\pi(a\mid z)q(z\mid v,l,s)\) 不是纸上谈兵,它直接映射到代码结构。在 OpenVLA 的实现里,\(q_\theta\) 就是 PrismaticVLM.forward() 返回的 last hidden state,\(\pi_\theta(a\mid z)\) 就是把 hidden state 过一个 lm_head 投影到词表再取动作 bin 对应的 logits。在 π₀ 里,\(q_\theta\) 是 VLM expert 的前向,\(\pi_\theta(a\mid z)\) 是 action expert 的 flow matching 头。理解了分解,你读任何 VLA 代码都能一眼定位"编码器在哪、动作头在哪"。

一个最小代码骨架:理解 token 拼接

理论教学中代码仅用于**验证概念**。下面这段伪代码不是可运行实现,而是把"多模态 token 拼接"这个抽象操作具象化,帮你确认对维度的理解:

# 概念验证:多模态 token 拼接的形状演算(非可运行实现)
# 目的——确认四条路径的 token 数与维度对齐
import torch

d = 2048                      # 统一 embedding 维度
# (1) 图像: 224x224, patch=14 -> 16x16=256 patches
img_tokens = torch.randn(256, d)            # phi_img(v): [N_v=256, d]
# (2) 语言: "put the red cup in the sink" -> ~8 BPE tokens
txt_tokens = torch.randn(8,   d)            # phi_txt(l): [N_l=8, d]
# (3) 状态: 18 维(零填充多具身) -> 1 token
state_tokens = torch.randn(1, d)            # phi_state(s): [N_s=1, d]
# (4) 动作: H=50 步 x d_a=7 维, 离散化为 bin token
act_tokens = torch.randn(50 * 7, d)         # phi_act(a): [N_a=350, d]

tau = torch.cat([img_tokens, txt_tokens, state_tokens, act_tokens], dim=0)
assert tau.shape == (256 + 8 + 1 + 350, d)  # [615, 2048]
# 关键结论: 所有模态被"摊平"到同一序列, self-attention 在 615 个 token 间自由交互
# 这就是"共享 token 空间"的字面含义

这段代码唯一的教学价值是让你看清:四种异质模态被强行拍扁到同一个 \([N, d]\) 张量里,之后 Transformer 一视同仁地处理。"共享 token 空间"不是比喻,是字面的张量拼接。注意力矩阵是 \(615\times 615\) 的——动作 token 可以直接 attend 到图像 patch 和语言 token,这就是跨模态融合的全部机制。

⚠️ 常见陷阱

💡 概念误区:认为 VLA 就是"把 LLM 接个机械臂" - 新手想法:"VLA = 大语言模型 + 动作输出层,无非是换个输出头。" - 实际上:VLA 的难点和创新**全在 \(q_\theta\)\(\pi_\theta(a\mid z)\) 的接口设计**——多模态 token 如何对齐(§8.5.2)、动作如何表示(离散/连续,§8.5.6)、如何在保护预训练知识的同时学动作(co-fine-tuning,§8.5.2)。把动作硬接到 LLM 输出而不处理这些,会得到一个既丢失了语言能力、又学不好动作的"四不像"。 - 为什么重要:理解了潜变量分解,你才知道调参时该动哪一部分——精度不够调动作头,泛化不够调骨干的微调策略,而不是盲目加大模型。 - 延伸思考:为什么不能把动作头训得很强而完全冻结 VLM?→ 因为机器人观测的视觉分布(桌面、夹爪)与 VLM 预训练分布(互联网图片)有 gap,完全冻结会导致 \(q_\theta\) 提取的特征不适配机器人场景。需要轻量微调(如 LoRA)让骨干适应。

💡 概念误区:把 \(\pi(a\mid z)q(z\mid o)\) 的积分理解为"先采样 z 再采样 a" - 新手想法:"要执行动作,先从 \(q_\theta\) 采一个 \(z\),再从 \(\pi_\theta(a\mid z)\) 采一个 \(a\)。" - 实际上:在确定性编码器的实现里(绝大多数 VLA),\(q_\theta(z\mid o)=\delta(z-f_\theta(o))\) 是一个狄拉克 delta——\(z\) 不是随机采样的,而是 Transformer hidden state 的**确定性**输出。积分退化为代入 \(z=f_\theta(o)\)。随机性只在动作头 \(\pi_\theta(a\mid z)\)(diffusion/FM 的采样)或离散 bin 的 softmax 采样中引入。 - 为什么重要:误以为 \(z\) 是随机的会让你在复现时画蛇添足地加一个 \(z\) 的采样步骤,或误解 VLA 的随机性来源。VLA 的多峰性来自**动作头**,不是来自潜码 \(z\)

🧠 思维陷阱:认为语言条件总是"越详细越好" - 新手想法:"指令越长越详细,模型表现越好。" - 实际上:语言条件的作用是**缩小动作分布的支撑集**(disambiguate)。指令 \(l\) 通过 \(q_\theta(z\mid v,l,s)\) 调制潜码,使 \(\pi(a\mid z)\) 聚焦到目标行为。但过长/冗余的指令会引入分布外(out-of-distribution)的 token 组合,反而让 \(q_\theta\) 落到训练时没见过的区域。最优指令是"信息充分但简洁"——恰好消除歧义即可。 - 正确思维:把语言条件看作"对动作分布的一个软约束",约束强度应匹配任务歧义度。导航这类任务歧义小,简短指令足够;精细操纵歧义大,需要更具体的指令。这正是 §8.5.8 中"\(l\) 强到可识别目标物体则压制 domain gap"的另一面。

练习

[练习 8.5.1-1 · 推导] 从潜变量分解 \(\pi^{\text{VLA}}(a\mid o)=\int \pi(a\mid z)q(z\mid o)\,\mathrm dz\) 出发(记 \(o=(v,l,s)\)),证明:若编码器是确定性的,即 \(q(z\mid o)=\delta(z-f(o))\),则 \(\pi^{\text{VLA}}(a\mid o)=\pi(a\mid f(o))\)。然后讨论:若编码器是随机的(如 VAE 式 \(q(z\mid o)=\mathcal N(\mu(o),\Sigma(o))\)),这个边际分布还能写成闭式吗?在草稿纸上写出当 \(\pi(a\mid z)\) 也是高斯时的边际分布。

[练习 8.5.1-2 · 开放思考] one-hot 任务编码 \(\mathbf e_\tau\) 满足 \(\langle\mathbf e_i,\mathbf e_j\rangle=\delta_{ij}\)(正交)。语言嵌入 \(\phi(l)\) 则有非平凡的内积结构。请论证:为什么"任务间内积结构非平凡"是零样本组合泛化的**必要条件**?提示:考虑一个未见任务 \(l^*\),模型只能依靠 \(\phi(l^*)\) 与训练任务嵌入的相似性来"借用"已学知识。如果所有内积都是 0(正交),借用还可能吗?

[练习 8.5.1-3 · 概念辨析] 多模态 token 序列 \(\boldsymbol\tau\) 的总长度 \(N=N_v+N_l+N_s+N_a\)。自注意力的计算复杂度是 \(O(N^2 d)\)。对于 \(N_v=256, N_l=8, N_s=1, N_a=350\),计算注意力矩阵的元素总数。然后讨论:如果想把图像分辨率翻倍(\(N_v\) 变 4 倍到 1024),注意力计算量增长几倍?这对 §8.5.2 RT-1 的 TokenLearner(把 81 个空间 token 压到 8 个)的动机有什么启示?


§8.5.2 RT-1 → RT-2:从"语言注入"到"动作即语言" ◉

动机:怎样把"互联网先验"灌进机器人策略

§8.5.1 给出了 VLA 的形式化定义和 token 化框架,但留下一个最关键的工程问题悬而未决:条件量 \(l\)(语言)到底以什么方式进入网络,才能既利用语言的组合性、又借到互联网预训练的红利? 这一节我们沿真实的历史路径,看 RT-1(2022)和 RT-2(2023)给出的两个截然不同的答案——它们恰好代表"浅融合"与"深统一"两种范式,理解这两者的分野,是理解整个 VLA 领域的钥匙。

先把困境说具体。你手上有两样东西:一是 130k 条机器人遥操作轨迹(RT-1 的数据规模),二是一个在数十亿互联网图文对上预训练好的视觉-语言模型(VLM)。机器人数据相比互联网数据是**沧海一粟**——130k 条轨迹里出现的物体、场景、指令措辞,覆盖面远不及互联网。如果只用机器人数据从零训练一个策略,模型见过的"红色"可能只有训练桌上那几种红色物体,遇到一个新的红色物体就抓瞎。我们真正想要的是:让模型把互联网上学到的"什么是红色、什么是杯子、'放进'是什么动作语义"**迁移**到机器人控制上来。

问题是,"迁移"说起来容易,数学上怎么实现?语言指令 \(l\) 和视觉观测 \(v\) 是两个异质模态,它们怎么交互、在网络的哪一层交互、用什么算子交互——不同的选择导致完全不同的迁移效率。RT-1 和 RT-2 就是这个设计空间里两个极端而清晰的样本点。

如果不这样做会怎样(反面)

在 RT-1/RT-2 出现之前,把语言接入视觉策略的"朴素做法"会遇到什么数学困难?我们审视三种朴素方案:

朴素方案 表面可行 深层数学困难
把语言 embedding 直接 concat 到视觉特征后接 MLP 实现简单 concat 后语言只在**一处**与视觉相遇,且 MLP 是逐样本的全局变换,语言无法"逐空间位置地"调制视觉——无法表达"关注图像左边"这种空间选择性
用语言 embedding 做视觉特征的逐元素乘法(朴素门控) 引入了乘性交互 乘性系数若不经仿射结构约束,等价于无约束的对角线性映射,参数量大且易过拟合 130k 小数据
语言、视觉各自编码后从零训练一个融合 Transformer 表达力最强 从零训练丢弃了 VLM 预训练先验——而预训练先验正是我们唯一能对抗"机器人数据稀缺"的武器,等于自废武功

第三行的困难最致命,值得展开。机器人学习的根本矛盾是"任务空间无穷大 vs 标注数据极稀缺"。互联网图文数据之所以宝贵,是因为它免费提供了"视觉-语言对齐"这个本来需要海量标注才能学到的能力。任何"从零训练"的方案都浪费了这个免费午餐。于是 VLA 设计的第一性原理浮出水面:

本质洞察:VLA 架构设计的第一约束不是"表达力最大化",而是"最大化复用预训练先验"。RT-1 和 RT-2 的全部分野,可归结为它们**复用先验的程度**——RT-1 只复用了语言编码器(USE)和视觉编码器(EfficientNet)的特征,融合层和动作头从零训练;RT-2 则把视觉、语言、动作全部塞进同一个预训练 VLM,连融合都复用了预训练的注意力权重。复用越彻底,迁移越充分,这是 G2→G3 跃迁的数学动机。

历史:RT-1 的 FiLM 与 RT-2 的"动作即 token"

理清两步历史,你就理解了 VLA 范式革命的全貌。

  • RT-1(Robotics Transformer 1, Brohan et al. 2022):它走"浅融合"路线。视觉用 EfficientNet-B3 编码,语言用 Universal Sentence Encoder(USE)编码成一个 512 维向量,然后用 FiLM(Feature-wise Linear Modulation, Perez et al. 2018) 把语言向量"注入"视觉特征的每一个通道。融合后的特征经 TokenLearner 压缩,送入一个从零训练的 Transformer 解码器,输出 256-bin 离散动作。关键:语言和视觉是两套独立的预训练编码器,FiLM 只是把语言当作"调节旋钮"去微调视觉特征
  • RT-2(Robotics Transformer 2, Zitkovich et al. 2023):它走"深统一"路线,做出了 VLA 历史上最关键的一跃。既然 PaLI-X / PaLM-E 这类 VLM 已经把图像和文本对齐到了**同一个 token 空间**,RT-2 的洞察是——何不把动作也变成这个空间里的 token? 具体做法:把每维连续动作量化为 256 个 bin,每个 bin 复用 VLM 词表里的一个整数 token(如把数字 "0"–"255" 或最不常用的 256 个 token 征用为动作 token)。于是一条"图像 + 指令 → 动作"的训练样本,在 VLM 眼里就是一句普通的"看图回答"——只不过答案是一串代表动作的数字 token。整个 VLA 退化为对 VLM 做标准的视觉问答微调。

这两步的内在逻辑是:RT-1 证明了"加语言能做多任务",但语言和视觉的融合是临时搭建的、且动作头与预训练完全脱节;RT-2 则发现,只要把动作也"语言化",就能让动作直接继承 VLM 在互联网上学到的全部语义先验——包括 RT-1 数据里从未出现过的概念。这就是为什么 RT-2 能做到 RT-1 做不到的"涌现"能力:让机器人"把可乐罐放到泰勒·斯威夫特的照片上",尽管训练数据里既没有可乐罐放照片的轨迹、也没有泰勒·斯威夫特——这些概念全部来自 VLM 的互联网先验。

理论 (一):FiLM 的数学——为什么"仿射调制"是对的

先把 RT-1 的核心算子 FiLM 严格化。设视觉骨干某一层输出特征图 \(F\in\mathbb R^{C\times H\times W}\)\(C\) 个通道,空间尺寸 \(H\times W\)),语言向量 \(\mathbf c=\phi^{\text{txt}}(l)\in\mathbb R^{d_l}\)。FiLM 用两个线性层从语言向量生成**逐通道**的缩放系数 \(\boldsymbol\gamma\) 和偏移 \(\boldsymbol\beta\)

\[ \boldsymbol\gamma = W_\gamma \mathbf c + \mathbf b_\gamma \in \mathbb R^{C}, \qquad \boldsymbol\beta = W_\beta \mathbf c + \mathbf b_\beta \in \mathbb R^{C} \]

然后对特征图做**逐通道的仿射变换**(同一通道的所有空间位置共享同一组 \(\gamma_c,\beta_c\)):

\[ \boxed{\;\tilde F_{c,h,w} = \gamma_c \cdot F_{c,h,w} + \beta_c\;} \]

这个公式看起来平平无奇,但它的设计有深刻的数学合理性,逐点拆解:

  • 为什么是仿射(affine)而非任意非线性? 仿射变换 \(x\mapsto \gamma x+\beta\) 是保持"特征语义结构"的最温和的调制。它不改变特征的相对关系(单调性),只做拉伸(\(\gamma\))和平移(\(\beta\))。如果用任意 MLP 让语言去变换视觉特征,会破坏视觉骨干预训练学到的特征语义;仿射调制则像给每个通道装一个"音量旋钮"——语言只调节"哪些通道该被放大、哪些该被抑制",而不重写通道的含义。这恰好契合"复用预训练视觉特征"的第一性原理。
  • 为什么是逐通道(per-channel)而非逐元素(per-element)? 若对每个空间位置 \((h,w)\) 都给一组 \(\gamma,\beta\),参数量是 \(C\times H\times W\),在 130k 小数据上必然过拟合;逐通道只需 \(2C\) 个调制参数。更深层的理由:CNN 的**通道**编码"语义概念"(某通道响应"红色",某通道响应"边缘"),逐通道调制等价于让语言去**选择性激活与指令相关的语义概念**——"红杯子"指令放大"红色通道"和"杯状通道"。
  • 几何视角——仿射子空间投影:把特征向量 \(F_{:,h,w}\in\mathbb R^C\) 看作一个点。FiLM 把它映射到 \(\text{diag}(\boldsymbol\gamma)F_{:,h,w}+\boldsymbol\beta\)。当某些 \(\gamma_c=0\) 时,对应通道被完全抹去——这等价于把特征**投影到一个由语言选定的低维仿射子空间**。不同的指令选定不同的子空间。于是"语言条件"在几何上就是"语言指定一个视觉特征的仿射子空间,策略只在这个子空间里决策"。

多视角理解(FiLM 的三重身份):同一个 FiLM 公式可以从三个角度理解。 - 角度 1(条件归一化视角):FiLM 是 Conditional BatchNorm / AdaIN 的推广——把归一化里固定的 \(\gamma,\beta\) 换成由条件 \(\mathbf c\) 动态生成。这把它接入了一大类"条件生成"技术(StyleGAN 的 AdaIN、Diffusion 的 AdaLN 都是同源)。 - 角度 2(注意力视角):逐通道缩放 \(\gamma_c\) 是一种**通道注意力**——语言决定"该关注哪些语义通道",与 SE-Net 的通道注意力同构,区别是 SE 的权重来自特征自身,FiLM 的权重来自外部语言条件。 - 角度 3(超网络视角):生成 \(\gamma,\beta\) 的线性层 \(W_\gamma,W_\beta\) 是一个**超网络(hypernetwork)**——它用语言"生成"了主网络一层的参数(仿射层参数)。这把 FiLM 接入了"用一个网络生成另一个网络参数"的 meta-learning 视角。

FiLM 的局限正是 RT-2 的起点:FiLM 让语言只能做"逐通道音量调节",无法做"逐 token 的、双向的、深层的"语言-视觉交互。语言不能"问"视觉具体问题(如"图像左上角有什么"),视觉也不能反过来修正对语言的理解。这种单向、浅层的融合,限制了组合泛化的上限——这就是为什么需要 RT-2 的统一 token 空间。

理论 (二):RT-2"动作即 token"的似然因子化

现在严格化 RT-2 的核心。RT-2 把整个 VLA 建模成一个**自回归语言模型**对动作 token 序列的条件生成。设观测被 token 化为前缀 \(\boldsymbol\tau_{\text{prefix}}=[\phi^{\text{img}}(v)\,\|\,\phi^{\text{txt}}(l)]\),动作块 \(A\) 被离散化为 token 序列 \((b_1,b_2,\dots,b_M)\)\(M=H\times d_a\),每个 \(b_m\in\{0,\dots,255\}\) 是一个 bin 索引)。RT-2 用标准的自回归链式法则因子化动作的条件概率:

\[ \boxed{\;p_\theta(A\mid v,l) = \prod_{m=1}^{M} p_\theta\big(b_m \,\big|\, b_{<m},\, \boldsymbol\tau_{\text{prefix}}\big)\;} \]

训练损失就是这串动作 token 上的交叉熵(与 §8.5.1 给出的 \(\mathcal L_{\text{VLA}}\) 完全一致,这里我们从似然角度重新解读它):

\[ \mathcal L_{\text{RT-2}} = -\,\mathbb E_{(v,l,A)\sim\mathcal D}\sum_{m=1}^M \log p_\theta\big(b_m\mid b_{<m},\boldsymbol\tau_{\text{prefix}}\big) \]

这个因子化的**数学后果**是 RT-2 全部威力的来源,必须讲透。关键在于:动作 token \(b_m\) 和文本 token 共享同一个词表、同一个 embedding 矩阵 \(E\)、同一个输出投影(lm_head),并且**在同一批训练里同时见到互联网 VQA 数据和机器人动作数据**(这叫 co-fine-tuning,共同微调)。于是:

  1. 参数共享带来先验迁移:动作 token 的 embedding 和预测,复用的是 VLM 已经在互联网上训练好的注意力权重和表征。当模型预测"把可乐罐拿起来"的动作 token 时,前缀里"可乐罐"这个文本概念激活的是 VLM 学到的"可乐罐"表征——哪怕机器人数据里从没见过可乐罐。这就是涌现能力的数学根源:动作预测搭了语义表征的便车
  2. co-fine-tuning 防止灾难性遗忘:如果只用机器人数据微调,VLM 会迅速遗忘互联网知识(catastrophic forgetting)。同时混入原始 VQA 数据训练,相当于一个正则项,把模型权重锚定在"仍能做视觉问答"的区域,从而保住语义先验。形式上,总损失是 \(\mathcal L=\mathcal L_{\text{RT-2}}+\lambda\,\mathcal L_{\text{VQA}}\),第二项是防遗忘的"系绳"。
  3. 组合泛化继承自语言模型:语言模型本身就有组合泛化能力(见过"红色"和"杯子"能理解"红杯子")。一旦动作生成被表述为语言模型的续写,它就**自动继承**了这种组合性——"把 X 放到 Y 上"的动作模式可以泛化到训练时未配对过的 (X, Y)。

本质洞察:RT-2 的革命不在于"用了更大的模型",而在于**把动作生成问题归约(reduce)为语言建模问题**。一旦完成这个归约,机器人学习就能"白嫖"整个 LLM/VLM 领域积累的一切——预训练先验、组合泛化、scaling laws、推理技巧(甚至能做 chain-of-thought 式的动作推理)。这是计算机科学中"归约"思想的一次漂亮应用:不解决新问题,而是证明新问题等价于一个已被大力研究的老问题。

对比性思维(RT-1 vs RT-2 的结构对照):把两者并排,分野一目了然。

维度 RT-1(浅融合) RT-2(深统一)
语言-视觉交互 FiLM 逐通道仿射调制(单向、浅层) self-attention(双向、深层、逐 token)
动作头 从零训练的 Transformer 解码器 复用 VLM 的 lm_head(动作=token)
预训练复用程度 仅编码器特征 视觉+语言+融合+输出全复用
涌现能力(执行未见概念) 弱(受限于 130k 数据覆盖) 强(继承互联网语义)
推理速度 快(小模型,~3 Hz) 慢(55B,1-3 Hz,难部署)
动作精度上限 受 256-bin 量化限制 同样受 256-bin 量化限制

注意最后两行——RT-2 的代价是巨大的推理开销,且并未解决离散化的精度上限。这两个遗留问题,正是 §8.5.3(开源小模型)和 §8.5.4(连续动作头)要解决的。

理论 (三):TokenLearner——序列长度的信息瓶颈

RT-1 还贡献了一个被后续工作反复借鉴的组件:TokenLearner(Ryoo et al. 2021)。它解决的问题是 §8.5.1 练习 8.5.1-3 揭示的痛点——自注意力复杂度 \(O(N^2 d)\) 对 token 数 \(N\) 是平方增长,视觉 patch 一多就吃不消。RT-1 的视觉骨干输出 \(9\times9=81\) 个空间 token,TokenLearner 把它压缩到 \(8\) 个。

其数学是一个**学习式的空间注意力池化**。设输入特征图展平为 \(X\in\mathbb R^{HW\times C}\)\(HW=81\) 个空间位置),要输出 \(S=8\) 个 token。TokenLearner 为每个输出 token \(i\) 学一个空间注意力图 \(\alpha_i(X)\in\mathbb R^{HW}\)(由一个小卷积/MLP 加 softmax 生成),然后做加权空间池化:

\[ z_i = \sum_{j=1}^{HW} \alpha_{i,j}(X)\, X_j \in\mathbb R^C, \qquad i=1,\dots,S \]

直觉是:与其让 81 个 token 平等地参与注意力(其中大量是背景、冗余),不如让网络**自己学出 8 个"信息最浓缩"的 token**——每个 token 是一组空间位置的自适应加权和,权重 \(\alpha_i\) 由内容决定("把所有跟夹爪相关的位置聚合成一个 token")。

理论-工程桥接:TokenLearner 在数学上就是 §8.5.1 信息瓶颈视角的显式实现——它在视觉侧插入一个**带宽为 \(S\) 个 token 的瓶颈**,强制网络丢弃与任务无关的空间细节。复杂度从 \(O(81^2)\) 降到 \(O(8^2)\)(融合阶段),近 100 倍。这个"用少量学习式 token 概括稠密特征"的思想,在 Octo(§8.5.3 的 readout token)、Perceiver、Q-Former 里都能看到变体。当你在 VLA 代码里看到"learnable query tokens",背后往往是同一个信息瓶颈思想。

一个最小代码骨架:FiLM 调制的形状演算

理论教学中代码仅用于**验证概念**。下面这段伪代码把 FiLM 的"语言生成 γ/β、逐通道调制"具象化,帮你确认维度理解:

# 概念验证:FiLM 逐通道仿射调制的形状演算(非可运行实现)
# 目的——确认 γ/β 是"逐通道、空间共享"的,参数量只有 2C
import torch
import torch.nn as nn

C, H, W = 256, 9, 9          # 视觉特征图: 256 通道, 9x9 空间
d_l = 512                    # 语言向量维度 (USE 输出)

F = torch.randn(1, C, H, W)              # 视觉特征图
c = torch.randn(1, d_l)                  # 语言向量 phi_txt(l)

W_gamma = nn.Linear(d_l, C)              # 语言 -> 逐通道缩放
W_beta  = nn.Linear(d_l, C)              # 语言 -> 逐通道偏移
gamma = W_gamma(c).view(1, C, 1, 1)      # [1, C, 1, 1] 广播到空间
beta  = W_beta(c).view(1, C, 1, 1)       # [1, C, 1, 1] 广播到空间

F_tilde = gamma * F + beta               # 逐通道仿射, 空间位置共享同组 γ,β
assert F_tilde.shape == (1, C, H, W)     # 形状不变, 只是被语言"调音"
# 关键结论1: γ,β 形状是 [1,C,1,1], 同一通道的 81 个空间位置共享 -> 逐通道
# 关键结论2: 调制参数量 = 2C = 512, 与空间尺寸 HxW 无关 -> 不会随分辨率爆炸
# 关键结论3: γ_c=0 即抹去第 c 通道 = 投影到语言选定的仿射子空间

这段代码的唯一价值是让你看清 FiLM 的两个"省":省参数(只 \(2C\) 个,与空间无关)和**省破坏**(仿射不重写特征语义,只调音量)。对比 RT-2——RT-2 没有这种专门的融合算子,因为它把融合交给了预训练 VLM 的 self-attention,融合"免费"地继承自预训练。这一对照再次印证:RT-1 在精打细算地手工设计融合,RT-2 则用"归约到语言建模"一举绕过了融合设计。

⚠️ 常见陷阱

💡 概念误区:以为 FiLM 的 γ、β 是逐空间位置或逐 token 生成的 - 新手想法:"语言要调制视觉,那应该对每个像素/每个 patch 都生成一组 γ、β 才够精细。" - 现象/后果:若真这么实现,调制参数量变成 \(C\times H\times W\),在 RT-1 的 130k 小数据上严重过拟合;且会破坏视觉骨干的空间结构,模型在新场景上崩溃。 - 根本原因:误解了 FiLM 的设计意图——它要做的是**语义通道选择**(哪些概念该激活),不是空间细节重绘。通道编码语义,空间编码位置,调制应作用在语义维度(通道)上而非位置维度(空间)上。 - 正确做法:γ、β 严格逐通道(形状 \([C]\)),同一通道的所有空间位置共享。需要空间选择性时,靠后续注意力层从被调音的特征里读取,而不是靠 FiLM 直接做空间调制。

💡 概念误区:以为 RT-2 的"动作 token"需要专门设计一套新的动作词表和 embedding - 新手想法:"动作是连续的物理量,肯定要为它新建一套 token 词表和专用 embedding 层。" - 现象/后果:新建独立动作词表会切断动作与语言的参数共享,于是动作 token 无法搭语义表征的便车,涌现能力消失,RT-2 退化成"换了离散化方式的 RT-1"。 - 根本原因:没抓住 RT-2 的精髓——精髓恰恰是**复用 VLM 已有词表里的 token**(征用最不常用的 256 个整数 token 当动作 bin),从而让动作和语言共享 embedding 与 lm_head。共享是先验迁移的前提,独立词表等于自废武功。 - 正确做法:把动作 bin 映射到 VLM 词表中已有的、低频的 token 上(不同实现征用不同 token,如整数 token 或 <extra_id_*>),不新增可训练 embedding。让动作彻底"寄生"在语言空间里。

🧠 思维陷阱:认为 RT-2 的涌现能力来自"模型更大" - 新手想法:"RT-2 能执行训练中没见过的概念,是因为它用了 55B 大模型,参数多自然能力强。" - 现象/后果:抱着这个想法,会以为"把 RT-1 放大到 55B 就有涌现",从而在自己项目里盲目堆参数,却得不到涌现能力。 - 根本原因:混淆了"模型规模"与"先验来源"两个独立因素。涌现能力的真正来源是 co-fine-tuning 把动作生成接入了 VLM 的互联网语义空间——是"动作即 token + 共享参数 + 混合训练"这套机制,不是单纯的参数量。一个小 VLM 做同样的归约也会有(弱一些的)涌现,一个大模型若不做这个归约(如放大的 RT-1)则没有。 - 正确做法:把涌现归因于**归约 + 先验复用**机制,规模只是放大器。改进 VLA 泛化应优先想"如何更好地复用/扩展预训练先验"(如换更强 VLM、加更多 web 数据 co-train),而非单纯放大动作头。

练习

[练习 8.5.2-1 · 推导] FiLM 调制 \(\tilde F_{c}=\gamma_c F_c+\beta_c\)。证明:当所有 \(\gamma_c=1,\beta_c=0\) 时 FiLM 退化为恒等映射(即"语言不起作用")。然后设计一个初始化方案,使 FiLM 层在训练初期接近恒等(提示:让 \(W_\gamma,W_\beta\) 输出接近 0,但要注意 \(\gamma\) 应接近 1 而非 0),并解释为什么"初始化为恒等"对在预训练视觉骨干上微调是有益的。在草稿纸上写出 \(\gamma,\beta\) 的具体初始化公式。

[练习 8.5.2-2 · 开放思考] RT-2 把动作量化为 256-bin 并征用 VLM 词表 token。考虑这样一个问题:动作 bin token 之间在 VLM 的 embedding 空间里**没有数值顺序结构**(bin 100 和 bin 101 的 embedding 不保证比 bin 100 和 bin 200 更接近)。这会带来什么问题?(提示:相邻 bin 对应相近的物理动作,但模型不知道。)这个"序数信息丢失"的缺陷如何在数学上刻画其对精度的影响?它为 §8.5.6/§8.5.7 的连续动作头提供了什么动机?

[练习 8.5.2-3 · 概念辨析] co-fine-tuning 的损失是 \(\mathcal L=\mathcal L_{\text{robot}}+\lambda\mathcal L_{\text{VQA}}\)。讨论极端情况:(a) \(\lambda\to 0\) 会发生什么?(b) \(\lambda\to\infty\) 会发生什么?(c) 从"多任务学习中的任务平衡"角度,论证为什么存在一个最优的 \(\lambda^\star\),并说明它与机器人数据量、VLM 预训练强度的定性关系。这道题需要你把 §8.5.1 的"保护预训练知识"和本节的"防灾难性遗忘"联系起来。


§8.5.3 Octo 与 OpenVLA:开源、通用、可插拔 ◉

动机:把 VLA 从 Google 的 55B 巨兽里解放出来

§8.5.2 末尾留下两个遗留问题:RT-2 是 55B 闭源模型,1-3 Hz 推理在真机上几乎不可用;而且它的架构是单体的(monolithic)——换一个机器人、加一个相机、改一种动作头,都要动整个网络。学术界和开源社区需要的是:**小到能在单卡上跑、开源可复现、且架构模块化(换 embodiment 不用重训骨干)**的 VLA。Octo(2024,Berkeley)和 OpenVLA(2024,Stanford)就是对这个需求的两个回答,它们也代表了两种不同的开源设计哲学。

这一节的数学重点不在"又一个 Transformer",而在两个真正有内容的设计点:(1)Octo 的 block-wise attention mask——如何用一个注意力掩码实现"可插拔的模态";(2)OpenVLA 的双视觉编码器(SigLIP ⊕ DINOv2)——为什么两个视觉骨干拼起来比一个强。理解这两点,你就掌握了"如何让 VLA 架构既通用又灵活"的核心技巧。

如果不这样做会怎样(反面)

为什么需要 Octo 的 block-mask 和 OpenVLA 的双编码器?先看不这么做的困难。

朴素方案 表面可行 深层困难
单体网络,固定输入模态(如固定 2 相机 + 1 指令) 简单 换一个只有 1 相机的机器人就要改网络结构、重训——不通用
加新模态时把它 concat 到序列末尾,全连接注意力 实现简单 新模态若与旧模态全连接,会改变旧 token 的注意力分布,破坏已学到的表征;且无法表达"某些模态可选"
单一视觉编码器(如只用 CLIP) 主流做法 CLIP/SigLIP 擅长**语义**(这是什么物体)但弱于**空间/几何**(物体在哪、边界在哪)——机器人操纵恰恰极度依赖空间精度

第三行的困难值得展开,它解释了 OpenVLA 一个看似奇怪的设计。视觉表征有两个正交的维度:语义(semantic)和空间(spatial)。CLIP/SigLIP 这类用图文对比学习训练的编码器,目标是"图像整体语义和文本对齐",所以它把空间细节压缩掉了(一张图压成一个全局语义向量的倾向很强);而 DINOv2 这类用自监督(无文本)训练的编码器,目标是"区分图像内部的不同区域",所以它保留了丰富的空间/几何结构。机器人操纵既要知道"这是杯子"(语义,SigLIP 强),又要知道"杯子边缘在像素 (320,210)"(空间,DINOv2 强)。

本质洞察:OpenVLA 的双编码器 SigLIP ⊕ DINOv2 不是"堆料",而是**显式地把视觉表征分解为语义子空间和空间子空间,再让网络自由组合**。这是"对比学习编码器擅长语义、自监督编码器擅长几何"这一经验规律的架构化。它揭示了 VLA 视觉前端设计的一条原则:单一预训练目标的编码器必有盲区,互补目标的编码器拼接能覆盖更全的表征维度。

历史:Octo 的"插拔式 Transformer"与 OpenVLA 的"双眼"
  • Octo(Octo Team 2024):开源 27M / 93M 参数,在 Open X-Embodiment(OXE)的 800k 条轨迹上训练。它的设计哲学是**模块化插拔**——把每种输入(图像、语言、本体状态)做成独立的"输入 block",每种输出(不同机器人的动作)做成独立的"readout head"。核心机制是一个精心设计的 block-wise attention mask,使得"加一个相机"或"换一个机器人动作头"时,不需要改动已训练的部分。动作头用的是 diffusion(扩散),而非 RT-2 的离散 token。
  • OpenVLA(Kim et al. 2024):开源 7B,在 970k 条 OXE 轨迹上训练。设计哲学是**用更好的开源组件复刻并超越 RT-2**——视觉用 SigLIP ⊕ DINOv2 双编码器,语言/融合骨干用 Llama 2 7B,动作头沿用 RT-2 的 256-bin 离散 token(但后续 OpenVLA-OFT 改进了这一点,见 §8.5.6)。它证明了 7B 开源模型在多个基准上能超过 55B 的 RT-2。

这两条线的对照很有意思:Octo 追求"架构灵活"(小模型 + 插拔 + diffusion 头),OpenVLA 追求"性能复刻"(标准 LLM 骨干 + 强视觉前端 + 离散头)。它们共同把 VLA 带出了 Google,让任何实验室都能在自己的机器人上微调一个 VLA。

理论 (一):block-wise attention mask 的数学

这是本节最有数学内容的部分。回忆 §8.5.1:所有模态被拍平成一个 token 序列 \(\boldsymbol\tau\),self-attention 让所有 token 自由交互。但"自由交互"有个问题——它把所有模态**硬耦合**了:注意力矩阵 \(A\in\{0,1\}^{N\times N}\)(或其 softmax 前的掩码)规定了谁能看谁,若是全 1(全连接),那么删掉任何一个 token 都会改变其余所有 token 的注意力归一化分母,牵一发而动全身。

Octo 的解法是给注意力矩阵施加**块结构(block structure)**。把序列按模态/角色分成若干块:观测块(observation tokens,含图像和语言)、readout 块(每个机器人一组可学习的 readout token,专门负责"读出"该机器人的动作)。掩码规则是:

\[ M_{ij} = \begin{cases} 1, & \text{token } i \text{ 允许 attend 到 token } j \\ 0, & \text{否则(softmax 前置为 } -\infty\text{)} \end{cases} \]

具体的块规则(这是 Octo 灵活性的全部秘密):

  1. 观测块内部 + 块间按时间因果:时刻 \(t\) 的观测 token 可以 attend 到 \(\le t\) 的所有观测 token(时序因果,符合"不能看未来")。
  2. readout token 只读、不被读:readout token 可以 attend 到观测 token(它要"读取"观测信息来产出动作),但**没有任何 token 能 attend 到 readout token**(即 readout token 所在的列在掩码里对其他行全为 0)。
  3. 不同 readout head 互不可见:机器人 A 的 readout token 和机器人 B 的 readout token 之间掩码为 0。

第 2 条是整个设计的灵魂,必须讲透其数学后果。因为没有任何 token 能 attend 到 readout token,readout token 对网络其余部分的前向计算"零影响"——它像一个只接收信号、不发射信号的"探针"。数学上,设观测 token 的表征为 \(h^{\text{obs}}\),readout token 的表征为 \(h^{\text{read}}\)。规则 2 意味着:

\[ h^{\text{obs}} = f(\boldsymbol\tau^{\text{obs}}) \quad\text{完全不依赖}\quad h^{\text{read}} \]

也就是说,\(h^{\text{obs}}\) 的计算图里**根本不包含** readout token。这带来一个极其重要的"插拔"性质:

本质洞察:因为 readout token 是"只读探针",你可以**在不影响骨干的前提下,自由增删 readout head**。给一个新机器人加一个新的 readout head(新的动作头),只需新增一组 readout token——它们 attend 到共享的观测表征,但因为"不被读",它们的加入不会改变观测表征、也不会改变其他机器人的 readout。这就是"可插拔架构"的字面数学含义:输出端的模块化由"只读不写"的注意力掩码保证。这与 §8.5.2 RT-1 的 TokenLearner query token 同源——都是"用专门的、单向交互的 token 去概括/读取主表征"。

多视角理解(readout token 的两种解读): - 角度 1(探针视角):readout token 是插入网络的"读出探针",类比 BERT 的 [CLS] token——它汇聚序列信息供下游使用,但(在 Octo 的设计里)不污染上游。 - 角度 2(接口隔离视角):block-mask 在数学上实现了软件工程里的"接口隔离"——观测块提供一个稳定的"表征服务",各 readout head 是这个服务的不同"消费者",消费者之间、消费者对服务都没有副作用。换 embodiment = 换一个消费者,服务不变。

理论 (二):双视觉编码器的表征拼接

OpenVLA 的 SigLIP ⊕ DINOv2 在数学上是**通道维拼接(channel-wise concatenation)**。设同一图像 \(v\) 分别过两个冻结/微调的编码器:

\[ \phi^{\text{sig}}(v)\in\mathbb R^{N_v\times d_1}, \qquad \phi^{\text{dino}}(v)\in\mathbb R^{N_v\times d_2} \]

(两者 patch 数 \(N_v\) 对齐,通过统一输入分辨率和 patch size 保证)。然后在特征维拼接,再投影到骨干维度 \(d\)

\[ \phi^{\text{img}}(v) = W_{\text{proj}}\big[\,\phi^{\text{sig}}(v)\,\big\|\,\phi^{\text{dino}}(v)\,\big] \in\mathbb R^{N_v\times d}, \qquad W_{\text{proj}}\in\mathbb R^{d\times(d_1+d_2)} \]

为什么"拼接"而非"相加"或"取一个"?这里有清晰的数学理由:

  • 拼接保留两个子空间的完整信息:相加 \(\phi^{\text{sig}}+\phi^{\text{dino}}\) 会把语义和空间信息**混叠**在同一组维度里,若两者在某维度上符号相反会相互抵消;拼接则把语义信息放在前 \(d_1\) 维、空间信息放在后 \(d_2\) 维,互不干扰,由后续投影 \(W_{\text{proj}}\) 自由学习如何组合。
  • 投影层学习语义-空间的最优混合\(W_{\text{proj}}\) 是一个 \(d\times(d_1+d_2)\) 的可学习矩阵,它能为每个输出维度学习"该从语义子空间取多少、从空间子空间取多少"。对需要语义的特征(识别物体类别)多取 SigLIP,对需要空间的特征(定位边缘)多取 DINOv2。
  • 互补性的信息论解读:理想情况下 \(I(\phi^{\text{sig}};\text{语义})\) 大而 \(I(\phi^{\text{sig}};\text{空间})\) 小,\(\phi^{\text{dino}}\) 反之。拼接后的联合表征的总信息 \(I([\phi^{\text{sig}}\|\phi^{\text{dino}}];\text{任务})\ge\max\) 单个,因为两者的任务相关信息**部分不重叠**(互补),拼接能把不重叠的部分都纳入。

理论-工程桥接:双编码器在代码里就是两个 vision_backbone 的前向结果在最后一维 torch.cat,再过一个 nn.Linear(d1+d2, d)。一个常见的复现 bug 是两个编码器的 patch 数不一致(SigLIP 用 14×14 patch、DINOv2 用 16×16 patch 会导致 \(N_v\) 不同无法对齐)——必须统一 patch grid。这个工程细节背后是数学约束:拼接要求两个张量在非拼接维度上形状一致。OpenVLA 通过统一输入分辨率到 \(224\times224\) 且都用 patch 使两者输出同样的 256 个 token 来满足这个约束。

一个最小代码骨架:block-wise mask 的构造

理论教学中代码仅用于**验证概念**。下面把 Octo 的"readout 只读不被读"掩码具象化:

# 概念验证:Octo block-wise attention mask 的构造(非可运行实现)
# 目的——看清"readout token 不被任何 token attend"如何用掩码实现
import torch

N_obs  = 264                 # 观测 token (256 图像 + 8 语言)
N_read = 4                   # 一个机器人的 readout token
N = N_obs + N_read           # 总序列长度
mask = torch.zeros(N, N)     # mask[i,j]=1 表示 i 可以 attend 到 j

# 规则1: 观测 token 之间全连接 (简化, 忽略时序因果)
mask[:N_obs, :N_obs] = 1
# 规则2: readout token 可以 attend 观测 token (读取信息)
mask[N_obs:, :N_obs] = 1
# 规则2(关键): 没有任何 token attend readout -> readout 所在列对其他行全 0
#            注意我们从未设置 mask[:N_obs, N_obs:] = 1, 也未设 readout 间互连
# 验证: 观测 token 看不到 readout token
assert mask[:N_obs, N_obs:].sum() == 0   # readout 列, 观测行 -> 全 0
# 验证: readout token 之间互不可见 (不同 head 隔离)
assert mask[N_obs:, N_obs:].sum() == N_read  # 只有对角线(自己看自己)允许
mask[N_obs:, N_obs:] = torch.eye(N_read)     # readout 仅自注意

# 关键结论: h_obs 的计算不依赖 readout -> 增删 readout head 不影响骨干
# 这就是"可插拔"的字面含义: 输出端模块化由掩码的"只读"结构保证

这段代码的价值是让你亲眼看到"可插拔"不是抽象口号,而是 mask[:N_obs, N_obs:] == 0 这一行具体约束的后果。观测表征的计算图里没有 readout token,所以 readout 可以随意增删——一个注意力掩码的零块,就实现了软件工程梦寐以求的"模块解耦"。

⚠️ 常见陷阱

💡 概念误区:以为 readout token 也参与观测表征的形成 - 新手想法:"readout token 在同一个 Transformer 里,它当然会和观测 token 相互影响、共同形成表征。" - 现象/后果:基于这个误解,你会以为"增删 readout head 会改变骨干输出",从而不敢插拔,或在插拔后白白重训整个骨干,浪费算力。 - 根本原因:忽视了 block-mask 的方向性——注意力是**有向**的,"\(i\) attend \(j\)"不等于"\(j\) attend \(i\)"。readout token 单向地读取观测,但掩码切断了"观测读 readout"这条反向边,于是观测表征的计算图里不含 readout。 - 正确做法:牢记 readout 是"只读探针",其加入对骨干前向"零影响"。验证方法:检查掩码中 readout 列对观测行是否全 0(如代码中的 assert)。只要这个零块成立,就可以放心地冻结骨干、只训练/增删 readout head。

💡 概念误区:以为双视觉编码器应该用"相加"或"取平均"来融合 - 新手想法:"两个编码器输出同样形状,相加或平均最自然,还省参数。" - 现象/后果:相加会让语义和空间特征在同一组维度上混叠,符号相反的分量相互抵消,模型既丢语义又丢空间,性能反而不如单编码器。 - 根本原因:没理解两个编码器的信息是**互补且应保持可分离**的。相加是"有损混合"(不可逆,信息可能抵消),拼接是"无损并置"(保留全部,由投影层学习如何混合)。 - 正确做法:用通道维拼接 \([\phi^{\text{sig}}\|\phi^{\text{dino}}]\) 再过可学习投影 \(W_{\text{proj}}\),让网络自己决定如何混合语义与空间,而不是手工强行相加。

🧠 思维陷阱:认为"开源小模型"必然全面弱于"闭源大模型" - 新手想法:"OpenVLA 才 7B,RT-2 有 55B,小模型怎么可能超过大模型?" - 现象/后果:抱着这个偏见,会一味追求更大的模型,忽视架构和数据质量的改进,在有限算力下做不出好结果。 - 根本原因:把性能简单等同于参数量,忽视了"更强的视觉前端(双编码器)+ 更干净的开源训练流程 + 针对性的微调"能在特定任务上弥补甚至反超规模差距。规模只是诸多因素之一,且对机器人任务边际收益递减(这正是 §8.5.9 scaling laws 的主题)。 - 正确做法:在固定算力预算下,优先投资"表征质量"(视觉前端、预训练先验)和"数据质量",而非单纯放大。OpenVLA 超过 RT-2 正是这一原则的实证。

练习

[练习 8.5.3-1 · 推导] 设观测块有 \(N_{\text{obs}}\) 个 token,要支持 \(K\) 个不同机器人(每个 \(N_r\) 个 readout token)。写出完整的 \((N_{\text{obs}}+KN_r)\times(N_{\text{obs}}+KN_r)\) 注意力掩码的块结构(用分块矩阵表示,标出每个块是全 1、全 0 还是单位阵)。然后证明:在这个掩码下,第 \(k\) 个机器人 readout 的输出只依赖于观测块,与其他 \(K-1\) 个机器人的 readout 完全无关。在草稿纸上画出 \(K=2\) 时的掩码矩阵。

[练习 8.5.3-2 · 开放思考] OpenVLA 用 SigLIP(语义)⊕ DINOv2(空间)。假设你要为一个**力控装配**任务(需要极高的几何/接触精度)改进视觉前端。你会调整两个编码器的相对"权重"吗?如何在不重训编码器的前提下让网络更倚重空间信息?(提示:考虑投影矩阵 \(W_{\text{proj}}\) 的初始化,或在拼接前对 DINOv2 特征做缩放。)讨论这与 §8.5.2 FiLM"通道选择"思想的联系。

[练习 8.5.3-3 · 概念辨析] Octo 用 diffusion 动作头,OpenVLA 用 256-bin 离散头。结合 §8.5.1 的潜变量分解 \(\pi(a\mid z)q(z\mid o)\),指出这两个选择改变的是分解中的哪一项(\(q\) 还是 \(\pi(a\mid z)\))?哪一项保持不变?由此论证:"同一个骨干 \(q_\theta\) 可以配不同动作头"这一模块化性质,在数学上对应潜变量分解的哪种结构特性?这道题为 §8.5.6 四范式对比埋下伏笔。


§8.5.4 π₀ 与 π₀.₅:VLM + action expert 双专家 + Flow Matching ◉

动机:既要 VLM 的语义,又要 50 Hz 的连续控制

走到这里,VLA 的两个核心矛盾已经浮现:(1) RT-2/OpenVLA 的离散 256-bin 动作头有量化精度上限(§8.5.7 会严格化),做不了精细力控;(2) 自回归逐 token 生成动作慢——一个 \(H\times d_a\) 的动作块要生成几百个 token,串行解码,根本达不到操纵任务需要的 50 Hz。

我们想要的理想 VLA 是:骨干仍是预训练 VLM(保住语义先验),但动作头改成连续生成模型(破除量化上限)、且能并行生成整个动作块(满足高频)。π₀(Physical Intelligence 2024)正是这个理想的实现——它在 PaliGemma 3B VLM 上接了一个 action expert(动作专家),用 Flow Matching(流匹配,§8.4) 一步并行生成连续动作块。π₀.₅(2025)进一步引入分层规划与 web 数据 co-training,迈向开放世界。

这一节是本专题架构线的高潮,数学密度最大。我们要讲清三件事:(1)双专家(dual-expert)结构如何在一个 Transformer 里同时容纳"VLM 注意力"和"动作专家注意力";(2)prefix-suffix 注意力掩码如何分离"理解"和"生成";(3)Flow Matching 动作头的完整训练数学,以及 π₀ 为何用 Beta 分布采样时间

如果不这样做会怎样(反面)

为什么需要"双专家 + Flow Matching"这套相对复杂的结构?看朴素替代方案的困难。

朴素方案 表面可行 深层数学困难
直接在 VLM 上接 diffusion 头(如 Octo) 已被验证可行 diffusion 多步去噪推理慢(几十步迭代),且 VLM 的因果注意力与 diffusion 需要的"对整块动作的双向注意力"不匹配
让动作 token 和 VLM 共享同一套 Transformer 权重 参数省 动作的统计结构(连续、高频、强时序相关)与文本截然不同,强行共享权重会让动作生成拖累 VLM 语义、或反之
用单独的小网络做动作头,不进 Transformer 解耦清晰 动作头无法在 Transformer 内部"逐层"地 attend 到视觉/语言表征,跨模态融合只能发生在一处,深度不足

第二行的困难是 π₀ 双专家设计的直接动机,值得展开。文本 token 和动作 token 的统计性质差异巨大:文本是离散、低频(一句话十几个 token)、弱局部相关;动作是连续、高频(50 Hz,一秒 50 个动作)、强时序相关(相邻时刻动作几乎连续)。如果让它们共享同一组 FFN/注意力投影权重(如 RT-2 那样),网络必须用一套参数同时拟合两种极不同的分布,要么顾此失彼,要么需要更大容量。

本质洞察:π₀ 的"双专家"是 Mixture-of-Experts(MoE)思想在模态维度的应用——不同模态的 token 走不同的 FFN/投影权重(不同"专家"),但共享同一个注意力机制(在同一序列里相互 attend)。这样既让每个模态有专属容量去拟合自己的统计结构,又保留了跨模态的注意力交互。一句话:注意力共享(保跨模态融合),FFN 分流(保各模态容量)。这是把 RT-2"全共享"和"完全分离小网络"两个极端折中的最优点。

历史:从 diffusion policy 到 flow-matching action expert
  • 铺垫:Diffusion Policy(Chi et al. 2023)首次用扩散模型建模动作分布,解决了动作多峰性,但多步去噪慢。Octo(§8.5.3)把它接到 Transformer 上。
  • π₀(Black et al. 2024):把动作头从 diffusion 换成 Flow Matching(更直的概率路径、更少的积分步数),并创新性地用 action expert——一组专门处理动作 token 的 Transformer 参数(独立的 FFN 与注意力投影),与 VLM expert 在同一序列里通过注意力交互。骨干是 PaliGemma 3B。在 68 个任务、7 种 embodiment 上训练,做到 50 Hz 控制。
  • π₀.₅(Physical Intelligence 2025):在 π₀ 基础上加**分层结构**——高层 VLM 先做语义子任务规划("先拿起海绵,再擦桌子"),低层 Flow Matching 头执行;并用大量 web 数据 co-training 提升开放世界泛化(在没见过的真实家庭里清理厨房)。

这条线的逻辑:diffusion 解决了多峰性但慢 → flow matching 让它更快更直 → action expert 让它与 VLM 高效共存 → 分层 + web 数据让它走向开放世界。

理论 (一):双专家结构的数学

把双专家严格化。一条 π₀ 的输入序列分两段:prefix(前缀)= 图像 + 语言 token(由 VLM expert 处理),suffix(后缀)= 状态 + 含噪动作 token(由 action expert 处理)。在 Transformer 的每一层 \(\ell\),两段 token 用各自的投影矩阵算 Q/K/V,但**拼在一起做注意力**:

设第 \(\ell\) 层,prefix 表征 \(H^{\text{pre}}_\ell\)、suffix 表征 \(H^{\text{suf}}_\ell\)。各自用自己专家的投影:

\[ Q = \begin{bmatrix} H^{\text{pre}}_\ell W_Q^{\text{vlm}} \\[2pt] H^{\text{suf}}_\ell W_Q^{\text{act}} \end{bmatrix},\quad K = \begin{bmatrix} H^{\text{pre}}_\ell W_K^{\text{vlm}} \\[2pt] H^{\text{suf}}_\ell W_K^{\text{act}} \end{bmatrix},\quad V = \begin{bmatrix} H^{\text{pre}}_\ell W_V^{\text{vlm}} \\[2pt] H^{\text{suf}}_\ell W_V^{\text{act}} \end{bmatrix} \]

注意 \(W^{\text{vlm}}\)\(W^{\text{act}}\) 是**两套不同的权重**(两个专家),但 Q/K/V 拼接后在**同一个注意力**里计算 \(\text{softmax}(QK^\top/\sqrt d)V\)。然后**FFN 也分流**:prefix 过 VLM 的 FFN,suffix 过 action expert 的 FFN:

\[ H^{\text{pre}}_{\ell+1} = \text{FFN}^{\text{vlm}}(\text{Attn}^{\text{pre}}),\qquad H^{\text{suf}}_{\ell+1} = \text{FFN}^{\text{act}}(\text{Attn}^{\text{suf}}) \]

逐点解读这个结构的精妙:

  • 注意力共享 = 跨模态融合的载体:因为 Q/K/V 拼在一起,suffix(动作)的 query 能 attend 到 prefix(视觉+语言)的 key/value——动作 token 在**每一层**都能读取视觉语义。这是"深层跨模态融合",比 RT-1 的"一处 FiLM"深得多。
  • FFN/投影分流 = 各模态专属容量:动作 token 走 \(W^{\text{act}},\text{FFN}^{\text{act}}\),可以拟合动作的连续高频统计;文本 token 走 VLM 权重,保住语义。两者互不拖累。
  • 参数初始化的不对称:VLM expert 权重初始化自 PaliGemma 预训练(继承先验),action expert 权重**随机初始化**(动作是新任务,无预训练可继承)。训练时 VLM expert 用小学习率微调或部分冻结,action expert 用大学习率从零学。

多视角理解(双专家的三重解读): - 角度 1(MoE 视角):两个专家按"模态"硬路由(modality-based routing),不是 MoE 常见的按 token 内容软路由。路由规则简单确定:图像/语言→VLM expert,状态/动作→action expert。 - 角度 2(双塔 + 交叉注意力视角):可以看成"VLM 塔"和"动作塔",但不同于经典双塔的"各自编码后只在顶层交互"——这里两塔在**每一层**通过共享注意力交互,是"逐层交叉注意力"。 - 角度 3(条件生成视角):prefix 提供条件 \(z=q_\theta(v,l,s)\),suffix 的 action expert 实现 \(\pi_\theta(a\mid z)\) 的 Flow Matching。这正是 §8.5.1 潜变量分解 \(\pi(a\mid z)q(z\mid o)\) 的**字面架构实现**——VLM expert = \(q_\theta\),action expert = \(\pi_\theta(a\mid z)\)

理论 (二):prefix-suffix 注意力掩码

双专家还需要一个定制的注意力掩码,它分离"理解"和"生成"两个阶段。π₀ 的掩码规则:

  1. prefix 内部双向:图像和语言 token 之间**全连接、双向**注意力(不加因果掩码)。理由:理解一个场景需要图像各部分、语言各词之间自由交互,没有"时序"概念,不该加因果掩码。
  2. suffix 内部双向:动作块内的 token 之间也是**双向**注意力。理由:Flow Matching 是对**整个动作块**一次性去噪,块内所有动作 token 需要相互可见(不是自回归逐个生成,所以不加因果掩码)。
  3. suffix → prefix 单向:动作 token 可以 attend 到 prefix(读取视觉语义条件),但 prefix 不能 attend 到 suffix。理由:理解阶段不应被"当前的含噪动作"污染——条件 \(z\) 应只依赖观测,不依赖待生成的动作。

第 3 条至关重要,它的数学后果是**prefix 表征可以被缓存**:

\[ H^{\text{pre}} = f^{\text{vlm}}(\boldsymbol\tau^{\text{pre}}) \quad\text{完全不依赖 suffix} \]

本质洞察:prefix-suffix 掩码在数学上实现了"观测理解"与"动作生成"的**计算解耦**。因为 prefix 不 attend suffix,\(H^{\text{pre}}\)(视觉语义条件)只需算**一次**就能缓存(KV cache);而 Flow Matching 推理需要对动作块迭代去噪多步(每步重算 suffix),每步都复用缓存的 prefix。这把昂贵的 VLM 前向从"每个去噪步算一次"降到"整次推理算一次",是 π₀ 达到 50 Hz 的关键工程优化。这与 §8.5.3 Octo readout 的"只读不被读"、§8.5.2 RT-1 的 prefix 缓存同源——都是用注意力的**方向性**换取**计算复用**。

理论 (三):Flow Matching 动作头的完整推导

这是本节的数学核心,必完证之一。回顾 §8.4:Flow Matching 学一个速度场,把噪声分布连续地"流"到数据分布。现在把"数据"换成动作块 \(A\in\mathbb R^{H\times d_a}\),条件是观测 \(o=(v,l,s)\)

Step 1:定义条件概率路径。 取最简单的**直线插值路径**(optimal-transport / rectified flow 路径)。给定一个真实动作块 \(A_1\sim p_{\text{data}}(A\mid o)\)(下标 1 表示流的终点)和一个噪声 \(A_0\sim\mathcal N(0,I)\),定义时间 \(\tau\in[0,1]\) 上的插值:

\[ A_\tau = (1-\tau)A_0 + \tau A_1 \]

这条路径在 \(\tau=0\) 是纯噪声 \(A_0\),在 \(\tau=1\) 是真实动作 \(A_1\),中间是线性插值。

Step 2:求条件速度场。\(\tau\) 求导,得到这条直线路径上的**目标速度**:

\[ u_\tau(A_\tau\mid A_0,A_1) = \frac{\mathrm d A_\tau}{\mathrm d\tau} = A_1 - A_0 \]

注意一个漂亮的事实:直线路径的速度是**常向量** \(A_1-A_0\)(与 \(\tau\) 无关)。这就是 rectified flow / OT 路径"直"的含义——粒子沿直线匀速从噪声走到数据。

Step 3:写训练损失(条件 Flow Matching, CFM)。 让 action expert 输出的速度场 \(v_\theta(A_\tau, \tau, o)\) 回归这个目标速度。损失是:

\[ \boxed{\;\mathcal L_{\text{FM}}(\theta) = \mathbb E_{\substack{\tau\sim p(\tau),\, A_1\sim p_{\text{data}}(\cdot\mid o)\\ A_0\sim\mathcal N(0,I)}}\Big[\big\|\,v_\theta\big((1-\tau)A_0+\tau A_1,\;\tau,\;o\big) - (A_1 - A_0)\,\big\|^2\Big]\;} \]

这个损失的**关键优势**(§8.4 已证,这里复述其对动作的意义):它是一个**简单的回归损失**——给定一对 \((A_0,A_1)\),目标 \(A_1-A_0\) 是已知的常向量,无需任何模拟 ODE、无需计算难处理的边际速度场。CFM 定理保证:最小化这个条件损失的最优解,恰好等于真实的边际速度场。于是训练就是"采一对噪声-动作,回归它们的差向量",极其简单稳定。

Step 4:推理(采样动作)。 训练好 \(v_\theta\) 后,从噪声 \(A_0\sim\mathcal N(0,I)\) 出发,沿 ODE 积分到 \(\tau=1\)

\[ \frac{\mathrm d A_\tau}{\mathrm d\tau} = v_\theta(A_\tau, \tau, o),\qquad A_0\sim\mathcal N(0,I) \]

用欧拉法离散,步长 \(\Delta\tau=1/K\)\(K\) 是积分步数,π₀ 用约 10 步):

\[ A_{\tau+\Delta\tau} = A_\tau + \Delta\tau\cdot v_\theta(A_\tau,\tau,o) \]

积分到 \(\tau=1\) 得到的 \(A_1\) 就是生成的动作块。因为路径是直的,少数几步欧拉积分就足够精确——这是 Flow Matching 比 diffusion(需几十步)快的根本原因。注意每一步 \(v_\theta\) 的计算复用缓存的 prefix(理论二),只重算 suffix。

Step 5:π₀ 为何用 Beta 分布采样时间 \(\tau\) 标准 Flow Matching 用 \(\tau\sim\text{Uniform}[0,1]\)。π₀ 改用一个偏向 \(\tau\to 0\)(噪声端)的 Beta 分布 \(p(\tau)\)。数学动机:

  • \(\tau\) 接近 1(数据端)时,\(A_\tau\) 已接近真实动作,速度场容易学(变化小);在 \(\tau\) 接近 0(噪声端)时,\(A_\tau\) 接近纯噪声,要从噪声"认出"该往哪个动作流,这一段最难学、对最终采样质量影响最大(采样从 \(\tau=0\) 起步,起步错则全程错)。
  • 因此 π₀ 用 Beta 分布**在噪声端多采样**(给难的时间段更多训练权重),提升低 \(\tau\) 区域速度场的精度,从而改善采样质量。这是"按难度重加权时间"的思想。

理论-工程桥接:Flow Matching 动作头在 π₀ 代码里就是 action expert 的前向——输入是 (A_tau, tau_embedding, prefix_kv_cache),输出是预测速度 v_pred,损失是 F.mse_loss(v_pred, A_1 - A_0)。推理是一个 10 步的 for 循环做欧拉积分。一个常见复现错误是把时间 \(\tau\) 的方向搞反(有的实现 \(\tau=0\) 是数据、\(\tau=1\) 是噪声,与上文相反),导致采样从数据端起步、积分到噪声——必须与训练时的路径定义严格一致。记住:训练定义的路径方向 = 推理积分的方向

对比性思维(π₀ vs RT-2 的全面对照)

维度 RT-2(离散 AR) π₀(连续 FM + 双专家)
动作表示 256-bin 离散 token 连续向量(无量化)
动作生成 自回归逐 token(串行) Flow Matching 整块并行去噪
精度上限 受量化 \(\sim 1/256\) 限制 无量化上限(连续)
推理速度 慢(串行几百 token) 快(10 步并行,50 Hz)
与 VLM 关系 动作寄生在 VLM 词表 action expert 独立权重 + 共享注意力
多峰性 softmax 多峰(但受 bin 分辨率限制) FM 天然连续多峰
注意力 因果(自回归) prefix/suffix 双向 + 单向条件

这张表是理解 G3→G5 跃迁的总纲:π₀ 在**动作表示、生成方式、注意力结构**三处全面改写了 RT-2,换来精度与速度的双重提升,代价是 action expert 的额外参数和 Flow Matching 的实现复杂度。

一个最小代码骨架:Flow Matching 动作头的训练与采样

理论教学中代码仅用于**验证概念**。下面把 FM 动作头的"回归差向量 + 欧拉积分"具象化:

# 概念验证:Flow Matching 动作头的训练目标与采样(非可运行实现)
# 目的——看清训练是回归 (A1-A0), 采样是欧拉积分, 两者方向一致
import torch

H, d_a = 50, 7               # 动作块: 50 步 x 7 自由度
B = 4                        # batch

# ---- 训练: 一步回归差向量 ----
A1 = torch.randn(B, H, d_a)              # 真实动作块 (流的终点, tau=1)
A0 = torch.randn(B, H, d_a)              # 噪声       (流的起点, tau=0)
tau = torch.rand(B, 1, 1)               # 标准用 Uniform; π₀ 用偏向 0 的 Beta
A_tau = (1 - tau) * A0 + tau * A1        # 直线插值路径
target = A1 - A0                         # 目标速度 = 常向量 (直线路径!)
# v_theta(A_tau, tau, o): action expert 前向, attend 缓存的 prefix
v_pred = torch.randn(B, H, d_a)          # 占位: 真实实现是 action_expert(...)
loss = ((v_pred - target) ** 2).mean()   # CFM 回归损失, 无需模拟 ODE
# 关键结论1: 目标是已知常向量 A1-A0, 训练 = 简单回归, 稳定

# ---- 采样: 从噪声欧拉积分到 tau=1 ----
A = torch.randn(1, H, d_a)               # 从纯噪声起步 (tau=0)
K = 10                                    # 积分步数 (FM 路径直, 10 步足够)
for k in range(K):
    t = torch.tensor([[k / K]])          # 当前时间
    v = torch.randn(1, H, d_a)           # 占位: v_theta(A, t, prefix_cache)
    A = A + (1.0 / K) * v                # 欧拉步: A += dtau * v
# 积分到 tau=1, A 即生成的动作块
# 关键结论2: 推理方向(噪声->数据)必须与训练路径方向一致, 否则全错
# 关键结论3: 每步 v_theta 复用缓存 prefix, 只重算 suffix -> 50Hz 的来源

这段代码的价值是让你看清 Flow Matching 的"训练-推理对偶":训练时我们**知道终点 \(A_1\),直接回归差向量 \(A_1-A_0\)(监督信号现成);推理时**不知道终点,只能从噪声 \(A_0\) 沿学到的速度场一步步积分逼近。两者的"方向"必须严格一致——这是最易错的一点。对比 RT-2 的串行 token 生成,FM 的 for 循环只跑 10 步且每步处理整块动作,这就是速度优势的代码级体现。

⚠️ 常见陷阱

💡 概念误区:以为双专家是"两个独立的 Transformer" - 新手想法:"VLM expert 和 action expert 是两个网络,先用 VLM 编码,再把结果喂给 action 网络。" - 现象/后果:基于这个误解去实现,会把跨模态融合做成"VLM 输出 → 喂给独立动作网络"的单向串联,丢掉了"动作 token 在每一层 attend 视觉"的深层融合,性能大降。 - 根本原因:没理解"双专家共享同一个注意力"——两个专家的 token 在**同一个序列、同一个注意力矩阵**里交互,只是 FFN 和投影权重分流。它是"一个 Transformer 里两套 FFN",不是"两个 Transformer"。 - 正确做法:实现为单个 Transformer,每层内 prefix/suffix 用各自的 \(W_{Q/K/V}\) 和 FFN,但 Q/K/V 拼接后共享注意力计算。验证:检查动作 token 能否在中间层 attend 到图像 token(应该能)。

💡 概念误区:把 Flow Matching 的时间 \(\tau\) 和动作的物理时间步混为一谈 - 新手想法:"动作块有 50 个时间步,Flow Matching 的 \(\tau\) 是不是就是这 50 步的索引?" - 现象/后果:混淆后会把 \(\tau\) 错当成动作序列维度,导致维度错乱、损失不收敛,或把去噪迭代和动作时序搞混。 - 根本原因:两个"时间"是完全正交的概念。动作物理时间步 \(h\in\{1,\dots,H\}\) 是动作块的序列维度(机器人未来 50 个控制时刻);Flow Matching 时间 \(\tau\in[0,1]\) 是去噪/生成的"虚拟流时间"(从噪声到数据的进度)。整个 \(H\times d_a\) 动作块作为一个整体,沿 \(\tau\) 从噪声流到数据。 - 正确做法:牢记 \(\tau\) 是标量(每次采样一个),作用于整块动作;\(h\) 是块内维度。\(A_\tau\) 的形状始终是 \([H,d_a]\)\(\tau\) 只是个标注"流到哪了"的标量条件。

💡 概念误区:以为 prefix 缓存只是工程优化、与正确性无关 - 新手想法:"prefix KV cache 只是为了快,不缓存(每步重算 VLM)结果应该一样。" - 现象/后果:这个想法本身在"prefix 不 attend suffix"成立时是对的;但若误改掩码让 prefix 能看 suffix,则 prefix 表征会随含噪动作 \(A_\tau\) 变化,此时缓存就**错了**(缓存的是 \(\tau\) 某一步的 prefix,后续步复用会引入错误),且每步重算结果也会不一致。 - 根本原因:缓存的正确性**依赖于** prefix-suffix 单向掩码(prefix 不 attend suffix)这个数学前提。前提破坏,缓存与重算都会出问题。 - 正确做法:确保掩码满足"prefix 不 attend suffix",则 prefix 表征与 \(\tau\) 无关,缓存与逐步重算严格等价,缓存是安全的加速。把缓存的合法性当作掩码设计的一个**约束**来检查,而非事后优化。

练习

[练习 8.5.4-1 · 推导] 完整推导 Flow Matching 直线路径的目标速度。给定 \(A_\tau=(1-\tau)A_0+\tau A_1\),(a) 求 \(\frac{\mathrm dA_\tau}{\mathrm d\tau}\) 验证它等于 \(A_1-A_0\) 且与 \(\tau\) 无关;(b) 若改用非直线路径 \(A_\tau=\cos(\frac{\pi}{2}\tau)A_0+\sin(\frac{\pi}{2}\tau)A_1\)(diffusion 常用的三角路径),重新求目标速度,并说明它为什么**依赖** \(\tau\);(c) 论证为什么"速度与 \(\tau\) 无关"使直线路径只需少数欧拉步。在草稿纸上完成全部求导。

[练习 8.5.4-2 · 推导] 写出双专家在第 \(\ell\) 层的完整前向(给定 \(H^{\text{pre}}_\ell, H^{\text{suf}}_\ell\),写出注意力和 FFN 的全部公式,标明哪些权重是 VLM expert 的、哪些是 action expert 的)。然后施加 prefix-suffix 掩码(prefix 双向、suffix 双向、suffix→prefix 单向),写出掩码矩阵的分块结构,并证明在此掩码下 \(H^{\text{pre}}_{\ell+1}\) 不依赖 \(H^{\text{suf}}_\ell\)。这道题综合了本节理论一、二。

[练习 8.5.4-3 · 开放思考] π₀ 用偏向噪声端(\(\tau\to 0\))的 Beta 分布采样时间,理由是"噪声端最难学、对采样质量影响最大"。请论证:(a) 为什么采样误差在 \(\tau\to 0\) 处会沿后续积分**累积放大**?(提示:欧拉积分的误差传播。)(b) 如果改成偏向数据端(\(\tau\to 1\))采样会怎样?(c) 这个"按难度/重要性重加权时间"的思想,与 diffusion 模型里的 noise schedule / loss weighting 有什么联系?


§8.5.5 ACT 与动作分块:复合误差 \(O(T^2\varepsilon)\to O(T^2\varepsilon/k)\)

动机:为什么模仿学习的误差会"滚雪球"

前面四节讲的是"骨干 + 动作头"的架构。现在转入动作生成线,从一个被反复验证、却常被误解的现象出发:ACT(Action Chunking with Transformers, Zhao et al. 2023)的消融实验显示,去掉动作分块(chunk size \(k=1\))时成功率仅 1%,而 \(k=100\) 时高达 80%+。同一个网络、同样的数据,仅仅"一次预测多步动作"这一个改动,成功率天差地别。这背后是模仿学习最核心的数学——复合误差(compounding error)

理解这个数学不是锦上添花,而是**生死攸关**:§8.5 导航的"场景 3"已经警告——若不懂这个数学,你会把 ACT 的成功错误归因于 CVAE,在自己项目里丢掉真正关键的动作分块。这一节我们要做本专题第一个完整的定量推导:为什么 BC 的误差随时域 \(T\) 平方增长(\(O(T^2\varepsilon)\)),以及动作分块为什么能把它降到 \(O(T^2\varepsilon/k)\)

如果不这样做会怎样(反面)

为什么不能简单地"每步预测一个动作"(标准 BC)?我们审视标准逐步 BC 的困难。

朴素方案 表面可行 深层数学困难
标准逐步 BC:每步预测单个动作 \(a_t=\pi(o_t)\) 训练简单,监督信号充分 分布漂移——测试时策略访问的状态分布偏离训练分布,单步小误差沿时间累积成 \(O(T^2\varepsilon)\) 的灾难
加更多数据降低单步误差 \(\varepsilon\) 直觉合理 治标不治本——误差仍是 \(O(T^2)\) 增长,长时域任务(\(T\) 大)需要的数据量随 \(T^2\) 爆炸,不可持续
用 RL 而非 BC(避开分布漂移) 理论上能修正 真机 RL 样本效率极低、危险、reward 难设计;VLA 的主流仍是 BC + 大规模数据

第一行的"分布漂移"是模仿学习的**阿喀琉斯之踵**,必须讲透其机制。训练时,策略只见过专家轨迹访问的状态——专家是"高手",从不进入危险/陌生状态。测试时,策略自己开车,一旦某步出了个小误差(如夹爪偏了 1cm),就进入了一个专家从未访问、训练时没见过的状态。在这个陌生状态上策略的误差更大,于是偏得更多,进入更陌生的状态……误差像滚雪球一样越滚越大。这就是为什么"单步误差很小"不等于"整条轨迹成功"。

本质洞察:模仿学习的根本困难不是"单步预测不准",而是"误差会沿时间自我放大"——这是一个动力系统的稳定性问题,不是一个静态回归的精度问题。\(T^2\) 这个因子里,一个 \(T\) 来自"轨迹有 \(T\) 步、每步都可能出错",另一个 \(T\) 来自"早期的错误会污染后续所有步"。理解了这一点,你才明白为什么 VLA 的所有努力(大规模预训练、动作分块、高质量数据)本质上都在对抗这个自我放大。

历史:从 DAgger 到动作分块
  • 问题的提出:Ross et al. (2011) 在 DAgger 论文里首次严格分析了 BC 的复合误差,证明了 \(O(T^2\varepsilon)\) 界,并提出 DAgger(让专家在策略访问的状态上标注)把它降到 \(O(T\varepsilon)\)。但 DAgger 需要在线查询专家,真机上代价高。
  • ACT 的另辟蹊径(Zhao et al. 2023):ACT 不用 DAgger,而是用**动作分块(action chunking)——一次预测未来 \(k\) 步动作并开环执行,把决策频率降低 \(k\) 倍。配合 **temporal ensembling(时序集成) 平滑相邻 chunk 的重叠预测。它还用 CVAE 建模人类演示的多峰性。ACT 的惊人结果:仅 10 分钟演示就能学会精细双臂操纵,成功率 80%+。
  • 关键认知:ACT 论文的消融清楚显示,真正的关键是动作分块\(k=1\) 时 1%,\(k\) 增大时骤升),CVAE 是次要的(提升几个百分点)。这与直觉相反——人们容易被 CVAE 这个"高级"组件吸引,却忽视"一次预测多步"这个朴素改动才是命脉。
理论 (一):BC 复合误差 \(O(T^2\varepsilon)\) 的完整推导

现在做完整推导。设专家策略 \(\pi^\star\),学到的策略 \(\hat\pi\)。定义单步误差为:在专家访问的状态分布 \(d_{\pi^\star}\) 下,学到的策略与专家不一致的概率,

\[ \varepsilon = \mathbb E_{s\sim d_{\pi^\star}}\big[\,\mathbb 1[\hat\pi(s)\ne\pi^\star(s)]\,\big] \]

(用 0-1 误差便于讲清机制,连续动作可换成期望损失,结论同型。)我们要 bound 的是**性能差距** \(J(\pi^\star)-J(\hat\pi)\),其中 \(J\)\(T\) 步的期望累积回报(或成功率),假设每步回报有界 \(\in[0,1]\)

Step 1:一个"首次犯错"的耦合论证。 考虑同时运行 \(\pi^\star\)\(\hat\pi\),从同一初始状态出发,用同样的随机性。设 \(t\)\(\hat\pi\) 第一次**与 \(\pi^\star\) 动作不同的时刻。在 \(t\) 之前两者轨迹完全重合(因为动作都相同)。关键观察:**在 \(t\) 之前,\(\hat\pi\) 访问的状态分布恰好是 \(d_{\pi^\star}\)(因为还没偏离)。

Step 2:界定"在第 \(t\) 步首次犯错"的概率。 因为前 \(t-1\) 步都没错,且这些步上状态分布是 \(d_{\pi^\star}\),每步犯错概率 \(\le\varepsilon\)。所以"在第 \(t\) 步首次犯错"的概率 \(\le\varepsilon\)(更精确地,"前 \(t\) 步内至少错一次"的概率 \(\le t\varepsilon\),由 union bound)。

Step 3:界定一次犯错的后果。 一旦在第 \(t\) 步犯错,\(\hat\pi\) 进入了一个专家分布外的状态,此后我们**悲观地假设最坏情况**——剩余的 \(T-t\) 步全部失败(回报损失最多 \(T-t\le T\))。这是上界推导的标准悲观假设。

Step 4:求和。 性能差距等于"犯错的概率 × 犯错的后果",对所有可能的首次犯错时刻 \(t\) 求和:

\[ J(\pi^\star)-J(\hat\pi) \;\le\; \sum_{t=1}^{T}\underbrace{\Pr[\text{第 } t \text{ 步首次犯错}]}_{\le\,\varepsilon}\cdot\underbrace{(\text{后续损失})}_{\le\,T} \;\le\; \sum_{t=1}^{T}\varepsilon\cdot T \]

但这样直接求和给出 \(T^2\varepsilon\) 偏松。更标准的 Ross-Bagnell 论证是:在第 \(t\) 步犯错的"边际"概率约为 \(\varepsilon\),其后果是损失剩余 \((T-t)\) 步,求和:

\[ J(\pi^\star)-J(\hat\pi) \;\lesssim\; \sum_{t=1}^{T}\varepsilon\,(T-t) \;=\; \varepsilon\sum_{t=1}^{T}(T-t)\;=\;\varepsilon\cdot\frac{T(T-1)}{2}\;=\;O(T^2\varepsilon) \]

这就是著名的 \(O(T^2\varepsilon)\) 复合误差界。 两个 \(T\) 的来源现在一清二楚:一个来自"对 \(t\) 求和"(\(T\) 个可能的犯错时刻),一个来自"每次犯错损失 \(O(T)\) 步"(犯错后果与剩余时域成正比)。

多视角理解(\(T^2\) 的两种解读): - 解读 1(求和 × 后果):如上,\(T\)(犯错时机)× \(T\)(每次后果),二者相乘得 \(T^2\)。 - 解读 2(分布漂移的距离累积):另一种等价视角是,\(\hat\pi\) 访问的状态分布 \(d_{\hat\pi}\) 与训练分布 \(d_{\pi^\star}\) 的总变差距离随步数线性增长 \(\|d_{\hat\pi}^t-d_{\pi^\star}^t\|_{TV}\le t\varepsilon\),再对 \(T\) 步求和得 \(\sum_t t\varepsilon=O(T^2\varepsilon)\)。这个视角直接刻画了"分布越漂越远"。

理论 (二):动作分块如何降到 \(O(T^2\varepsilon/k)\)

现在引入动作分块,看它如何改善这个界。动作分块:策略不再每步决策,而是每 \(k\) 步预测一个长度 \(k\) 的动作块 \((a_t,\dots,a_{t+k-1})\) 并**开环执行**(执行这 \(k\) 步时不重新观测、不重新决策)。于是整条 \(T\) 步轨迹的**决策次数**从 \(T\) 降到 \(T/k\)

把上面的推导重做一遍,但"决策步"现在是 chunk 而非单步。设每个 chunk 的预测误差仍约为 \(\varepsilon\)(这是一个理想化假设,下面会修正)。决策次数变成 \(T' = T/k\),重复理论一的求和(注意每次"犯错"后损失的仍是剩余的**物理时间步**,量级 \(O(T)\)):

\[ J(\pi^\star)-J(\hat\pi)\;\lesssim\;\sum_{i=1}^{T/k}\varepsilon\cdot(\text{剩余物理步})\;\approx\;\varepsilon\cdot\frac{(T/k)\cdot T}{2}\;=\;O\!\Big(\frac{T^2\varepsilon}{k}\Big) \]

这就是 \(O(T^2\varepsilon/k)\)——动作分块把复合误差降低了 \(k\) 倍。 直觉非常清晰:

本质洞察:动作分块降低复合误差的机制是**减少"犯错的机会次数"。复合误差的一个 \(T\) 来自"有多少次决策机会",每次决策都是一次可能引入误差并触发雪球的机会。把决策频率降低 \(k\) 倍,犯错机会就少 \(k\) 倍,雪球被触发的次数少 \(k\) 倍,于是误差降 \(k\) 倍。更深一层:开环执行 \(k\) 步意味着这 \(k\) 步内策略**不会因为中间状态的微小漂移而改变决策——它"承诺"了一个短期计划,从而对短时漂移免疫。这正是人类做精细操作时的策略:不是每毫秒都重新决策,而是"伸手—抓握"作为一个动作单元一气呵成。

但这里有一个**关键的权衡**,必须讲清,否则会误以为"\(k\) 越大越好":

  • \(k\) 增大降低复合误差\(O(T^2\varepsilon/k)\) 分母变大),但
  • \(k\) 增大降低对环境变化的反应性——开环执行 \(k\) 步期间,若环境发生意外(物体滑动、外界扰动),策略看不到、无法修正。\(k\) 太大,策略变成"闭眼执行长动作",对动态环境失效。
  • 此外,单个 chunk 的预测误差本身可能随 \(k\) 增大而上升(预测越远的未来越不准),所以上面"chunk 误差仍是 \(\varepsilon\)"是理想化。

所以存在一个**最优 chunk size \(k^\star\)**:平衡"复合误差下降"与"反应性下降 + 长程预测变难"。ACT 经验上 \(k\approx 50\)\(100\) 对其任务最优。

对比性思维(\(k=1\) vs 大 \(k\) 的对照)

维度 \(k=1\)(标准 BC) \(k\)(动作分块)
复合误差 \(O(T^2\varepsilon)\) \(O(T^2\varepsilon/k)\),小 \(k\)
决策频率 每步 \(k\)
对环境变化反应性 高(每步可修正) 低(开环 \(k\) 步)
单次预测难度 易(只预测 1 步) 难(预测 \(k\) 步)
适合场景 高动态、强反馈任务 准静态、需精细连贯动作的操纵

ACT 选大 \(k\),是因为它面向**桌面精细操纵**(环境准静态,反应性需求低,但动作连贯性要求高)。若任务是高动态(如接飞球),则需小 \(k\) 保反应性。这解释了为什么 chunk size 是**任务相关**的超参,没有万能值。

理论 (三):temporal ensembling 与 CVAE 的角色

ACT 还有两个组件,简要给出其数学角色(它们是配角,不是主角):

Temporal ensembling(时序集成):相邻 chunk 有重叠——在物理时刻 \(t\),可能有多个先前 chunk 都预测了 \(a_t\)。ACT 对这些重叠预测做**指数加权平均**:

\[ \hat a_t = \frac{\sum_{j} w_j\, a_t^{(j)}}{\sum_j w_j},\qquad w_j = \exp(-m\cdot j) \]

其中 \(a_t^{(j)}\) 是第 \(j\) 个(越老的 \(j\) 越大)chunk 对 \(t\) 的预测,\(m\) 控制衰减。它的作用是**平滑 chunk 边界的不连续**——若不集成,每隔 \(k\) 步换一个新 chunk 会在边界处产生动作跳变。集成让动作连续,避免抖动。

CVAE(条件变分自编码器):人类演示是**多峰**的(同一状态下,不同次演示可能选不同合理动作,如绕左或绕右避障)。若用单峰回归(MSE)拟合多峰数据,会学到各峰的**平均**——而平均动作往往是错的("中间穿过障碍物")。CVAE 引入一个潜变量 \(z\) 来"解释"演示者的风格选择,使每个 \(z\) 对应一个单峰,从而建模多峰分布。这是 §8.5.6 会展开的"动作多峰性"主题的一个具体方案。

理论-工程桥接:动作分块在代码里就是动作头的输出维度从 \(d_a\) 变成 \(k\times d_a\)(一次输出 \(k\) 步),执行时维护一个 buffer 缓存当前 chunk,每步从 buffer 取一个动作,buffer 空了才重新前向。temporal ensembling 是一个对重叠预测做指数加权的滑动缓冲。一个常见错误是"预测了 \(k\) 步却每步都重新预测"——这等于 \(k=1\),丢掉了复合误差的全部收益(这正是导航场景 3 警告的陷阱)。记住:分块的收益来自开环执行,不是来自预测多步本身

一个最小代码骨架:动作分块的开环执行

理论教学中代码仅用于**验证概念**。下面把"预测 \(k\) 步、开环执行、buffer 空了才重新决策"具象化:

# 概念验证:动作分块的开环执行逻辑(非可运行实现)
# 目的——看清"决策频率降 k 倍"如何由"buffer 空了才重新前向"实现
import torch
from collections import deque

k, d_a = 50, 7               # chunk size=50, 动作 7 自由度
T = 500                      # 总物理步数
policy_calls = 0             # 统计决策(前向)次数
buffer = deque()

for t in range(T):
    if len(buffer) == 0:                 # buffer 空 -> 重新决策
        obs = torch.randn(1, 224, 224, 3)        # 占位: 当前观测
        chunk = torch.randn(k, d_a)              # 占位: policy(obs) 预测 k 步
        buffer.extend(chunk)                     # 缓存整个 chunk
        policy_calls += 1
    a_t = buffer.popleft()               # 开环: 从 buffer 取一步, 不重新观测

assert policy_calls == T // k            # 决策次数 = T/k = 10, 而非 T=500
# 关键结论1: 决策次数从 T 降到 T/k -> 犯错机会少 k 倍 -> 复合误差降 k 倍
# 关键结论2: 收益来自"开环执行"(buffer 非空时不前向), 不是"预测多步"本身
# 反例: 若把 if len(buffer)==0 改成每步都重新 policy(obs), 则退化为 k=1

这段代码的价值是让你看清动作分块的命脉在 if len(buffer)==0 这一行——只有 buffer 空了才重新前向,这才把决策频率降到 \(T/k\)。如果每步都重新预测(哪怕预测 \(k\) 步只用第一步),决策次数仍是 \(T\),复合误差仍是 \(O(T^2\varepsilon)\),分块的收益荡然无存。这就是为什么"预测多步"和"开环执行多步"是两回事——前者是表象,后者才是降低复合误差的本质。

⚠️ 常见陷阱

💡 概念误区:把 ACT 的成功归因于 CVAE 而非动作分块 - 新手想法:"ACT 用了 CVAE 这个高级的多峰建模,所以效果好。" - 现象/后果:在自己的项目里精心实现 CVAE,却用 \(k=1\) 逐步决策,结果成功率惨不忍睹(消融显示 \(k=1\) 时仅 1%),还百思不得其解。 - 根本原因:被"CVAE"这个看起来更高级的组件吸引,忽视了 ACT 消融揭示的真相——动作分块带来从 1% 到 80% 的飞跃,CVAE 只带来几个点的提升。复合误差才是主要矛盾,多峰性是次要矛盾。 - 正确做法:把动作分块当作 ACT 的**第一优先**实现项,CVAE 是锦上添花。任何模仿学习项目都应先确保有足够的 chunk size,再考虑多峰建模。

💡 概念误区:认为 chunk size \(k\) 越大越好 - 新手想法:"既然复合误差是 \(O(T^2\varepsilon/k)\),那 \(k\) 取到 \(T\)(一次预测整条轨迹)误差最小。" - 现象/后果:\(k\) 取得过大,策略开环执行很久不看环境,一旦物体位置与预测有偏差或有外界扰动,策略完全无法修正,在动态/有干扰的场景下崩溃。 - 根本原因:只看到 \(O(T^2\varepsilon/k)\) 中"\(k\) 增大误差降"的一面,忽视了被这个简化公式掩盖的两个代价——反应性下降(开环盲执行)和单 chunk 预测随 \(k\) 变难(\(\varepsilon\) 本身可能随 \(k\) 上升)。 - 正确做法:把 \(k\) 当作需要调优的超参,在"复合误差 vs 反应性"之间权衡。准静态精细操纵取大 \(k\)(50–100),高动态任务取小 \(k\)。配合 temporal ensembling 平滑边界后,中等 \(k\) 往往是稳健选择。

🧠 思维陷阱:以为加大数据量就能消除复合误差 - 新手想法:"复合误差是因为单步误差 \(\varepsilon\),那我多收集数据把 \(\varepsilon\) 降到很小,\(O(T^2\varepsilon)\) 不就没了?" - 现象/后果:投入大量资源收集数据,单步精度确实提升,但长时域任务(大 \(T\))的成功率提升有限,数据需求随 \(T^2\) 爆炸,性价比极低。 - 根本原因:没看清 \(O(T^2\varepsilon)\)\(T^2\) 这个**结构性因子**——它来自分布漂移的自我放大,是 BC 范式的内在缺陷,不会因为 \(\varepsilon\) 变小而消失(只是被等比例缩小)。对长时域任务,\(T^2\) 的放大远超数据带来的 \(\varepsilon\) 下降。 - 正确做法:同时从两个方向对抗——既降 \(\varepsilon\)(大规模预训练、好的表征),又降 \(T^2\) 的影响(动作分块降到 \(/k\)、或用 DAgger/RL 类方法把界改善到 \(O(T\varepsilon)\))。VLA 的成功正是"大规模预训练降 \(\varepsilon\) + 动作分块降 \(T\) 因子"的组合拳。

练习

[练习 8.5.5-1 · 推导] 完整重做 BC 复合误差推导。(a) 用"首次犯错"耦合论证,写出 \(J(\pi^\star)-J(\hat\pi)\lesssim\sum_{t=1}^T\varepsilon(T-t)\) 的每一步,并算出求和等于 \(\frac{T(T-1)}{2}\varepsilon\);(b) 然后假设动作分块 \(k\),决策次数变 \(T/k\),重新求和得到 \(O(T^2\varepsilon/k)\);(c) 严格说明你在 (b) 中对"每个 chunk 误差仍为 \(\varepsilon\)"做了什么理想化假设,以及现实中这个假设为何会随 \(k\) 增大而失效。在草稿纸上完成全部求和。

[练习 8.5.5-2 · 开放思考] DAgger 把复合误差从 \(O(T^2\varepsilon)\) 改善到 \(O(T\varepsilon)\)(线性而非平方)。ACT 的动作分块把它改善到 \(O(T^2\varepsilon/k)\)(仍是平方,但系数小 \(k\) 倍)。请论证:(a) 为什么 DAgger 能去掉一个 \(T\) 因子(提示:它在策略访问的状态上重新标注,消除了分布漂移);(b) 动作分块为什么只能改善系数、去不掉 \(T^2\) 的阶?(c) 能否把动作分块和 DAgger 结合得到 \(O(T\varepsilon/k)\)?讨论可行性与代价。

[练习 8.5.5-3 · 概念辨析] temporal ensembling 对重叠预测做指数加权 \(w_j=\exp(-mj)\)。(a) 当 \(m\to\infty\) 时集成退化为什么(只用最新还是最老的预测)?(b) 当 \(m\to 0\) 时退化为什么(均匀平均)?(c) 从"新预测基于更新的观测、老预测已开环较久"的角度,论证为什么通常希望给**较新**的预测更大权重,以及这与动作分块"开环执行"的张力(开环要求承诺旧计划,集成倾向采纳新预测)如何调和。


§8.5.6 四种动作生成范式对比:AR / Diffusion / Flow Matching / CVAE ◉

动机:动作头是 VLA 的"输出端瓶颈"

前面我们已经零散见过四种动作头——RT-2 的自回归离散 token(§8.5.2)、Octo 的 diffusion(§8.5.3)、π₀ 的 Flow Matching(§8.5.4)、ACT 的 CVAE(§8.5.5)。现在到了把它们**系统对比**的时候。这是 VLA 选型最高频的实际问题:给定一个机器人任务,该用哪种动作头?

为什么这个选择如此关键?因为 §8.5.1 的潜变量分解 \(\pi(a\mid z)q(z\mid o)\) 告诉我们,骨干 \(q_\theta\)(VLM)大同小异(都用预训练 VLM),真正区分 VLA 性能上限的是动作头 \(\pi_\theta(a\mid z)\)。动作头决定了三件生死攸关的事:能否表达多峰动作分布(避免学到错误的"平均动作")、精度上限(量化噪声)、推理速度(能否高频控制)。选错动作头,再好的骨干也救不回来(§8.5 场景 2 已警告)。

这一节我们用统一的"概率建模"语言把四种范式摆在同一张桌子上比较,建立选型的数学依据。

如果不这样做会怎样(反面)——为什么单峰回归不够

四种范式都比"朴素单峰回归(MSE 直接预测动作)"复杂。为什么不能用最简单的 MSE?这要从**动作分布的多峰性**说起。

考虑一个具体场景:桌上有个障碍物,机器人要从 A 点移动到 B 点。**绕左**和**绕右**都是合理动作,演示数据里两种都有。现在用 MSE 回归训练 \(\pi(o)=a\)

\[ \hat a = \arg\min_a \mathbb E_{a^\star\sim p(\cdot\mid o)}[\|a - a^\star\|^2] = \mathbb E[a^\star\mid o] \]

MSE 的最优解是**条件均值** \(\mathbb E[a^\star\mid o]\)。但"绕左"和"绕右"的均值是"直直撞上障碍物"!这就是单峰回归的致命问题:

本质洞察:机器人动作分布本质上是**多峰的**——同一观测下常有多个合理动作(绕左/绕右、先抓 A/先抓 B)。单峰回归(MSE/高斯)会坍缩到各峰的均值,而**均值往往落在所有峰之间的"无人区"(撞障碍物),是最糟的动作。所以 VLA 动作头的首要任务不是"预测准",而是"**能表达多峰"。四种范式(AR/Diffusion/FM/CVAE)的共同点,就是它们都是**能表达多峰分布的生成模型**,而非单峰回归器。这是理解四范式的总纲。

朴素方案 表面可行 深层数学困难
MSE 单峰回归 \(\hat a=\mathbb E[a\mid o]\) 训练最简单 坍缩到多峰均值,均值落在"无人区"(撞障碍物),多峰任务必败
高斯策略 \(\mathcal N(\mu(o),\Sigma(o))\) 能表达不确定性 单峰高斯,无法表达"绕左 OR 绕右"这种离散多峰,只能表达单峰附近的连续抖动
高斯混合(GMM) \(\sum_k\pi_k\mathcal N(\mu_k,\Sigma_k)\) 能表达多峰 峰数 \(K\) 需预设,高维动作空间需要的 \(K\) 爆炸,且训练不稳定(mode collapse)

第三行的 GMM 是"显式多峰"的朴素尝试,它的困难(峰数难定、高维爆炸)正是为什么需要 AR/Diffusion/FM/CVAE 这些**隐式或可扩展的多峰建模**。

历史:四范式的源流
  • 自回归离散(AR, RT-2 2023):源自 LLM 的 next-token prediction。把动作量化成 token,用 softmax 逐 token 生成。softmax 是一个 \(K\)-way 分类,天然能表达**离散多峰**(softmax 可以有多个高概率 bin)。
  • CVAE(ACT 2023):源自变分自编码器。用潜变量 \(z\) 解释多峰,每个 \(z\) 对应一个单峰,边际即多峰。
  • Diffusion(Diffusion Policy 2023):源自扩散生成模型。通过多步去噪从噪声逐渐"雕刻"出动作分布,能表达任意复杂多峰。
  • Flow Matching(π₀ 2024):源自连续归一化流的简化训练(§8.4)。与 diffusion 同属"用 ODE/SDE 把噪声流到数据",但路径更直、步数更少。

这四者的演进逻辑:AR 借力 LLM 但受量化限制 → CVAE 用潜变量建模多峰但表达力受 VAE 后验近似限制 → Diffusion 表达力最强但慢 → Flow Matching 保留 diffusion 表达力同时提速。

理论:四范式的统一概率建模对比

现在用统一的"如何建模 \(\pi_\theta(a\mid z)\)"语言逐一刻画。设条件 \(z=q_\theta(o)\)(VLM 输出),目标是建模动作(块)\(a\) 的条件分布。

(1) 自回归离散(Autoregressive, AR):把动作离散化为 token 序列 \((b_1,\dots,b_M)\),用链式法则分解(§8.5.2 已给):

\[ p_\theta(a\mid z)=\prod_{m=1}^M \text{softmax}\big(f_\theta(b_{<m},z)\big)_{b_m} \]
  • 多峰表达:每个 token 的 softmax 可有多个峰(离散多峰)。整个序列的联合分布可表达复杂多峰。
  • 推理:串行逐 token 采样,\(M\) 次前向(慢)。
  • 精度上限:受量化 bin 数 \(K\) 限制,失真 \(\sim 1/K\)(§8.5.7 严格化)。
  • 与 VLM 契合度最高——动作 token 和文本 token 同构,直接复用 VLM 全部机制和先验。

(2) CVAE(Conditional VAE):引入潜变量 \(z_{\text{style}}\) 解释多峰,建模:

\[ p_\theta(a\mid z)=\int p_\theta(a\mid z_{\text{style}}, z)\,p(z_{\text{style}})\,\mathrm dz_{\text{style}} \]

训练用 ELBO(证据下界),含一个编码器 \(q_\phi(z_{\text{style}}\mid a, z)\) 和解码器。

  • 多峰表达:通过 \(z_{\text{style}}\) 的不同取值对应不同峰。但受 VAE 后验高斯近似限制,复杂多峰表达力弱于 diffusion。
  • 推理:采一个 \(z_{\text{style}}\),解码一次(快,单步)。
  • 精度上限:连续动作,无量化上限。
  • 与 VLM 契合度:中——需额外的 VAE 编码器/解码器,与 VLM 的 token 范式不直接兼容。

(3) Diffusion(扩散):通过反向去噪过程建模。前向加噪 \(a_0\to a_T\)(数据→噪声),学反向去噪 \(a_T\to a_0\)。建模分数(score)或噪声:

\[ \mathcal L_{\text{diff}}=\mathbb E_{t,a_0,\epsilon}\big[\|\epsilon_\theta(a_t, t, z)-\epsilon\|^2\big],\quad a_t=\sqrt{\bar\alpha_t}a_0+\sqrt{1-\bar\alpha_t}\epsilon \]
  • 多峰表达最强——多步去噪能雕刻任意复杂分布,无近似瓶颈。
  • 推理:多步去噪,几十步迭代(慢,但比 AR 的逐 token 可并行处理整块)。
  • 精度上限:连续,无量化上限。
  • 与 VLM 契合度:中——需额外 diffusion 头,且去噪需对整块动作双向注意力(与 VLM 因果注意力不完全兼容,§8.5.4 已述)。

(4) Flow Matching(流匹配):§8.5.4 已完整推导。回归直线路径速度 \(A_1-A_0\)

\[ \mathcal L_{\text{FM}}=\mathbb E_{\tau,A_0,A_1}\big[\|v_\theta(A_\tau,\tau,z)-(A_1-A_0)\|^2\big] \]
  • 多峰表达:强(与 diffusion 同级,都是连续流模型)。
  • 推理:ODE 积分,少数步(约 10 步,比 diffusion 快)。
  • 精度上限:连续,无量化上限。
  • 与 VLM 契合度:中(同 diffusion,需 action expert,但 π₀ 证明可高效集成)。

把这四者并排成**选型对比表**(本节核心交付物):

范式 多峰表达力 推理速度 精度上限 与 VLM 契合 代表 最适场景
AR 离散 中(离散多峰) 慢(串行 \(M\) 步) 受量化 \(1/K\) 最高 RT-2/OpenVLA 重视语义先验、精度要求不极致
CVAE 中(受 VAE 限) (单步) 连续无限 ACT 数据少、需实时、配合分块
Diffusion 最强 慢(几十步) 连续无限 Diffusion Policy/Octo 复杂多峰、不极端追求频率
Flow Matching 中(~10 步) 连续无限 π₀/π₀.₅ 高频连续控制、精度与速度兼顾

对比性思维(四范式的两个判别轴):四范式的差异可以投影到两个正交轴上理解。 - 轴 1(离散 vs 连续):AR 是离散(有量化上限,但与 VLM 最契合);其余三者连续(无量化上限)。这一轴决定**精度上限**和**与 VLM 的契合度**——离散换来 VLM 契合,连续换来精度。 - 轴 2(单步 vs 迭代生成):CVAE 单步(快但表达力受限);Diffusion/FM 迭代(表达力强但慢);AR 串行(最慢)。这一轴决定**推理速度**与**多峰表达力**的权衡。

在这个二维平面上:AR 在"离散 + 串行"角,CVAE 在"连续 + 单步"角,Diffusion 在"连续 + 多步"角,FM 在 Diffusion 和 CVAE 之间(连续 + 少步,试图兼得表达力与速度)。FM 之所以成为 π₀ 的选择,正因为它在这个平面上占据了"表达力够强 + 速度够快 + 精度无上限"的甜点区

理论-工程桥接:选型时把任务需求映射到上表三列。(1) 需要极高精度的力控装配?→ 排除 AR(量化上限),选 FM/Diffusion。(2) 需要 50 Hz+ 高频?→ 排除 Diffusion(几十步太慢)和 AR(串行),选 FM(少步)或 CVAE(单步)。(3) 想最大化复用 VLM 语义先验、任务偏语义(如"把红色的拿给我")?→ AR 契合度最高。(4) 数据极少(如 10 分钟演示)?→ CVAE + 动作分块(ACT 路线)。实践中 π₀ 选 FM 是因为它要同时满足"高频 + 高精度 + 多具身",这是 FM 甜点区的典型需求画像。

一个最小代码骨架:四范式的采样接口对比

理论教学中代码仅用于**验证概念**。下面用统一接口对比四范式"如何从 \(z\) 采样动作",凸显"单步 vs 迭代 vs 串行"的差异:

# 概念验证:四范式采样接口对比(非可运行实现)
# 目的——凸显推理时"前向次数"的差异 = 速度差异的根源
import torch
H, d_a = 50, 7
z = torch.randn(1, 512)          # VLM 条件 (来自 q_theta(o))

# (1) AR 离散: 串行逐 token, M = H*d_a 次前向 (最慢)
def sample_ar(z, M=H*d_a):
    tokens = []
    for m in range(M):                       # 串行! 每个 token 依赖前面
        logits = torch.randn(256)            # 占位: f(tokens, z)
        tokens.append(logits.argmax())
    return torch.tensor(tokens).float().view(H, d_a) / 256  # 反量化
# 前向次数: M = 350 (串行)

# (2) CVAE: 采一个潜码, 解码一次 (最快, 单步)
def sample_cvae(z):
    z_style = torch.randn(1, 32)             # 采样风格潜码
    a = torch.randn(H, d_a)                  # 占位: decoder(z_style, z), 1 次前向
    return a
# 前向次数: 1 (单步)

# (3) Diffusion: 多步去噪 (慢, ~几十步)
def sample_diffusion(z, steps=50):
    a = torch.randn(H, d_a)
    for t in reversed(range(steps)):         # 50 步迭代去噪
        eps = torch.randn(H, d_a)            # 占位: eps_theta(a, t, z)
        a = a - 0.02 * eps                   # 占位去噪步
    return a
# 前向次数: 50 (迭代)

# (4) Flow Matching: 少步 ODE 积分 (中, ~10 步)
def sample_fm(z, steps=10):
    a = torch.randn(H, d_a)
    for k in range(steps):                   # 10 步欧拉积分
        v = torch.randn(H, d_a)              # 占位: v_theta(a, k/steps, z)
        a = a + (1.0/steps) * v
    return a
# 前向次数: 10 (少步)

# 关键结论: 前向次数 AR(350) >> Diffusion(50) > FM(10) > CVAE(1)
# 这直接决定推理延迟 -> 能否高频控制. 但表达力次序大致相反(Diffusion/FM 最强)
# 速度与表达力的权衡, 是四范式选型的核心矛盾

这段代码的价值是把"速度差异"还原为最朴素的事实——前向次数。AR 串行 350 次,Diffusion 50 次迭代,FM 10 步,CVAE 仅 1 次。前向次数直接决定推理延迟,进而决定能否满足控制频率。而表达力的次序大致相反(Diffusion/FM 强,AR/CVAE 受限)。看清这个"速度-表达力"的反向权衡,你就抓住了四范式选型的核心矛盾——没有免费午餐,选型即权衡。

⚠️ 常见陷阱

💡 概念误区:以为可以用 MSE 单峰回归省事地建模动作 - 新手想法:"动作就是个连续向量,直接用 MLP + MSE 回归预测不就行了,何必上 diffusion 这么复杂?" - 现象/后果:在多峰任务(绕障碍、多种抓法)上,MSE 学到各峰均值,机器人径直撞向障碍物或卡在两种抓法之间动弹不得,成功率极低且失败方式诡异。 - 根本原因:忽视了动作分布的多峰性。MSE 的最优解是条件均值 \(\mathbb E[a\mid o]\),而多峰分布的均值落在"无人区",是物理上最糟的动作。单峰回归从数学上就无法表达"绕左 OR 绕右"。 - 正确做法:凡是演示数据有多峰(同状态多种合理动作)的任务,必须用能表达多峰的生成式动作头(AR/CVAE/Diffusion/FM)。只有在动作确实单峰(如简单到达单一目标)时,MSE 才勉强够用。

💡 概念误区:以为"表达力最强"的 Diffusion 永远是最优选择 - 新手想法:"Diffusion 多峰表达力最强,那所有任务都该用 Diffusion 动作头。" - 现象/后果:在需要高频控制(50 Hz)的任务上用 Diffusion,几十步去噪导致推理延迟过大,控制频率上不去,机器人动作卡顿、跟不上实时需求。 - 根本原因:只看表达力一个维度,忽视了推理速度。Diffusion 的几十步迭代在高频控制场景是致命的——表达力的优势被速度的劣势抵消。 - 正确做法:按任务的速度需求和多峰复杂度**联合选型**。高频场景优先 FM(少步)或 CVAE(单步);只有当多峰极复杂且频率要求不高时,Diffusion 的表达力优势才值得为之付出速度代价。

🧠 思维陷阱:认为四范式只是"实现细节",换哪个无所谓 - 新手想法:"动作头无非是输出层,AR、CVAE、Diffusion、FM 都能输出动作,随便选一个就行。" - 现象/后果:随意选型导致要么精度被量化卡死(错选 AR 做力控)、要么速度跟不上(错选 Diffusion 做高频)、要么多峰建模失败(错选 MSE)。任务失败后还以为是骨干或数据问题,方向全错。 - 根本原因:没认识到动作头是 \(\pi(a\mid z)\) 这一项的具体实现,而它决定了**精度上限、速度、多峰表达力**三个互相冲突的核心指标。动作头不是细节,是 VLA 性能的输出端瓶颈。 - 正确做法:把动作头选型当作 VLA 设计的**一等决策**,用本节对比表对照任务的三维需求(精度/速度/多峰复杂度)来选,而非凭习惯或"看起来高级"随意决定。

练习

[练习 8.5.6-1 · 推导] 证明 MSE 回归坍缩到条件均值。给定多峰条件分布 \(p(a\mid o)\),证明 \(\arg\min_{f}\mathbb E_{a\sim p(\cdot\mid o)}[\|f(o)-a\|^2]=\mathbb E[a\mid o]\)。然后构造一个具体的双峰例子:\(p(a\mid o)=\frac12\delta(a+1)+\frac12\delta(a-1)\)(绕左 \(a=-1\) 或绕右 \(a=+1\)),算出 MSE 最优解,说明它为什么是"最糟的动作"。在草稿纸上完成。

[练习 8.5.6-2 · 概念辨析] 对下面四个任务,从四范式中选最合适的动作头并说明理由:(a) 高速乒乓球击球(需 100+ Hz,动作较单峰);(b) 精密电子元件插装(需亚毫米精度,动作有多种合理路径);(c) "把桌上红色的东西递给我"(强语义,精度要求中等);(d) 仅有 15 分钟演示的叠衣服任务(数据极少,需实时)。把你的选择填入一张表,每个选择对应本节对比表的哪些列。

[练习 8.5.6-3 · 开放思考] FAST(§8.5.7 将详述)用 DCT + BPE 把连续动作压缩成离散 token,再用 AR 生成。这相当于试图"兼得 AR 的 VLM 契合度和连续动作的精度"。请论证:(a) 这种"频域离散化"如何缓解普通 256-bin 离散化的精度上限?(b) 它在本节的"离散 vs 连续"轴上处于什么位置(是把 AR 往连续端推了吗)?(c) 它牺牲了什么来换取这个折中(提示:考虑 DCT 变换和可变长 token 带来的复杂度)?


§8.5.7 动作 tokenization 的率-失真分析:为什么 FAST 能 800 Hz ◉

动机:离散化的精度上限究竟在哪

§8.5.6 反复提到"AR 离散化有精度上限 \(\sim 1/K\)",但一直没严格化。这一节我们用信息论的**率-失真理论(rate-distortion theory)** 把它讲透,回答三个定量问题:(1) 把连续动作量化成 \(K\) 个 bin,会引入多大失真?(2) 要达到某个失真水平,理论上至少需要多少比特?(3) 为什么 FAST(Pertsch et al. 2025)的频域离散化能在同样的 token 预算下做到远高于 256-bin 朴素离散化的精度,从而支持 800 Hz 控制?

这是本专题的另一个必完证。率-失真理论是信息论的核心支柱之一(Shannon 1948 奠基,专题信息论基础应已铺垫),它精确刻画了"压缩率(比特数)"与"失真(精度损失)"之间的根本权衡。把它应用到动作 tokenization,我们能得到 VLA 离散化方案的**理论性能边界**——任何离散化方案都逃不出这条边界,FAST 的优越性正在于它更贴近这条边界。

如果不这样做会怎样(反面)——朴素均匀量化的困境

为什么需要 FAST 这样精巧的频域方案?看朴素方案的困难。

朴素方案 表面可行 深层数学困难
每维独立均匀 256-bin(RT-2) 实现极简,直接复用 VLM token 失真 \(\sim(\text{range}/256)^2\) 固定,力控任务精度卡死;且 token 数 \(=H\times d_a\) 巨大(50×7=350),序列太长
增大 bin 数到 1024、4096 直接降失真 词表爆炸(动作 token 挤占 VLM 词表),且高 bin 在高频动作上仍浪费——相邻时刻动作高度相关,独立量化每个时刻是冗余的
缩短 chunk(减少 token 数) 减少序列长度 牺牲了动作分块降复合误差的收益(§8.5.5),治标不治本

第一行和第二行共同的深层问题是:朴素均匀量化把动作序列当作一串独立的标量逐个量化,完全无视动作信号的时序相关结构。机器人动作是平滑轨迹——相邻时刻几乎连续,整条轨迹的"信息量"远小于"\(H\times d_a\) 个独立标量"。逐点独立量化等于反复编码冗余信息,既浪费 token 又精度不高。

本质洞察:动作 tokenization 的根本浪费在于**忽视了动作信号的时序相关性**。一条 50 步的平滑轨迹,其内在自由度(信息率)远低于 350 个独立标量——大部分能量集中在低频(缓慢的整体运动),高频(快速抖动)能量很小。逐点均匀量化对每个时刻、每个频率"一视同仁"地分配比特,是巨大的浪费。FAST 的核心洞察就是**先用 DCT 把动作变换到频域,让能量集中到少数低频系数,再对系数按重要性分配比特**——这正是 JPEG 压缩图像、MP3 压缩音频的同一思想。

历史:从标量量化到频域压缩
  • 率-失真理论(Shannon 1948, 1959):信息论奠基人 Shannon 提出率-失真函数 \(R(D)\),精确刻画"允许失真 \(D\) 时,无损表示信源所需的最小比特率"。它是有损压缩的理论极限。
  • 变换编码(Transform Coding, 1970s-):JPEG(DCT)、MP3(改进 DCT)等证明了"先变换到频域、能量集中、再量化"远优于直接量化空域/时域信号。这是几乎所有现代有损压缩的基石。
  • FAST(Frequency-space Action Sequence Tokenization, Pertsch et al. 2025):把变换编码思想搬到机器人动作——对动作块做 DCT(离散余弦变换),量化频域系数,再用 BPE 把量化后的系数压成可变长 token 序列。结果:同样精度下 token 数大幅减少,支持高达 800 Hz 的控制频率,且与 AR(VLM 契合)兼容。

这条线的逻辑:Shannon 给出理论极限 → 变换编码逼近极限的工程方法 → FAST 把它应用到动作,逼近动作 tokenization 的率-失真极限。

理论 (一):均匀量化的失真 \(D(K)\approx\frac{1}{12}(\text{range}/K)^2\)

先严格推导朴素均匀量化的失真。设一维连续动作 \(a\in[-R/2, R/2]\)(range = \(R\)),均匀量化成 \(K\) 个 bin,每个 bin 宽度 \(\Delta=R/K\)。量化器把 \(a\) 映射到所在 bin 的中心 \(\hat a\)量化误差 \(e=a-\hat a\) 落在 \([-\Delta/2, \Delta/2]\)

假设 \(a\) 在每个 bin 内近似均匀分布(高分辨率假设,\(K\) 大时成立),则量化误差 \(e\sim\text{Uniform}[-\Delta/2,\Delta/2]\)。计算其均方失真:

\[ D(K)=\mathbb E[e^2]=\int_{-\Delta/2}^{\Delta/2}\frac{1}{\Delta}e^2\,\mathrm de=\frac{1}{\Delta}\cdot\frac{e^3}{3}\Big|_{-\Delta/2}^{\Delta/2}=\frac{1}{\Delta}\cdot\frac{2}{3}\Big(\frac{\Delta}{2}\Big)^3=\frac{\Delta^2}{12} \]

代入 \(\Delta=R/K\)

\[ \boxed{\;D(K)=\frac{\Delta^2}{12}=\frac{1}{12}\Big(\frac{R}{K}\Big)^2\;} \]

这就是均匀量化的失真公式。 关键解读:

  • 失真随 \(K\) 平方反比下降\(D\propto 1/K^2\)。要把失真降一半,\(K\) 需增大 \(\sqrt 2\) 倍;要降到 \(1/100\)\(K\) 需增大 10 倍。
  • RT-2 的 256-bin 失真:设动作归一化到 \(R=2\)\([-1,1]\)),则 \(D=\frac{1}{12}(2/256)^2\approx 5.1\times10^{-6}\),均方根误差 \(\sqrt D\approx 2.3\times10^{-3}\)。对很多任务够用,但对亚毫米力控(要求 RMS 误差 \(<10^{-4}\))不够——要达到就需 \(K\approx 5800\) 个 bin,词表爆炸。
  • 那个 \(1/12\) 因子:它是均匀分布方差的系数(\(\text{Var}[\text{Uniform}[-\Delta/2,\Delta/2]]=\Delta^2/12\)),是量化噪声的"指纹",在所有均匀量化分析里反复出现。
理论 (二):率-失真函数 \(R(D)=\frac12\log(\sigma^2/D)\)

现在从另一面看:给定允许的失真 \(D\),理论上至少需要多少比特来表示动作? 这就是率-失真函数。对一个方差为 \(\sigma^2\) 的高斯信源 \(a\sim\mathcal N(0,\sigma^2)\),在均方失真准则下,Shannon 的率-失真函数是(经典结果):

\[ \boxed{\;R(D)=\begin{cases}\dfrac12\log_2\dfrac{\sigma^2}{D}, & 0<D\le\sigma^2\\[6pt]0, & D>\sigma^2\end{cases}\;} \]

逐点解读这个极其优美的公式:

  • 物理意义:要把一个方差 \(\sigma^2\) 的高斯量、压缩到允许失真 \(D\),每个样本至少需要 \(\frac12\log_2(\sigma^2/D)\) 比特。失真 \(D\) 越小,需要的比特越多(对数增长)。
  • \(D\ge\sigma^2\)\(R=0\):如果允许的失真比信源方差还大,那干脆"什么都不传,直接输出 0"就能满足——零比特。这给出了"信源本身的不确定性"作为压缩的天花板。
  • 每减半失真 = 多 0.5 比特\(D\to D/2\) 使 \(R\) 增加 \(\frac12\log_2 2=0.5\) 比特。这是高斯信源的"每比特换多少失真"的精确兑换率。
  • 与量化的对接:均匀量化用 \(\log_2 K\) 比特达到失真 \(D(K)=\frac{R^2}{12K^2}\)。代入率-失真函数可比较——均匀量化在高分辨率下离 \(R(D)\) 极限有一个固定的"差距"(约 0.25 比特/样本,著名的 \(\frac12\log_2\frac{\pi e}{6}\) gap),说明均匀标量量化已接近最优**单样本**编码,但**没有利用样本间的相关性**。

本质洞察:率-失真函数 \(R(D)\) 揭示的核心是——压缩效率的极限由信源的"内在不确定性"\(\sigma^2\) 决定,而非样本数量。如果能通过变换(如 DCT)让信源的有效方差集中到少数维度(低频系数方差大、高频系数方差趋于 0),那么按 \(R(D)=\frac12\log\frac{\sigma_i^2}{D}\) 对每维分配比特时,方差小的维度几乎不需要比特\(\sigma_i^2\to 0\)\(R\to 0\))。这就是 FAST 省 token 的数学原理:DCT 后高频系数方差极小,几乎不耗 token。

理论 (三):FAST 的频域优势——逆水定容(reverse water-filling)

现在把前两个理论合起来,解释 FAST 为什么优越。动作块 \(A\in\mathbb R^{H\times d_a}\) 经 DCT 变换到频域系数 \(C=\text{DCT}(A)\)。DCT 是正交变换(保范),但它把能量**重新分配**——对平滑信号(机器人轨迹),能量高度集中在低频系数,高频系数方差极小。

设变换后第 \(i\) 个频率系数的方差为 \(\sigma_i^2\),且按从大到小排序 \(\sigma_1^2\ge\sigma_2^2\ge\dots\)(低频在前)。对相互独立的多个高斯源做率-失真最优比特分配,Shannon 理论给出**逆水定容(reverse water-filling)** 解:给定一个"水位" \(\theta\)

\[ D_i=\min(\theta,\sigma_i^2),\qquad R_i=\max\Big(0,\ \tfrac12\log_2\tfrac{\sigma_i^2}{\theta}\Big) \]

直觉:方差大于水位 \(\theta\) 的系数(低频)分配比特 \(R_i>0\) 并压缩到失真 \(\theta\);方差小于水位的系数(高频)直接丢弃\(R_i=0\),失真就是其全部方差 \(\sigma_i^2\),反正很小)。总失真 \(D=\sum_i D_i\),总比特 \(R=\sum_i R_i\)

本质洞察:逆水定容是 FAST 优越性的数学核心——它**把有限的比特预算优先分配给信息量大的低频系数,对几乎无信息的高频系数零分配**。对比朴素均匀量化"对每个时刻、每维平均分配比特",FAST 把比特集中投放在最有价值的地方。结果:达到同样的总失真 \(D\),FAST 所需的总比特 \(R\)(即 token 数)远少于均匀量化——因为后者在高频冗余上浪费了大量比特。token 数少意味着序列短,自回归生成快,于是支持 800 Hz 高频控制。

把三个理论串成一条完整的因果链(这是本节要建立的核心逻辑):

\[ \underbrace{\text{动作轨迹平滑}}_{\text{时序强相关}}\xrightarrow{\text{DCT}}\underbrace{\text{能量集中低频}}_{\sigma_i^2\text{ 高度不均}}\xrightarrow{\text{逆水定容}}\underbrace{\text{比特集中低频}}_{R\text{ 大幅减少}}\xrightarrow{\text{BPE}}\underbrace{\text{token 数少}}_{\text{序列短}}\xrightarrow{}\underbrace{\text{AR 生成快}}_{\text{800 Hz}} \]

对比性思维(均匀量化 vs FAST 频域)

维度 朴素均匀量化(RT-2) FAST 频域(DCT+BPE)
是否利用时序相关 否(逐点独立量化) 是(DCT 解相关)
比特分配 均匀(每点每维等比特) 逆水定容(按系数方差)
同失真下 token 数 多(\(H\times d_a\),如 350) 少(高频丢弃,可变长)
精度上限 \(1/K\) 限,难提升 接近率-失真极限
控制频率 低(序列长,生成慢) 高(序列短,800 Hz)
与 VLM 契合 高(仍是 AR token) 高(仍是 AR token,但 token 是频域的)

注意最后一行——FAST 没有放弃 AR(仍与 VLM 契合,享受 §8.5.6 中 AR 的最高契合度),但通过频域变换突破了朴素 AR 的精度/速度瓶颈。这是"在 AR 框架内逼近率-失真极限"的漂亮工作,回答了 §8.5.6 练习 6-3 的问题:FAST 把 AR 往连续端推了一大步,代价是 DCT 变换和可变长 BPE 的额外复杂度。

一个最小代码骨架:DCT 能量集中的验证

理论教学中代码仅用于**验证概念**。下面用 DCT 验证"平滑轨迹能量集中低频"这一 FAST 的前提:

# 概念验证:DCT 让平滑动作轨迹能量集中到低频(非可运行实现)
# 目的——看清"少数低频系数承载绝大部分能量"=FAST 省 token 的根据
import torch

H = 50                                    # 动作块长度
# 构造一条平滑轨迹 (低频为主), 模拟机器人关节角随时间缓慢变化
t = torch.linspace(0, 1, H)
a = torch.sin(2 * 3.14159 * t) + 0.3 * torch.sin(6 * 3.14159 * t)  # 低频主导

# 离散余弦变换 (DCT-II), 这里用简化实现示意
def dct(x):
    N = len(x)
    n = torch.arange(N).float()
    k = n.view(-1, 1)
    basis = torch.cos(3.14159 / N * (n + 0.5) * k)   # DCT 基
    return basis @ x

C = dct(a)                                # 频域系数
energy = C ** 2                           # 各频率系数能量
total = energy.sum()
# 前 10 个低频系数占多少能量?
low_freq_ratio = energy[:10].sum() / total
print(f"前 10/{H} 个低频系数能量占比: {low_freq_ratio:.3f}")
# 关键结论1: 平滑轨迹的能量高度集中在前几个低频系数 (占比接近 1)
# 关键结论2: 高频系数 energy[10:] 几乎为 0 -> 逆水定容下零比特 -> 可丢弃
# 关键结论3: 于是只需编码少数低频系数 -> token 数远少于直接量化 50 个时刻
# 对比: 直接均匀量化要编码全部 50 个时刻, 不论它们多冗余

这段代码的价值是让你**亲眼看到能量集中**——一条平滑轨迹的能量几乎全在前几个低频 DCT 系数里,高频系数能量趋于零。这正是 FAST 省 token 的全部根据:既然高频系数携带的信息近乎为零,逆水定容就对它们零分配比特,于是只需编码少数低频系数。对比朴素均匀量化必须编码全部 50 个时刻(无论多冗余),FAST 的 token 节省立竿见影。这就是"频域离散化"突破 256-bin 精度/速度瓶颈的数学根源。

⚠️ 常见陷阱

💡 概念误区:以为增大 bin 数 \(K\) 就能无限提升精度 - 新手想法:"失真是 \(\frac{1}{12}(R/K)^2\),那我把 \(K\) 加到几万,精度不就任意高了?" - 现象/后果:\(K\) 增大使动作 token 词表爆炸,挤占 VLM 词表空间(VLM 词表通常 ~32k,分几万给动作 bin 不现实),且序列长度不变(仍 \(H\times d_a\) 个 token),生成依然慢,并未解决根本问题。 - 根本原因:朴素均匀量化的瓶颈不只是失真,还有"token 数 = \(H\times d_a\) 固定且大"和"未利用时序相关"。单纯增大 \(K\) 只降单点失真,不减 token 数、不去冗余,性价比极低。 - 正确做法:与其增大 \(K\),不如改变量化的**对象**——先 DCT 解相关再量化(FAST),用逆水定容把比特投到低频,既降失真又减 token。问题的钥匙是"利用相关性",不是"加大 bin 数"。

💡 概念误区:以为 DCT 变换本身降低了信息量或丢失了精度 - 新手想法:"DCT 是个变换,变换会不会损失信息,让动作变得不准?" - 现象/后果:误以为 DCT 有损,从而不敢用,或在 DCT 后又做多余的精度补偿,画蛇添足。 - 根本原因:混淆了"正交变换"和"量化"两步。DCT 本身是**正交、可逆、保范**的(无损)——它只是把能量**重新分配**到频域,不丢信息。真正的有损发生在之后对频域系数的**量化/丢弃**步骤。FAST 的精明在于:因为 DCT 后高频系数能量本就趋于零,丢弃它们引入的失真极小。 - 正确做法:把 FAST 分两步理解——DCT(无损解相关)+ 频域量化(有损但聪明地丢弃低能量系数)。失真来自第二步,且因第一步的能量集中而被最小化。

🧠 思维陷阱:认为率-失真理论只是抽象信息论,与实际选型无关 - 新手想法:"\(R(D)=\frac12\log(\sigma^2/D)\) 是理论公式,做工程不需要管它。" - 现象/后果:选离散化方案时凭感觉("256-bin 大家都用"),在精度敏感任务上撞上量化上限却不知道理论极限在哪,反复试错浪费时间。 - 根本原因:没认识到率-失真函数给出的是**任何离散化方案的理论性能边界**——它告诉你"达到精度 \(D\) 至少要多少比特/token",从而能判断当前方案离极限有多远、还有多少改进空间。 - 正确做法:用率-失真函数作为**选型的标尺**。先估计任务所需精度 \(D\) 和动作信号方差 \(\sigma^2\),算出理论最小比特 \(R(D)\),对比当前方案的实际 token 数。若差距大(如均匀量化在相关信号上),说明有 FAST 这类频域方案的改进空间;若已接近极限,则增加 token 收益甚微,应从别处优化。

练习

[练习 8.5.7-1 · 推导] 完整推导均匀量化失真。(a) 设量化误差 \(e\sim\text{Uniform}[-\Delta/2,\Delta/2]\),从积分 \(\mathbb E[e^2]=\int_{-\Delta/2}^{\Delta/2}\frac{1}{\Delta}e^2\mathrm de\) 推出 \(D=\Delta^2/12\),写出每一步;(b) 代入 \(\Delta=R/K\)\(D(K)=\frac{R^2}{12K^2}\);(c) 对动作范围 \(R=2\)、要求 RMS 误差 \(\sqrt D\le 10^{-4}\),求所需的最小 bin 数 \(K\),并讨论这个 \(K\) 对 VLM 词表的影响。在草稿纸上完成。

[练习 8.5.7-2 · 推导] 率-失真与逆水定容。(a) 验证高斯信源 \(R(D)=\frac12\log_2(\sigma^2/D)\)\(D=\sigma^2\) 处给出 \(R=0\),解释其含义;(b) 给定三个独立高斯系数方差 \(\sigma_1^2=4,\sigma_2^2=1,\sigma_3^2=0.01\),水位 \(\theta=0.25\),用逆水定容算出每个系数分配的比特 \(R_i\) 和失真 \(D_i\),以及总比特和总失真;(c) 说明第三个系数(\(\sigma_3^2<\theta\))为什么被零分配比特,这对应 FAST 中的什么操作。在草稿纸上完成。

[练习 8.5.7-3 · 开放思考] FAST 用 DCT 解相关。但机器人动作还有**跨维度相关性**(如双臂协同时左右臂关节相关)和**跨时刻非平稳性**(动作的快慢段交替)。请论证:(a) 仅做时间维 DCT 是否充分利用了所有相关性?还有什么相关性没被利用?(b) 如果动作信号不平滑(如含突变的接触事件),DCT 的能量集中假设会怎样,FAST 的优势会减弱吗?(c) 这对"动作 tokenization 还有多少改进空间"给出什么启示?


§8.5.8 VLA 泛化理论:PAC-Bayes 与组合泛化 ○

动机:VLA 为什么能泛化?

前面七节讲清了 VLA"怎么搭、怎么训、动作头怎么选"。现在转入最深、也最不成熟的理论线:VLA 凭什么能泛化到训练时没见过的任务、物体、场景? 这个问题对你的博士研究尤其重要——VLA 领域的实验进展远超理论理解,"为什么能泛化"在很大程度上仍是开放问题。本节给出目前最有解释力的两个数学框架:PAC-Bayes Control(泛化的统计学习理论保证)和**组合泛化的几何**(语言条件为何带来组合能力)。

诚实地说(这是理论教学的底线):VLA 泛化没有像率-失真那样干净的定理。本节给的是**形式化框架 + 定性论证**,而非紧致的可计算界。但即便如此,这些框架也能把"VLA 泛化"从玄学变成可分析的数学对象,告诉你预训练 VLM 在泛化中扮演什么角色、语言条件为什么有用。

如果不这样做会怎样(反面)——没有泛化理论的代价
朴素态度 表面合理 深层困难
"泛化靠堆数据,不需要理论" 经验上数据多确实泛化好 不知道"还差多少数据""哪种数据最有效""为什么预训练有用",盲目堆数据成本失控
"VLA 泛化就是深度学习泛化,没特殊性" 共享深度学习的泛化机制 忽视了 VLA 的特殊结构——预训练先验(外源知识)和语言条件(组合性),而这正是 VLA 泛化的两大引擎
"用经典 VC 维 / Rademacher 复杂度分析" 标准泛化工具 VLA 模型参数量巨大(数十亿),VC 维 / Rademacher 界天文数字、毫无意义;必须用能利用"预训练先验"的框架

第三行的困难是为什么需要 PAC-Bayes 而非经典 VC 理论。经典泛化界(VC 维、Rademacher 复杂度)对参数量 \(N\) 大致是 \(\sqrt{N/m}\)\(m\) 是样本数),对数十亿参数的 VLA、几十万条机器人数据,这个界是天文数字(远大于 1),完全 vacuous(平凡无意义)。我们需要一个能解释"为什么大模型 + 少数据还能泛化"的框架——PAC-Bayes 正是这样的工具,它的界依赖的不是参数量,而是**学到的策略与一个"先验"的距离**。

本质洞察:VLA 泛化理论的核心要回答"预训练 VLM 在泛化中的数学角色"。答案是:预训练 VLM 提供了一个极好的"先验" \(\pi_0\),使得学到的机器人策略只需在这个先验附近做小幅调整就够用。PAC-Bayes 界正比于"后验策略 \(Q\) 与先验 \(\pi_0\) 的 KL 散度"——先验越好(VLM 预训练得越好),后验离先验越近(微调改动越小),KL 越小,泛化界越紧。这把"预训练有用"翻译成了精确的数学陈述:好的先验 = 小的 KL = 紧的泛化界

历史:PAC-Bayes Control 的提出
  • PAC-Bayes(McAllester 1999):一个泛化界框架,对"随机化的假设(后验分布 \(Q\))"给出泛化保证,界依赖 \(\text{KL}(Q\|\pi_0)\)(后验与先验的 KL 散度),而非假设类的复杂度。这使它能给出大模型的非平凡界。
  • PAC-Bayes Control(Majumdar et al. 2021):把 PAC-Bayes 从监督学习搬到**控制/策略学习**,为机器人策略提供"泛化证书(generalization certificate)"——一个可计算的、对未见环境性能的高概率保证。这是少数能给机器人策略以严格泛化保证的框架之一。
  • 组合泛化的几何(CCGP 等,2020s):从神经科学和表征几何角度,研究"什么样的表征几何支持组合泛化",提出 CCGP(Cross-Condition Generalization Performance)等度量,揭示"语义相近则表征相近"的几何结构是组合泛化的基础。
理论 (一):PAC-Bayes Control 泛化界

把 PAC-Bayes Control 严格化。设策略由参数 \(\theta\) 决定,我们考虑参数上的一个**后验分布** \(Q\)(训练后学到的)和一个**先验分布** \(\pi_0\)(训练前选定,对 VLA 即预训练 VLM 诱导的分布)。定义:

  • 经验损失 \(\hat L(Q)=\mathbb E_{\theta\sim Q}\big[\frac1m\sum_{i=1}^m\ell(\theta, \xi_i)\big]\):在 \(m\) 个训练环境/任务 \(\xi_i\) 上的平均损失。
  • 期望损失 \(L(Q)=\mathbb E_{\theta\sim Q}\mathbb E_{\xi\sim\mathcal D}[\ell(\theta,\xi)]\):在真实任务分布 \(\mathcal D\) 上的期望损失(这是我们真正关心的泛化性能)。

PAC-Bayes 定理(McAllester 形式):对任意 \(\delta\in(0,1)\),以至少 \(1-\delta\) 的概率,对所有后验 \(Q\) 同时成立:

\[ \boxed{\;L(Q)\le \hat L(Q)+\sqrt{\frac{\text{KL}(Q\,\|\,\pi_0)+\ln\frac{2\sqrt m}{\delta}}{2m}}\;} \]

逐项解读这个对 VLA 至关重要的不等式:

  • 左边 \(L(Q)\):未见任务上的期望性能——我们想 bound 的目标(泛化性能)。
  • 右边第一项 \(\hat L(Q)\):训练任务上的经验性能——可测量。
  • 右边第二项(复杂度项)\(\sqrt{\text{KL}(Q\|\pi_0)/2m}\)——这是全部精髓。它**不依赖参数量 \(N\)**,只依赖后验与先验的 KL 散度和样本数 \(m\)
  • 泛化好的条件:经验损失低(\(\hat L\) 小) 后验离先验近(\(\text{KL}\) 小)。两者兼得,期望损失才有保证。

现在把它和 VLA 对接,得到本节最重要的论断:

本质洞察:VLA 微调的本质是"在预训练先验 \(\pi_0\) 附近寻找一个经验损失低的后验 \(Q\)"。预训练 VLM 越好,\(\pi_0\) 就越接近"能解机器人任务的参数区域",于是只需很小的调整(小 KL)就能把经验损失压低。这就是为什么 VLA 能用几十万条数据微调数十亿参数还泛化——它没有从零搜索整个参数空间(那需要天文数字的数据),而是在一个已经很好的先验附近做局部微调,KL 项因此很小,泛化界非平凡。冻结骨干 / LoRA 微调之所以有效,正是因为它们**显式约束 \(Q\) 靠近 \(\pi_0\)**(小改动 = 小 KL = 紧界)。

理论-工程桥接:PAC-Bayes 界 \(\sqrt{\text{KL}(Q\|\pi_0)/2m}\) 直接解释了三个工程实践。(1) LoRA / 低秩微调有效:限制参数改动的秩 = 限制 \(Q\) 偏离 \(\pi_0\) = 小 KL = 好泛化。(2) co-fine-tuning(§8.5.2)有效:混入 VQA 数据把 \(Q\) 锚定在"仍像 VLM"的区域 = 小 KL。(3) 更强的预训练 VLM 带来更好的下游泛化:更好的 \(\pi_0\) 使同样小的 KL 下经验损失更低。三者都是"控制 KL、利用好先验"的不同手段。这把抽象的泛化界变成了可操作的设计原则。

理论 (二):组合泛化的几何

PAC-Bayes 解释了"预训练先验为何助泛化",但没解释"语言条件为何带来**组合**泛化"(执行训练中未配对过的指令组合,如见过"红+杯"和"蓝+碗",能做"蓝+杯")。这需要表征几何的视角。

回忆 §8.5.1:语言把任务嵌入到有几何结构的连续空间 \(\phi(l)\)。组合泛化要求这个几何满足一个关键性质——组合坐标的可分解性。形式化:设指令由若干属性组合而成(颜色 \(c\)、物体 \(o\)、位置 \(p\)),理想的表征应能写成近似**可加分解**:

\[ \phi(l_{c,o,p})\approx \phi_c(c)+\phi_o(o)+\phi_p(p) \]

即颜色、物体、位置各自贡献一个可加的分量。如果表征有这种结构,那么"蓝+杯"的表征 \(\approx\phi_c(\text{蓝})+\phi_o(\text{杯})\) 就能从"蓝+碗"(提供 \(\phi_c(\text{蓝})\))和"红+杯"(提供 \(\phi_o(\text{杯})\))的表征**组合外推**出来——哪怕"蓝+杯"从未一起出现过。

Jacobian 满秩条件:更精确地,设动作对组合坐标的依赖为 \(a=g(\phi_c,\phi_o,\phi_p)\)。组合泛化要求 \(g\) 对各组合坐标的偏导(Jacobian)在训练数据张成的子空间上**满秩**——即每个属性都"独立地、可识别地"影响动作。如果 Jacobian 在某属性方向退化(该属性不独立影响动作,总与别的属性纠缠),则该属性无法被单独泛化。

本质洞察:组合泛化的几何根源是——语言表征把任务空间组织成一个近似"可加分解"的结构,使得未见组合可由已见组合的分量线性外推。这与 §8.5.1 "one-hot 是查表、语言是插值/外推"的洞察相呼应:one-hot 的正交结构 \(\langle e_i,e_j\rangle=0\) 没有任何可分解性(每个任务是孤立点),所以零组合泛化;语言嵌入的可加分解结构则让"组合外推"在几何上成为可能。组合泛化不是凭空的魔法,而是**表征几何的可分解性 + Jacobian 满秩**的数学后果。

理论 (三):语义条件压制 sim-to-real domain gap 的 Lipschitz 论证

最后给一个解释"语言条件改善 sim-to-real / 视觉鲁棒性"的定性论证。机器人面临 domain gap——仿真/训练时的视觉外观与真实部署的视觉外观不同(光照、纹理、背景)。为什么强语义条件能压制这个 gap?

设策略 \(\pi(a\mid v,l)\),视觉输入从训练分布 \(v\) 变到部署分布 \(v'\)(domain shift)。性能下降取决于策略对视觉变化的**敏感度**,可用 Lipschitz 常数刻画:

\[ \|\pi(\cdot\mid v,l)-\pi(\cdot\mid v',l)\|\le L_v\cdot\|z(v,l)-z(v',l)\| \]

其中 \(z(v,l)=q_\theta(v,l)\) 是潜表征。关键论证:如果语言 \(l\) 足够强(能唯一识别目标物体和任务),那么潜表征 \(z\) 主要由 \(l\) 决定,对视觉细节 \(v\) 的依赖被语义"锚定"而减弱——即 \(z(v,l)\approx z(v',l)\)(视觉风格变了,但语义条件保证表征稳定)。形式上,强语义条件降低了 \(z\)\(v\) 的有效 Lipschitz 常数 \(L_v\),于是 domain shift \(\|v-v'\|\) 对最终动作的影响被压制。

直觉:指令"把红杯子放进水槽"在仿真和真实里**语义相同**——无论红杯子的具体纹理、光照如何变,"红杯子"这个语义概念是稳定的。VLM 的预训练让它能在各种视觉风格下识别"红杯子"(互联网图片本就涵盖各种风格),于是语义条件把策略"锚定"在语义层面,对低层视觉风格的变化免疫。这就是为什么 VLA 比纯视觉策略更鲁棒于 sim-to-real gap。

对比性思维(纯视觉策略 vs 语言条件策略的鲁棒性)

维度 纯视觉策略 语言条件 VLA
表征锚点 仅视觉特征 视觉 + 语义(语言)
对 domain shift 敏感度 高(\(L_v\) 大,视觉一变就崩) 低(语义锚定,\(L_v\) 减小)
预训练带来的鲁棒性 无(从零学视觉) 有(VLM 见过各种视觉风格)
组合泛化 有(语言可分解)

这张表把 VLA 的两大泛化优势(语义锚定的鲁棒性 + 语言的组合性)与纯视觉策略对比,凸显"语言条件 + 预训练"不是锦上添花,而是泛化的两大引擎。

一个最小代码骨架:可加分解结构的验证

理论教学中代码仅用于**验证概念**。下面用一个玩具实验验证"可加分解表征支持组合外推":

# 概念验证:可加分解的语言表征支持组合外推(非可运行实现)
# 目的——看清"未见组合"如何由"已见组合"的分量线性外推得到
import torch

d = 16
# 理想的可加分解表征: phi(color, obj) = phi_color[color] + phi_obj[obj]
phi_color = {"red": torch.randn(d), "blue": torch.randn(d)}
phi_obj   = {"cup": torch.randn(d), "bowl": torch.randn(d)}
def phi(color, obj):
    return phi_color[color] + phi_obj[obj]      # 可加分解

# 训练时见过: (red, cup), (blue, bowl)  -- 未见过 (blue, cup)
seen_red_cup   = phi("red", "cup")
seen_blue_bowl = phi("blue", "bowl")
# 组合外推: (blue,cup) 的分量可从已见组合中"借"出来
# phi(blue,cup) = phi_color[blue] + phi_obj[cup]
#              = (phi(blue,bowl) - phi_obj[bowl]) + (phi(red,cup) - phi_color[red])
recovered = (seen_blue_bowl - phi_obj["bowl"]) + (seen_red_cup - phi_color["red"])
true_blue_cup = phi("blue", "cup")
err = (recovered - true_blue_cup).abs().max()
assert err < 1e-5                     # 完美外推 (因为是严格可加)
# 关键结论1: 可加分解下, 未见组合 = 已见组合分量的线性运算 -> 组合外推
# 关键结论2: 若表征是 one-hot(正交,不可分解), 上述外推不可能 -> 零组合泛化
# 关键结论3: 真实语言嵌入只是"近似"可加, 故组合泛化是"近似"的, 非完美

这段代码的价值是把"组合泛化"这个抽象能力还原为一个具体的**向量代数**——在可加分解的表征里,未见组合 (blue, cup) 的表征可以由已见组合的分量精确地"拼"出来。这就是组合泛化的几何本质。对比 one-hot 编码(正交、不可分解),这种拼接根本无法进行,所以纯 one-hot 多任务策略零组合泛化。当然,真实语言嵌入只是**近似**可加分解,所以现实中的组合泛化是有损的、近似的——这也是 §8.5 强调"VLA 泛化仍是开放问题"的原因之一。

⚠️ 常见陷阱

💡 概念误区:用经典 VC 维 / 参数量来判断 VLA 会不会过拟合 - 新手想法:"VLA 有几十亿参数,数据才几十万条,参数远多于数据,必然严重过拟合。" - 现象/后果:基于这个(错误的)判断,要么不敢用大模型、要么过度正则化导致欠拟合,错失大模型 + 预训练的红利。 - 根本原因:误用了依赖参数量的经典泛化理论(VC 维、Rademacher)。这些理论对预训练大模型给出 vacuous(平凡)的界,根本不适用。VLA 的泛化由 PAC-Bayes 的 KL 项刻画,依赖的是"后验离预训练先验多近",而非参数量。 - 正确做法:用 PAC-Bayes 视角思考——只要微调让 \(Q\) 靠近好的先验 \(\pi_0\)(小 KL,如 LoRA、co-fine-tuning),即使参数巨大、数据有限,泛化也有保证。判断过拟合风险看的是"偏离预训练多远",不是"参数比数据多多少"。

💡 概念误区:以为组合泛化是模型规模大自然就有的"涌现" - 新手想法:"组合泛化是大模型的涌现能力,模型够大就会有。" - 现象/后果:盲目放大模型期待组合泛化自动出现,却在表征不具可分解结构的设计下(如用 one-hot 或纠缠的任务编码)始终得不到组合泛化。 - 根本原因:组合泛化的根源是**表征几何的可分解性**(近似可加分解 + Jacobian 满秩),不是单纯的规模。语言条件提供了这种可分解结构,one-hot 则没有。规模可以增强可分解表征的质量,但不能凭空创造可分解性。 - 正确做法:把组合泛化归因于"语言条件提供的可分解表征几何"。要增强组合泛化,应保证任务条件用具组合结构的语言嵌入(而非 one-hot),并用多样的属性组合训练让表征学到清晰的可分解性。

🧠 思维陷阱:把"VLA 泛化有形式化框架"误读为"VLA 泛化已被理论完全解决" - 新手想法:"既然有 PAC-Bayes 界和组合泛化几何,那 VLA 泛化的理论已经完备了。" - 现象/后果:在研究中误以为泛化是已解决问题,不去探索这个最有价值的开放方向,错失博士研究的好课题。 - 根本原因:混淆了"形式化框架"与"紧致可计算的定理"。PAC-Bayes 给的是框架和定性论证,但对 VLA 这种复杂系统,KL 项难以精确计算、界往往不紧;组合泛化的几何也只是定性刻画。这些是"分析工具",不是"完整答案"。 - 正确做法:诚实地认识到 VLA 泛化理论远未成熟——这恰恰是机会。把 PAC-Bayes、组合几何当作研究的**起点和语言**,去推动更紧的界、更精确的组合泛化条件。理论落后于实验,正是这个领域值得投入的原因。

练习

[练习 8.5.8-1 · 推导] PAC-Bayes 界分析。给定界 \(L(Q)\le\hat L(Q)+\sqrt{\frac{\text{KL}(Q\|\pi_0)+\ln(2\sqrt m/\delta)}{2m}}\)。(a) 讨论当 \(m\to\infty\) 时界的行为(复杂度项趋于什么);(b) 设 \(Q\)\(\pi_0\) 都是高斯 \(\mathcal N(\mu_Q,\sigma^2 I)\)\(\mathcal N(\mu_0,\sigma^2 I)\),写出 \(\text{KL}(Q\|\pi_0)\) 的闭式(提示:高斯 KL),说明它正比于 \(\|\mu_Q-\mu_0\|^2\),即"微调改动量的平方";(c) 由此论证为什么 LoRA(限制 \(\|\mu_Q-\mu_0\|\) 在低秩子空间)能改善泛化界。在草稿纸上完成。

[练习 8.5.8-2 · 开放思考] 组合泛化要求表征近似可加分解 \(\phi(l_{c,o})\approx\phi_c(c)+\phi_o(o)\)。(a) 给出一个表征**不可加分解**的例子(如 \(\phi(l_{c,o})=\phi_c(c)\odot\phi_o(o)\) 逐元素乘),论证为什么它支持组合泛化更困难;(b) 现实的语言嵌入(如 CLIP 文本编码器)的分解性介于"完美可加"和"完全纠缠"之间,你会设计什么实验来测量它的可分解程度?(c) 这与 CCGP(Cross-Condition Generalization Performance)度量有什么联系?

[练习 8.5.8-3 · 跨章综合] 综合 §8.5.1(潜变量分解)、§8.5.2(co-fine-tuning)、本节(PAC-Bayes)。论证一条完整的逻辑链:为什么"用预训练 VLM 初始化 + co-fine-tuning + LoRA 微调"这套组合拳,在 PAC-Bayes 框架下能同时做到"经验损失低"和"KL 小",从而给出紧的泛化界?把每个工程手段映射到 PAC-Bayes 界的对应项(\(\hat L\) 还是 KL)。这道题需要你把本专题的架构、训练、泛化三条线在 PAC-Bayes 的语言下统一起来。


§8.5.9 机器人 scaling laws:与 LLM Chinchilla 律的结构差异 ○

动机:VLA 模型该多大、数据该多少

最后一节回答一个极其现实的工程问题:造一个 VLA,模型该用多大?数据该收多少?两者如何配比? LLM 领域有著名的 Chinchilla 律(Hoffmann et al. 2022)——给定算力预算,模型参数 \(N\) 和数据量 \(D\) 应**等比例**增长(最优配比约 \(D/N\approx 20\) tokens/param)。机器人能照搬吗?

答案是**不能**,而且差异巨大。这一节我们对比机器人 scaling 与 LLM Chinchilla 律的**结构差异**,解释两个反直觉的经验观察:(1) 为什么机器人模型不应太大(7B 往往优于 55B);(2) 为什么机器人模型"过训练(over-training)"是合理的(数据/参数比远高于 Chinchilla)。理解这些能让你在有限算力下做出正确的模型/数据预算决策。

如果不这样做会怎样(反面)——照搬 LLM scaling 的代价
朴素做法 表面合理 深层困难
照搬 Chinchilla,模型越大越好 LLM 经验 机器人数据稀缺(几十万 vs LLM 的万亿 token),大模型在小数据上过拟合且推理太慢(违反实时控制)
按 Chinchilla \(D/N\approx 20\) 配比 LLM 最优配比 机器人数据采集成本极高(真机遥操作),\(D\) 受限,强行匹配会逼着 \(N\) 也很小,浪费了预训练 VLM 的容量
只看训练 loss 选模型大小 标准做法 机器人的真实指标是"任务成功率 + 控制频率",大模型即使 loss 低,推理慢导致频率不达标,实际不可用

第三行点出了机器人 scaling 的**特殊约束**——它有一个 LLM 没有的硬约束:推理延迟必须满足控制频率。一个 55B 模型即使任务成功率略高,若推理只有 1-3 Hz,根本无法做需要 50 Hz 的操纵任务。这个"实时性硬约束"是机器人 scaling 偏离 LLM 的根本原因之一。

本质洞察:机器人 scaling 与 LLM scaling 的根本差异源于**三个结构性不同**:(1) 数据稀缺且昂贵——机器人数据靠真机遥操作,比互联网文本贵几个数量级,\(D\) 受硬约束;(2) 实时性硬约束——推理必须满足控制频率(如 50 Hz),这给模型大小 \(N\) 设了上限(太大则太慢);(3) 预训练先验已注入——VLA 的骨干已从 VLM 继承大量知识(§8.5.8),机器人数据只需"适配"而非"从零学",所以对 \(D\) 的边际需求与从零训练不同。这三点共同导致机器人 scaling 的最优点**偏向"小模型 + 相对过训练"**,与 Chinchilla 的"大模型 + 等比数据"截然不同。

历史:从 Chinchilla 到机器人 scaling 研究
  • Kaplan scaling laws(Kaplan et al. 2020):首次系统揭示 LLM 的 loss 随 \(N, D\) 的幂律下降 \(L(N,D)\approx (N_c/N)^{\alpha}+(D_c/D)^{\beta}\)
  • Chinchilla(Hoffmann et al. 2022):修正了 Kaplan,指出给定算力 \(C\approx 6ND\),最优配比是 \(N\)\(D\) 等比例增长(\(D/N\approx 20\)),即"不要把算力全堆在模型大小上,要给足数据"。
  • 机器人 scaling 研究(2024-2025,RT-X、OpenVLA、π₀ 等的消融):这些工作的经验观察反复显示——机器人任务上模型大小的边际收益**很快饱和**,7B 量级往往是甜点,更大模型收益递减且推理代价剧增;同时,在固定(稀缺的)数据上**过训练**(多跑 epoch)反而有益,因为数据本身是瓶颈。这与 Chinchilla 的预测定性相悖,凸显机器人领域的特殊性。
理论 (一):Chinchilla 律回顾与其前提

先把 Chinchilla 律严格化,看清它的**前提**——正是这些前提在机器人场景失效。Chinchilla 假设 loss 可分解为:

\[ L(N,D)=L_\infty+\frac{A}{N^{\alpha}}+\frac{B}{D^{\beta}} \]

其中 \(L_\infty\) 是不可约 loss(数据的内在熵),\(\frac{A}{N^\alpha}\) 是模型容量不足的损失,\(\frac{B}{D^\beta}\) 是数据不足的损失。给定算力约束 \(C\approx 6ND\)(训练一个 \(N\) 参数模型过 \(D\) token 的浮点运算量),最小化 \(L\) 得最优配比:

\[ N_{\text{opt}}\propto C^{a},\quad D_{\text{opt}}\propto C^{b},\quad a+b\approx 1,\ a\approx b\approx 0.5 \]

\(N\)\(D\) **等比例**增长(\(D/N\approx\) 常数)。Chinchilla 的**关键前提**有三:(1) 数据近乎无限可得(互联网文本);(2) 没有推理延迟约束(训练完离线部署);(3) 从零训练(无强预训练先验)。

理论 (二):机器人场景下三个前提的失效与修正

逐一分析三个前提在机器人场景如何失效,以及由此导致的 scaling 修正:

失效 1:数据并非无限——\(D\) 是硬约束。 机器人数据 \(D\) 受真机采集成本硬约束(OXE 约百万条,远小于 LLM 的万亿 token)。当 \(D\) 被钉死,Chinchilla 的"等比增长"失去意义——你不能随意增大 \(D\)。在固定 \(D\) 下最小化 \(L(N,D)=L_\infty+\frac{A}{N^\alpha}+\frac{B}{D^\beta}\),由于 \(\frac{B}{D^\beta}\) 项固定,增大 \(N\) 只能压低 \(\frac{A}{N^\alpha}\),但这一项很快饱和(\(N\) 已经够大时边际收益趋零),且过大的 \(N\) 在固定 \(D\) 上**过拟合**(实际泛化 loss 反升)。所以最优 \(N\) 在一个**中等值**就饱和——这解释了"7B 优于 55B"。

失效 2:实时性约束——\(N\) 有上限。 推理延迟 \(\propto N\)(粗略地,前向计算量正比于参数量)。控制频率要求 \(\text{latency}(N)\le 1/f_{\text{control}}\)(如 50 Hz 要求 latency \(\le 20\)ms)。这给 \(N\) 加了一个**硬上限** \(N\le N_{\max}(f_{\text{control}})\)。频率要求越高,\(N_{\max}\) 越小。这是 LLM 完全没有的约束,它把机器人推向更小的模型。

失效 3:预训练先验——\(D\) 的角色变了。 VLA 骨干已从 VLM 继承知识(§8.5.8 的好先验 \(\pi_0\))。机器人数据 \(D\) 不再是"从零学一切",而是"把先验适配到机器人域"。这个"适配"所需的数据远少于从零学,但**适配需要充分**——在稀缺数据上**多过几遍(过训练)** 能让适配更充分,且因为有预训练先验做正则(PAC-Bayes 的小 KL),过训练不像从零训练那样容易灾难性过拟合。这解释了"过训练合理"。

把这三点的修正整合成机器人 scaling 的**定性规律**(与 Chinchilla 对比):

\[ \boxed{\;\text{机器人最优}:\ N^\star=\min\big(N_{\text{饱和}}(D),\ N_{\max}(f_{\text{control}})\big),\quad \frac{D}{N}\gg 20\ (\text{相对过训练})\;} \]

对比性思维(Chinchilla vs 机器人 scaling 的全面对照)

维度 LLM(Chinchilla) 机器人 VLA
数据可得性 近乎无限(互联网) 稀缺、昂贵(真机遥操作)
最优 \(N\)\(D\) 关系 等比增长(\(D/N\approx 20\) \(N\) 早饱和,\(D/N\gg 20\)(相对过训练)
模型大小驱动 越大越好(在算力内) 中等最优(7B 甜点),受实时性封顶
推理延迟约束 无(离线部署) 硬约束(控制频率,如 50 Hz)
预训练先验 自身就是预训练 继承 VLM 先验,数据只需适配
过训练 不推荐(Chinchilla 反对) 合理(数据瓶颈 + 先验正则)

这张表是机器人 scaling 决策的总纲。核心一句话:LLM 是"数据富裕、追求最大模型",机器人是"数据稀缺、受实时性封顶、靠预训练先验、相对过训练"。照搬 LLM 的 scaling 直觉到机器人是 §8.5 场景式的典型错误。

理论 (三):为什么过训练在机器人上合理——偏差-方差再审视

把"过训练合理"再用偏差-方差权衡讲深一层。经典观点:过训练(在固定数据上多跑 epoch)会降低偏差但增大方差(过拟合)。但机器人 VLA 有两个改变这个权衡的因素:

  1. 预训练先验降低了有效方差:PAC-Bayes(§8.5.8)告诉我们,从好先验 \(\pi_0\) 出发、约束小 KL 的微调,其泛化方差由 KL 项控制,而非由 epoch 数直接控制。只要微调保持靠近先验(小改动),多过几遍数据主要是降偏差(更充分适配),方差增长被先验正则压住。
  2. 数据是真瓶颈,偏差是主要矛盾:当 \(D\) 极稀缺,欠拟合(偏差)是主要矛盾,过拟合(方差)是次要的。多跑 epoch 把稀缺数据"榨干",降低偏差的收益超过方差的代价。

本质洞察:机器人"过训练合理"的数学根源是——预训练先验把过拟合的风险(方差)转移给了 KL 正则项来控制,使得在稀缺数据上多跑 epoch 主要表现为"降偏差"而非"增方差"。这与从零训练的小模型截然不同(后者过训练会迅速过拟合)。一句话:好先验 + 小数据 → 过训练是"榨干数据"而非"记住噪声"。这把 §8.5.8 的 PAC-Bayes 理论和本节的 scaling 实践连成了一条逻辑链。

一个最小代码骨架:scaling 配比的玩具拟合

理论教学中代码仅用于**验证概念**。下面用玩具 loss 曲面演示"固定稀缺 \(D\) 下最优 \(N\) 早饱和":

# 概念验证:固定稀缺数据下最优模型大小早饱和(非可运行实现)
# 目的——看清 D 受限时, 增大 N 收益快速饱和, 且过大 N 过拟合
import torch

# Chinchilla 式 loss: L(N,D) = L_inf + A/N^a + B/D^b  (+ 过拟合惩罚)
L_inf, A, B, a, b = 1.0, 5.0, 5.0, 0.34, 0.28

def loss(N, D, overfit_coef=2.0):
    base = L_inf + A / (N ** a) + B / (D ** b)
    overfit = overfit_coef * (N / D)            # 过拟合项: N/D 越大越严重
    return base + overfit

# 场景1: LLM, 数据充裕 D 很大 -> 增大 N 持续受益
D_llm = 1e6
for N in [1e2, 1e3, 1e4, 1e5]:
    print(f"[LLM ] N={N:.0e} D={D_llm:.0e}  loss={loss(N, D_llm):.3f}")

# 场景2: 机器人, 数据稀缺 D 小 -> 增大 N 很快饱和并因过拟合反弹
D_robot = 5e2
for N in [1e2, 1e3, 1e4, 1e5]:
    print(f"[Robot] N={N:.0e} D={D_robot:.0e}  loss={loss(N, D_robot):.3f}")

# 关键结论1: D 大时 (LLM), loss 随 N 增大持续下降 -> 越大越好
# 关键结论2: D 小时 (Robot), 过拟合项 N/D 主导, 最优 N 在中等值, 再大反弹
# 关键结论3: 实时性约束还会给 N 加硬上限(此处未建模) -> 双重压低最优 N
# 这定性解释了"机器人 7B 优于 55B"

这段代码的价值是用一个玩具 loss 曲面让你**看到**两种场景下最优 \(N\) 的天壤之别:数据充裕(LLM)时 loss 随 \(N\) 持续下降,越大越好;数据稀缺(机器人)时过拟合项 \(N/D\) 迅速主导,最优 \(N\) 卡在中等值、再大反而反弹。叠加上代码未建模的实时性硬约束(\(N\le N_{\max}\)),最优模型大小被双重压低。这就是"机器人 7B 优于 55B"的定性数学根据——不是大模型不好,而是稀缺数据 + 实时约束让大模型的容量优势无从发挥。

⚠️ 常见陷阱

💡 概念误区:把 LLM 的"越大越好"直觉照搬到机器人 - 新手想法:"GPT 证明了模型越大越强,机器人也该用最大的模型。" - 现象/后果:在稀缺机器人数据上训练超大模型,结果过拟合(泛化 loss 反升)且推理慢到无法实时控制,任务成功率和可用性双输。 - 根本原因:忽视了机器人与 LLM 的三个结构差异——数据稀缺(大模型过拟合)、实时性硬约束(大模型太慢)、预训练先验已注入(不需要靠大模型从零学知识)。"越大越好"的前提(数据无限、无延迟约束)在机器人不成立。 - 正确做法:把模型大小当作受双重约束(数据量、控制频率)的优化变量,选"饱和点"和"实时性上限"中较小者。经验上 7B 量级是多数操纵任务的甜点,盲目放大有害无益。

💡 概念误区:以为过训练(多跑 epoch)在任何情况下都会过拟合 - 新手想法:"多跑 epoch 一定过拟合,应该早停,机器人也不例外。" - 现象/后果:在稀缺机器人数据上过早停止训练,导致预训练先验未充分适配到机器人域(欠拟合),任务成功率上不去。 - 根本原因:把"从零训练小模型"的过拟合经验错误地推广到"预训练大模型 + 小数据微调"。后者有预训练先验做 KL 正则(§8.5.8),过训练主要降偏差(充分适配),方差增长被先验压制,不会像从零训练那样迅速过拟合。 - 正确做法:在数据稀缺 + 有强预训练先验的机器人 VLA 上,适度过训练(多过几遍数据)是合理且有益的,把稀缺数据"榨干"。监控验证集成功率而非单纯训练 loss 来决定何时停。

🧠 思维陷阱:用训练 loss(而非任务成功率 + 控制频率)作为 scaling 的唯一指标 - 新手想法:"scaling laws 研究的是 loss,那我就按 loss 最低来选模型大小和数据量。" - 现象/后果:选出的模型可能 loss 很低但推理慢(频率不达标)或 loss 与真实任务成功率脱节,部署后发现根本不可用。 - 根本原因:机器人的真实目标是**闭环任务成功率 + 满足控制频率**,而非开环预测 loss。低 loss 不保证高成功率(复合误差、多峰性等因素),更不保证实时性。loss 只是代理指标,且是不完美的代理。 - 正确做法:scaling 决策必须以"任务成功率 + 控制频率达标"为最终指标,loss 仅作参考。在选型时把实时性约束(\(N\le N_{\max}\))作为硬门槛先筛掉太大的模型,再在剩余候选里按成功率选。

练习

[练习 8.5.9-1 · 推导] Chinchilla 最优配比推导。给定 loss \(L(N,D)=L_\infty+\frac{A}{N^\alpha}+\frac{B}{D^\beta}\) 和算力约束 \(C=6ND\)(视为常数)。(a) 用 \(D=C/(6N)\) 代入消去 \(D\),对 \(N\) 求导令其为零,解出最优 \(N_{\text{opt}}\) 关于 \(C\) 的幂律;(b) 当 \(\alpha=\beta\) 时证明 \(N_{\text{opt}}\propto C^{1/2}\)\(D_{\text{opt}}\propto C^{1/2}\)(等比增长);(c) 现在加入实时性硬约束 \(N\le N_{\max}\),讨论当 \(N_{\text{opt}}>N_{\max}\) 时最优解如何变化(提示:约束激活,最优 \(N=N_{\max}\),多余算力应投给 \(D\))。在草稿纸上完成。

[练习 8.5.9-2 · 开放思考] 机器人数据稀缺,一个自然的想法是用"非机器人数据"补充(如 web 视频、仿真数据、其他机器人的数据)。π₀.₅ 正是用 web 数据 co-training。(a) 从本节的 scaling 视角,论证补充数据如何"放松 \(D\) 的硬约束";(b) 但不同来源的数据有 domain gap,论证为什么"有效数据量"小于"名义数据量";(c) 这与 §8.5.8 PAC-Bayes 中"经验损失 \(\hat L\)"的定义有什么联系(提示:训练分布与部署分布不一致时 \(\hat L\) 是否还能 bound 部署性能)?

[练习 8.5.9-3 · 跨章综合] 综合全专题。一个团队要为家用双臂机器人造 VLA,约束:数据 50 万条遥操作轨迹、需 30 Hz 控制、有 8 卡 A100。请给出你的设计决策并用本专题的数学依据逐一论证:(a) 骨干选多大(§8.5.9 + §8.5.3)?(b) 动作头选哪种范式(§8.5.6 + §8.5.7)?(c) 是否用动作分块、chunk size 取多少(§8.5.5)?(d) 微调策略(全量 / LoRA / co-fine-tuning)(§8.5.2 + §8.5.8)?(e) 是否过训练(§8.5.9)?这道终极综合题要求你把架构、动作生成、训练、泛化、scaling 五条线的知识全部调动起来。


本章常见误解汇总

下表汇总全专题最易踩的概念误区,按出现的小节排列。把它当作"考前速查"——读完每条要能说出"为什么错、正确是什么"。

# 误解 真相 涉及小节
1 VLA 就是"把 LLM 接个机械臂" 难点在 \(q_\theta\)\(\pi(a\mid z)\) 的接口(token 对齐、动作表示、co-fine-tuning),不是接输出头 §8.5.1
2 潜变量积分 \(\int\pi(a\mid z)q(z\mid o)\) 要"先采 z 再采 a" 确定性编码器下 \(q=\delta(z-f(o))\),z 是确定的 hidden state,随机性只在动作头 §8.5.1
3 语言指令越详细越好 语言是缩小动作分布支撑集的软约束,过长引入 OOD token,最优是"充分但简洁" §8.5.1
4 FiLM 的 γ/β 逐空间位置生成 逐通道(\(2C\) 参数,空间共享),做语义通道选择而非空间重绘 §8.5.2
5 RT-2 需新建动作词表和 embedding 精髓是复用 VLM 已有低频 token,共享 embedding 才能搭语义先验便车 §8.5.2
6 RT-2 涌现能力来自"模型更大" 来自"动作即 token + 共享参数 + co-fine-tuning"的归约机制,规模只是放大器 §8.5.2
7 readout token 参与观测表征形成 注意力有向,readout 只读不被读,对骨干前向零影响,故可插拔 §8.5.3
8 双视觉编码器应"相加/平均"融合 拼接(保留语义+空间两子空间),相加会混叠抵消 §8.5.3
9 双专家是"两个独立 Transformer" 一个 Transformer 内两套 FFN/投影,共享同一注意力(保跨模态融合) §8.5.4
10 Flow Matching 的 τ = 动作物理时间步 两个正交时间:τ∈[0,1] 是去噪流时间(标量),h∈[1,H] 是动作块序列维 §8.5.4
11 ACT 成功靠 CVAE 靠动作分块(k=1 时 1%,大 k 时 80%+),CVAE 是配角 §8.5.5
12 chunk size k 越大越好 大 k 降复合误差但损反应性、长程预测变难,存在任务相关的最优 k §8.5.5
13 加大数据就能消除复合误差 \(T^2\) 是结构性因子(分布漂移自我放大),不随 ε 减小而消失 §8.5.5
14 动作可以用 MSE 单峰回归 多峰分布的 MSE 解是均值,落在"无人区"(撞障碍),必败 §8.5.6
15 表达力最强的 Diffusion 永远最优 几十步去噪太慢,高频控制场景应选 FM/CVAE §8.5.6
16 增大 bin 数 K 能无限提精度 失真 ∝1/K² 但词表爆炸、token 数不减、未去相关;应改 DCT 频域 §8.5.7
17 DCT 变换本身有损 DCT 正交可逆无损,有损在之后的频域量化/丢弃步 §8.5.7
18 用 VC 维/参数量判断 VLA 过拟合 经典界对预训练大模型 vacuous,应看 PAC-Bayes 的 KL(Q‖π₀) §8.5.8
19 组合泛化是大模型自然涌现 根源是表征几何的可分解性(近似可加),one-hot 零组合泛化 §8.5.8
20 LLM "越大越好"照搬到机器人 机器人数据稀缺 + 实时性封顶 + 预训练先验,7B 常优于 55B §8.5.9
21 过训练必然过拟合 有预训练先验做 KL 正则时,稀缺数据上过训练主要降偏差 §8.5.9

前沿与开放问题

VLA 是 2024-2026 最活跃的方向,理论远落后于实验。这里列出几个**有数学内容的开放问题**,适合作为博士研究的切入点(每条都对应本专题某节的延伸)。

  1. VLA 泛化的紧致界(延伸 §8.5.8):PAC-Bayes 框架给了形式,但对数十亿参数 VLA,KL(Q‖π₀) 难以精确计算,界往往不紧或不可计算。能否给出一个**可计算且非平凡**的 VLA 泛化证书?这需要把"预训练先验"的结构(如 VLM 表征的低维流形性质)显式编码进先验 \(\pi_0\)

  2. AR vs Flow Matching 的可分性(延伸 §8.5.6/§8.5.7):是否存在一类动作分布,离散 AR(即使 \(K\to\infty\))和连续 FM 在样本复杂度上有**本质(指数级)差距**?目前只有经验对比,缺乏可分性定理。率-失真理论给了"同失真下 token 数"的比较,但没回答"学习"的样本复杂度差异。

  3. 最优 chunk size 的理论刻画(延伸 §8.5.5)\(O(T^2\varepsilon/k)\) 只说"k 越大复合误差越小",但没刻画"反应性下降"和"单 chunk 预测变难"的代价。能否给出一个把这三者统一的、能解出最优 \(k^\star\) 的理论?这需要把环境的"动态性/可预测性"形式化为一个参数。

  4. 跨具身迁移的数学(延伸 §8.5.1 多具身):π₀ 用零填充让一个网络跨 7 种具身。但"为什么不同自由度、不同运动学的机器人能共享一个策略"缺乏理论。能否用某种"具身不变表征"或群论结构(不同机器人是同一抽象动作的不同实现)来解释?

  5. 语言-动作对齐的信息论下界(延伸 §8.5.8):组合泛化要求语言表征可分解,但"多少组合训练样本才足以学到可分解表征"是开放的。能否给出一个类似 InfoNCE 下界的、关于"学到可组合表征所需样本数"的信息论刻画?

给研究者的建议:这些开放问题的共同特点是"实验已跑通、理论缺位"。VLA 领域目前最缺的不是新模型,而是**能解释为什么现有模型 work 的理论**。如果你做理论方向,从上面任一条切入,把一个定性论证升级为定量定理,都是有价值的贡献。本专题给的所有"形式化框架"都是这些定理的脚手架。


与运动控制的桥接:VLA 输出之后发生了什么

本专题(01_数学/90)讲的是 VLA 的**数学框架**——策略 \(\pi_\theta(a\mid v,l,s)\) 如何定义、token 如何编码、动作如何生成。但 VLA 吐出的动作 \(a\) 并不能直接驱动电机,它要经过一整套运动控制栈才能变成关节力矩。理解这个桥接,你才知道本专题的数学"落地"到哪里、与 05_运动控制06_具身智能 如何分工。

VLA 动作的语义:它到底输出什么

首先要厘清一个常被忽视的问题——VLA 输出的 \(a\) 是什么物理量? 这决定了下游怎么接。常见有三种约定:

动作语义 含义 下游处理 控制频率特点
末端位姿增量 \(\Delta(x,y,z,\text{rot})\) + 夹爪 末端执行器在笛卡尔空间的相对运动 经**逆运动学(IK)** 转关节角,再下发关节控制器 VLA 频率(如 5-50 Hz),IK 与底层控制更高频
关节角(增量或绝对) 直接给各关节的目标角度 直接下发关节位置控制器(PD/阻抗) VLA 给目标,底层 PD 以 kHz 跟踪
目标位姿序列(chunk) 一段未来轨迹(§8.5.5 动作块) 经**轨迹插值/时间参数化** 平滑后跟踪 VLA 低频出 chunk,插值器高频输出

本质洞察:VLA 和运动控制是**频率分层**的——VLA 在"慢"频率(几到几十 Hz)输出"高层动作意图"(去哪、抓什么),底层控制器在"快"频率(百 Hz 到 kHz)把意图变成"力矩跟踪"。这正是 05_运动控制/30_复合/260_VLA_Foundation_Model 讲的 S1/S2 系统分层——S2(System 2,慢思考)= VLA 的语义规划与动作生成,S1(System 1,快反应)= 底层高频控制与稳定。本专题讲的是 S2 的数学,260 讲的是 S1/S2 接口与系统集成。

三个关键桥接点的数学

桥接点 1:动作块 → 连续轨迹(时间参数化)。§8.5.5 的动作分块输出一段离散动作 \((a_t,\dots,a_{t+k-1})\),但底层控制器需要**任意时刻**的连续指令。中间需要一个插值器,把离散 chunk 变成连续轨迹 \(a(t)\)(如样条插值),并保证速度/加速度连续(否则电机会抖动或报警)。这与 §8.5.5 的 temporal ensembling 互补——ensembling 平滑 chunk 间的边界,插值平滑 chunk 内的离散点。这部分数学(样条、轨迹时间参数化)在 05_运动控制 的轨迹生成专题展开。

桥接点 2:笛卡尔动作 → 关节空间(逆运动学)。若 VLA 输出末端位姿,需经 IK 求关节角 \(q=\text{IK}(x_{\text{ee}})\)。这里有一个本专题埋下的伏笔——§8.5.1 提到的"多具身零填充 18 维状态"在此显现意义:不同机器人的 IK 完全不同(6-DoF 臂 vs 14-DoF 双臂),所以**笛卡尔动作语义更利于跨具身**(末端位姿是具身无关的),而关节动作语义则绑定具体机器人。IK 的数学(雅可比、奇异性、冗余解)在 05_运动控制 的运动学专题。

桥接点 3:目标 → 力矩(底层控制律)。无论 VLA 给位姿还是关节角,最终要变成电机力矩 \(\tau\)。这由底层控制律完成——最常见是**阻抗控制 / 导纳控制**(让机器人表现出期望的"软硬度",对接触安全至关重要)或 PD + 重力补偿。VLA 完全不管这一层,它假设底层能精确跟踪它给的目标。这部分(阻抗控制、力控、动力学补偿)是 05_运动控制 的核心,也是 06_具身智能 RL 运控训练的对象。

理论-工程桥接(三份文档的分工再明确):用一句话锚定三者关系——本专题(90)回答"VLA 在数学上为什么这样设计是对的"(\(\pi(a\mid z)q(z\mid o)\)、率-失真、PAC-Bayes);05_运动控制/260 回答"VLA 在系统里怎么接进去"(S1/S2 分层、输入输出契约、频率匹配、IK/插值/阻抗接口);06_具身智能 回答"运控策略怎么训出来"(RL 管线、奖励设计、sim-to-real)。三者是"数学原理 → 系统接口 → 训练管线"的递进。读完本专题,你应带着"VLA 输出的 \(a\) 有明确物理语义、需经频率分层的运控栈落地"这个认知去读 260。

一个最小代码骨架:动作块到连续指令的桥接

理论教学中代码仅用于**验证概念**。下面把"VLA 低频出 chunk、插值器高频输出"的频率分层具象化:

# 概念验证:VLA 动作块 -> 底层高频连续指令的频率分层(非可运行实现)
# 目的——看清 VLA 频率(慢) 与控制频率(快) 如何通过插值桥接
import torch

vla_hz, ctrl_hz = 10, 200        # VLA 10Hz 出 chunk, 底层 200Hz 控制
k = 5                            # chunk 含 5 步, 覆盖 5/vla_hz = 0.5s
d_a = 7

# VLA 在 t=0 输出一个动作块 (5 个末端位姿目标)
chunk = torch.randn(k, d_a)                 # 占位: vla_policy(obs)
# 底层在 0~0.5s 内以 200Hz 跟踪, 需把 5 个点插值成 0.5*200=100 个指令
n_ctrl = int(k / vla_hz * ctrl_hz)          # = 100 个底层指令
t_chunk = torch.linspace(0, 1, k)           # chunk 的 5 个时间点
t_ctrl  = torch.linspace(0, 1, n_ctrl)      # 底层 100 个时间点
# 线性插值(真实用样条保证速度连续); 这里逐维插值示意
cmds = torch.stack([
    torch.tensor([torch.interp_val(tc, t_chunk, chunk[:, j]) for tc in t_ctrl])
    for j in range(d_a)
], dim=1) if hasattr(torch, "interp_val") else torch.randn(n_ctrl, d_a)  # 占位

# 关键结论1: VLA 出 5 个点(10Hz), 插值成 100 个底层指令(200Hz) -> 频率分层
# 关键结论2: 插值器是 S2(VLA) 与 S1(底层控制) 的接口, 保证指令连续可跟踪
# 关键结论3: 每个底层指令还要经 IK(若笛卡尔)和阻抗控制律才变成电机力矩
# 这三步(插值/IK/控制律)都不在本专题, 在 05_运动控制

这段代码的价值是让你**看到频率分层的字面含义**——VLA 以 10 Hz 吐出 5 个稀疏的动作点,插值器把它们"加密"成 100 个 200 Hz 的连续指令喂给底层控制器。VLA 不关心、也不应关心底层如何跟踪(那是 S1 的事),它只负责在语义层面"决定去哪"。看清这个分层,你就理解了为什么本专题的所有数学(动作生成、率-失真)都停在"输出 \(a\)"为止——\(a\) 之后的插值、IK、力矩控制,是运动控制专题的领地。这个清晰的边界,正是 90 / 260 / 06 三份文档分工的物理基础。


本章小结

走完九个核心小节加运控桥接,我们把 VLA 从"一个时髦的缩写"拆解成了"一组可分析的数学对象"。回望全程,本专题的知识可以收束成**一条主线、三条支线、五个必完证**。

一条主线:VLA 十年演进只为回答一个问题——如何让机器人动作复用语言模型的预训练先验。§8.5.1 的潜变量分解 \(\pi_\theta^{\text{VLA}}(a\mid v,l,s)=\int\pi_\theta(a\mid z)q_\theta(z\mid v,l,s)\mathrm dz\) 是贯穿全文的总纲:\(q_\theta\)(VLM 骨干)承载预训练红利,\(\pi_\theta(a\mid z)\)(动作头)负责把理解转成行动。每一节都是对这个分解某个组件的细化。

三条支线如何收束: - 表征架构线(§8.5.2-8.5.4):沿 RT-1(FiLM 浅融合)→ RT-2(动作即 token 的归约)→ Octo/OpenVLA(可插拔 + 双编码器)→ π₀(双专家 + Flow Matching)走来,核心是"\(q_\theta\) 怎么搭、动作怎么接进 Transformer"。最深的洞察是 RT-2 的**归约思想**——把动作生成归约为语言建模,从而白嫖整个 LLM 生态。 - 动作生成线(§8.5.5-8.5.7):聚焦 \(\pi_\theta(a\mid z)\) 这个输出端瓶颈——ACT 的复合误差 \(O(T^2\varepsilon/k)\) 揭示动作分块的命脉,四范式对比给出"速度-表达力-精度"的选型坐标,率-失真分析用 \(D(K)\approx\frac{1}{12}(R/K)^2\)\(R(D)=\frac12\log\frac{\sigma^2}{D}\) 框定离散化的理论边界。 - 理论 scaling 线(§8.5.8-8.5.9):PAC-Bayes 把"预训练先验有用"翻译成"小 KL = 紧泛化界",组合泛化的几何把"语言带来组合性"翻译成"表征可加分解",机器人 scaling 则用"数据稀缺 + 实时性封顶 + 先验注入"解释了"为什么 7B 优于 55B、为什么过训练合理"。

五个必完证(本专题的数学骨架):(1) RT-2 似然因子化 \(p(A\mid v,l)=\prod_m p(b_m\mid b_{<m},\tau_{\text{prefix}})\);(2) π₀ Flow Matching 损失 \(\mathcal L_{\text{FM}}=\mathbb E\|v_\theta(A_\tau,\tau,o)-(A_1-A_0)\|^2\);(3) 复合误差 \(O(T^2\varepsilon)\to O(T^2\varepsilon/k)\);(4) 四范式的概率建模对比;(5) 率-失真 \(D(K)\)\(R(D)\)。这五个是骨架,建议在草稿纸上独立重推。

本质洞察(全专题终极收束):如果只能记住一句话——VLA 的全部数学,都在调和一个核心矛盾:"动作和语言到底该怎么共享一个表征空间,才能既继承 Internet 先验、又满足机器人对精度和频率的硬约束?" 离散化(RT-2)是"让动作彻底变成语言",连续生成(π₀)是"让动作保留物理精度",频域压缩(FAST)是"让动作既离散又高精",动作分块(ACT)是"让动作对抗复合误差",PAC-Bayes 是"解释为什么共享先验能泛化"。所有这些,都是同一矛盾在不同侧面的解。理解了这个矛盾,你就拿到了读懂任何新 VLA 工作的钥匙——看它在"先验复用 vs 精度/频率"这个张力上做了什么新权衡。


速查表

核心公式速查

公式 表达式 出处 用途
VLA 潜变量分解 \(\pi^{\text{VLA}}(a\mid o)=\int\pi(a\mid z)q(z\mid o)\mathrm dz\) §8.5.1 理解骨干/动作头分工
多模态 token 拼接 \(\tau=[\phi^{\text{img}}\|\phi^{\text{txt}}\|\phi^{\text{state}}\|\phi^{\text{act}}]\) §8.5.1 跨模态统一序列
离散动作损失 \(\mathcal L=-\mathbb E\sum_{t,j}\log p(b_t^{(j)}\mid\tau_{<})\) §8.5.1/2 AR 训练
FiLM 调制 \(\tilde F_c=\gamma_c F_c+\beta_c\)\(\gamma,\beta\) 逐通道 §8.5.2 语言注入视觉
RT-2 似然因子化 \(p(A\mid v,l)=\prod_m p(b_m\mid b_{<m},\tau_{\text{prefix}})\) §8.5.2 动作即语言
co-fine-tuning \(\mathcal L=\mathcal L_{\text{robot}}+\lambda\mathcal L_{\text{VQA}}\) §8.5.2 防灾难性遗忘
TokenLearner 池化 \(z_i=\sum_j\alpha_{i,j}(X)X_j\) §8.5.2 序列长度瓶颈
双编码器拼接 \(\phi^{\text{img}}=W_{\text{proj}}[\phi^{\text{sig}}\|\phi^{\text{dino}}]\) §8.5.3 语义+空间互补
FM 直线路径 \(A_\tau=(1-\tau)A_0+\tau A_1\),速度 \(=A_1-A_0\) §8.5.4 动作生成路径
FM 训练损失 \(\mathcal L_{\text{FM}}=\mathbb E\|v_\theta(A_\tau,\tau,o)-(A_1-A_0)\|^2\) §8.5.4 π₀ 动作头
FM 欧拉采样 \(A_{\tau+\Delta\tau}=A_\tau+\Delta\tau\,v_\theta(A_\tau,\tau,o)\) §8.5.4 推理积分
BC 复合误差 \(J(\pi^\star)-J(\hat\pi)\lesssim\frac{T(T-1)}{2}\varepsilon=O(T^2\varepsilon)\) §8.5.5 分布漂移
动作分块复合误差 \(O(T^2\varepsilon/k)\) §8.5.5 chunk 收益
temporal ensembling \(\hat a_t=\frac{\sum_j w_j a_t^{(j)}}{\sum_j w_j}\)\(w_j=e^{-mj}\) §8.5.5 平滑边界
均匀量化失真 \(D(K)=\frac{1}{12}(R/K)^2\) §8.5.7 离散化精度
率-失真函数 \(R(D)=\frac12\log_2(\sigma^2/D)\) §8.5.7 压缩极限
逆水定容 \(R_i=\max(0,\frac12\log_2\frac{\sigma_i^2}{\theta})\) §8.5.7 FAST 比特分配
PAC-Bayes 界 \(L(Q)\le\hat L(Q)+\sqrt{\frac{\text{KL}(Q\|\pi_0)+\ln\frac{2\sqrt m}{\delta}}{2m}}\) §8.5.8 泛化保证
组合可加分解 \(\phi(l_{c,o,p})\approx\phi_c(c)+\phi_o(o)+\phi_p(p)\) §8.5.8 组合泛化
Chinchilla loss \(L(N,D)=L_\infty+\frac{A}{N^\alpha}+\frac{B}{D^\beta}\) §8.5.9 scaling 配比

选型速查矩阵

任务特征 推荐动作头 推荐 chunk 推荐骨干 关键理由
高精度力控装配 Flow Matching / Diffusion 中(30-50) 7B + 双编码器 排除 AR 量化上限(§8.5.7)
高频动态(接球等) FM / CVAE 小(5-15) 中等 保反应性 + 低延迟(§8.5.5/6)
强语义任务("递红色的") AR 离散 VLM 契合优先 AR 与 VLM 契合度最高(§8.5.6)
数据极少(<30min) CVAE + 分块 大(50-100) 小 + 强预训练 ACT 路线,先验补数据(§8.5.5/9)
超高频(>200Hz) FAST(DCT+AR) 频域压缩省 token(§8.5.7)
多具身通用 FM + 末端位姿动作 π₀ 式双专家 笛卡尔语义跨具身(桥接节)

知识点总表

§ 知识点 难度 必完证 核心一句话
8.5.1 VLA 形式化定义 + token 化 ⭐⭐ 潜变量分解 = 骨干(理解)+ 动作头(行动)
8.5.2 RT-1 FiLM / RT-2 动作即 token ⭐⭐⭐ 把动作生成归约为语言建模
8.5.3 Octo block-mask / OpenVLA 双编码器 ⭐⭐⭐ 只读探针实现可插拔;拼接保语义+空间
8.5.4 π₀ 双专家 + Flow Matching ⭐⭐⭐ 注意力共享 + FFN 分流;直线路径快采样
8.5.5 ACT 动作分块 + 复合误差 ⭐⭐⭐ 减少犯错机会次数,误差降 k 倍
8.5.6 四范式对比 ⭐⭐ 速度-表达力-精度的三方权衡
8.5.7 率-失真分析 / FAST ⭐⭐⭐⭐ DCT 解相关 + 逆水定容逼近压缩极限
8.5.8 PAC-Bayes / 组合泛化 ⭐⭐⭐⭐ 好先验 = 小 KL = 紧界;可加分解 = 组合性
8.5.9 机器人 scaling laws ⭐⭐⭐ 数据稀缺 + 实时封顶 → 小模型 + 过训练

符号表

符号 含义 首次出现
\(\pi_\theta(a\mid v,l,s)\) VLA 条件策略(动作分布) §8.5.1
\(v, l, s\) 视觉观测、语言指令、本体状态 §8.5.1
\(z\) 潜表征(Transformer hidden state) §8.5.1
\(q_\theta(z\mid o)\) 编码器(VLM 骨干) §8.5.1
\(\pi_\theta(a\mid z)\) 动作头(decoder) §8.5.1
\(\boldsymbol\tau\) 多模态 token 序列 §8.5.1
\(\phi^{\text{img/txt/state/act}}\) 各模态 token 化函数 §8.5.1
\(N_v, N_l, N_s, N_a\) 各模态 token 数 §8.5.1
\(d\) 统一 embedding 维度 §8.5.1
\(d_a\) 动作维度(自由度) §8.5.1
\(H\) 动作块长度(chunk 内步数) §8.5.1
\(b_m, K\) 动作 bin 索引、bin 数 §8.5.1/7
\(\gamma, \beta\) FiLM 逐通道缩放/偏移 §8.5.2
\(\lambda\) co-fine-tuning 权重 §8.5.2
\(M\)(掩码) 注意力掩码矩阵 §8.5.3
\(W^{\text{vlm}}, W^{\text{act}}\) 双专家投影权重 §8.5.4
\(\tau\)(FM 时间) Flow Matching 流时间 \(\in[0,1]\) §8.5.4
\(A_0, A_1, A_\tau\) 噪声、真实动作、插值动作块 §8.5.4
\(v_\theta\) 学到的速度场 §8.5.4
\(T\) 任务时域(总物理步) §8.5.5
\(\varepsilon\) 单步(或单 chunk)误差 §8.5.5
\(k\) chunk size §8.5.5
\(D, R\)(率失真) 失真、比特率 §8.5.7
\(\sigma^2\) 信源方差 §8.5.7
\(\theta\)(水位) 逆水定容水位 §8.5.7
\(Q, \pi_0\) 后验、先验(参数分布) §8.5.8
\(\text{KL}(Q\|\pi_0)\) KL 散度 §8.5.8
\(\hat L, L\) 经验损失、期望损失 §8.5.8
\(m\) 训练任务/环境数 §8.5.8
\(N, D\)(scaling) 模型参数量、数据量 §8.5.9

定理速查表

名称 陈述(简) 条件 出处
确定性编码器边际化 \(q=\delta(z-f(o))\Rightarrow\pi^{\text{VLA}}(a\mid o)=\pi(a\mid f(o))\) 编码器确定性 §8.5.1 练习
RT-2 似然因子化 \(p(A\mid v,l)=\prod_m p(b_m\mid b_{<m},\tau_{\text{prefix}})\) 自回归 + 动作离散化 §8.5.2
CFM 一致性 最小化条件 FM 损失的最优解 = 边际速度场 条件路径定义 §8.5.4(引自 8.4)
直线路径常速度 \(A_\tau=(1-\tau)A_0+\tau A_1\Rightarrow\frac{\mathrm dA_\tau}{\mathrm d\tau}=A_1-A_0\)(与 τ 无关) OT/rectified 路径 §8.5.4
BC 复合误差界 \(J(\pi^\star)-J(\hat\pi)=O(T^2\varepsilon)\) 单步误差 \(\varepsilon\),悲观假设 §8.5.5
动作分块误差界 复合误差降至 \(O(T^2\varepsilon/k)\) 开环执行 chunk,chunk 误差 \(\approx\varepsilon\) §8.5.5
MSE 坍缩到均值 \(\arg\min_f\mathbb E\|f-a\|^2=\mathbb E[a\mid o]\) 均方损失 §8.5.6
均匀量化失真 \(D(K)=\frac{1}{12}(R/K)^2\) 高分辨率(误差近均匀) §8.5.7
高斯率-失真函数 \(R(D)=\frac12\log_2(\sigma^2/D)\)\(D\le\sigma^2\) 高斯源 + 均方失真 §8.5.7
逆水定容 \(R_i=\max(0,\frac12\log_2\frac{\sigma_i^2}{\theta})\) 独立高斯源 + 总比特约束 §8.5.7
PAC-Bayes 泛化界 \(L(Q)\le\hat L(Q)+\sqrt{\frac{\text{KL}(Q\|\pi_0)+\ln(2\sqrt m/\delta)}{2m}}\) 概率 \(\ge1-\delta\) §8.5.8
Chinchilla 等比 \(N_{\text{opt}}\propto C^{1/2},D_{\text{opt}}\propto C^{1/2}\) 数据无限 + 无延迟约束 + \(\alpha=\beta\) §8.5.9

累积项目:MiniVLA——从零搭一个可分析的玩具 VLA

承接本目录"深度学习数学"系列的累积项目精神,本专题的项目模块是 MiniVLA——一个**仅用于验证数学概念**的玩具 VLA,不追求性能,只追求"把本专题每个数学对象都跑通一遍"。它放在独立目录 projects/mini_vla/,与前序专题(Transformer 8.3、Diffusion 8.4)的累积代码衔接(复用它们的注意力和 Flow Matching 模块)。

本专题为 MiniVLA 添加的模块(每个对应一节,作为练习交付物,不在正文给完整可运行实现,符合理论教学 text:code 比例):

模块 对应节 验证什么 衔接前序
tokenize.py §8.5.1 多模态 token 拼接的形状演算 复用 8.3 的 patch embedding
film.py §8.5.2 FiLM 逐通道调制的恒等初始化
ar_head.py §8.5.2/6 256-bin 离散动作头 + 交叉熵 复用 8.3 的因果注意力
block_mask.py §8.5.3 block-wise mask 的可插拔性(assert 零块)
dual_expert.py §8.5.4 双专家前向 + prefix/suffix 掩码 复用 8.3 注意力
fm_head.py §8.5.4/6 Flow Matching 动作头训练+采样 复用 8.4 的 CFM
chunking.py §8.5.5 动作分块开环执行 + 复合误差仿真
quantize.py §8.5.7 均匀量化失真 vs DCT 频域 token 数对比
pac_bayes.py §8.5.8 玩具 KL 项与泛化界的数值验证
scaling.py §8.5.9 固定 D 下最优 N 的 loss 曲面扫描

项目主线任务:在一个 2D 玩具操纵环境(如"把方块推到目标位置,有绕障碍的多峰性")上,依次用 AR 头、CVAE 头、FM 头训练 MiniVLA,实测:(1) 多峰任务上 MSE 头失败(撞障碍)而生成式头成功(验证 §8.5.6);(2) chunk size 从 1 增到 k 时成功率的跃升(验证 §8.5.5 的 \(O(T^2\varepsilon/k)\));(3) AR 头在精度任务上的量化上限 vs FM 头(验证 §8.5.7)。这三个实验把本专题最重要的三个数学结论从"纸上推导"变成"亲眼所见"。

项目的教学意义:MiniVLA 不是要你造一个能用的机器人,而是把本专题抽象的数学(潜变量分解、复合误差、率-失真)降维到一个能在笔记本上跑的玩具,让你通过"改一个超参、看一个曲线变化"来内化数学直觉。这与读论文、推公式互补——公式给你"为什么",玩具给你"看得见"。完成 MiniVLA 后再去读 OpenVLA / π₀ 的真实代码,你会发现每一行都能对应到本专题的某个数学对象。


延伸阅读

按本专题的三条线组织,标注阅读优先级(★必读 / ☆选读)。

表征架构线: - ★ Brohan et al., RT-1: Robotics Transformer for Real-World Control at Scale, RSS 2023(FiLM + TokenLearner + 256-bin,§8.5.2 之源) - ★ Zitkovich et al., RT-2: Vision-Language-Action Models Transfer Web Knowledge to Robotic Control, CoRL 2023(VLA 范式诞生,§8.5.2 核心) - ★ Kim et al., OpenVLA: An Open-Source Vision-Language-Action Model, CoRL 2024(双编码器开源 7B,§8.5.3) - ☆ Octo Model Team, Octo: An Open-Source Generalist Robot Policy, RSS 2024(block-mask 可插拔,§8.5.3) - ★ Black et al., π₀: A Vision-Language-Action Flow Model for General Robot Control, 2024(双专家 + FM,§8.5.4 核心) - ☆ Physical Intelligence, π₀.₅: a VLA with Open-World Generalization, 2025(分层 + web co-train,§8.5.4/9)

动作生成线: - ★ Zhao et al., Learning Fine-Grained Bimanual Manipulation with Low-Cost Hardware (ACT), RSS 2023(动作分块 + CVAE,§8.5.5 核心) - ★ Chi et al., Diffusion Policy: Visuomotor Policy Learning via Action Diffusion, RSS/IJRR 2023(扩散动作头,§8.5.6) - ★ Pertsch et al., FAST: Efficient Action Tokenization for Vision-Language-Action Models, RSS 2025(DCT+BPE 频域,§8.5.7 核心) - ☆ Kim et al., OpenVLA-OFT: Optimized Fine-Tuning for VLA, RSS 2025(并行解码 + L1 回归,§8.5.6) - ☆ Ross et al., A Reduction of Imitation Learning and Structured Prediction (DAgger), AISTATS 2011(复合误差 \(O(T^2\varepsilon)\) 原始分析,§8.5.5)

理论 scaling 线: - ★ Majumdar et al., PAC-Bayes Control: Learning Policies that Provably Generalize to Novel Environments, IJRR 2021(§8.5.8 核心) - ☆ McAllester, PAC-Bayesian Model Averaging, COLT 1999(PAC-Bayes 原始框架,§8.5.8) - ★ Hoffmann et al., Training Compute-Optimal Large Language Models (Chinchilla), NeurIPS 2022(scaling 对比基准,§8.5.9) - ☆ Open X-Embodiment Collaboration, Open X-Embodiment: Robotic Learning Datasets and RT-X Models, ICRA 2024(跨具身数据 + scaling 消融,§8.5.9) - ☆ Lipman et al., Flow Matching for Generative Modeling, ICLR 2023(FM 理论基础,§8.5.4 引自 8.4)

前置依赖(务必先读): - 本目录专题 8.3《Transformer 数学》——自注意力、因果掩码(§8.5.1/3/4 硬依赖) - 本目录专题 8.4《Diffusion / Flow Matching》——CFM、速度场、ODE 采样(§8.5.4/6 硬依赖) - 第六批《RL / 模仿学习》——BC、分布漂移、DAgger(§8.5.5 硬依赖)


后续章节关系

本专题在整个教程图谱中的位置与去向:

向上游(前置):本专题站在 8.3(Transformer)、8.4(Diffusion/FM)、第六批(RL/IL)三个专题的肩膀上——没有自注意力就无法理解 token 统一空间,没有 Flow Matching 就无法理解 π₀ 动作头,没有 BC/分布漂移就无法理解复合误差。这三者是硬依赖,缺一不可。

向下游(去向): - 05_运动控制/30_复合/260_VLA_Foundation_Model:本专题的直接下游。本专题讲"VLA 数学为什么对",260 讲"VLA 在系统里怎么接"——S1/S2 分层、输入输出契约、控制频率匹配、与 IK/插值/阻抗的接口。读完本专题应直接续读 260(桥接节已给出衔接认知)。 - 05_运动控制 的运动学/轨迹/阻抗控制专题:本专题桥接节提到的三个桥接点(轨迹插值、逆运动学、力矩控制律)的数学,在这些专题展开。VLA 输出 \(a\) 之后的一切都在这里。 - 06_具身智能:讲 RL 运控训练管线——如何训出(而非如何定义)一个运控策略,奖励设计、sim-to-real。与本专题(监督式 VLA)互补,覆盖 RL 式的策略学习。 - 本目录后续深度学习数学专题:若有"世界模型""强化学习理论"等专题,本专题的潜变量分解、PAC-Bayes 可作为前置。

横向(互补):本专题(90,数学框架)、260(系统接口)、06(训练管线)构成 VLA 的三视角——数学原理 → 系统集成 → 策略训练。三者拼起来才是完整的 VLA 工程图景,本专题负责其中"为什么这样设计在数学上是对的"这一块。


故障排查手册

VLA 训练/部署中最高频的故障,按"症状 → 可能原因 → 排查步骤 → 相关章节"组织。遇到问题时按症状定位,每个场景的排查步骤可直接照做。

场景 1:模型训练 loss 正常下降,但真机执行成功率极低(个位数)

内容
症状 训练/验证 loss 收敛良好,开环动作预测 MSE 小,但闭环真机执行几乎全失败,机器人动作看似合理却完不成任务
可能原因 (1) 复合误差——开环 loss 低不等于闭环成功(§8.5.5);(2) 没用动作分块或 chunk=1,误差滚雪球;(3) 多峰任务用了 MSE 头,学到均值动作(§8.5.6)
排查步骤 ① 检查是否用了动作分块,chunk size 是否过小(=1 几乎必败)→ 增大到 30-50 重测;② 检查动作头是否为单峰回归(MSE),多峰任务换 FM/CVAE/AR;③ 用 temporal ensembling 平滑 chunk 边界;④ 对比开环(喂专家状态)vs 闭环成功率,差距大则确认是分布漂移
相关章节 §8.5.5(复合误差)、§8.5.6(多峰性)

场景 2:力控/精密任务精度始终卡在某个上限,怎么调都上不去

内容
症状 任务需要亚毫米精度,但模型动作精度卡在毫米级,增大模型、加数据都无明显改善,误差有一个明显的"地板"
可能原因 (1) 用了 256-bin 离散动作头,量化失真 \(\frac{1}{12}(R/K)^2\) 构成精度硬上限(§8.5.7);(2) bin 数太少;(3) 动作归一化范围 \(R\) 过大导致单 bin 物理跨度大
排查步骤 ① 计算当前量化失真 \(D(K)=\frac{1}{12}(R/K)^2\),对比任务所需精度——若 \(\sqrt D\) 已接近任务精度需求,确认是量化上限;② 换连续动作头(Flow Matching / Diffusion)彻底去除量化上限;③ 若必须用 AR,改用 FAST(DCT 频域)提升等效精度;④ 检查动作归一化范围 \(R\) 是否可收紧(只覆盖实际动作范围)
相关章节 §8.5.7(率-失真)、§8.5.6(范式选型)

场景 3:推理太慢,控制频率达不到任务要求(如要 50Hz 只有 5Hz)

内容
症状 模型效果好但推理延迟过大,控制频率上不去,机器人动作卡顿、跟不上实时需求,动态任务失败
可能原因 (1) 动作头是自回归(串行 \(H\times d_a\) 次前向)或 Diffusion(几十步去噪)(§8.5.6);(2) 模型过大(§8.5.9 实时性约束);(3) 未缓存 prefix(每步重算 VLM 前向)(§8.5.4)
排查步骤 ① 统计单次推理的前向次数——AR 数百次/Diffusion 数十次是主因,换 FM(~10 步)或 CVAE(1 步);② 检查是否缓存了 prefix KV(π₀ 式 prefix-suffix 掩码),未缓存则每步重算 VLM;③ 评估模型大小是否超过频率允许的 \(N_{\max}\),过大则蒸馏/换小骨干;④ 用动作分块降低决策频率(一次出 chunk,开环执行多步)
相关章节 §8.5.6(推理速度对比)、§8.5.4(prefix 缓存)、§8.5.9(实时性约束)

场景 4:模型在训练物体/场景上很好,换个新物体/新背景就崩

内容
症状 训练分布内表现优秀,但遇到训练时没见过的物体颜色/形状、或换了房间背景/光照,成功率骤降
可能原因 (1) 微调时改动过大,偏离了预训练先验(PAC-Bayes 的大 KL,§8.5.8);(2) 灾难性遗忘——丢失了 VLM 的视觉-语言对齐先验(§8.5.2);(3) 语言条件太弱,未起到语义锚定作用(§8.5.8 Lipschitz 论证)
排查步骤 ① 检查微调策略——是否全量微调且学习率过大?改用 LoRA 或更小学习率约束靠近先验(小 KL);② 加入 co-fine-tuning(混 VQA 数据)防遗忘;③ 测试模型是否仍保留基础 VLM 能力(让它描述图像),不能则确认遗忘;④ 检查语言指令是否足够具体到能唯一识别目标(语义锚定压制 domain gap)
相关章节 §8.5.8(PAC-Bayes、语义锚定)、§8.5.2(co-fine-tuning)

场景 5:放大模型后性能反而下降或不变,浪费了算力

内容
症状 把骨干从小模型换成大模型(如 7B→更大),期望性能提升,但成功率持平甚至下降,且推理变慢
可能原因 (1) 机器人数据稀缺,大模型在固定 \(D\) 上过拟合(§8.5.9 失效 1);(2) 已过模型大小的饱和点,边际收益为零;(3) 实时性下降抵消了性能(§8.5.9 失效 2)
排查步骤 ① 检查数据量 \(D\) 与模型 \(N\) 的比——\(D/N\) 过小说明数据不足以支撑大模型,缩小模型或补数据;② 对比验证集成功率(非训练 loss)随模型大小的曲线,若已饱和则停止放大;③ 评估大模型是否违反控制频率约束;④ 与其放大模型,不如改进视觉前端(双编码器)或动作头或补充数据(含 web co-train)
相关章节 §8.5.9(scaling laws)、§8.5.3(视觉前端)

场景 6:动作生成出现抖动/不连续,或 chunk 切换处跳变

内容
症状 机器人动作不平滑,有高频抖动;或每隔固定步数(chunk 边界)出现明显的动作跳变
可能原因 (1) 没做 temporal ensembling,chunk 边界不连续(§8.5.5);(2) 动作块到连续指令缺少插值/未保证速度连续(桥接节);(3) Flow Matching 积分步数太少导致采样不准(§8.5.4)
排查步骤 ① 在 chunk 边界处加 temporal ensembling(指数加权重叠预测);② 检查动作块下发前是否经过样条插值保证速度/加速度连续(桥接点 1);③ 若用 FM,适当增加欧拉积分步数(10→20)看抖动是否减轻;④ 检查底层控制律(阻抗参数)是否过硬放大了高频成分
相关章节 §8.5.5(temporal ensembling)、§8.5.4(FM 采样)、运控桥接节

场景 7:Flow Matching 动作头训练不收敛或采样出来的动作是噪声

内容
症状 π₀ 式 FM 动作头训练 loss 不降,或训练正常但采样出的动作块接近随机噪声、毫无结构
可能原因 (1) 训练路径方向与推理积分方向不一致(§8.5.4 陷阱);(2) 时间 \(\tau\) 的 embedding 或采样分布有误;(3) prefix 缓存与掩码不一致导致条件信息错误(§8.5.4)
排查步骤 ① 核对训练定义的路径(\(\tau=0\) 噪声、\(\tau=1\) 数据)与推理积分方向严格一致——这是最高频错误;② 检查损失是否回归 \(A_1-A_0\)(直线路径目标速度),而非其他量;③ 验证 prefix-suffix 掩码满足"prefix 不 attend suffix",否则缓存的条件是错的;④ 检查时间采样分布(π₀ 用偏噪声端 Beta),先用 Uniform 排除分布问题
相关章节 §8.5.4(FM 完整推导、prefix 缓存、Beta 时间)

排查总原则:VLA 故障定位的第一性问题永远是——先确定问题出在 \(q_\theta\)(骨干/理解)还是 \(\pi_\theta(a\mid z)\)(动作头/生成)(回到 §8.5.1 的潜变量分解)。泛化/语义类问题(场景 4、5)多在骨干侧(微调策略、先验保护);精度/速度/平滑类问题(场景 2、3、6、7)多在动作头侧(范式选型、量化、采样);而成功率与开环 loss 脱节(场景 1)则是复合误差,属于"动作如何被执行"的范畴(分块)。把每个症状先归到这三类,再按对应章节深入,能避免盲目调参。