VLA 前置知识:从模仿学习到 ACT¶
学 VLA 前最容易晕的地方不是某个公式,而是很多词来自不同分类轴:模仿学习、行为克隆在说训练方法;ACT、Diffusion Policy、VLA 在说策略或模型结构;动作 token、action chunk、flow 在说动作表示和动作头。
1. 先把分类轴分开¶
不要把所有名词硬塞进一棵树里。更清楚的方式是分成三条轴:
| 轴 | 问的问题 | 例子 |
|---|---|---|
| 学习范式 | 模型怎么从数据中学? | 模仿学习、强化学习、监督学习 |
| 训练目标 | 训练时具体拟合什么? | 行为克隆、DAgger、GAIL、IRL |
| 模型/策略结构 | 模型长什么样,怎么输出动作? | ACT、Diffusion Policy、VLA、OpenVLA、pi0 |
所以一句话里可以同时出现多个标签:
它们不是互相排斥的类别,而是从不同角度描述同一个系统。
最重要的记法
模仿学习/行为克隆回答“怎么学”;ACT/VLA 回答“模型是什么结构”;动作表示回答“动作怎么被模型输出”。
2. Policy:机器人策略到底是什么?¶
机器人学习里经常说 policy,中文可以理解为“策略”。它就是一个从当前信息到动作的函数:
其中:
- \(o_t\) 是当前观测,例如图像、关节角、夹爪状态。
- \(a_t\) 是机器人要执行的动作。
- \(\theta\) 是模型参数。
如果加入语言指令:
如果加入 action chunk:
这就是很多 VLA 的基本形式:看当前场景和语言指令,输出未来一小段动作。
2.1 开环与闭环¶
机器人控制一定要区分开环和闭环:
| 类型 | 含义 | 风险 |
|---|---|---|
| 开环 | 一次生成一长串动作,然后照着执行 | 中途物体动了也不会及时修正 |
| 闭环 | 执行几步后重新观察,再预测动作 | 更稳,但对推理延迟更敏感 |
VLA 通常是闭环使用:
这也是为什么只看离线 loss 不够。模型执行出的动作会改变下一帧观测,错误可能一步步放大。
3. 模仿学习:从专家示范中学行为¶
模仿学习(Imitation Learning)的核心是:让模型从专家示范里学会做任务。
专家可以是:
- 人类遥操作机器人。
- 更强的控制器或规划器。
- 另一个已经训练好的策略。
- 仿真中的自动专家。
一条示范轨迹通常长这样:
如果带语言任务:
模仿学习并不只是一种算法,而是一类方法。它们共同点是利用专家行为,区别在于“怎么利用”。
| 方法 | 核心思想 | 适合理解 |
|---|---|---|
| 行为克隆 BC | 直接拟合专家动作 | 当前 VLA 最常用的基础训练方式 |
| DAgger | 模型先执行,专家再纠正模型遇到的状态 | 缓解分布偏移 |
| 逆强化学习 IRL | 从专家行为反推奖励函数 | 专家为什么这么做 |
| GAIL | 让模型轨迹分布骗过判别器,像专家轨迹 | 从轨迹分布角度模仿 |
对 VLA 入门来说,先重点理解行为克隆和分布偏移就够了。
4. 行为克隆:最直接的模仿学习¶
行为克隆(Behavior Cloning, BC)把机器人学习变成监督学习:
数学上:
有语言时:
这就是很多 VLA 训练的底层形式:
4.1 行为克隆为什么简单?¶
因为它不需要设计奖励函数,也不需要机器人自己探索。只要有专家数据,就能做监督训练:
| 动作形式 | 常用 loss |
|---|---|
| 连续动作 | MSE / L1 |
| 离散动作 token | Cross Entropy |
| 高斯策略 | Negative Log Likelihood |
| Diffusion Policy | 去噪 loss |
| Flow policy | flow matching loss |
行为克隆的“克隆”不是复制专家程序,而是拟合专家在数据里的输入输出关系。
4.2 行为克隆为什么会失败?¶
行为克隆最大的坑是分布偏移(distribution shift)。
训练时模型看到的是专家轨迹上的状态:
推理时模型看到的是自己动作造成的新状态:
如果模型第一步偏了一点,第二步看到的画面可能已经不是专家数据里的画面。接下来错误会继续放大,这叫复合误差(compounding error)。
离线准确不等于执行成功
验证集动作误差低,只说明模型在专家状态附近像专家。机器人真正执行时,会进入自己造成的状态分布,所以必须做 rollout 评估。
5. DAgger:为什么要让专家纠正模型?¶
DAgger(Dataset Aggregation)的动机是解决行为克隆的分布偏移。
行为克隆只收集专家自己走过的状态。DAgger 会让当前模型也上场执行,然后请专家给这些状态标注正确动作:
直觉上,DAgger 在教模型:
VLA 实践里不一定真的跑标准 DAgger,因为请专家在线纠正成本很高。但这个思想很重要:如果模型常在某些状态失败,就要补这些状态附近的数据,而不是只堆更多完美成功轨迹。
6. ACT:Action Chunking with Transformers¶
ACT 是学习 VLA 前很值得掌握的机器人策略。它的核心不是语言,而是:
典型形式:
其中:
- \(o_t\) 是图像观测。
- \(s_t\) 是机器人本体状态,例如关节角。
- \(a_{t:t+H}\) 是未来 \(H\) 步动作。
ACT 常用行为克隆训练:
6.1 ACT 解决什么问题?¶
如果模型每次只预测一步动作,就容易遇到:
- 高频调用模型,推理延迟大。
- 单步动作抖动。
- 对长一点的接近、抓取、放置过程缺少整体感。
ACT 用 action chunking 一次预测未来多步:
执行时可以只执行前几步,然后重新观察并预测下一段。这样既能保持闭环,又比每一步都调用大模型更平滑。
6.2 ACT 的整体结构¶
ACT 不只是“用了 Transformer”这么简单。原始 ACT 更接近一个 DETR 风格的 Transformer policy + Conditional VAE。
先看整体数据流:
多相机图像 + 当前关节状态
↓
视觉编码器 CNN/ResNet
↓
视觉特征 token + 关节状态 token + latent z
↓
Transformer policy
↓
action queries
↓
线性动作头
↓
未来 H 步连续动作 chunk
更具体地说,ACT 的输入通常包括:
| 输入 | 作用 |
|---|---|
| 多个相机图像 | 看物体、手爪、接触位置和环境状态 |
| 当前机器人关节状态 \(q_t\) | 告诉模型机器人自己在哪里 |
| 训练时的未来专家动作 chunk | 只在训练 CVAE latent 时使用 |
输出通常是未来 \(H\) 步目标关节位置:
在 ALOHA/ACT 里,动作不是自然语言 token,也不是直接电机力矩,而是目标关节位置。真正驱动电机的仍然是底层 PID 控制器:
所以 ACT 是端到端从图像到动作,但不是直接把神经网络输出打到电机力矩上。
6.3 ACT 有没有用 ViT?¶
原始 ACT 通常不是 ViT 路线。它更常见的视觉前端是 CNN/ResNet:
ViT 的典型路线是:
所以要分清:
| 问题 | 回答 |
|---|---|
| ACT 里有没有 Transformer? | 有,主要用在动作策略部分 |
| 原始 ACT 的视觉编码器一定是 ViT 吗? | 不是,常见是 CNN/ResNet |
| 能不能把 ACT 的视觉前端换成 ViT? | 可以,后续变体或自己的实现可以这么做 |
| ACT 的本质是不是 ViT? | 不是,ACT 的本质是 action chunking + Transformer policy + CVAE |
也就是说,ACT 不是:
而更像:
6.4 DETR 的 object query 是什么?¶
理解 ACT 的 action query 前,先理解 DETR 的 object query。
传统目标检测通常先生成很多候选框,再筛选。DETR 换了一种做法:它放入一组可学习的 query,让每个 query 去图像特征里“询问”一个可能的物体。
直觉上:
object query 1: 图像里有没有第 1 个物体?在哪里?
object query 2: 图像里有没有第 2 个物体?在哪里?
object query 3: 图像里有没有第 3 个物体?在哪里?
...
这些 query 一开始没有具体语义,只是可学习向量。经过 Transformer decoder 的 cross-attention 后,它们会从图像特征里取信息。最后每个 query 输出:
所以 object query 不是“文本问题”,而是神经网络里一组可学习的槽位:
6.5 ACT 的 action query 是什么?¶
ACT 借用了类似 DETR 的思想,只是 query 不再负责检测物体,而是负责预测未来动作。
可以把 action query 想成:
action query 1: 预测未来第 1 步动作
action query 2: 预测未来第 2 步动作
action query 3: 预测未来第 3 步动作
...
action query H: 预测未来第 H 步动作
Transformer 让这些 action queries 去 attend 当前视觉特征、当前关节状态和 latent z。每个 query 最后得到一个 hidden state:
再经过线性层或 MLP 动作头:
hidden_1 -> action head -> a_t
hidden_2 -> action head -> a_{t+1}
...
hidden_H -> action head -> a_{t+H}
所以你可以说“动作由 Transformer 输出”,但更严格的说法是:
也就是:
这和 LLM 输出文字 token 不一样。ACT 输出的是连续控制值,不是词表上的离散 token。
6.6 Conditional VAE 是什么?¶
ACT 还用了 Conditional VAE,简称 CVAE。这个部分一开始容易陌生,但它的动机很朴素:同一个观测下,人类专家可能有多种合理动作风格。
比如同样是插电池:
如果只用普通 MSE 拟合,模型可能把这些风格平均掉。CVAE 引入一个 latent variable \(z\),用来表示动作序列里的隐含风格。
VAE 的基本结构是:
Conditional VAE 多了一个条件:
放到 ACT 里:
训练时,CVAE encoder 会看到未来专家动作 chunk:
然后 policy decoder 根据图像、当前状态和 \(z\) 预测动作 chunk:
推理时没有未来专家动作,所以 encoder 不能用。ACT 通常直接把 \(z\) 设成 prior 的均值,也就是 0:
这意味着:训练时用 \(z\) 帮模型理解专家动作的变化;推理时用一个默认风格生成动作。
6.7 ACT 的训练和推理¶
训练样本可以写成:
其中:
- \(I_t\) 是当前多相机图像。
- \(q_t\) 是当前关节状态。
- \(a_{t:t+H}\) 是未来专家动作 chunk。
训练流程:
1. 多相机图像进入 CNN/ResNet,得到视觉特征
2. 当前关节状态 q_t 进入 MLP,得到状态 embedding
3. q_t 和专家动作 chunk 进入 CVAE encoder,得到 latent z
4. 视觉特征、状态 embedding、z、action queries 进入 Transformer policy
5. 每个 action query 输出一个未来时间步的 hidden state
6. action head 把 hidden state 转成连续动作
7. 用动作重建 loss + KL loss 训练
损失可以粗略理解成:
第一项让预测动作接近专家动作;第二项让 latent \(z\) 不要乱跑,保持接近标准高斯先验。
推理流程:
1. 读取当前图像和关节状态
2. 图像进入 CNN/ResNet,关节状态进入 MLP
3. 设置 z = 0
4. Transformer policy 一次预测未来 H 步动作
5. 执行动作 chunk 的前几步
6. 重新观察,再预测下一段
6.8 Temporal Ensembling 是什么?¶
ACT 还常配合 temporal ensembling,让动作更平滑。
如果每一帧都重新预测一个 chunk,那么同一个未来时刻会被多个 chunk 覆盖:
t 时刻预测: a_t, a_{t+1}, a_{t+2}
t+1 时刻预测: a_{t+1}, a_{t+2}, a_{t+3}
t+2 时刻预测: a_{t+2}, a_{t+3}, a_{t+4}
例如 \(a_{t+2}\) 可能被 3 次预测到。Temporal ensembling 会把这些预测做加权平均,通常更相信最近的预测:
这样能减少动作跳变,让机器人执行更顺。
6.9 ACT 和 VLA 的关系¶
ACT 原始形式通常不是典型 VLA,因为它可以没有语言输入:
但 ACT 很适合作为 VLA 前置知识,因为它教你理解:
- 什么是 policy。
- 图像怎么接到动作。
- 为什么要预测 action chunk。
- 为什么机器人策略要考虑执行频率和动作平滑。
- Transformer 不只能生成文字,也能生成动作序列。
如果给 ACT 加上语言条件:
它就非常接近一个小型 VLA policy。
怎么定位 ACT
ACT 不是 VLA 的下位概念,也不是模仿学习的同义词。它是一个常用行为克隆训练的机器人策略架构,特别适合理解 action chunking。
7. Diffusion Policy:从回归动作到生成动作¶
Diffusion Policy 也是重要前置。它让你理解:机器人动作不一定要直接回归一个平均值,也可以把动作块当作要生成的数据。
普通行为克隆可能学成:
Diffusion Policy 更像:
为什么这有意义?因为同一个状态下可能有多种合理动作:
如果用 MSE 直接回归,这些轨迹可能被平均成一条“不左不右”的坏轨迹。Diffusion Policy 能更自然地表示多峰动作分布。
更完整的 diffusion/flow 动作头可以看 动作表示与策略头。
8. VLA:在机器人策略上加语言和大模型知识¶
VLA(Vision-Language-Action)可以看成把三块接起来:
典型形式:
其中:
- \(o_t\) 是图像或视频。
- \(l\) 是语言指令。
- \(s_t\) 是机器人状态。
- \(a_{t:t+H}\) 是要执行的动作或动作块。
VLA 和普通机器人策略的区别在于:它不只是根据图像做固定任务,而是让语言改变任务目标。
例如同一张桌面图像:
语言不是装饰,它应该真的改变动作。
8.1 VLA 一定用行为克隆吗?¶
不一定。VLA 是模型范式,不是训练方法。
但现实中,很多 VLA 的基础训练确实大量使用行为克隆,因为机器人数据通常是专家示范轨迹:
之后还可以叠加:
- 大规模视觉语言预训练。
- 多机器人数据混合训练。
- 离线强化学习。
- 在线强化学习微调。
- 人类偏好或成功率反馈。
- 规划器生成的数据。
所以更准确的说法是:
9. 这些概念怎么排队学习?¶
如果目标是读懂 OpenVLA、RT-2、pi0、SmolVLA,可以按下面顺序:
| 顺序 | 学什么 | 学到什么程度 |
|---|---|---|
| 1 | Policy / rollout / 闭环控制 | 能解释“观测到动作”和“执行后再观察” |
| 2 | 模仿学习与行为克隆 | 能写出 \((o,l)\rightarrow a\) 的监督学习目标 |
| 3 | 分布偏移与 DAgger | 能理解为什么离线 loss 低也会实机失败 |
| 4 | 机器人动作表示 | 能区分末端位姿、关节动作、夹爪、坐标系 |
| 5 | ACT | 能理解 action chunking 和 Transformer policy |
| 6 | Diffusion Policy | 能理解为什么要生成动作分布 |
| 7 | VLM | 能理解图像和语言如何进入大模型 |
| 8 | VLA | 能理解 VLM 输出如何接动作头 |
对应到已有笔记:
| 主题 | 笔记 |
|---|---|
| VLA 总览 | VLA:视觉-语言-行动模型 |
| VLM | VLM 基础 |
| 动作表示、action chunk、diffusion/flow/FAST | 动作表示与策略头 |
| 数据、行为克隆、训练与评估 | 数据、训练与评估 |
| RT-1/RT-2/OpenVLA/pi0/SmolVLA | 典型模型与论文路线 |
| 动手路线 | 实践路线 |
10. 最小概念清单¶
读 VLA 论文前,至少要能回答这些问题:
- 什么是 policy?输入和输出分别是什么?
- 什么是 rollout?为什么执行时的状态分布会变?
- 模仿学习和行为克隆是什么关系?
- 行为克隆为什么像监督学习?
- 为什么行为克隆会有复合误差?
- ACT 为什么要一次预测未来多步动作?
- 原始 ACT 的视觉前端和 Transformer policy 分别做什么?
- DETR 的 object query 和 ACT 的 action query 类比在哪里?
- Conditional VAE 里的 latent \(z\) 表示什么,为什么推理时可以设成 0?
- action chunk 长了和短了各有什么问题?
- Diffusion Policy 为什么比普通 MSE 回归更适合多峰动作?
- VLA 比普通视觉机器人策略多了什么?
- 为什么 VLA 仍然需要底层控制器和安全层?
如果这些问题能说清楚,再读 OpenVLA、RT-2、pi0、SmolVLA 时就不会被名词带跑。
11. 一句话对照表¶
| 名词 | 一句话理解 |
|---|---|
| Policy | 从观测到动作的函数 |
| Rollout | 让策略真的执行,形成一条轨迹 |
| 模仿学习 | 从专家示范中学行为的一类方法 |
| 行为克隆 | 把模仿学习做成监督学习,直接拟合专家动作 |
| DAgger | 让专家纠正模型自己会遇到的状态 |
| ACT | 用 Transformer 预测未来动作块的机器人策略 |
| DETR object query | 用可学习 query 从图像特征里取出一个物体预测 |
| ACT action query | 用可学习 query 从观测特征里取出一个未来动作预测 |
| Conditional VAE | 在条件输入下,用 latent \(z\) 表示目标数据的隐含变化 |
| Diffusion Policy | 从噪声生成连续动作轨迹的策略 |
| VLM | 看图和读文字的模型 |
| VLA | 看图、读指令,并输出机器人动作的模型 |
| 动作头 | 把模型隐藏状态变成可执行动作的模块 |
12. 参考资料¶
- A Reduction of Imitation Learning and Structured Prediction to No-Regret Online Learning
- Learning Fine-Grained Bimanual Manipulation with Low-Cost Hardware
- Diffusion Policy: Visuomotor Policy Learning via Action Diffusion
- RT-1: Robotics Transformer for Real-World Control at Scale
- RT-2: Vision-Language-Action Models Transfer Web Knowledge to Robotic Control
- OpenVLA: An Open-Source Vision-Language-Action Model