☰
让自动驾驶学会“想象”:WorldRFT中的潜在世界模型与强化微调
2026/10/17 3:28:28 网站建设 项目流程

开车时最考验人的不是眼前这一秒,而是接下来三秒会发生什么。前面一辆大货车恰好挡住视线,你是老老实实跟着减速,还是提前向左试探半个身位?这个决策的含金量,取决于你在脑子里能不能快速推演出几条互不相同的未来支线,并且对每条支线都给出一个合理的代价估计。自动驾驶的规划模块其实也是这个道理——近两年有不少工作把“想象未来”的能力直接塞进规划器里,WorldRFT 就是这类思路里一个相当有代表性的方案。

我是在某个人工智能顶会的工作列表里刷到这篇东西的,作者团队把它定位成“用于自动驾驶的带强化微调的潜在世界模型规划”。名字拆开很直白:World 指世界模型,RFT 是 Reinforcement Fine-Tuning(强化微调),潜在(latent)则明说了这个模型运行在特征空间而不是像素空间。一句话概括它的价值:先让系统学会在潜在空间里“做梦”,再用强化学习把“梦里的决策”打磨到能上路。这篇博文我会把对这条技术路线的理解、拆解、复现实验里的经验和踩过的坑都写出来,适合正在做自动驾驶决策规划,或者对世界模型加强化学习结合方向感兴趣的同学参考。

1. 先聊清楚:自动驾驶规划为什么要把“未来”装进模型里

1.1 传统级联系统的三个痛点

目前量产车上最常见的规划架构还是“感知—预测—规划”的级联结构:感知模块输出目标框、车道线,预测模块给出周围车辆每帧的轨线,规划模块再基于这些结果做横纵向决策。这套架构经过多年打磨已经相当成熟,但它有几个底层问题很难靠堆规则解决。

第一是误差级联。感知的框稍微抖一下,预测的轨迹就会跟着偏,规划器最后拿到的输入可能已经和真实世界差了两三个身位。每个模块单独看精度都在提升,但串联之后实际收益被互相抵消了不少。第二是长尾场景覆盖不足,鬼探头、前车急刹、施工区突然变道这类情况,规则库里往往没有现成模板可套。第三是“预测”和“决策”的目标不一致,预测模块追求轨迹的均方误差最小,但规划器真正关心的是这条预测轨迹会不会把自己逼进死角,两者不是一回事。

1.2 “在想象中推演”和“看到什么答什么”的本质区别

世界模型规划走的是另一条思路:与其等着预测模块给出唯一的未来,不如让系统自己具备一个“内部动力学模型”,能够从当前状态出发,模拟执行若干候选动作后世界会变成什么样,然后根据模拟结果的预期代价来挑动作。这其实就是模型预测控制(MPC)在潜变量层面的升级版,也带一点基于模型的强化学习味道。

这种“先想象、再决策”的方式有个普通反馈策略没有的优势:它是显式地在做规划。路上的情况是树状的,前车可能减速也可能保持,行人有可可能在两秒后迈出一步,单一的确定性预测天然丢了这些信息。而世界模型可以同时生成多条相互独立的未来分支,规划器在分支集合上做保守决策,这种“在脑子里快进几遍再动手”的能力,恰恰是人类老司机处理复杂路况时真正在做的事。

1.3 为什么非要“潜在空间”,直接预测视频不行吗

很自然的疑问是:既然要想象未来,为什么不直接用视频预测?把下一帧、下三帧的 RGB 图像直接生成出来,多直观。

问题在于像素级视频预测有三个硬伤。一是计算量,一张 512 分辨率的高清画面在 GPU 上做生成式预测,一个未来分支就要几十甚至上百毫秒,规划需要至少十个分支、数秒时域,计算量完全扛不住。二是高频细节的干扰,视频预测的损失函数会把大量容量浪费在树影晃动、灯光明暗这些对驾驶决策毫无意义的高频纹理上,真正重要的语义结构反而学不扎实。三是误差累积,像素空间一步预测的误差可能在十步以后形成不可忽略的漂移,因为每个像素都被要求精确,每个小误差都会在递归预测里放大。

潜在空间世界模型把这些麻烦全绕开了。它先把感知结果压缩成一个低维的、语义紧凑的隐状态向量,然后在隐状态上做动力学推演。隐空间的维度只有图像的几百分之一,一次推演的成本低到可以批量并行做几十条分支,而且低维流形本身有天然的平滑性,错误不会像像素空间那样高频发散。代价是它丢失了直观性——你没法直接看到它“梦到什么”,只能通过重解码或者注意力图间接理解。这个取舍在自动驾驶这个强实时约束的领域里,我认为是完全划算的。

2. WorldRFT 的方案拆解:潜在世界模型是怎么“做梦”和“决策”的

2.1 四个模块各司其职:编码器、转移模型、奖励预测、策略

WorldRFT 这类方案在整体结构上高度模块化。我按自己的理解把它的核心组件拆成四块:

第一是编码器,负责把当前观测(多相机图像、LiDAR 鸟瞰图或者两者融合后的特征)映射成潜在状态 z_t。这个编码器要求丢弃对决策无用的冗余信息,保留位置、速度、道路结构、交互对象的意图等关键语义。第二是潜在转移模型,这是整个方案的“动力学大脑”,输入当前隐状态和动作,输出下一个隐状态的分布。它是有随机性的,不是简单地 z_next = f(z, a),而是会输出一个条件概率分布,从而产生“多种可能的未来”。第三是奖励预测器,它给隐状态到隐状态的转移打一个分值,相当于计算机视觉版的“路况评分员”,安全、效率、舒适性都能折进去。第四是策略模型,输入隐状态、输出动作分布,也就是最终要落地的驾驶决策。

这四个模块不是各自独立训出来的,而是在同一个损失框架下联合优化。编码器和转移模型要先学对,因为后续所有“想象”都建立在它们画出的潜在世界里;奖励预测器负责给想象打分;策略则是在这个打分体系里被强化出来的决策者。我看到的公开资料里,这套结构对“潜在状态要语义一致”这一点特别强调,因为这个一致性决定了你在潜空间里推演的东西,能不能反映真实路况的演化规律。

2.2 关键设计:随机转移如何让“想象”产生多条分支

很多刚接触世界模型的人会默认转移模型是个确定性函数,这是最大的误解。真实世界的演化本质上是随机的,尤其在城市道路里,旁边车道的司机可能看我打了灯就减速让行,也可能完全无视继续并线。如果转移模型是确定性的,那么整个想象过程就退化成一条轨线,和传统预测模块没有本质差别。

WorldRFT 这类的做法是在隐状态转移时显式采样,也就是让 z_{t+1} 从转移模型给出的分布里抽取。这样做有两个直接好处:其一,同一个当前状态配合同一个动作,可以生成多条不同的未来演化路径,规划器拿到的是未来分布而不是一条拍板的轨迹;其二,随机性天然起到正则化作用,让整个隐空间不会退化成一个过于自信的单点预测,模型必须对不确定性建模,才不会在罕见场景下给出离谱的“自信错误”。

实际操作里,我一般会对每个候选动作采样 20 到 50 条未来分支,然后在分支集合上做保守评估。所谓保守,就是不取所有分支的平均分,而是取低分位数——哪怕只有一小部分分支预测会发生碰撞,也要按“可能出事”来规避。这是潜在世界模型规划里最有价值的一步操作,没有这个多分支保守机制,光有世界模型也开不出安全的路。

2.3 从“预测准确”到“决策正确”:为什么监督学习不够

接下来的问题很关键:既然已经有一个能推演未来的世界模型了,为什么还需要强化微调?直接用专家轨迹做行为克隆(Behavior Cloning)不就行了吗?

我用一个生活里的例子解释。你让一个新手司机看了几千小时的专家驾驶录像,他能把头两三秒的操作模仿得八九不离十,但一遇到录像里没出现过的组合路况,他就完全不知道动作的后果是什么。行为克隆的本质是在拟合“专家在某个状态下的动作”,它优化的指标是动作和专家数据的相似度,而不是“这个动作最终带来多少安全性”。两条动作差异很小,但可能一条导致三秒后被迫急刹、另一条导致从容通过,行为克隆感知不到这种差异,强化学习能。

强化微调要优化的目标很清楚:给定一个潜在世界模型,让策略在模型推演出的多条未来里,最大化累积奖励。这个奖励可以包含碰撞惩罚、路线偏移惩罚、舒适性惩罚等,它直接对着“驾驶结果的好坏”做梯度,而不是对着“像不像专家”做梯度。这也是 WorldRFT 中 RFT 这个后缀的真正含义——它是在一个已经具备一定驾驶能力的预训练模型基础上,用强化学习做二次打磨,让决策质量从“像人”提升到“经得起推演”。

3. 强化微调这一步:奖励设计、训练流程与稳定性

3.1 两阶段训练流程:先学会“看懂路”,再学会“开好车”

把 WorldRFT 落地成一份可执行的训练流程,我习惯分成两个阶段来看。

第一阶段是预训练,主要目的是让编码器、转移模型和奖励预测器形成一致的潜在表征。这个阶段可以充分利用海量无标签驾驶数据——只要有车载传感器录下来的观测序列和车辆动作,就能构造自监督学习任务:预测下一个隐状态、重建观测、对齐相邻时刻的表征。数据里不需要带任何人工标注,这是这套方案相比传统监督路线最大的成本优势。预训练结束后,再拿少量专家数据做一轮轻量行为克隆,给策略模型一个合理的行为先验,相当于让刚“睁眼看路”的雏形知道油门刹车转向大概该怎么踩。

第二阶段才是强化微调的重头戏。策略在潜在世界模型里展开轨迹:从初始隐状态出发,按照当前策略采样动作,用转移模型推演未来,奖励预测器给每一步打分,累积成一条轨迹的总回报,然后用 PPO 这类策略梯度算法做更新。这里有个容易被忽略的细节:微调阶段世界模型参数并不是完全冻结的,我建议让转移模型和奖励模型保持慢更新,跟着策略一起适应,避免策略已经探索到新的行为模式、世界模型却还停留在旧分布里,导致想象出来的评估失真。

3.2 奖励函数到底怎么排:安全、进度、舒适、合规

奖励设计是强化微调里最影响成败、也最容易被低估的一环。WorldRFT 的奖励预测器不是在终端给一个标量,而是对每一步的隐状态转移都给出即时奖励,这样短时域也能指导动作选择。

我的建议是分层设计。安全类奖励优先级最高,采用“一票否决”的形态:如果潜在推演中出现碰撞或者安全距离低于阈值,该分支整体给一个很大的负奖励,而不是仅扣几分。进度类奖励衡量朝向目标前进的净收益,用来抵消“原地磨蹭更安全”的惰性。舒适性奖励用加速度和三轴 jerk 的平方和来惩罚野蛮操作。规则类奖励则约束车道保持、限速、红绿灯状态这些交规项。

我把自己常用的配置列出来,权重的绝对数值不一定通用,但比例关系有参考价值:

奖励项作用初始权重建议说明
碰撞 / 安全距离一票否决主导项,单独设阈值低于阈值直接大负分,不参与加权
任务进度抑制保守怠工0.3优先用路线投影位移,避免绕路刷分
交规遵守车道、限速、信号灯0.2最好做硬约束而非软惩罚
舒适性控制 jerk 和横向加速度0.1最后再加,避免前期拖慢探索
人工接管对高危险状态兜底每次 -1.0闭环仿真里由安全员触发

调权重不是玄学,我踩过几次坑后的心得是:先只留安全项和进度项,把路线跑通、把“不乱撞”的基本盘稳住,再逐步把舒适性和交规项加进去。一上来就五项全开,梯度信号互相拉扯,策略很容易训练好几个小时都在原地打转。

3.3 训练崩溃的三个典型原因:模型偏差、奖励黑客、方差爆炸

强化微调在理论框架上漂亮,实际跑起来崩溃的方式却相当多,我反复遇到的归纳下来就三件事。

第一是模型偏差。策略在潜空间里探索久了,总会找到一些转移模型“没学过”的区域,也就是分布外的隐状态。策略在那些区域里推演出来的未来可能极度离谱,但它会根据离谱的未来获得高分,这种自欺欺人的循环一旦形成,策略就彻底学歪了。缓解手段是在隐状态后面接一个分布外检测器,预测特征的重建误差变大的时候,给那一整条轨迹追加一个大的负奖励,逼迫策略留在数据分布覆盖的安全区域里。

第二是奖励黑客。策略会找到奖励函数的漏洞,比如原地反复横跳制造“速度波动”来触发某种被误判为灵活性奖励的机制,或者贴着目标点绕圈制造极大的“进度正分”而完全不管路线是否合理。对付奖励黑客,老办法是给奖励函数做物理约束,控制在合理范围内,比如速度只算到 30 到 60 之间的收益;新办法是定期在闭环仿真里做人工审查,挑出几个得分最高的轨迹可视化,看看高分是不是靠作弊刷出来的。

第三是方差爆炸,策略梯度方法天然带有高方差,想象出来的多分支未来更是把方差进一步放大。我的处理方法是把隐 rollout 长度控制在 15 到 30 步之间、用广义优势估计(GAE)做优势剪枝,并且在回合内用较低的折扣因子(0.9 附近)来压制远期的噪声。高折扣听起来会让人短视,但在模型偏差没有彻底解决之前,短视一点反而更安全。

4. 实测阶段最容易翻车的三个地方:漂移、幻觉和骗奖励

4.1 长时域漂移:想象中的“未来”越来越不像真的

我在自建的简化场景里复现这套方案时,第一个撞上来的问题就是长时域漂移。前 8 到 10 步的潜在推演相当像样,能正确反映障碍物的相对距离变化,但一旦推演到 20 步以后,隐状态就开始出现莫名其妙的“幻觉”,比如车道线位置发生扭曲、前方车辆凭空合并、甚至出现不可能存在的超车角度。

从原理上说,这是因为转移模型的误差是逐帧累积的,而在潜在空间里这种误差往往表现为语义上的缓慢扭曲,而不是像素上的模糊。幻觉之所以危险,是因为它的分布并不完全随机——它大概率朝着训练数据的残差方向偏移,所以看起来像模像样,不仔细看根本发现不了问题。我后来在推演结果的末端加了一个显式的状态置信度评分网络,这个网络只用真实轨迹的隐状态做监督,专门给每一个推演出的未端时刻打一个“真实度分”,低于阈值的未来分支直接整支剔除,不让它参与决策投票。效果非常直接,碰撞率立刻下来了。

4.2 奖励黑客:策略模型学会了钻空子

第二个坑是奖励黑客,发生在强化微调开始后差不多千次迭代的时候。策略发现,只要在潜在推演里做出一个近乎原地原地顿挫的可疑动作组合,转移模型就会产生一条“两边车辆同时远离”的不真实未来,于是它反复用这个动作去刷高安全分。

这说明一个问题:世界模型的置信度评估不能只在训练之前做一次,训练过程中的监控必须持续进行。我当时的修复方法是双管齐下——一方面收紧分布外惩罚的阈值,让这种“诱导幻觉”的隐状态被高成本压制;另一方面每隔固定迭代次数就把策略推演出来的高频动作轨迹混入训练集里重新微调转移模型,让世界模型学会“这路况不是这样演化的”。一句话总结:世界模型和策略是攻防关系,策略会不断找模型漏洞,模型也要持续打补丁。

4.3 闭环评估别只看碰撞率:我要看哪些指标

很多人以为闭环评估只要统计碰撞率。我一开始也这么干,直到发现一个碰不到车的策略可能在原地打转数分钟,或者在一个路况简单的测试地图上跑得很好、换到复杂地图就完全瘫痪。碰撞率只是底线指标,看它只能知道“没死”,不知道“开得怎么样”。

我现在评估一组潜在世界模型+强化微调的规划器,固定看五个数字:闭环平均速度与计划速度的偏差、人工干预率(每百公里几次)、碰撞率、安全距离违规的持续时间占比、以及规划延时(从感知输出到决策输出的端到端耗时)。前四项衡量驾驶质量,最后一项直接决定方案能不能实时部署。潜在世界模型的好处在这里就很明显了,因为不需要跑像素级预测,我的规划延时稳定控制在 50 毫秒以内;如果换成视频世界模型,这个数字至少要翻五倍。

5. 横向对比:WorldRFT 和几条主流路线放在一起看

5.1 端到端 RL、预测+规则规划、潜在世界模型+RL,差异在哪

自动驾驶规划这个领域现在简直就是多路线并行,为了不把自己绕晕,我做了一张表,把四条典型路线的核心差异摆在一起:

路线决策方式对未来建模训练依赖典型问题
端到端 RL观测直接映射到动作隐式,不显式建模大量闭环交互环境样本效率低、行为难解释
预测模块 + 规则规划预测结果喂给规则决策显式轨迹预测标注数据 + 手写规则误差级联、长尾规则写不完
视频世界模型像素级未来预测再做规划显式像素预测海量视频 + 闭环高频噪点、计算开销大
潜在世界模型 + 强化微调潜在未来分支推演再做决策隐空间动力学无标签数据 + 少量闭环可解释性弱、存在模型偏差

这张表里最值得琢磨的是最后一行和第一行的区别。端到端 RL 也强化学习,但它的未来建模是隐式的,策略直接由观测产生动作,没有“在脑子里多走几个分支”的环节;WorldRFT 则是把未来建模单独掰开、做成显式模块,让策略在每个决策点都能借助潜在推演获得更深远的视线。代价是结构更复杂、组件更多、训练时每一步都对前一步有依赖,链条越长越容易出幺蛾子。

5.2 和推理时搜索(MPC / 树搜索)的关系:一个训练时,一个推断时

有人可能会问:既然已经有潜在世界模型了,那规划阶段直接做随机摇树搜索不就行了?为什么还要强化微调出一个策略网络?

这里的本质区别在训练时和推断时。树搜索式的模型预测控制是在每次决策时实时展开树分支、评估各个候选动作的累计奖励,它的优点是灵活、可以随时换奖励函数;缺点则是计算开销集中在运行阶段,而且搜索的深度和分支数量受到严格的实时性约束。强化微调则把开销留在了训练阶段,训练时用大量想象出来的轨迹打磨出一个策略网络,推断时只做一次前向传播就能输出动作,这个策略网络往往也能吸收一些搜索算法难以覆盖的多模态经验。

两者其实不是互斥关系,而是可以叠着用。我在实验里试过的最稳组合是:把强化微调训练好的策略动作当作搜索树的先验根节点,树搜索只在这个策略给出的候选动作附近做小范围微调修正。这样既保住了推断时延,又留了一点“关键时刻再想想”的余地。

5.3 什么样的场景最适合这种方案

最后聊一下边界,这套潜在世界模型+RFT 的路线并非在所有场景都优于传统方案。它最适用的场景有清晰特征:一是数据量极大但标注昂贵,比如某公司跨平台系统积累了百万公里无标签行车数据,这些数据可以全部灌进世界模型预训练;二是决策问题带明显的时间扩展深度,比如高速汇入口、无保护左转,需要在几秒尺度上反复权衡;三是任务本身就要求实时低延迟,不能等像素级视频预测慢慢出图。

反过来,如果数据量很少、路况极度规则(比如园区接驳车的固定路线),传统规则规划方案用更少的算力就能达到 90% 的可用度;如果目标是做展示和解释而不是量产落地,视频世界模型带来的可解释性价值又更高。选路线这件事,本质上是在算力预算、数据资产、安全冗余要求这三个约束条件里找平衡点。

6. 想自己复现一版:资源估算和最小闭环路径

6.1 硬件、数据和仿真器到底要什么配置

聊完原理和对比,落到“我想自己复现一遍”这个问题上。先别被论文里的实验规模吓到,最小闭环其实不需要几十张卡。

我个人的经验配置是这样:单机 4 张 24GB 显存的消费级卡就够了,其中一张跑编码器和转移模型的训练,一张跑奖励模型,一张跑强化微调的策略更新,剩下一张留给闭环仿真环境做数据采集。如果只有一张 24GB 卡,那就把训练切分成串行步骤——先完整跑完世界模型预训练,再单独跑强化微调。仿真器选择上用能支持地图场景编辑的开源闭环环境就行,不需要一开始就追求高保真渲染,因为在潜在空间里做训练时,视觉保真度对结果的影响远小于物理动力学是否正确。

数据方面,世界模型预训练需要尽量多样的无标签行车数据,方向是“里程长、场景杂”,两三万段十秒级别的片段是个比较舒适的量级。行为克隆用的专家数据反而可以更少,几千条典型路口的驾驶片段就足够让策略先学会不犯低级错误。强化微调阶段则依赖闭环仿真产生探索数据,这个量没法提前估算死,我一般以策略在验证场景上连续若干轮不出现碰撞和干预为标准来判断收不收手。

6.2 训练循环长什么样:一份概念性的伪代码

有经验的同学拿到上面这些细节就可以去搭环境了,为了照顾刚上手的人,我写一份概念性的训练循环伪代码。它不能直接运行,但把三个阶段的顺序和依赖关系表达得很清楚:

# 概念性训练循环,非完整可运行代码 for epoch in range(total_epochs): # 阶段一:世界模型预训练(自监督,使用无标签观测序列) z_t = encoder(x_t) z_next = transition(z_t, a_t, sample=True) loss_wm = recon_loss(x_next, decoder(z_next)) + kl_loss(z_next) + reward_pred_loss update(encoder, transition, decoder, reward_model) # 阶段二:行为克隆初始化(使用少量专家轨迹) z_t = encoder(x_t) a_pred = policy(z_t) loss_bc = mse_loss(a_pred, a_expert) update(policy) # 阶段三:强化微调(在潜在世界模型内展开轨迹) z_0 = encoder(x_0) trajectory = [] for h in range(rollout_horizon): a_h = policy(z_h) # 策略提出动作 z_next_h = transition(z_h, a_h, sample=True) # 想象未来 r_h = reward_model(z_h, a_h, z_next_h) # 给未来打分 trajectory.append((z_h, a_h, r_h)) z_h = z_next_h # 对 trajectory 做 GAE 优势估计,再跑 PPO 演员-评论家更新 update_ppo(policy, critic, trajectory)

注意一个细节:第三阶段在潜在世界里跑 rollout,严格来说和第二阶段的行为克隆会冲突——行为克隆想让策略贴住专家动作,强化微调想让策略自己探索。解决方法是让两个阶段以 9:1 的比例混在一个 epoch 里交替更新,而不是彻底串行,这样既能保持行为先验,又留出 RL 的探索空间。

6.3 从论文到落地的最短路径:我的复现顺序建议

如果时间有限,只想在两周内跑出一个可演示的最小系统,我的建议是不要从头复现论文全部组件。先把编码器和转移模型砍到最简单,比如直接用现成的向量编码替代重解码,只保留潜在动力学推演;然后把奖励模型简化成由清晰规则定义的解析函数,避开学习奖励的额外调试成本;最后再来强化微调。

这个“先跑通、再回填”的顺序我屡试不爽。第一周结束的时候跑通的是“潜在状态推演 + 规则奖励 + PPO 微调”的最小闭环,能在一个地图不复杂的仿真场景里完成跟车和变道;第二周逐步回填重建式编码器、学到的奖励模型、多分支保守评估这些组件,每回填一个就重新跑一遍闭环验证,确认没有引入回归问题。

最后说一点我个人在多次复现这类方案后的体会:潜在世界模型真正难的地方从来不是理论推导,而是调试。你盯着 loss 曲线看一整天,可能不如把某个分支的低概率未来可视化出来看五分钟有效。所以做这套东西,我强烈建议从一开始就给自己搭一个“梦境查看器”——能把潜在隐状态解码回语义地图或者简化的鸟瞰图,让所有推演轨迹变成肉眼可见的画面。有了它,漂移、幻觉、奖励黑客这些问题都会从抽象的数值变成可以直观看清的具体现象,调试效率完全不是一个量级。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询