VLM/VLA:数据与策略学习

VLM/VLA:数据与策略学习

Charles Lv8

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

读法定位

这页先回答“VLA 数据与策略学习”在「VLA」里的位置:它解决什么局部问题,依赖哪些前置,最后会影响哪类工程或研究判断。
前置:先补 VLM/VLA 符号、动作表示和基础评测口径,再看数据与部署细节。 必要时先回 VLA 入口、基础知识 或 术语表。
主线关系:把视觉语言模型落到动作空间、闭环反馈和安全部署中,理解策略不是只输出文本,而是要驱动真实或仿真环境。

初学者先抓住

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

本页公式怎么读

如果 πθ\pi_\thetaoto_{\le t}D\mathcal{D}LBC\mathcal{L}_{\text{BC}} 还不熟,先看 VLM/VLA 符号与最小数学地图。本页会用“红杯到托盘”的例子把每个公式落到动作学习上。

有趣例子:学做煎蛋

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

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

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

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

符号 含义 红杯例子
πθ\pi_\theta policy,参数为 θ\theta 的策略模型 决定机械臂下一步怎么动
ata_t 时刻 tt 的动作 末端位姿增量、夹爪开合、动作 token
oto_{\le t} 当前和历史观测 多相机图像、深度、关节状态、夹爪状态
ll 语言指令 “把红杯放到托盘上”

读作什么:给定到当前为止的观测和语言目标,策略输出动作。

这个公式不说明什么:动作的单位、坐标系、频率、安全范围和控制器接口都还没定义。

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

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

符号 含义
S\mathcal{S} 真实状态空间,例如物体真实位置、速度、接触关系
O\mathcal{O} 观测空间,例如图像、深度、关节角
A\mathcal{A} 动作空间
PP 状态转移,动作如何改变世界
RR 奖励或任务进度
Ω\Omega 观测模型,真实状态如何被传感器看到

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

最基础的方法:行为克隆

给定专家示范数据集

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

符号 含义
D\mathcal{D} 示范数据集
ii ii 条示范或样本
ot(i)o_t^{(i)} ii 条示范在时刻 tt 的观测
l(i)l^{(i)} 这条示范对应的语言指令
at(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)

读作什么:专家在这个观测下做了动作 aa,训练就让模型更倾向于输出 aa

红杯例子:示范里专家从上方夹红杯,模型就在类似观测下学会从上方接近,而不是从侧面推。

这个公式不说明什么:它只模仿数据里出现的动作,不自动知道失败时怎么恢复,也不保证动作执行安全。

若动作建模为高斯分布

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

符号 含义
N(at;μ,Σ)\mathcal{N}(a_t;\mu,\Sigma) 在动作 ata_t 这个取值/随机变量上定义的高斯分布;第 1 个位置是被评分或采样的动作,第 2 个位置是均值,第 3 个位置是协方差
μθ\mu_\theta 模型预测的平均动作
Σθ\Sigma_\theta 动作协方差,描述尺度和不确定性

换成人话:第 1 个位置 ata_t 是要评估或采样的动作;第 2 个位置 μθ(ot,l)\mu_\theta(o_{\le t},l) 是策略给出的平均动作;第 3 个位置 Σθ(ot,l)\Sigma_\theta(o_{\le t},l) 决定动作噪声大小,以及不同动作维度是否相关。

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

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

t\sum_t 表示把多个时间步的动作误差加起来;ata_t 是专家动作,a^t\hat{a}_t 是模型预测动作;22\|\cdot\|_2^2 是平方距离,动作差得越远惩罚越大。

常见误解:MSE 小不等于真机成功。同一场景有多条合理轨迹时,均值回归可能把“左绕”和“右绕”平均成一条会撞上的中间轨迹。

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

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

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

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

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

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

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

符号 含义
dπE(o)d^{\pi_E}(o) 专家策略产生的观测分布
dπθ(o)d^{\pi_\theta}(o) 模型策略自己执行后产生的观测分布
πE\pi_E expert policy,专家策略
πθ\pi_\theta 学到的策略

读作什么:训练时模型总在专家走得很好的状态里学习;部署时它会看到自己走偏后造成的新状态。

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

例子:开抽屉

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

Diffusion Policy input output

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

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

先看哪里:模型在视觉条件下生成一段 action sequence,而不是只输出下一步标量动作。
它证明什么:动作分布可以是多峰的,生成式策略能保留多条合理轨迹。
它不证明什么:生成出的动作块不一定能长时间开环执行,仍需要重新观察、控制器和安全层。
和红杯例子的关系:抓红杯可以从不同角度接近;直接 MSE 可能学到折中动作,扩散策略更容易采到其中一种完整可执行轨迹。

动作表示是成败关键

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

4.1 绝对动作与相对动作

绝对动作

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

相对动作

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

这个向量通常把位置、旋转和夹爪状态拼在一起:前三维 x,y,zx,y,z 是平移,r,p,ψr,p,\psi 可理解为 roll、pitch、yaw 这类姿态角,gtg_t 是夹爪开合。相对动作里的 Δ\Delta 表示“相对当前状态移动多少”,通常更容易学,因为它减轻了不同机器人、不同工作空间原点带来的分布差异。

4.2 笛卡尔空间与关节空间

若直接预测关节角

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

qt+1q_{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)

ata_t 是原始连续动作,右边的 ut1,,utmu_t^1,\ldots,u_t^m 是离散后的多个动作 token,可能分别对应平移、旋转、夹爪或动作码本里的分量。

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

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

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

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

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

例子:开抽屉

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

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

例子:把杯子放到托盘上

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

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

视觉输入怎么组织

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\}

oto_t 是一个观测集合,不是单个向量:It(1),It(2)I_t^{(1)},I_t^{(2)} 可以是不同相机图像,dtd_t 是深度,qtq_t 是关节状态,ete_t 是末端执行器状态,ftf_t 是力觉或触觉信号。

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

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

ϕθ\phi_\theta 是观测编码器或融合模块,输入当前观测集合 oto_t 和语言 ll,输出状态表征 hth_t。后续策略通常不是直接吃原始多模态输入,而是使用这个融合后的表征。

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

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

从行为克隆走向更强策略

7.1 序列建模策略

把轨迹看成一个大序列

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

oio_i 是第 ii 步观测,aia_i 是对应动作,ll 是整段任务共享的语言指令。这种写法强调策略可以看完整历史,而不是只看当前帧。

然后用 Transformer 自回归建模:

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

a<ta_{<t} 是历史动作,oto_{\le t} 是历史观测,ll 是指令。这个条件概率表示:在已经看过这些上下文后,下一步动作 ata_t 应该是什么分布。

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

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

AA 是干净动作块,AτA^\tau 是第 τ\tau 个噪声水平下的带噪动作块;第一项保留原动作信号,第二项混入噪声。这里和图像扩散同构,只是被加噪的对象从图像换成了动作序列。

学习去噪器

ϵθ(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)

QϕQ_\phi 给“在观测 oto_t、动作 ata_t、语言目标 ll 下有多值得做”打分,然后令策略偏向高价值动作。
但机器人离线 RL 往往比行为克隆更不稳,因为分布外动作评估很容易出错。

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

8.1 同一任务有多种风格

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

8.2 坐标系不统一

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

8.3 语言粒度差异

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

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

8.4 失败样本很重要

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

三个更接近现实的例子

9.1 整理冰箱

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

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

9.2 折叠毛巾

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

9.3 按电梯按钮

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

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

工程上如何提高可迁移性

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

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

引入多视角和状态传感器

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

做动作 chunk 和闭环重规划

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

保留失败与恢复示范

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

本页结论

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

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

工程收束

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

下一站
  • 回到本专题入口:VLA,确认这页在整条路线中的位置。
  • 按导航顺序继续:动作表示与控制接口
  • 概念或符号卡住时,先查 术语表,再回到当前页。
  • Title: VLM/VLA:数据与策略学习
  • Author: Charles
  • Created at : 2026-03-14 09:00:00
  • Updated at : 2026-03-14 09:00:00
  • Link: https://charles2530.github.io/2026/03/14/ai-files-vla-data-and-policy-learning/
  • License: This work is licensed under CC BY-NC-SA 4.0.
Comments