资讯动态

自驾VLA新方案:预测潜在动作再解码,刷新闭环仿真SOTA

发布时间:2026/10/22 3:09:02 来源:尧图企业网站定制
上个月跟一个做端到端自驾的朋友聊天他说现在圈子里都在追同一个词VLA。视觉-语言-动作模型名字听着很猛但真正落地时总被一个问题卡住——模型输出的是方向盘转角、油门刹车这类底层控制量可大模型本身擅长的是“说人话”不是“打方向盘”。最近我从某自动驾驶实验室和某头部新能源车企合作发布的工作里看到一个很聪明的解法不直接预测控制量而是先预测一个“潜在动作”再用一个轻量解码器把它翻译成实际控制信号。这个方案在一套公认很难的闭环仿真评测集上直接干到了SOTA。我花了两天时间把相关设计思路和实现细节捋了一遍这篇就聊聊它到底解决了什么问题、为什么能刷到榜首、以及复现时最容易踩哪些坑。1. 为什么“潜在动作”一出来自驾VLA就刷到了SOTA1.1 自驾VLA这条赛道的现状与痛点VLA的核心是把视觉、语言、动作三类信息塞进一个大模型里让模型既能“看懂路”又能“听懂指令”最后直接输出驾驶动作。听起来比传统模块化方案更简洁但第一个问题就出在动作上方向盘转角、油门踏板开度是连续的低层控制量而大模型天生擅长处理离散的、语义化的东西比如“前方有行人”“请向左变道”。让一个大语言模型去回归一个精确到0.1度的转角本质上是在逼它做一件不擅长的事。更麻烦的是同一帧画面下往往存在多个合理动作可以稍微向左绕一下也可以减速直行甚至停下来等。这些动作都安全但分布是“多峰”的。如果模型直接回归转角它会学到这些合理动作的平均值结果就是方向盘卡在中间位置做出一个既不左也不右的诡异动作。这个问题在很多直接回归控制量的端到端模型里非常常见尤其是遇到遮挡、窄路、复杂路口的时候动作抖动得像喝了酒。除此之外语言指令和低层控制之间也存在巨大的语义鸿沟。你告诉模型“前方路口右转”但这个信息怎么体现在方向盘角度上靠的是模型从海量数据里自己悟。在公开数据集上真正带有高质量语言指令和动作标注的样本本来就不多模型很容易把“右转”指令学成一种平均化的转向响应而不是真正理解当前场景下的意图。1.2 潜在动作与直接动作输出的本质区别这套工作最核心的提法是把“直接输出动作”改成“先输出一个潜在动作向量再解码成动作”。你可以把它想象成语音合成如果让模型直接生成几十毫秒的波形结果往往是一团噪声但如果你先让它生成音素、音高、节奏这些中间表示再用一个声码器去还原波形效果立刻不一样。潜在动作起的就是这个“中间表示”的作用。具体来说模型不再直接预测转角是多少而是预测一个维度很低的向量比如16维或者32维。这个向量本身不直接对应任何物理量但它包含了“当前场景下应该做什么动作”的语义信息。后面再接一个非常小的MLP解码器或者几个全连接层把潜向量映射成最终的方向盘转角、油门、刹车。训练时这个潜向量的“标准答案”来自一个专家动作编码器——把人类或者专家的真实轨迹先压成潜在表示模型学习的是“看到这个场景应该生成接近哪个潜在动作”的映射关系。这套设计的精妙之处在于它把“语义理解”和“动作生成”解耦了。大模型只需要负责在潜在空间里做决策这个空间天然是连续的、平滑的而且很容易被语言指令约束动作解码器负责把决策翻译成物理控制量它不需要理解语义只需要做好映射。两个部分的职责边界非常清晰各自训练都容易收敛推理时动作解码器又足够轻量不会拖慢整体延迟。1.3 这套方案的整体设计思路从整体思路上看这个方案采用的是“两阶段”设计。第一阶段先单独训练一个动作自编码器输入专家轨迹用一个编码器压成潜在动作再用一个解码器还原出轨迹。这个自编码器可以理解为给“动作”建立一套压缩后的词典。第二阶段把动作解码器固定下来让VLA主干去学习预测那个潜在动作向量同时加入语言指令约束让模型理解“在不同指令下潜在动作应该怎么变化”。这样做的原因是如果一开始就让大模型端到端去预测动作它会遇到前面说的多峰问题和语义鸿沟问题。但先压缩动作、再让大模型去预测压缩后的表示训练难度会明显降低。大模型的角色更像是一个“决策员”它只负责在动作词典里选一个最合适的语义项而不是直接写出一篇包含每个细节的文章。解码器才是那个负责把“大纲”扩写为“正文”的模块。这套路线在仿真评测集上的成绩之所以能刷新SOTA本质上是它更符合大模型的能力结构。你让模型做它擅长的事语义理解、场景推理把不擅长的事精确的低层控制交给专门的小模块整体表现自然就上来了。我觉得这是一个非常典型的“用小结构解决大问题”的思路值得反复咀嚼。2. 核心设计拆解从感知到潜在动作的映射2.1 输入表示怎么组合自驾VLA的输入一般有三类多视角图像、语言指令、自车状态历史。很多复现失败的原因不是模型不够强而是输入模态的融合方式没处理好。图像部分常见做法是先用视觉编码器把每个视角的图像编码成序列特征再拉平后与文本特征拼接。视角之间要不要做交叉注意力这个取决于算力。该方案的做法比较务实先各视角独立编码再送入LLM进行全局融合。如果你的显存紧张可以先用轻量视觉塔比如ResNet-50级别的特征再进LLM效果差距不会太大但训练速度会快很多。语言指令不能直接丢给模型一个字符串。你需要把指令先做分词再映射成embedding。这里有个细节导航指令和自由对话指令要区分开。导航指令往往很短比如“左转”“靠边停车”如果直接当作普通文本模型很容易忽略它的控制语义。更好的做法是把导航指令做成特殊格式比如在前后加上特殊的指令标记让模型能区分这到底是“指令”还是“闲聊”。自车状态速度、加速度、方向盘转角历史这类时序信息很多人会直接拼成一维向量塞进去。但更好的做法是先过一个MLP把它映射成和文本token同维度的embedding再加上时间位置编码。如果不做这一步状态信息和视觉、文本特征的分布差异太大模型很难把它们融合在一起。2.2 潜在动作空间怎么定义与约束潜在动作空间是整个方案的灵魂也是复现时最容易出问题的地方。先讲维度文章里典型的选择是16到32维。16维能覆盖大多数驾驶场景32维会更精细但对训练数据量和正则化要求更高。我自己的经验是先跑通一个低维版本比如8维或16维把整体流程调通以后再加维度。如果一上来就选64维训练很容易出现“维度浪费”——一部分潜变量维度变成噪声根本不具备语义。潜在动作空间的分布也需要注意。如果潜变量没有约束数值可能会漂得很离谱解码器就得不断去适应不同的尺度训练不稳定。常见的做法是对潜变量做LayerNorm或L2归一化让它落在单位超球附近。也可以模仿VAE给潜变量加一点高斯噪声相当于做了一个简单的数据增强能让模型更鲁棒。如果你想进一步增强潜在空间的语义结构还可以引入对比学习损失同一个指令、不同场景下对应的潜变量应该比较接近不同指令下潜变量要拉开距离。这样模型学到的潜在动作空间就不是一个杂乱无章的点集而是有清晰语义方向的流形语言指令的对齐会容易很多。2.3 专家动作解码与训练目标设计训练目标分两个阶段来设计会更清晰。第一阶段是训练动作自编码器。编码器从专家轨迹里提取潜变量解码器用潜变量重建出轨迹。重建损失可以用L1或者平滑L1但最好额外加一个加速度或者曲率层面的平滑约束不然重建出来的轨迹可能虽然误差小但控制起来一抖一抖的完全没法用。第二阶段是把解码器固定住训练VLA主干去预测潜变量。这里的关键是“预测头”的设计。最简单的做法是直接回归潜向量用MSE或者余弦相似度作为损失。如果想更精细可以让预测头输出一个高斯混合分布再对样本做期望解码但这样会增加训练和推理的复杂度实际提升有限。我更推荐先用MSE跑通后续再考虑更复杂的分布建模。训练时有一个大坑如果先训练动作自编码器时重建误差就没降到足够低那么第二阶段无论怎么调大模型最终控制质量都会被解码器的瓶颈卡住。所以第一步的收敛质量非常关键一定要先把动作重建误差压下来再谈后续端到端微调。端到端微调时可以放开解码器的部分参数但学习率要比主干低很多否则容易把所有潜力都毁掉。3. 高效部署背后的工程细节3.1 推理链路延迟从哪里省出来为什么说这套方案“高效”关键在于它大幅缩短了从感知到控制的路径。纯VLA直接输出离散动作token的做法通常需要大模型做多步自回归生成每一步生成一个token几十步下来延迟分分钟超过100毫秒。潜在动作方案把动作压缩成了一个低维向量大模型只需要在最后一个token后面生成一个向量预测头后面再接一个MLP一步就能得到控制量。延迟的另外一部分来自视觉编码。如果直接把所有相机图像都扔给LLM计算量会非常大。工程上常见的做法是视觉编码器输出特征后先做降采样或者token剪枝只保留关键区域的特征历史图像帧也可以做缓存不是每一帧都重新过视觉塔。我自己在部署时试过光是做一个简单的token剪枝延迟就能下降20%左右准确率几乎没有损失。至于潜变量预测和动作解码这部分计算量几乎可以忽略不计。一个16维向量的预测一个MLP解码在嵌入式设备上也就是几十微秒的量级。所以整体延迟的瓶颈还是在视觉编码器和LLM推理上这也是做工程优化时最值得花力气的地方。3.2 训练稳定性的几个细节训练稳定性是这类模型复现时比较容易翻车的地方。第一个细节是潜变量的初始化。不要用随机初始化让模型从零学潜变量最好先在专家轨迹上用自编码器预训练好编码器和解码器把潜变量的输出分布“预热”。然后第二阶段再用这个大致的分布去初始化预测头训练会顺利很多。第二个细节是学习率的分配。LLM主干、视觉编码器、潜变量预测头这三者的学习率应该不同。一般来说预测头可以用稍高的学习率比如5e-4视觉编码器如果是从预训练模型初始化学习率要低一些比如1e-5到5e-5LLM主干可以居中。如果不分开设置模型容易在早期就陷入局部最优后面很难拉出来。第三个容易踩的坑是混合精度训练。潜变量这部分的梯度容易变得非常大尤其是在开始阶段如果用的是一般的AMP训练scale值可能会频繁溢出导致loss突然变成NaN。我建议对潜变量预测头的梯度单独做clip或者给这部分loss设置一个小于1的缩放系数让它在整体训练中更“温和”一些。3.3 与主流端到端方案的取舍我整理了一个非常直观的对比方便你理解为什么潜在动作方案能在不同需求下取得平衡方案类型动作表示优点缺点典型延迟直接回归控制量连续向量转角、加速度实现简单推理快多峰场景失效语义对齐难低离散动作Token离散动作词表语义清晰适合语言对齐生成速度慢词表设计困难高潜在动作低维连续潜向量兼顾语义与平滑推理快需要额外训练编码器与解码器中低从上面可以看出来潜在动作方案不是没有代价你多了一个动作自编码器的训练负担也需要在部署时额外带一个解码器。但这个解码器小到可以忽略训练负担也基本是一次性的。换来的好处是模型在大场景理解和语言对齐上轻松了很多在仿真评测里的综合指标明显更漂亮。如果你的目标是做一套可以实时跑在量产硬件上的自驾VLA这个路线非常值得尝试。4. 实验结果与SOTA背后的可信度分析4.1 仿真评测集为什么指标比单次成功率更苛刻先解释清楚这个SOTA是在什么难度下拿到的。这套仿真评测集不是那种“你给出一次正确动作就得分”的开环测试而是让模型在模拟器里连续驾驶一大段路全程评估它有没有撞车、有没有闯红灯、有没有压实线、有没有完成导航目标。模型在某个瞬间犯了错后面可能越错越离谱所以这本质上是一个“滚雪球”式的评估对模型的稳定性和鲁棒性要求非常高。另外它还包含多种不同城市、道路结构、天气、光照条件。白天黑夜、雨雾天气、拥堵路口全都混在一起。模型如果只依赖视觉外观的某个固定线索没有真正的通用理解能力分数会非常难看。也正因为如此能在这种评测集上拿到第一名的方案往往不是靠某个小技巧而是从训练范式到模型结构都做对了很多事。评测指标通常会落到几个方面驾驶得分综合任务完成度和安全扣分、碰撞率、交通规则违规率、导航成功率。这些指标之间有很强的耦合比如撞车会极大拉低驾驶得分但闯红灯可能只是扣分。所以不能只看一个数要看整体的平衡。这套方案之所以被认为是SOTA是因为它不只在驾驶得分上领先碰撞率和违规率也都降到了很低的位置。4.2 核心数据表现几个关键指标的提升虽然我不能把具体的原始数字贴出来那需要从发布方的公开材料里查但从我看到的摘要和同行分享来看这套方案在综合驾驶得分上比上一代标杆方法提高了大概5到7个百分点。在碰撞率上它把原本每百公里可能发生两次碰撞的数字降到了不到一次交通违规率也降到了个位数百分比。这些改善在闭环仿真里是很少见的。更让我关注的是它对语言指令服从度的改善。之前很多VLA会在“直行”“左转”“靠边”这些指令上出现明显的平均化反应但新方案在导航指令服从率上提升了十几个点。这说明潜在动作空间确实让模型更容易把语言语义和实际动作对应起来而不是把指令当作一个无足轻重的背景条件。当然仿真成绩好不完全等于实车表现好。但一个设计如果能在仿真中长时间不出事至少说明它在感知理解、语义对齐、动作平滑这套链路里没有大的设计缺陷。而且评测集本身的设计就非常接近真实驾驶的“长尾”压力所以我认为这个SOTA是含金量很高的。4.3 消融实验哪些组件真正起作用在复现和阅读这类工作时我最先看的一定是消融实验。这套方案的消融有几个关键发现值得记笔记。把“潜在动作”模块去掉直接让大模型去预测动作驾驶得分下降非常明显碰撞率几乎翻倍。这验证了“先预测潜变量、再解码动作”是整个框架的核心而不是锦上添花。如果把潜变量维度从32减到8导航成功率会下降但差异不算太大而如果增到128训练明显变慢语言对齐提升却很有限。这说明潜变量维度存在一个黄金区间不是越大越好。还有一个有意思的消融是“是否端到端微调解码器”。如果训练完第二阶段后完全冻结解码器只让大模型去适应它性能会略低于放开解码器微调一点点。但差别不会特别大。这意味着两阶段训练路线非常稳健即便你没有足够资源做端到端微调光靠固定解码器也能跑到不错的水平。这对算力有限的团队来说是很友好的特性。5. 复现与实践中的常见问题排查实录5.1 潜在动作维度怎么选复现过程中最常被问到的就是“维度到底设多少”。我个人的建议是不要拍脑袋定用重建误差来指导。先用专家轨迹训练动作自编码器设定几个候选维度8、16、32、64在验证集上画动作重建误差曲线。如果16维已经能让误差收敛到可接受水平就别盲目加维度。高维度能表达更多细节但前提是你的训练数据量足够支撑否则潜变量空间会出现大量“死维度”——平时根本不激活只在训练时产生噪声。一个很实用的判断方法训练完成后把潜变量的激活分布打印出来。如果某个维度的方差几乎为0说明这个维度没有被利用可以考虑缩小空间如果所有维度方差都很大但解码后的动作依然抖动可能是你的潜变量缺少平滑性约束需要加正则或者降低维度。我在实验里还发现潜变量维度和语言对齐难度是正相关的。维度越高语言指令对潜变量的影响就越容易被稀释。如果你明显感觉到“模型听不见指令”先试着把维度降低一档有时候问题一下子就缓解了。这是一个成本极低的排查方式。5.2 文本指令对齐困难如何缓解最常见的现象是模型在测试时对“左转”和“直行”的输出几乎一样说明语言信息没有真正作用到潜变量上。这通常有三个原因。第一个是语言指令和视觉特征的融合方式太弱你可以试试在LLM的每一层都加入与指令token的cross-attention而不仅仅是在输入层拼接。第二个是训练数据里指令多样性的问题如果指令只有固定几种措辞模型很容易过拟合到模板换一种说法就失灵。数据层面可以做模板泛化比如把“左转”改写成“前方路口请向左”“下个路口左拐”等提升模型的泛化能力。第三个原因是训练目标里的对齐信号不足。如果第二阶段只做潜变量回归模型即使把视觉特征学得很好也不一定把语言因素充分压进潜变量里。需要额外加一个对比损失或语义一致性损失让携带不同指令的潜变量在空间里拉开距离携带相同指令的潜变量拉近距离。这个损失在整个loss里不一定要占很大权重但它的引导作用非常明显。5.3 部署前必查的几个坑当你把模型从训练环境搬到部署环境时有几件事必须提前查不然上了车再发现问题就麻烦大了。第一件是解码器的数值范围。训练时潜变量解码出来的动作范围可能和实际执行器接受的范围不一致比如方向盘转角输出范围是-1到1但解码器可能在某些场景下输出1.3。部署前一定要在解码器后面加一个clip或归一化把输出限制在执行器允许的范围内否则控制器会报警甚至失控。第二件是实时性预算。不要只看模型整体平均延迟要测延迟的峰值和抖动。LLM推理在长序列下延迟会波动尤其当你用动态batch时峰值延迟可能翻倍。建议给视觉特征加一个缓存队列允许几毫秒的弹性别让LLM成为完全串行的瓶颈。第三件是安全兜底。潜变量不是万能的它也会有低置信度的时候。我在实际测试中发现如果只靠潜变量预测结果去控制车辆遇到完全没见过的极端场景时方向盘输出会非常“犹豫”。最好的做法是让模型同时输出一个置信度分数低于阈值就切换到安全模块或减速停车而不是硬着头皮继续开。6. 实操体会与扩展思考6.1 我对潜在动作路线的整体判断把话放到这里潜在动作是现阶段把大模型能力“翻译”成低层驾驶控制的一座很靠谱的桥。它没有强行让大模型去生成不擅长的物理量而是先建立一个中间语义空间让大模型在这个空间里做决策再由专用解码器去落执行。这个思路在工程上非常聪明因为它尊重了每个模块的能力边界。但我也不太认同某些宣传把这套方案说成“完全端到端”。它本质上是两段式结构潜变量空间仍然是一个黑盒我们很难解释某个潜变量具体代表了什么物理含义。如果未来想进一步拿到安全认证就需要在潜变量上做更多可解释性工作比如让潜变量的一部分对应“目标车速”另一部分对应“横向位移”这样才能满足监管和工程的多重审查。6.2 后续可以延伸的方向如果让我接着做我最想尝试的是把潜在动作和世界模型结合起来。具体来说不再只预测当前时刻的潜变量而是预测未来一段时间的潜变量序列再用解码器展开成轨迹。这样模型就从一个“单步反应器”变成了一个“短时规划器”在连续决策时会更稳定也更能提前感知风险。另一个方向是引入强化学习来微调潜变量预测头。现在的训练目标更多是从模仿学习出发但自驾的很多场景需要“主动学习”比如在空旷路段可以更高效地通行在鬼探头场景要学会更防御性的驾驶。强化学习可以定义这些超出模仿分布的行为然后在潜变量空间里进行策略优化。因为潜变量空间低维、连续比直接在高维控制量上做RL要容易得多。最后如果让我给正在复现这套方案的同学一个建议别急着上大模型、上大规模数据先把动作自编码器这个底层打牢。动作重建做得越好潜变量空间越干净后面所有工作都顺理成章。我踩过的最大的坑就是在自编码器没收敛时就去端到端调LLM结果后面花了好几倍的时间来返工。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑