最近在跟进具身智能方向的工作,连着读了好几篇VLA相关的论文,真正让我停下来划重点的,是这个标题:Towards Safety Alignment of Vision-Language-Action Model via Constrained Learning。在Robotics+Foundation Model的圈子里,VLA(视觉-语言-动作模型)已经不算新鲜概念了,但绝大多数工作都在卷任务成功率和泛化性,把safety当作加分项而不是必选项。这篇论文把安全对齐从LLM领域搬到了VLA上,并且用的是凸优化里的经典思路——约束学习来解。如果你跟我一样,既关心VLA能不能落地到物理世界,又对RLHF那套“靠reward model打分”的软对齐方式抱有怀疑,这篇文章值得认真读一遍。
文章不是纯理论推演,它给出了一个很实际的问题建模方式:把安全要求写成约束项,再用拉格朗日对偶去求解,让策略在满足安全预算的前提下最大化任务性能。这个思路本身不新,但放到VLA这种高维视觉语言动作联合策略上,工程上和训练上的坑比想象中多。下面我把论文的动机、方法细节、实验设计以及我自己的一些延伸思考拆开说。
1. VLA模型的安全问题为什么值得单独开一篇文章
1.1 LLM对齐的惯性思维在VLA上行不通
做大模型对齐的人对这套流程太熟悉了:SFT之后接RLHF或DPO,用人类偏好让模型学会“有礼貌地拒绝”、“不输出有害内容”。这套方法的核心是训练一个奖励模型,再把偏好信号反馈给策略,本质上是一种软约束——模型学到的是一种“倾向”,而不是一条“红线”。文本模型说错一句话的代价是可逆的,用户关掉对话窗口就结束了。
但VLA输出的是连续动作序列,作用对象是机械臂、移动底盘、人形机器人这些物理实体。一个不安全的动作意味着碰撞、夹伤、倾覆、关节超限,代价直接体现在物理世界上。更要命的是,VLA不能像LLM那样“拒绝执行”——用户下达“把杯子拿过来”,模型必须给出一个动作,哪怕它对场景没把握也不能静默。这种“必须行动”的属性,让安全对齐从附加题变成了必答题。
还有一个常被忽略的差异:VLA的输入是多模态的,视觉观测可以被光照、遮挡、对抗贴纸干扰,语言指令可以被歧义或恶意引导。LLM的安全对齐主要防文本攻击,VLA的安全对齐还要防视觉感知被欺骗后产生的错误动作。这已经不是“变得礼貌”能解决的问题了,而是需要从动作生成机制上施加结构性保障。
1.2 具身场景下“安全”的定义更硬
我读这篇论文时最有感触的一个点:它把安全描述成约束(constraint)而不是偏好(preference)。在RLHF里,“安全”是reward的一个加分项,模型可以在某些情况下为了更有用的回答牺牲一点安全性;但在机器人场景里,碰撞就是碰撞,没有“在特定上下文中可以适度碰撞”这种说法。硬约束和软偏好之间差着一条物理定律。
拿表格对比一下两类安全对齐的本质区别:
| 对比维度 | LLM安全对齐 | VLA安全对齐 |
|---|---|---|
| 输出空间 | 离散token序列 | 连续动作/轨迹点 |
| 失败后果 | 有害文本、错误信息 | 物理碰撞、设备损坏、人员受伤 |
| 典型方法 | RLHF、DPO、RLAIF、拒绝采样 | CMDP、约束策略优化、安全滤波、控制屏障 |
| 约束的松紧 | 软偏好,可权衡 | 硬预算,不可违反 |
| 评估指标 | 人工打分、攻击成功率 | 碰撞率、约束违反率、任务成功率 |
这组对比解释了为什么论文选择用Constrained Learning而不是简单地把安全词塞进reward。它的底层判断是:在VLA这类高风险决策问题上,安全不能用“期望最大化”来隐式保证,而必须以约束的形式出现在优化问题中。
2. 论文的核心设计:把“安全”写进优化问题的约束里
2.1 从奖励塑形到约束优化:一个视角的切换
如果沿用RLHF的思维,想让VLA安全,最直接的办法是给不安全的行为加负奖励,也就是reward shaping。这个做法实现简单,但有个致命问题:负奖励的强度系数不好调。给轻了模型发现绕开惩罚比满足任务更划算,于是学会“钻空子”;给重了模型变得极度保守,任务成功率断崖式下跌。更麻烦的是,奖励信号和任务目标混在一起,训练过程中很难解释模型到底在优化什么。
这篇论文把问题重写成带约束的优化形式,核心公式长这样:
[ \max_{\pi} \quad J_R(\pi) = \mathbb{E}{\tau \sim \pi}\left[\sum{t=0}^{T} \gamma^t R(s_t, a_t)\right] ] [ \text{s.t.} \quad J_C(\pi) = \mathbb{E}{\tau \sim \pi}\left[\sum{t=0}^{T} \gamma^t C(s_t, a_t)\right] \leq d ]
这里的(R)是任务奖励,(C)是安全成本函数,(d)是用户预设的安全预算阈值。目标很明确:在“累计安全成本不超过预算”的前提下,最大化任务回报。这个建模方式把安全和性能分成两个维度,做决策时不需要人为权衡,而是交给优化器去找满足约束的最优策略。
这个视角切换的价值在于:它承认了安全不是任务性能的附属品,而是一条需要被显式满足的约束。在控制领域,这其实就是带约束马尔可夫决策过程的框架,论文把它搬到了VLA策略上。
2.2 安全成本函数:模糊的“安全”如何变成数值
任何一个约束优化问题,第一步都是把约束写清楚。论文里提到的安全成本函数(C(s, a)),设计思路可以拆成几类:
- 几何安全成本:机械臂末端与障碍物的最小距离、底盘与行人的间距。低于阈值时成本快速上升。
- 动力学安全成本:关节力矩、速度、加速度是否超出硬件限制。超限即高成本。
- 任务语义成本:动作是否符合语言指令的意图,比如指令是“递剪刀”而模型把手伸向刀刃。
- 状态边界成本:机械臂是否接近奇异构型、是否可能倾覆、物体是否即将滑落。
这个函数的设计质量直接决定约束学习的成败。太稀疏会变成“要么不触发、一触发就出大事”的悬崖式信号,模型很难从中学到平滑的安全边界;太稠密又会让策略每步都如履薄冰,丧失任务完成能力。论文的处理方式是把它设计成一种带缓冲区(buffer zone)的距离度量:在安全区域内成本为0,进入缓冲区域成本逐渐增大,越过硬边界成本突增。这个思路很像自动驾驶里的安全距离场,比二值碰撞检测信息量大得多。
2.3 求解思路:拉格朗日对偶与安全策略更新
约束优化直接解起来很麻烦,论文用的是经典拉格朗日松弛。把原始问题改写成:
[ \min_{\lambda \geq 0} \max_{\pi} \quad L(\pi, \lambda) = J_R(\pi) - \lambda \left( J_C(\pi) - d \right) ]
这里(\lambda)是拉格朗日乘子,可以理解成一个“安全违规的单价”。内层最大化让策略在给定(\lambda)下提高任务回报,同时因为减去(\lambda (J_C - d)),策略会被反向推动去压低安全成本。外层最小化则不断调整(\lambda):如果当前策略的安全成本超过预算,(\lambda)增大,安全项权重变高;如果成本远低于预算,(\lambda)减小,把更多优化空间让给任务性能。
用深度学习实现这个交替优化时,策略(\pi)通常用PPO或类似策略梯度方法更新,(\lambda)则用简单的梯度上升或PID控制调整。我之前做过类似的带约束强化学习项目,有一个很深的体会:这个交替优化的稳定性很大程度上由(\lambda)的学习率决定。(\lambda)更新太快,策略还没学会应对高压惩罚,训练就崩了;(\lambda)更新太慢,安全约束形同虚设。
3. 约束学习落到VLA参数上的关键步骤
3.1 策略网络里哪一部分负责“安全”
VLA的典型结构是:视觉编码器(ViT或SigLIP)+ 语言编码器(LLM)+ 动作头(MLP或diffusion decoder)。论文提出的安全对齐方案不是从零训练一个VLA,而是在预训练好的VLA之上进行安全微调,这非常符合实际资源约束。
这里有一个值得注意的设计取舍:安全约束应该加在哪个模块上。如果只加在动作头上,优化空间有限,因为视觉和语言特征里可能已经包含了不安全的信息;如果整个backbone都放开微调,又存在灾难性遗忘风险,VLA原本学到的语义理解能力会被破坏。论文的做法是在中间层和动作头之间引入一个安全对齐适配器(safety alignment adapter),冻结大参数,只训练适配器和动作头。这个思路跟LoRA微调有异曲同工之处,但约束信号是直接作用在动作分布上的。
3.2 安全层:显式投射到可行动作集
除了在目标函数里加约束,论文还采用了安全层做动作矫正。策略输出原始动作(a_{raw})之后,安全层会判断这个动作是否满足当前状态的安全约束,如果不满足,则求解一个二次规划把动作投射到最近的安全动作上:
[ \min_{a \in \mathcal{S}(s)} \quad \frac{1}{2} | a - a_{raw} |^2 ]
这个安全层本质上是一个在线安全过滤器,保证任何时刻执行到环境里的动作都不会突破安全边界。它和控制领域的控制屏障函数(CBF)思想很接近,但用在VLA上有两个额外好处:一是训练初期策略还在探索时,安全层能拦住大量危险动作,避免训练过程产生灾难性数据;二是安全层提供的“矫正后的动作”可以直接作为学习信号,让策略逐渐学会自己在安全区域内输出动作,从而减少对安全层的依赖。
不过这里也有一个我不太放心的地方:如果安全层介入过于频繁,策略可能把安全层当作“点对点代驾”,自己完全放弃学习安全动作模式。论文的实验数据显示,配合约束学习后,策略对安全层的依赖会逐步下降,但单纯用安全层而不用约束学习的对照组里,这一下降是非常缓慢的。这从侧面说明了约束信号对策略本体学习的重要性。
3.3 训练流程与收敛判断
整个训练流程可以概括成三步循环:
- 用当前策略在仿真环境中收集轨迹,同时记录任务奖励(R)和安全成本(C);
- 用策略梯度更新(\pi),优化拉格朗日目标(L(\pi, \lambda));
- 根据当前累计安全成本(J_C(\pi))和预算(d)的差距更新(\lambda)。
判断收敛不能只看任务奖励曲线,还要看安全成本曲线是否收敛到阈值附近。我当时跑这类实验时有个习惯:把(\lambda)的数值变化也打出来看。如果(\lambda)一直单调上涨,说明策略始终学不会安全,而且越往后越焦虑;如果(\lambda)在高频振荡,说明学习率太大或轨迹batch太小,估计方差过高。论文里的收敛形态是(\lambda)先上升然后回落并稳定——上升阶段是策略在被“教育”,回落阶段是策略已经把安全内化成自身行为,不再需要高压惩罚来维持。
4. 实验怎么验证“安全对齐”:指标设计与任务设计
4.1 仿真环境与长程任务设计
评估安全对齐比评估任务性能难得多,因为“安全”是一个负面事件,论文的策略是设计几个高风险任务场景让负面事件有充分的发生机会。任务类型大致可以分成三种:桌面抓取中避开易碎品、移动操作中规避动态障碍、长程任务中的工具传递与交接。
在仿真环境选择上,这类工作一般会用MetaWorld、Robosuite、RLBench这类支持碰撞检测和接触力计算的平台。论文的评估中有一个细节我很认同:它没有只报告“平均成功率”,而是把任务分成长程和短程。短程任务里,VLA靠安全层硬拦也能保住安全;长程任务才是真正考验约束学习的地方,因为每一步的微小安全偏差会累积放大,最终导致无法挽回的碰撞。
4.2 安全指标:不能只看碰撞率
碰撞率是最直观的安全指标,但它太稀疏了。一次轨迹中只要最后没撞,中间过程拧巴成什么样都不影响碰撞率数字。论文额外报告了安全预算违反率(constraint violation rate)和安全成本累积曲线,这些指标能看出策略在轨迹中间段是否持续保持安全行为。
比较有意思的是“安全预算边界”的实验:把约束阈值(d)分别设成紧、中、松三档,观察任务成功率的变化。结果很符合约束优化的直觉——策略会在给定预算内尽量去“花”安全成本换取任务性能。紧预算下任务成功率明显下降,但安全成本不会超过红线;松预算下任务性能提升,但安全成本也随之上升。这个权衡关系曲线比单一数值更能说明约束学习的特性。
4.3 性能和安全不是非此即彼
我本来预期约束学习会牺牲不少任务成功率来换取安全,但论文的结果给出了一些反直觉信息:在视觉干扰较大的测试条件下,约束学习的任务成功率反而高于baseline。原因可能是安全约束强迫策略学了更稳健的视觉特征——一个会避开危险区域的策略,天然对感知噪声更鲁棒,因为它不会因为一个像素扰动就做出极端动作。
这一点在真实项目中其实很关键。我们团队之前做过一个机械臂分拣项目,发现模型在仿真里安全表现很好,一换光照条件就出问题。后来排查发现是纯奖励塑形训练的策略把“安全”和特定视觉特征绑定了,而不是学到“远离危险”这个抽象概念。论文中约束学习在视觉扰动下的稳定表现,说明约束信号比奖励塑形更容易诱导出跨场景泛化的安全行为。
5. 读完之后的三点思考与复现建议
5.1 论文没有解决的开放问题
第一,安全成本函数(C(s,a))的手工设计仍然是瓶颈。论文的实验场景里,安全边界是可以被明确描述的几何空间;但真实世界大量安全规则是语义级的,比如“不能把刀具递给小孩”这种指令,没法简单用距离阈值表达。这个问题的终极解法可能需要VLA自身的世界模型来辅助判断,那就变成另一个层次的问题了。
第二,Sim-to-Real迁移。仿真环境里的安全约束定义得再清楚,迁移到真机上也要面临状态估计误差、动力学偏差和延迟问题。论文里的安全层在仿真里可以拿到精确状态,真机上拿到的却是带噪声的估计值,安全层的有效性会受到挑战。这个问题的解决可能需要把安全层设计成能够容忍状态不确定性的鲁棒形式,比如鲁棒CBF或Tube MPC。
第三,时序约束和多智能体场景。单机器人任务的约束还好建模,人机协作或两臂协同场景下,“互相之间保持安全距离”这种约束会带来组合爆炸问题。论文的框架理论上可以扩展,但实际求解难度会大幅上升。
5.2 复现时可能踩的坑
论文的方法听起来不复杂,但真正复现时会遇到几个非常现实的工程问题。
拉格朗日乘子的初始化与学习率:如果(\lambda)初始值接近0,策略前期基本无安全压力,会疯狂踩红线;如果初始化过大,策略直接躺平不动。建议是先跑几步看安全成本的自然量级,再反推(\lambda)的合理初始值。
安全成本与任务奖励的量纲差:任务奖励通常比较稀疏、量级小,安全成本却可能因为距离函数被放得很大。两者直接相加会让优化被安全项支配。论文里应该对安全成本做过归一化或裁剪,复现时这一步要特别小心。
环境终止逻辑对成本统计的污染:在仿真里,发生碰撞时环境通常会提前终止episode,这会造成安全成本被截断,策略学到的往往不是“避免碰撞”,而是“让episode尽快结束以规避后续累计成本”。一个实践经验是:发生碰撞后不立刻终止,而是继续运行几秒,让策略感受到危险动作带来的持续高成本。
5.3 把约束学习迁移到自己的项目里
如果你不想完整复现论文,也想借鉴它的思路,我建议从最小的改动开始:在现有VLA策略上外挂一个安全层,再把安全层的触发频率作为一个观察指标跑起来。当你发现触发频率过高时,用论文的约束目标做轻量微调,而不是彻底重训模型。这个渐进路线对项目风险控制更友好。
我们自己的一个任务就采用了类似的迁移路径:先把安全成本定义成关节限位和末端距离的组合,然后在模仿学习基础上加了一层安全约束微调。效果是任务成功率几乎不掉,但碰撞率下降了百分之四十多。这说明约束并不必然牺牲任务表现,关键是让模型在安全边界内自主优化任务目标。
读这篇论文之前,我对VLA的安全问题一直停留在“加规则、加惩罚”的层面。读完之后最大的启发是:安全对齐应该是一个贯穿训练过程的约束问题,而不是训练完成后的补救措施。把安全写进约束,再通过拉格朗日对偶去求解,虽然比reward shaping多了一些调参成本,但得到的策略在安全边界上的行为要可解释得多。
如果你也在做VLA相关的落地项目,我建议尽早引入安全约束,而不是等模型过拟合任务指标之后再做安全后处理。安全cost的定义一开始粗糙一点没关系,关键是让约束信号参与训练,模型才会真正把安全内化成动作习惯。后面迭代成本函数定义,比在完全不管安全的策略上强行加安全层要有效得多。