最近在整理具身智能方向的论文,连着读了好几篇视觉-语言-动作模型(Vision-Language-Action Model,VLA)的工作,越读越觉得一个矛盾特别突出:模型的能力涨得飞快,但让人放心程度完全没跟上。VLA 模型说白了就是把相机画面和自然语言指令同时编码、直接输出机器人底层动作(或者动作 token)的端到端模型,典型代表有 RT-2、OpenVLA、π0 这些。能力确实强,零样本让他开个抽屉、拿个杯子都能干。但问题在于,这种模型本质上是“从数据里拟合出来的概率分布”,训练数据里没见过的情况一出现,策略就可能走样;你要是真的把它部署到物理世界里,那就不只是输出一段不合适文本的问题了,而是机械臂真会撞上去、真会把东西碰倒、真会伤到人。
这篇《Towards Safety Alignment of Vision-Language-Action Model via Constrained Learning》就是冲这个痛点来的。它讨论的不是怎么把模型变强,而是怎么把模型变“安全可控”。核心思想用一句话概括:把大模型时代流行的 alignment(对齐)思想,从“让模型更符合人类偏好”升级成“带约束的学习”(Constrained Learning),让模型在完成任务的同时,把安全风险的期望压到一个可接受的阈值以内。这个方向对任何想真正落地 VLA 的人都值得关注。
我自己偏算法工程背景,读论文的习惯是先啃动机和方法主干,再看实验设计,最后自己动手推一遍关键公式。下面这篇笔记就是按这个路子写的,适合正在做机器人策略学习、VLA 微调,或者准备把大模型 alignment 方法迁移到具身智能场景的读者。基础概念我会顺带解释,新手也能看清关键脉络。
1. VLA 为什么需要独立的安全对齐方案
1.1 物理后果的不可逆性,决定了它和大模型对齐不是一回事
大模型的对齐,主要防的是“模型胡说八道”或者“生成违背价值观的内容”。文本输出去错了,最多是被用户举报、被运营删帖,损失的是信任和流量。但 VLA 输出的是动作,是直接作用在物理世界里的指令。一个错误的动作 token,可能在几十毫秒内就让机械臂以 2m/s 的速度撞向桌面上的玻璃器皿。物理后果不可逆,这是 VLA 安全问题和纯语言模型安全问题的本质区别。
另一个不太容易被注意的点是:VLA 的“错误模式”更多样。语言模型出错是语义层面的偏差和幻觉,VLA 除了语义偏差(理解错指令),还有感知偏差(看错物体位置)、动力学偏差(同样的动作在不同负载下结果不同)、分布外偏差(场景没见过)等。这意味着安全对齐不能只盯着模型的“意图”,还要盯着“动作本身是否超限”“是否碰撞”“是否违反物理约束”。从这个角度看,VLA 的安全对齐更像传统机器人学里的安全控制问题,而不是纯粹的大模型对齐问题。
1.2 直接套 RLHF/DPO,会碰到三道墙
很多人第一反应是:大模型不是有 RLHF、DPO 现成的 alignment 工具吗,拿过来用在 VLA 上不就行了?理论上可行,实际做起来会发现三道墙。
第一道墙是目标错位。RLHF 本质上是在优化“人类偏好”的平均值,它追求的是大多数情况下让打分的人满意。但安全不是期望优化问题,安全是尾部风险问题。一个策略哪怕在 99% 的场景下都表现得非常得体,只要有 1% 的概率做出危险动作,那这个系统在生产环境里就是不可接受的。平均值优化天然对极端事件不敏感,RLHF 能把“平均偏好”拉高,却未必能把“最坏情况”压住。
第二道墙是数据成本。RLHF 需要大量人类偏好标注,而机器人动作层面的安全偏好标注远比文本难收集。文本偏好标注,一个标注员一天可以标几千条;机器人安全偏好的判定往往要结合场景、轨迹、物体状态,需要看视频甚至实地观察,一天能标几十条就不错了。数据量上不去,偏好模型就学不准确。
第三道墙是 reward hacking 在物理世界会被放大。RLHF 训练中模型经常能找到奖励模型的盲区,用不符合人类预期的方式刷高分。语言模型刷分最多输出一些别扭的、格式化的文本;物理世界的 reward hacking 是策略发现一个能骗过奖励函数的动作模式,而这个模式在真实环境里可能是极其危险的路径规划。所以 VLA 的安全问题,不能简单当成“偏好优化”来做,它需要的是显式的、可度量的、可约束的“安全指标”。
1.3 Constrained Learning 给了一个更工程化的框架
这篇论文用的框架是约束学习,它在数学上把事情说得很清楚:任务目标和安全要求不是一起被揉进一个标量奖励里,而是拆成“最大化任务回报”和“满足安全约束”两个独立目标。
用公式表达,VLA 的策略网络 π_θ 接收视觉观测 v 和语言指令 l,输出动作 a,我们希望:
max E[ R(τ) ] 使得 E[ C(τ) ] ≤ d
其中 R(τ) 是任务回报(比如任务成功得 1 分),C(τ) 是安全代价(比如一次违反安全规则记 1),d 是这个安全约束的阈值,表示“平均每个 episode 允许的安全违规上限”。当 d 取得很小,比如 0.01,就相当于要求模型每 100 个 episode 平均最多违规一次。
这个框架的价值在于,它把“安全”从一个模糊的口号变成了一个可调参的工程目标。不再是模型打好分就行,而是必须同时满足约束条件,否则就是不合格,再怎么强调能力也没用。这就是约束学习和传统 reward 融合的本质区别。
2. 方法拆解:约束学习到底怎么做安全对齐
2.1 拉格朗日松弛:把约束问题变成一个轮流博弈
直接求解带约束的强化学习问题很麻烦,标准的做法是拉格朗日松弛(Lagrangian Relaxation)。具体来说,把约束条件乘上一个拉格朗日乘子 λ,加到目标函数上:
L(θ, λ) = E[ R(τ) ] - λ · ( E[ C(τ) ] - d )
注意 λ 永远大于等于 0。这个式子的博弈含义很直观:策略网络 θ 想让目标函数变大,所以它会尽量提高任务回报;而 E[C] - d 一旦大于 0(也就是安全违规超标了),λ 这个正系数就会放大惩罚,迫使策略减少违规。反过来,λ 自己也在学习:如果约束被违反得厉害,λ 就增大,惩罚变重;如果约束一直满足,λ 就减小,训练重心回到任务表现上。
实际训练里,策略和 λ 是交替更新的,这就是所谓的双循环(double-loop)训练。内循环更新策略网络参数 θ,外循环更新乘子 λ。λ 的更新公式通常是:
λ ← max(0, λ + α_λ · ( E[ C(τ) ] - d ) )
α_λ 是乘子的学习率。这个式子写出来就非常直观了:当平均安全代价超过阈值 d,λ 上升;低于阈值,λ 下降,但由于 max(0, ·) 的限制,不会变成负数。整个机制像一个自动调节的“安全罚分阀门”,不需要手工去猜到底该给安全惩罚加多少倍权重。
2.2 最关键的工程环节:安全代价函数 C 怎么设计
读这类论文,如果只盯着公式看会错过真正的重点。约束学习里最容易翻车的地方不是优化算法,而是安全代价函数 C(τ) 的定义。C 定义得不对,后面所有数学都白搭。
我从工程角度把 C 的设计路径分成三种,实际项目里经常混着用:
第一种是规则驱动型。用程序判断动作是否越界,比如机械臂的末端执行器是否进入禁止区域、关节速度是否超限、接触力是否超过了安全阈值。这类 C 的好处是可解释性强、部署简单,坏处是覆盖不了复杂语义场景。比如“不要把红酒杯碰倒”这种约束,你很难用几条几何规则完全刻画清楚。
第二种是学习型安全模型。用一个分类器或者打分模型去估计“某个状态这个动作安不安全”,训练数据来自人类标注的危险场景或者仿真里的碰撞检测信号。这类 C 能覆盖复杂场景,但容易受到分布外问题的影响,评判器本身没见过的新场景时,它的判断可能并不可靠。
第三种是把大模型当裁判。用 VLM 来给动作序列打安全分,这个方向近年来很热门,因为 VLM 有较强的语义理解能力。缺点也很明显:慢、贵、不稳定,而且大模型本身也有不可靠的问题。放在约束学习的框架里,裁判模型的不稳定会被 λ 的更新一起放大。
实际论文里最常见的设计是“规则为主、学习模型为辅”的混合方案。我自己的体会是,C 的定义一定要和最终评估指标闭环:如果评估阶段用碰撞检测器,训练阶段的安全代价函数最好就包含碰撞信号,否则训练出来的“安全”是裁判眼里定义的,不是评估指标体系里的安全。
2.3 整体训练流程:预训练、对齐、再评估
从这类工作通常的流程来看,VLA 的安全对齐可以拆成三个阶段。
第一阶段是通用预训练,用大量演示数据做行为克隆,让模型具备基本的多模态理解能力和动作生成能力。这个阶段不考虑安全约束,目的是让模型“会的多”。
第二阶段是安全对齐,用约束学习微调模型。这一步可以在仿真环境里用在线强化学习做,也可以拿离线数据做类离线 RL 的约束优化。在线 RL 的好处是策略能主动探索到危险区域,对约束的估计更准确;坏处是训练成本高,而且仿真和现实有 gap。离线方案成本低,但对数据的覆盖度要求极高,危险样本如果本身在数据集里很少,模型很难学会规避。
第三阶段是评估迭代。对齐不是一次性的动作,需要在验证集上反复算“成功率”和“违规率”,如果违规率没压到阈值以下,可能需要加数据、调阈值或者换安全代价函数。我见过不少团队在这个阶段花了 80% 的功夫,因为训练阶段的问题很多时候要到评估阶段才暴露出来。
3. 实操视角:复现这类方法时最容易踩的坑
3.1 拉格朗日乘子不是万能钥匙,λ 震荡会要命
很多人头一次跑约束学习,以为有拉格朗日公式就万事大吉,结果训练曲线震荡得怀疑人生。这在双循环优化里是常态,原因也很好理解:λ 的更新步长 α_λ 和策略更新步长之间如果没调好,两个循环就变成在互相“对抗”而不是“协作”。
实操里我有几个建议。第一,λ 的更新要记得裁剪,别让它一下涨到离谱;稳定在某个范围内才能让策略慢慢适应。第二,λ 的学习率一般比策略的学习率大一个量级,因为策略需要时间去收敛,乘子应该先快速响应违规程度。第三,对 λ 做平滑,用滑动平均而不是原始梯度直接更新,能明显减少震荡。这些细节论文里通常只提一句“we use clipping”,但真正跑实验的人才知道这一步有多关键。
3.2 阈值 d 的设定:别拍脑袋,要用数据标定
d 是“平均每个 episode 允许的违规上限”,这个值设多大直接决定了模型的保守程度。设太大,模型会在意安全但更在意任务成功,危险动作还是不少;设太小,模型会为了安全啥都不干,任务成功率崩盘。
我的建议是先收集一小批 baseline 模型的评估数据,统计当前违规率,然后往“比当前违规率低一个数量级”的方向去设 d。举个例子,如果预训练模型的违规率是 8%,那 d 可以先设 0.8%(也就是每 100 个 episode 违规不超过 0.8 次),跑一轮看任务成功率损失多少再做微调。这个标定过程虽然笨,但比凭感觉设数字靠谱得多。
3.3 稀疏安全信号会拖慢训练,得想办法稀释
还有一个常见的坑:安全违规本身就是小概率事件,尤其是在训练初期。这意味着一个 batch 里可能几百条轨迹一条违规都没有,E[C] 的估计方差巨大,λ 根本收不到有效信号。这在强化学习里是典型的稀疏奖励问题。
经验做法是给安全代价加入“密度”。比如除了“是否发生碰撞”这种 0/1 信号,再加上“离障碍物最近距离”作为连续的安全信号;或者用时序差分的方式,把最终碰撞的信号一步步回传,变成每个时间步的软信号。密度越高,λ 的学习越稳定。当然这会引入偏置,需要在 C 里小心加权,但工程上这一换通常非常值得。
3.4 别忘了通用能力保护
安全对齐微调最大的副作用是灾难性遗忘。模型被你拿着安全目标一顿约束,安全是安全了,但原来会的复杂操作技能全忘了,变成一个只会“小心翼翼空转”的废物机器人。这个现象在约束学习中比普通微调更严重,因为约束项一直在强调“不要做某些事”,策略很容易收缩到一个过度保守的局部最优。
解决方案里比较有效的是加一个 KL 散度锚点:让微调后的策略不要离预训练策略太远。这个思想和 LLM 对齐时的 KL 惩罚类似,本质上是在安全、任务表现和通用能力之间找平衡点。代价是训练需要多维护一个 reference policy,显存和计算都会增加,但从落地角度考虑这点成本很值得。
4. 评估设计:怎么证明“安全对齐”真的有效
4.1 别只报成功率,要学会看帕累托前沿
我看很多刚入行的同学做安全对齐评估,只汇报一个数字:任务成功率。这是最大的误区。安全对齐的核心是 trade-off,你牺牲了一点任务表现,换来了安全违规的下降。如果只报成功率,可能你的约束学习策略成功率掉了 20 个点,光看这个数字项目直接就被否了。
正确做法是画帕累托前沿(Pareto frontier)。横轴是安全违规率,纵轴是任务成功率,然后在同一个坐标系里画上 baseline 方法、RLHF 方法、约束学习方法的多个配置点。因为阈值 d 可以调,约束学习方法能画出一条完整的曲线。一个方法如果真的更好,它的曲线应该在其他方法曲线的右上方,即同样违规率下成功率更高,或者同样成功率下违规率更低。只看单点不看曲线,很难得出可靠结论。
4.2 安全指标的鲁棒性测试比平均值重要
平均违规率降下去了,并不代表系统就安全了。要看的是最坏情况,比如某个特定场景下的违规率是不是特别高。实际项目里我会强制要求团队按场景维度拆解评估结果,把“易碎物品场景”“狭窄通道场景”“高速运动场景”分开统计。很多时候平均数字好看,就是因为某个简单场景把整体拉下来了,而真正危险场景的违规率纹丝不动。
另外要加分布外测试。训练和评估都用同一组仿真场景,模型当然越调越“安全”,但到了真实环境表现完全两样。预算允许的话,最好准备一个和训练环境参数差异较大的 hold-out 环境(换光照、换物体纹理、换背景布局),专门用来检验安全策略的泛化能力。安全如果只能在仿真里成立,那对物理世界的意义就很有限。
4.3 和基线方法对照时,要控制同一个 base model
做对照实验时最容易被质疑的一点是:不同方法用的 base model 或数据管线不一致,导致结果差异根本不是方法带来的。这篇论文讨论的约束学习如果想证明自己优于“直接 RLHF”或者“带固定惩罚的微调”,必须保证所有方法从同一个预训练 VLA 权重出发、用同一份场景数据、跑同样的评估脚本。看起来这是基本功,实际很多论文项目都栽在这上面,尤其模型比较大、重新预训练成本高的时候,很容易就拿“之前训练好的 checkpoint”凑数,一凑数结论就不干净了。
5. 读完整篇论文,我的几点个人判断
把这篇论文放在整个 VLA 发展脉络里看,它的意义不在于提出一个全新的优化算法,而在于把一个工业界早就知道、学术界却经常回避的事实摆到了台面上:端到端 VLA 模型要落地,安全必须是第一公民,而不是模型能力的附属品。约束学习本身在强化学习里有大量成熟积累,把它和安全对齐结合,思路是顺理成章的,难的是工程细节,也正是这些细节决定了这类方法能不能走出仿真。
我自己读完比较深的体会是,安全代价函数的设计和评估体系的搭建,至少占了这类工作一半以上的工作量。很多团队一开始把精力扑在网络结构和优化器上,跑到后来发现瓶颈根本不在这里,而是“什么叫安全”这件事根本没有定义清楚。所以我给想复现或者扩展这篇工作的朋友一个建议:先花两周把安全指标定义清楚、把评估脚本写扎实,再动训练流程,这个顺序不要颠倒。
至于这个方向后续怎么走,我个人比较看好三条线。一是离线约束优化,把在线 RL 的成本降下来;二是把世界模型和安全约束结合起来,让模型在想象空间里先推演再执行;三是安全 filter 和约束学习的组合,让一个低成本的安全监控器兜底,训练时再把 filter 的反馈纳入约束代价。这几条线互相之间并不冲突,未来大概率会融合。方向是对的,剩下的就是工程人一点一点把它磨实。