这两年只要跑过自动驾驶模型训练的人,应该都被 VLA(Vision-Language-Action)这个词刷过屏。把视觉画面、语言指令和驾驶动作塞进同一个模型,听起来顺理成章,可真正推上路测和仿真评估时,很多人都会撞上同一堵墙:强化学习精调。VLA 模型在预训练和模仿阶段表现不错,一旦想用 RL 做精细调优,奖励稀疏、探索震荡、连续动作输出不稳定这些问题就全冒出来了。最近 ELF-VLA 这套研究走了一条不太一样的路——它不把 reward 当成唯一的老师,而是把驾驶过程中那些“错得明明白白”的片段收集起来,通过显式错误学习释放 VLA 的潜能。我自己在类似方向上踩过不少坑,这篇就从实际视角拆一拆它到底解决了什么、怎么落地、有哪些容易翻车的地方。
1. 定位与背景:VLA 模型为什么要过 RL 这道关
1.1 VLA 模型在自动驾驶里的核心位置
先对齐一下概念。VLA 模型就是把视觉编码器、大语言模型、动作解码器串成一个整体:摄像头画面进视觉塔,自然语言指令(比如“前方施工,靠右行驶”)进语言侧,最终从动作头输出转向、油门、刹车这类控制量。这套架构最大的吸引力在于,它把感知、决策、控制压缩成一个可端到端优化的系统,不再需要一堆写死的规则模块。
过去几年,这类模型在模仿学习框架下已经跑通了。大语言模型带来的世界知识、对开放指令的理解能力,让车辆可以响应“看到大货车靠近就让一点”这种描述,而不是只能执行硬编码规则。这是传统模块化方案很难做到的。但问题也随之而来:模仿学习本质上是在学专家的平均行为,而自动驾驶里真正要命的恰恰是那些偏离分布的长尾事件。专家平均掉的行为,往往把安全边界也平均掉了。
所以行业里普遍认为,VLA 想真正上车,必须在模仿学习之后再做一轮强化学习精调,让模型自己去探索那些专家示范覆盖不到的状态。这里的矛盾在于,VLA 模型动辄几十亿参数,动作空间又是高维连续的,RL 训练的不稳定性会被放大到难以收拾。我见过不少团队在这里卡了几个月,甚至连最简单的策略收敛都看不到。
1.2 强化学习精调到底卡在哪几个老地方
第一个老问题是奖励稀疏。自动驾驶视频里,正常行驶占了绝大多数时间,一个回合里真正决定生死的可能是最后几秒的碰撞或偏离。大多数中间帧拿到的 reward 都差不多,策略网络根本分不清哪一步是关键决策。你给它一个“到达目的地 +10 分”的稀疏奖励,它就会像无头苍蝇一样在高维动作空间里乱撞。
第二个问题是探索成本高。VLA 的动作输出是连续向量,可能是一个 8 维或 16 维的控制量。连续空间里穷举式探索基本不可行,所以 RL 训练初期大部分采样都是无效试错。放到真实路测里,这种试错代价极高;放到仿真器里,sim-to-real gap 又让模型学到的策略未必能用。
第三个问题是多目标冲突。自动驾驶的优化目标从来不是单一奖励能表达的:安全、舒适、效率、可预测性之间常常互相打架。手工设计 reward shaping 本身就是一门玄学,调一组权重可能在这个场景有效,换个城市场景又崩了。这也解释了为什么很多团队在做 VLA 的 RL 精调时,最终的策略行为看起来“很奇怪”。
第四个问题是灾难性遗忘。大语言模型底座已经有很强的语言先验,但动作输出能力本来就是硬插进去的。RL 精调时如果学习率稍微激进一点,语言能力和基础常识就会被冲掉,模型变成一个只会傻开车的策略网络,这种退化在实际训练里非常常见。
1.3 ELF-VLA 的技术定位
ELF-VLA 的切入点恰好避开了上述部分难点。它并不完全抛弃 RL,而是先把“错误”这种高信息密度的信号显式引入训练,让模型先学会识别错误、纠正错误,再考虑是否用 RL 做小范围精调。这套思路有几分像人类驾驶员的学习过程:不会开车的人一开始也拿到一堆交规和奖励信号,但真正进步最快的阶段,往往是从一次危险变道、一次剐蹭里学到的“错题本”。把错误本身变成学习对象,比单纯依赖外部 reward 来得更直接。
所以 ELF 的核心贡献可以概括为:重新定义强化学习里最稀疏的那部分反馈,用一套可扩展的错误表征和纠错训练机制,把“哪里不行”这个信号从模糊的 reward 中抽出来、显式化、代码化。这样既不放弃奖励信号,也不把宝全押在稀疏奖励上。
2. 显式错误学习:从“扣分信号”到“错题本”
2.1 错误数据从哪来:三类主要来源
第一部分要解决的是原料问题。显式错误学习的前提是能拿到高质量的错误片段。按我的实际操作经验,数据主要来自三个地方。
第一类是仿真器里的失败轨迹。不管是开源的自动驾驶仿真环境,还是团队自研的模拟器,都可以通过规则检测器自动标出失败时刻:碰撞、压线、超速、闯红灯、停车超时、安全距离违反等。这类数据量最大,而且带有精确的传感器状态和动作记录,非常适合做自动标注。
第二类是真实路测里的接管片段。自动驾驶车辆在路上跑时,安全员踩刹车或抢方向盘的那个瞬间前后几秒,通常就是模型“犯错”的高风险窗口。把这类片段切出来,配上当时的传感器数据、语言指令和实际控制动作,作为错误语料的黄金数据。真实路测错误片段占比低,但价值比仿真失败高得多。
第三类是专家/语言模型回标。无论哪种来源,原始片段里的“错”是需要描述的。传统做法是让人看视频、手动标“变道过早”或“跟车过近”,工作量巨大。ELF-VLA 的做法是用语言模型做辅助标注:把轨迹特征、场景上下文、动作序列拼成一段文本,让语言模型按模板输出错误类型、位置、现象和期望动作,再由人工抽验修正。这样可以把标注成本压到一个可接受的范围。
2.2 错误数据如何成为模型的一部分
拿到错误片段之后,关键问题是如何把它嵌入 VLA 模型的训练流程。这里的核心思路不是简单地把错误轨迹踢出训练集,而是把它们变成一条条“带纠正的指令”。
具体来说,每条错误样本会被构造成这样的多模态序列:一张或一组关键视角的图像,一段自然语言错误描述(比如“直行车道内持续向左偏移,距左侧车道线 0.2 米,可能侵犯相邻车道;应回归车道中心线”),以及期望的纠正动作序列。模型读入视觉特征和语言描述后,输出修正后的控制量。接下来用三类损失函数做联合训练。
第一类是动作回归损失,让输出逼近专家在修正场景中的动作轨迹。这不难理解,相当于给模型一个“正确答案”。第二类是错误条件生成损失,让模型在看到错误描述后能额外输出一条“纠错后的轨迹”,这条轨迹要和正常指令下的输出保持一致。第三类是一致性正则,避免模型因为见过太多纠错样本而变得过度保守,保证普通场景下输出的流畅性。
这套机制的本质,是把原本只能通过 reward 间接传达的“哪里错、该怎么改”,变成模型可以直接监督学习的输入-输出对。reward 仍然是稀疏的,但显式错误描述把中间步骤补上了,梯度信号密度大幅提升。
2.3 为什么它比纯 RL 方案更稳
我用一个生活化类比来解释。如果你带一个新司机上路,一种教法是只告诉他“你太靠左了,扣 2 分”,然后让他自己琢磨怎么调整方向。另一种教法是把刚才那段录像放出来,指着一处标线说:“你看,车头偏了 15 度,因为方向盘回正晚了,下次在进入弯道前两秒就要开始回正。”前者像稀疏 reward 的 RL,后者就是显式错误学习。
为什么后者在 VLA 这种大模型上更稳?第一,错误描述的监督信号远比 reward 稠密,每个错误片段都对应一组明确的纠正动作,不需要模型在高维空间里去试错。第二,语言化的错误信息天然是可组合的,模型可以把一个“靠右行驶”的错误和一个“转弯不足”的错误结合起来理解,形成更强的泛化。第三,显式错误学习产出的模型不是纯策略网络——它保留了错误检测能力,可以在推理阶段做自查纠错。这一点下文会展开。
另外值得强调的一点是,ELF-VLA 并不排斥 RL。它的训练流程完全可以把显式错误学习阶段当作 RL 的精调起点,让 RL 从一个已经会纠错的策略出发继续探索,这样 RL 的搜索空间更小,reward 曲线也更平稳。
3. 实操拆解:训练一个能纠错的 VLA 模型
3.1 训练流程与数据配比
如果要在自己的项目里复现这套思路,我建议按下面三个阶段来组织训练,每个阶段之间的模型权重要及时保存并做评估。
阶段一,基础 VLA 预训练。用大规模正常驾驶数据集做模仿学习,让模型具备基础的感知-决策能力。这个阶段不需要引入错误样本,重点是让视觉编码器和语言底座对齐。
阶段二,显式错误微调。把错误片段配成“视觉 + 错误描述 + 期望纠正动作”的样本,与正常轨迹按一定比例混合后,继续微调整个模型或只调低秩适配层。这个阶段的目标是让模型学会“看到错误描述就知道怎么改”,同时尽量不破坏阶段一学到的通用能力。
阶段三,可选 RL 小范围精调。如果你手头有稳定的仿真环境,可以在阶段二产出的策略基础上用 PPO 或类似算法做少量更新。注意这里的 RL 不是从零开始探索,而是沿着显式错误学习已经找到的低风险策略区域做局部优化,因此训练交数可以大幅减少。
数据配比方面,我参考常见实践后建议:正常轨迹占 70%,错误修正轨迹占 30%。这个比例不是拍脑袋定的——正常轨迹太多,模型学不到纠错能力;错误修正轨迹太多,模型会变得神经质,动不动就刹车或大幅修正方向。你可以按场景复杂度动态调整,比如在十字路口、环岛等高风险区域,把错误样本比例稍微提到 35% 到 40%。
3.2 关键参数与训练配置参考
下面是一组我在类似任务上验证过比较稳的参考配置,具体数值需要按你的模型规模和算力调整,但结构可以参考。
| 配置项 | 推荐值 | 说明 |
|---|---|---|
| 视觉主干 | 图像编码器(可冻结) | 冻结视觉塔能显著减少显存占用 |
| 语言底座 | 7B~13B 参数 | 太小学不会纠错语义,太大训练成本高 |
| 动作头 | 轻量 MLP 或扩散头 | 输出频率建议 10Hz |
| 每段错误长度 | 1~3 秒 | 太短上下文不足,太长引入噪声 |
| 关键帧采样率 | 4Hz~5Hz | 覆盖变道、刹车主事件即可 |
| 批量大小 | 128~256 | 与全局 batch 相关 |
| 学习率 | 1e-5~5e-5,余弦衰减 | 高于 1e-4 极易灾难性遗忘 |
| 错误样本采样权重 | 0.3~0.4 | 按场景风险动态调 |
| KL 正则权重 | 0.1~0.5 | 防止纠错微调时偏离正常策略太远 |
这里最容易被低估的是 KL 正则权重。显式错误学习阶段,如果完全不加约束地让模型拟合错误样本,模型很快会把“纠错”变成一种过度反应,正常路面也频繁修正方向。我在实际训练里吃过这个亏,最后把 KL 权重从 0.5 往下调,同时配合早停,正常场景的表现才回稳。
3.3 实验评估:看什么指标才不骗人
很多团队跑完训练只看一个“综合通过率”,这是最容易自我欺骗的评估方式。显式错误学习带来的提升往往集中在长尾场景,而主流场景上的变化可能很小,甚至暂时下降。如果只看平均分数,得到的结论会误导后续优化方向。
我建议至少拆成四类指标来看:主流场景通过率、可行驶区域偏离率、碰撞率、人工接管率。还要额外统计一个“错误检测召回率”,专门评测模型能否识别出自己或他车的错误行为。ELF-VLA 这类架构天然带有错误识别头,所以这个指标可以衡量它在推理阶段做自查纠错的能力。
长尾场景的评测也要分类:雨天、夜晚、施工绕行、突然插入车辆、红绿灯故障等。理想状态应该是主流场景不跌,长尾场景普遍上涨。如果某个场景涨了、另一个跌了,那大概率是错误样本类别不平衡导致的偏向,而不是方法本身的问题。遇到这种情况,先回看错误语料库的分布,而不是急着调训练参数。
4. 踩坑实录:显式错误学习实操中的高频坑
4.1 错误标签噪声太大,模型学成“偏科”
显式错误学习最大风险不是训练不稳定,而是错误标签本身的质量。如果同一类场景的描述一会儿写“向右偏移”,一会儿写“车头偏右”,一会儿又只写“偏离车道”,模型会学得很混乱。
我常用的解决方法是给错误描述做一个模板体系。比如“错误类型 + 空间位置 + 风险程度 + 期望动作”的四段式结构,由语言模型按模板生成,再做一轮一致性校验。人工抽验时重点看是否存在同场景不同描述的问题。标注质量决定了显式错误学习的上限,这一点怎么强调都不过分。
4.2 灾难性遗忘:普通驾驶能力反而退化
有段时间我为了提升纠错能力,错误样本比例拉到了 40% 以上,结果模型在普通直线路段频繁微调方向盘,车内体验极差。这就是典型的灾难性遗忘:模型过度拟合纠错动作,把“正常行驶”这个基础行为忘了。
解法有几个层次:一是把正常轨迹回放量加大,按 7:3 配比基本够;二是使用低秩适配层,只训练一小部分参数;三是加 KL 正则,约束当前输出不要偏离预训练策略太远。还有一个容易被忽略的点是学习率要足够小,我建议纠错微调阶段的学习率保持在预训练阶段的 1/10 到 1/5。如果你发现训练两步之后正常场景损失明显反弹,就把学习率再降一半,重新训练。
4.3 错误类型不平衡与标签冲突
错误片段天然是不均衡的:变道压线类样本可能占到一半,而“鬼探头”类危险样本一年也遇不到几条。如果不加处理,模型只会对高频错误类型敏感,低频但致命的安全风险反而被淹没。
我的做法是给不同错误类型设置采样权重,权重值与类别频率成反比,同时引入难例挖掘:每一轮训练后挑出预测误差最大的样本,放入下一轮的重点采样区。这样低频但重要的错误不会在训练后期被彻底遗忘。另一个可能是标签冲突,比如同一段轨迹某条样本标成“应减速”,另一条标成“应变道”。我会在进入训练前跑一遍语言模型语义去重,自动标记冲突标签,避免模型在两个互相矛盾的目标之间摇摆。
4.4 推理阶段纠错的延迟与稳定性
这部分属于额外收益,也是 ELF-VLA 的一个亮点:模型在推理阶段不仅可以输出动作,还可以先做一个“错误自查”,再根据自查结果修正动作。但双通道推理是有代价的,大约增加 30% 到 50% 的计算延迟。
如果车端算力有限,我建议把自查纠错限定在低置信度场景。具体做法是设计一个轻量的置信度分类头,当置信度低于阈值时才启用两阶段纠错,其余时候走单次前向输出完成控制。这样既保留了显式错误带来的安全增益,又不至于把帧率拖垮。抖动控制上,还要对修正量做平滑,避免模型在“正常行驶”和“纠错”两个状态之间频繁跳变。
5. 行业影响:错误数据会成为自动驾驶的新“石油”
5.1 数据闭环的新接口
传统的数据闭环是:路测发现问题,人工标注问题,补进训练集,重新训练。这里面最耗时的环节是“发现”和“标注”都靠人工。ELF-VLA 的逻辑把这一步自动化了:路测接管片段自动切出,错误类型自动描述,纠错动作自动配对,培训数据自动回流。
这意味着错误数据第一次变成了一种可积累、可检索、可迭代的资产。你有多少仿真失败轨迹,有多少路测接管记录,就能生成多少条显式错误训练样本,模型能力随之迭代更新。对整个行业来说,数据闭环的核心瓶颈从“标数据的人手”变成了“错误检测器的精度”,这是一个方向性变化。
5.2 车端模型的可解释性与安全评测
显式错误学习给行业带来的另一个启发,是模型“可解释性”的新定义。以往大家讨论可解释性,都是看注意力热力图或者决策树规则。ELF-VLA 直接把错误描述用自然语言输出,安全员或审核人员能清楚看到“模型认为自己错在哪、打算如何纠正”。这比纯黑盒策略的冷冰冰输出更适合安全审计。
评估体系也会跟着变。过去验证自动驾驶模型安全,主要看碰撞测试和接管率统计;未来很可能会引入“错误识别准确率”“错误纠偏成功率”这类新指标。毕竟一个不会犯错的模型不存在,但一个能及时发现自己要犯错、并主动纠正的模型,安全性会好很多。
5.3 对个人研究和中小团队的意义
最后说句实在话,这套方法对算力有限的中小团队其实更友好。它不像大规模 RL 那样需要超长训练时间和海量探索数据,错误样本可以用小规模仿真场景自己造,训练也只集中在低秩适配层,单机多卡就能跑起来。
我建议如果你正在做 VLA 相关的自驾研究,可以先从几百条错误片段做起,甚至手工构造二十种典型错误场景,观察模型纠错能力的变化。抽了几条典型的“错误描述 + 纠正动作”样例,加进原本的模仿学习流程里,模型的边界行为往往会有肉眼可见的改进。这套路一旦跑通,再考虑规模化扩大错误语料库和推理阶段的纠错通道,你会发现训练效率和场景泛化能力都上了一个台阶。
最后分享一个我个人的体会。早期我在某个内部项目里做 RL 精调时,耗尽脑汁设计奖励函数,效果始终不稳定;后来改走显式错误学习路线,把“错题”直接喂给模型,困扰了两周的策略震荡问题反而莫名其妙解决了。原因不复杂:奖励函数告诉模型“做得好不好”,但没说“怎么改”;而显式错误描述直接给出了修正方向和动作参考,学习的难度自然降了下来。如果你也在和 VLA 模型死磕 RL 精调,不妨先停一下,把手头的失败轨迹整理成错题本再说。