VLM/VLA:数据与策略学习

VLM/VLA:数据与策略学习

Charles Lv7

这一页关注的是 VLA 最硬的一层问题:模型不只是“看懂”世界,而是要把视觉和语言最终变成可执行动作。
因此它和普通 VLM 的区别是,错误不只会体现在回答上,还会直接体现在碰撞、抓空、卡住、抖动、超时上。

初学者先抓住

VLA 学的不是静态答案,而是一条从观测到动作的策略。数据质量决定它见过哪些状态,动作表示决定它能输出什么,闭环反馈决定它出错后能不能修正。

有趣例子:学做煎蛋

看懂“把蛋打进锅里”还不够。你需要知道锅多热、手离锅多远、什么时候翻面、破了怎么补救。VLA 数据如果只记录成功动作,不记录失败和恢复,模型就很难学会真实操作。

1. 统一建模:带语言条件的部分可观测控制

VLA 常被写成带语言条件的策略:

πθ(atot,l)\pi_\theta(a_t \mid o_{\le t}, l)

其中 oto_t 是当前观测,可包含 RGB、深度、关节状态和力传感器;ll 是语言指令;ata_t 是连续动作,如末端位姿增量、夹爪开合或底盘速度。

若考虑部分可观测环境,可写成 POMDP:

(S,O,A,P,R,Ω)(\mathcal{S}, \mathcal{O}, \mathcal{A}, P, R, \Omega)

策略实际上只能看到观测历史 oto_{\le t},而不能直接看到真实状态 sts_t
这就是为什么 VLA 常常需要记忆模块,而不是只看单帧图像。

2. 最基础的方法:行为克隆

给定专家示范数据集

D={(ot(i),l(i),at(i))}\mathcal{D}=\{(o_t^{(i)}, l^{(i)}, a_t^{(i)})\}

最常见目标是最大化动作似然

LBC=(o,l,a)Dlogπθ(ao,l)\mathcal{L}_{\text{BC}} = - \sum_{(o,l,a)\in\mathcal{D}} \log \pi_\theta(a \mid o, l)

若动作建模为高斯分布

πθ(atot,l)=N(μθ(ot,l),Σθ(ot,l))\pi_\theta(a_t \mid o_{\le t}, l)=\mathcal{N}(\mu_\theta(o_{\le t}, l), \Sigma_\theta(o_{\le t}, l))

则最大似然在固定协方差下可转化为均方误差:

LMSE=tata^t22\mathcal{L}_{\text{MSE}} = \sum_t \|a_t - \hat{a}_t\|_2^2

一个直观例子:抓起桌上的勺子

若专家轨迹里,末端执行器始终先从上方接近勺柄,再轻轻闭合夹爪,然后抬起,行为克隆就会学到这种“视觉到动作”的直接映射。
但问题在于,只要测试时桌面光照、勺子角度或相机位置稍有变化,模型就可能偏离专家分布,开始出现抓偏或抖动。

3. 为什么纯行为克隆很快会碰到上限

行为克隆的核心问题是 covariate shift。
训练时模型总看到专家分布

otdπE(o)o_t \sim d^{\pi_E}(o)

但部署时观测来自模型自己产生的状态分布:

otdπθ(o)o_t \sim d^{\pi_\theta}(o)

一旦模型在某一步略偏,后续输入就和训练分布越来越不一样,误差会滚雪球式积累。

例子:开抽屉

训练数据里,机械臂总能稳稳对准把手中央。
实际运行时,如果第一步偏了两厘米,第二步看到的把手位置就和训练集不同。之后模型可能为了修正误差来回抖动,最后既抓不住把手,也拉不开抽屉。

Diffusion Policy input output

图源:Diffusion Policy: Visuomotor Policy Learning via Action Diffusion,Figure 2。原论文图意:展示 Diffusion Policy 如何在视觉观察条件下,通过多步去噪生成未来动作序列,并支持 CNN-based 和 Transformer-based 两类策略结构。

图解:为什么策略学习不一定直接回归一个动作

传统行为克隆常把策略看成“观察进来,动作出来”。Diffusion Policy 的图提醒我们,动作分布可能是多峰的:同一个场景里,专家可以从左边绕,也可以从右边绕,直接用均值回归会把两种行为平均成一条不合理轨迹。扩散策略把动作序列当成要去噪的对象,在视觉条件下逐步生成一段未来动作,因此更适合复杂、接触丰富、需要短时一致性的操作任务。

4. 动作表示是成败关键

VLA 训练不只是换个损失函数,更重要的是动作怎么表示。

4.1 绝对动作与相对动作

绝对动作

at=[xt,yt,zt,rt,pt,yt,gt]a_t = [x_t, y_t, z_t, r_t, p_t, y_t, g_t]

相对动作

at=[Δxt,Δyt,Δzt,Δrt,Δpt,Δyt,gt]a_t = [\Delta x_t, \Delta y_t, \Delta z_t, \Delta r_t, \Delta p_t, \Delta y_t, g_t]

通常相对动作更容易学,因为它减轻了不同机器人、不同工作空间原点带来的分布差异。

4.2 笛卡尔空间与关节空间

若直接预测关节角

at=qt+1a_t = q_{t+1}

模型要自己学复杂的运动学几何。
若预测末端位姿增量,则更符合任务语义,例如“向前推一点”“向下压一点”。

4.3 离散化动作 token

像 RT-1 这类方法会把连续动作离散成 token 序列,让 Transformer 直接做序列建模:

at(ut1,ut2,,utm)a_t \rightarrow (u_t^1, u_t^2, \dots, u_t^m)

优点是可以借用语言模型训练框架,离散动作 token 能直接接自回归 loss、teacher forcing 和序列并行工具链,图像 token、语言 token 与动作 token 也更容易放进同一序列建模框架。缺点是连续动作被分桶后会引入量化误差,执行轨迹可能出现台阶感或抖动,插接、旋拧、微小力控等精细任务也常需要更高分辨率动作。

5. 为什么动作分块几乎是必选项

机器人实际控制常不是“每帧只吐一个动作”,而是一次输出未来一段动作序列:

A^t:t+H1=πθ(ot,l)\hat{A}_{t:t+H-1} = \pi_\theta(o_{\le t}, l)

这里 HH 是 chunk horizon。这样做能减少高频抖动,让模型学更完整的微技能,也降低视觉噪声对单步控制的敏感性。

例子:开抽屉

若一次预测未来 8 步,前几步可以先把末端执行器移动到可抓取位置,中间几步在对准后闭合夹爪,最后几步保持抓握并沿抽屉打开方向平滑后拉。

这比“每 40ms 重新想一下该不该往前挪 2 毫米”要合理得多。

例子:把杯子放到托盘上

单步策略常出现“靠近时忽快忽慢”的问题。
动作分块后,模型更容易学出“对准托盘中心、下降、松手、抬升离开”这样连续而完整的动作原语。

这更像一个完整动作原语。

6. 视觉输入怎么组织

VLA 训练的难点之一,是观测本身往往比 NLP 和普通 CV 更杂。

常见输入包括手眼相机、场景第三视角、深度图、末端位姿、关节角和力觉 / 触觉。手眼相机适合精细抓取和接触判断,第三视角提供全局布局与障碍物,深度图补充几何距离,末端位姿和关节角描述机器人自身状态,力觉或触觉则感知接触、滑动和阻力,弥补纯视觉盲区。

可以把它们记成

ot={It(1),It(2),dt,qt,et,ft}o_t = \{I_t^{(1)}, I_t^{(2)}, d_t, q_t, e_t, f_t\}

然后通过不同编码器融合成一个状态表征:

ht=ϕθ(ot,l)h_t = \phi_\theta(o_t, l)

一个生动例子:洗碗机装盘

若只有单个正面 RGB,相机可能根本看不到盘子是否卡进卡槽。
加入侧视角和末端力信号后,模型才能区分盘子是否已经插入、是否被挡在外面,或是否因为边缘刮到金属架而需要轻微调整姿态。很多 VLA 任务失败并不是因为模型不会“理解语言”,而是因为观测不够。

7. 从行为克隆走向更强策略

7.1 序列建模策略

把轨迹看成一个大序列

(o1,l,a1,o2,a2,,oT,aT)(o_1,l,a_1,o_2,a_2,\dots,o_T,a_T)

然后用 Transformer 自回归建模:

p(atot,a<t,l)p(a_t \mid o_{\le t}, a_{<t}, l)

这类方法擅长利用长历史和上下文依赖。

7.2 扩散策略

扩散思想也被用于动作序列建模。
若将未来动作块 At:t+H1A_{t:t+H-1} 当成生成目标,则训练时对动作加噪:

Aτ=αˉτA+1αˉτϵA^\tau = \sqrt{\bar{\alpha}_\tau} A + \sqrt{1-\bar{\alpha}_\tau}\epsilon

学习去噪器

ϵθ(Aτ,ot,l,τ)\epsilon_\theta(A^\tau, o_{\le t}, l, \tau)

好处是对多峰动作分布更友好:同一观测下可以保留多条合理动作模式,而不是被 MSE 平均掉;从左侧、右侧或不同接近角度完成任务时,模型也能生成其中一种可行动作。

例子:叠衣服

对一件软布来说,“从左边抓起”与“从右边抓起”都可能是合理策略。
若只用 MSE 回归,模型容易学出一个折中的、谁也不像的动作。扩散策略则更容易保留多模态解。

7.3 价值学习与离线强化学习

若除了示范数据外还有奖励信号,可以学条件价值函数:

Qϕ(ot,at,l)Q_\phi(o_t, a_t, l)

然后令策略偏向高价值动作。
但机器人离线 RL 往往比行为克隆更不稳,因为分布外动作评估很容易出错。

8. 数据难点不在“量少”,而在“异构”

8.1 同一任务有多种风格

有人喜欢先抬高再接近,有人喜欢平移接近;有人抓杯子偏上缘,有人抓杯身中部。
这些都可能成功,但从监督学习看,动作标签存在多峰性。

8.2 坐标系不统一

不同平台的数据可能来自不同机械臂、不同相机外参、不同 gripper 定义。
若不统一,模型学到的不是技能,而是混乱坐标。

8.3 语言粒度差异

同一个任务可能被描述成“打开抽屉”“拉开左侧木抽屉”或“抓住把手后向自己方向拉”。

若指令粒度不统一,模型会在“高层目标”和“低层操作细节”之间来回混淆。

8.4 失败样本很重要

很多机器人数据集只保存成功演示,但实际部署最缺的是失败分布。
如果没有失败样本,模型往往不知道抓偏后要重新观察、松开并微调位置,遮挡时该暂停观察还是移动视角,拉不动抽屉时也难以区分没抓住、方向不对、卡住或需要更大但安全的力。

9. 三个更接近现实的例子

9.1 整理冰箱

任务“把酸奶放到上层架子靠左边”。
模型要同时处理玻璃架反光、前排物品遮挡后排空间、夹爪不能碰倒鸡蛋盒等问题:视觉证据需要更稳,路径规划不能只看目标物,还要看可达通道,动作也必须考虑脆弱物体和安全边界。

这里真正难的是空间关系和安全边界,而不是语言本身。

9.2 折叠毛巾

软体物体观测高度不确定,动作结果对初始抓点极敏感。
如果策略没有显式保留多模态动作分布,就很容易学出“平均动作”,导致抓空或拽皱。

9.3 按电梯按钮

这是个看似简单但极易暴露缺陷的任务:按钮很小,需要高分辨率视觉和精确末端定位;面板布局不同,模型不能只记固定位置;干扰按钮很多,目标识别和点击动作都必须避免邻近误触;误按代价高,执行前最好有二次确认或安全约束。

这类任务强烈依赖高分辨率视觉、精细定位和低延迟闭环控制。

10. 工程上如何提高可迁移性

使用相对动作和统一坐标系

尽可能把不同机器人数据归一到共同表示。

引入多视角和状态传感器

只靠单视角 RGB,很多接触任务很难稳。

做动作 chunk 和闭环重规划

不要让模型每帧都重新发散式思考,也不要让它一次承诺过长轨迹。

保留失败与恢复示范

真实机器人不是只会一次成功,而是要会纠错。

11. 总结

VLA 学习的核心矛盾是:语言想表达高层意图,控制却需要低层连续动作。
因此一个强 VLA 系统通常不是简单“视觉模型 + 语言模型 + 动作头”,而是同时拥有完整观测表示、稳定动作接口、多峰轨迹建模、统一坐标与任务语义,以及能及时纠正小误差的推理闭环。

如果这些条件里有两三项没做好,模型看起来像会执行任务,实际上只是在演示集附近模仿动作。

工程收束

VLA 学习的验收要同时看数据、接口和闭环。示范数据要覆盖关键状态,动作接口要让策略输出稳定可执行,轨迹建模要能表达多种合理动作,实机或回放闭环要能暴露分布偏移。缺任意一环,模型都可能只是在演示集附近“看起来会做”。

  • Title: VLM/VLA:数据与策略学习
  • Author: Charles
  • Created at : 2026-04-04 09:00:00
  • Updated at : 2026-04-04 09:00:00
  • Link: https://charles2530.github.io/2026/04/04/ai-files-vla-data-and-policy-learning/
  • License: This work is licensed under CC BY-NC-SA 4.0.
Comments