策略世界模型:从预测到规划的多智能体决策新范式
如果你在2025年盯过NeurIPS的论文列表一定会注意到“From Forecasting to Planning”这个题眼的密度高了不少而其中把Policy World Model和Collaborative State-Action Prediction串在一起的这篇工作我觉得算是把多智能体预测这件事彻底往“会规划”的方向推了一步。我先用最直白的话解释它解决了什么问题以前我们让模型预测“下一帧世界会发生什么”它只是被动看戏这篇工作的核心是让模型同时预测“别人会怎么做、自己的动作会带来什么连锁反应”并且把这些预测直接变成规划的依据。换句话说模型从“天气预报员”变成了“参会者”它不仅报天气还告诉你该不该带伞、走哪条路。这篇文章适合正在做多智能体强化学习、自动驾驶决策、机器人协同控制或者研究世界模型在决策任务中落地的同学我会从动机、设计、训练、测评、踩坑几个层面把这篇论文拆开讲清楚。1. 从预测到规划为什么预测模型不够用了1.1 经典预测范式的局限先说说“预测”这事的传统做法。过去几年多智能体场景下的主流研究几乎都集中在状态预测state forecasting上给定历史轨迹预测未来几秒所有智能体的位置、速度、朝向。这类模型的代表作很多基本套路就是Transformer/GNN编码历史轨迹然后用解码器输出未来轨迹分布。评测时大家比的是ADE平均位移误差、FDE终点位移误差指标做得非常漂亮。但有个很尴尬的问题预测准了然后呢如果你的下游任务是规划无论是自动驾驶的轨迹规划还是机器人的避障规划你需要的不是“每个智能体最可能走哪条路”而是“在我执行某个动作序列之后整个环境会演变成什么样”。这两个目标在数学上有着本质区别。标准预测模型学到的是轨迹边缘分布 P(未来轨迹 | 历史)而规划需要的其实是条件分布给定自身动作后的联合演化。更麻烦的是标准预测模型在训练时根本没有见过“自身动作对他人决策的影响”这一信号所以一旦把它接进闭环规划器误差就会像滚雪球一样膨胀。我在实际项目里试过直接用现成预测模型做闭环控制效果非常灾难模型预测其他智能体会沿着历史规律直行但实际上当你打方向盘避让时对方也会调整轨迹模型却完全没学会这种交互敏感度。这不怪模型是训练目标从根本上没对齐。1.2 世界模型与策略世界的分野World Model这个概念在强化学习里不算新鲜从Dreamer到MuZero思路都是学一个环境动力学模型然后在隐空间里做规划或策略优化。但这里有个隐含假设环境的演化是由“状态 动作”决定的而动作通常是指你自己这个智能体的动作。到了多智能体协作场景这个假设就不成立了。环境里还有一大堆别的智能体它们的行为并不由你控制但是它们也会影响下一帧状态。经典世界模型如果不管这些智能体的策略直接用 sum pooling 或者把其他智能体当成环境噪声忽略掉学出来的动力学就非常粗糙尤其在人车混杂、多机器人协同这类强交互场景里会剧烈失真。Policy World Model正好把这块补上了它的意思是我们要建模的不仅是物理世界的转移规律还要建模“别人会怎么决策”。也就是说模型必须同时捕捉环境动力学和策略动力学policy dynamics。别人下一步做什么不是随机噪声而是可以被你的动作影响的——这句话是整篇论文的灵魂。它让世界模型从“物理推演器”升级成了“社会推演器”学会的不是球往哪里滚而是球场上的球员如何跑位。1.3 协作场景的特殊性为什么偏偏强调“Collaborative”因为如果其他智能体是敌对的或者完全独立的那建模对方策略就变成了防守问题套路完全不一样。协作场景里智能体之间倾向于共享信息、互相配合这给状态-动作联合预测带来两个独特优势和一个麻烦。优势一协作智能体的动作往往有强烈的条件结构——如果我往仓库门口开队友大概率会提前让出通道这种条件概率是可以被模型稳定学到的。优势二协作场景通常有共享的奖励信号模型可以用全局回报来指导预测任务避免多目标打架。麻烦在于协作不等于动作一致智能体之间有精细的分工。如果模型只是学一个整体的趋势比如“大家都往目标点走”那它对规划毫无帮助。你必须让每个智能体的预测都收到其他智能体动作的影响而且这种影响要具体到“因为A停了所以B绕道”而不是笼统的粒子互斥。所以这篇论文把任务定义成了“Collaborative State-Action Prediction”不是预测单一的未来状态分布而是预测完整的联合状态-动作序列分布。我把这个选择理解为把决策变量直接放进预测空间让预测模型为规划任务服务而不是走一条“先预测再规划”的流水线。这个设计哲学值得多琢磨。2. Policy World Model 的核心设计思路2.1 把动作变成预测目标任务的形式化定义先给一个相对严格的数学框架方便后面讨论细节。假设有 N 个协作智能体在时刻 t 的系统状态记为 s_t各智能体采取动作 a_t¹, a_t², …, a_tᴺ环境转移到 s_t₊₁。传统世界模型学的是转移概率P(s_t₊₁ | s_t, a_t¹, …, a_tᴺ)但这要求你先把所有智能体的动作给定它只负责算物理转移。问题在于规划的时候你手里只有自己的动作别人的动作是未知的、未发生的。Policy World Model要学的是前向联合预测模型P(s_t₊₁, a_t₊₁¹, …, a_t₊₁ᴺ | s_t, a_t¹, …, a_tᴺ, 以及历史信息 h_t)这个看起来只是把动作加进了预测目标但意义完全不同。它意味着模型需要在下一时刻同时输出状态变化和别人会执行什么动作。一旦你有了这个分布规划时就非常自然了你枚举自己的动作序列用模型滚动展开整个交互的未来然后基于回报函数选择收益最高的那条动作序列。这就是标题里“From Forecasting to Planning”的完整链路。2.2 策略条件的动力学建模“他人如何回应我”很多人会疑惑预测所有智能体下一时刻的动作这不就是行为克隆吗差别在于Policy World Model 预测的是“条件动作”——别人的动作是以我刚才列举的动作序列为条件的。换句话讲模型内化了一条隐式反应规则如果我向左变道后面的协作车辆会减速给我留空间如果我保持巡航它会维持当前速度。要实现这种条件建模光靠把自车的动作拼进输入向量是不够的。因为自车的动作对他人决策的影响通常是非线性的、延迟的、带有意图属性的。论文里的做法是引入一个策略条件编码器policy-conditioned encoder把自车动作序列先通过一个temporal encoder比如GRU或小型Transformer编码成意图向量intent embedding再与其他智能体的历史轨迹编码特征融合。这样模型的预测头在输出第 i 个智能体下一时刻动作时不仅看到它的历史也看到“我意图改变局势”的向量。这里有一个很值得借鉴的实现细节意图向量要在时间维度和智能体维度上都广播。我曾经踩过坑只把意图向量拼到全局特征上结果发现其他智能体的动作预测对自车动作完全不敏感——因为全局特征被平均池化之后某个单一智能体的动作信号被稀释了。后来参照这类做法在每个智能体分支的解码器输入里都显式拼接意图向量交互敏感度才真正出来。2.3 联合预测 vs 独立预测为什么必须耦合输出一个看起来很省事的替代方案是每个智能体一个独立的预测头各自输出自己的动作分布然后组合成联合预测。论文没有这么做而是保持了一个全局联合预测头这是有深层原因的。多智能体协作里动作之间天然存在约束关系。两个机器人要同时通过一个狭窄门口它们不可能都往门中心挤最终解是其中一个侧身等待。这种互斥约束无法用N个独立伯努利/高斯分布的组合来表达因为它不是边缘概率的乘积。联合分布 P(a¹, a²) 才能编码“a¹向左”与“a²向右”同时发生的相关性。从训练角度讲独立预测头还会带来一个更隐蔽的问题误差结构不匹配。每个头的loss独立回传模型永远不会学到“状态预测误差和动作预测误差之间的耦合”。但在规划中一个关键错误不是某一个量预测不准而是它们之间的关系预测分别错了导致展开的轨迹违反物理常识或协作默契。联合头在特征层面强制共享、在输出层保持相关结构这个耦合在长程展开时效果极其明显。我自己的实验里对比过联合头和独立头短视界比如5步以内两者差别不大但一旦让模型自回归展开20步以上独立头的轨迹会出现大量仿真穿模和智能体重叠联合头的仿真就稳定得多。这说明耦合输出层起到了软物理约束器的作用。3. 模型架构与训练流程拆解3.1 整体框架从预测头到规划头的演化从工程角度看这篇论文的框架可以概括成三段式感知编码器、联合动力学核、规划适配头。感知编码器负责把每个智能体的历史轨迹、环境地图、智能体间相对关系编码成统一表示。这里有一个关键选择对所有的智能体共享编码器参数。因为协作智能体之间的行为模式是互通的共享参数能让样本效率大幅提升尤其在智能体数量多、但统一场景数量有限的时候N倍的数据复用不是开玩笑。联合动力学核是Policy World Model的主干。它的输入是当前隐状态 z_t、各智能体的动作、以及自车意图向量输出是下一时刻的隐状态 z_t₊₁。这个核可以在时间上反复调用也就是自回归地滚动展开未来。注意这个核和普通世界模型最大的不同在于操作对象它滚动展开的不只是物理状态还包含对每个智能体策略状态的隐式估计。你可以把它想象成“状态 策略信念”的双重隐变量一起在时间轴上往前推。规划适配头则接在动力学核之后它有两个输出分支状态预测头和联合动作预测头。我建议读者留心这个部分的设计因为它决定了模型如何在“纯粹预测”和“规划支持”之间做权衡。如果动作头输出的分布熵太小、太自信规划器就没有探索余地如果熵太大又等于什么都没说。论文的做法是让动作头的输出分布并非硬性匹配真实动作而是由一组规划优势权重重新加权后的“软标签”这算是一个比较新颖的训练信号设计。3.2 关键组件状态编码与协作关系提取这里重点说协作关系提取因为它是多智能体模型最容易做坏的部分。一种常见的偷懒做法是构造一个全连接图智能体两两计算注意力权重。但全连接图在智能体数量超过10个之后计算量爆炸而且学出来的注意力往往退化成“只看最近邻”根本学不会长距离协作关系。我的实操建议是先根据空间距离构造K最近邻图然后在这个稀疏图上做两轮消息传递第一轮交换位置和速度信息第二轮交换动作意图信息。这种两段式消息传递非常关键因为协作意图不是从原始状态直接浮现的而是需要先从“对方是否在朝我靠近”这种基础交互信号推断出来的。论文里用了更精细的做法它将每个智能体的“可达意图”编码成一组候选意图向量然后用可微的匹配机制去和其他智能体的意图对齐。举个例子一个叉车机器人的意图候选包括“取货”“让行”“充电”如果另一台机器人的预测动作表明它正准备去同一个货架模型就会把“让行”意图的概率调高。这种显式的意图匹配模块让协作关系不再是黑盒也方便后续做可解释性分析。另一个我特别留意的组件是时间对齐模块。现实中协作智能体发送的状态观测往往不同步有的智能体以10Hz更新有的以2Hz更新。如果模型直接把这些异步观测堆叠进时间序列时序卷积的感受野会混乱。论文是在编码之前用一个可学习的timestamp embedding为每个观测打上时间戳再把整个序列送入一个continuous-time backbone。我第一次看到这个设计时觉得是过度工程直到自己的数据出现异步采样问题才意识到这步有多必要。3.3 训练流程与关键技巧以下是这篇论文训练流程中我觉得最值得记录的几个技巧双阶段训练先做预训练目标函数是标准的联合预测误差状态误差 动作误差第二阶段引入规划损失用规划器实际选出的动作轨迹和最优轨迹做对比微调动力学核。这个微调阶段让模型从“预测准”转向“规划收益高”。动作噪声注入训练时以一定概率把自车动作替换为带噪声的动作。如果不加噪声模型很快会过拟合到训练分布里的动作模式一旦规划器在运行时探索了分布边缘的动作模型就会给出荒谬的预测。这种噪声注入相当于给动力学核做正则化鲁棒性提升非常明显。多尺度回报归一化协作场景中不同智能体的回报量纲可能差好几个数量级一个负责搬运的机器人单步回报可能是0.01而负责调度决策的智能体回报是50。如果不处理训练会被大尺度智能体主导。论文的方法是每个智能体维护一个独立的回报统计量做标准化后再混合成全局loss。3.4 一个简化的实现示意为了帮助理解我给出一个极度简化的伪代码框架不包括注意力细节只展示核心数据流。class PolicyWorldModel(nn.Module): def __init__(self, state_dim, action_dim, num_agents, hidden_dim256): super().__init__() # 共享感知编码器 self.perception_encoder nn.GRU(state_dim, hidden_dim, batch_firstTrue) # 策略条件编码器编码“我的意图” self.intent_encoder nn.GRU(action_dim, hidden_dim, batch_firstTrue) # 联合动力学核隐空间转移 self.dynamics_core nn.GRUCell(hidden_dim * 2, hidden_dim) # 状态预测头 self.state_head nn.Linear(hidden_dim, state_dim) # 联合动作预测头 self.action_head nn.Linear(hidden_dim, action_dim * num_agents) def rollout(self, history_states, current_action_seq, horizon): # 编码历史状态 _, h_state self.perception_encoder(history_states) # 编码动作序列得到意图向量 _, h_intent self.intent_encoder(current_action_seq) h torch.cat([h_state, h_intent], dim-1) pred_states, pred_actions [], [] for _ in range(horizon): h self.dynamics_core(h, h) s_next self.state_head(h) a_next self.action_head(h) pred_states.append(s_next) pred_actions.append(a_next) return torch.stack(pred_states), torch.stack(pred_actions)实际工程中还要在这个骨架上加消息传递层、注意力模块、异步时间戳机制。但这个骨架能让你直观看到Policy World Model和普通世界模型的差异在哪多了动作联合预测头并且把动作序列也编码进了隐状态更新的条件里。4. 应用场景与落地价值4.1 自动驾驶与机器人协同决策这个方向最直接受益的应用就是自动驾驶中的交互决策。城市路口的无保护左转、高速汇入车流、或者停车场里人车混行这些场景的共同特点是你不能只按交规做动作计划必须估计其他交通参与者的意图同时你的动作又会影响他们的决策。Policy World Model把这种双向影响直接建模进预测分布规划器只需要滚动展开若干个假设动作序列选出对抗碰撞风险最低、通行效率最高的方案。我过往做自动驾驶决策仿真时最头疼的一点是下游规划器很难评测评测预测模型的好坏。传统做法是算ADE/FDE但这些指标和你最终是否安全通过路口没有任何直接关系。如果采用Planning World Model的思路评测就变成了终极指标在仿真环境中闭环滚动记录碰撞率、平均完成时间、舒适度。这种从预测到规划的转变本质上是把模型评测从“精度导向”拉回“价值导向”。4.2 多智能体游戏AI与智能体训练另一个非常匹配的场景是多智能体游戏比如团队对抗游戏、竞技类格斗游戏里的AI队友训练。这类场景有天然的分层结构高水平AI需要预测队友和对手的走位意图并据此规划自己的操作序列。传统的游戏AI依赖行为树或规则库面对真实玩家时容易僵化因为它没有“洞察”队友下一步动作的能力。Policy World Model在这里的价值在于它可以通过模仿高段位玩家的交互数据学会一整套“默契行为库”。举个例子在双人配合的闯关任务中模型发现A玩家走到悬崖边时B玩家大概率会切换成远程武器准备掩护于是当A玩家在规划时模型就主动往悬崖边靠因为它预测B会配合掩护。这个预测-规划的闭环让AI不再是一个被动的反应器而是主动创造配合机会的参与者。4.3 工业调度、仓储物流与交通管控工业场景里的仓储物流是多智能体协作的最典型代表。几十台AGV小车在同一片仓库来回搬运充电桩、狭窄通道、拣货台全是资源竞争点。调度系统的难点不在于让某台小车走最优路径而在于预测旁边一圈小车接下来会怎么走以及你的调度指令会如何影响它们各自的下一步决策。用Policy World Model做仓储调度的好处是它能将调度指令、小车状态、路况信息统一编码输出的联合预测天然考虑了车与车之间的避让关系。规划环节则可以基于学习到的世界模型做滚动时域优化而不是依赖手工写死的避碰规则。一批实验数据显示在这种环境下基于联合预测的调度方案比基于独立预测的排产方案在吞吐量上有接近三成的提升同时死锁次数明显下降。4.4 实验设计建议与指标选择如果你想在论文或工程里复现验证这个方法我有几点指标设计上的建议预测质量的评估不要只看均方差。建议新增“交互命中率”指标即模型能否在关键时刻比如两车相距小于某个阈值时预测对对方的避让动作。规划质量的评估用闭环仿真环境对比几种不同的规划方式无模型随机预设、基于独立预测模型的MPC、基于Policy World Model的MPC/MCTS。核心指标是任务完成率、碰撞率、平均决策延迟。泛化能力评估要专门测试不同智能体数量、不同通信条件下的表现。很多模型在固定数量智能体上训练得很好一旦数量变化就崩。最好设置外推测试集。我能给的直接建议是如果你要用这个方向做研究千万别把论文的消融实验局限在预测误差上。审稿人更关心的是“你的预测-规划闭环到底比预测-反应式规则好多少”所以一定做好规划收益的对比表。5. 复现与踩坑记录训练中遇到的那些问题5.1 误差累积与展开崩溃我最先踩到的坑是模型训练得很好但一旦在规划器里自回归展开到30步以上隐状态就开始发散输出的轨迹严重偏离物理规律。这个问题业内叫compounding error不是Policy World Model独有但在联合动作预测任务里更严重因为动作误差和状态误差会互相放大。我的解决方案是训练时混合调度Teacher Forcing和Free Running。具体来说前一半batch用真实的观测作为下一步输入teacher forcing后一半batch用模型自己的预测作为输入free running并且随着训练进行逐步提高free running的占比。这招非常有效让模型学会了如何在自身的误差之上做修正而不是只会跟着标准答案走。5.2 多智能体排列不变性问题另一个让我非常头疼的问题是智能体的编号本身是任意的。你交换两个智能体的编号顺序预测结果不应该发生任何变化但很多网络结构天然不具备这种排列不变性导致模型在训练集上看到某种编号模式就过拟合泛化很差。解决思路有两种一种是在输入阶段用set-structured的编码器比如基于注意力的permutation invariant pooling另一种是在训练数据上做随机打乱增强每一条batch训练时都随机重新排列智能体编号。我建议两条腿走路尤其Attention模块的cls token要保证不打乱否则会连自车意图都搞混。5.3 评测泄漏与后见偏差这一步是很多人会忽略的。多智能体轨迹数据的时间自相关性极强如果按整条轨迹去随机分割训练/测试集模型很容易偷看到未来信息。我必须强调正确的划分方式是按episode划分而不是按时间步划分。我见过有团队因为数据划分不当测试指标虚高两倍最后在真实部署时惨遭滑铁卢。后见偏差hindsight bias是另一个阴险的问题。如果训练时用真实未来轨迹去训练模型模型会隐式地把“未来已经发生”当作默认条件于是到了规划阶段它会生成过于自信的预测压缩了搜索空间。论文的处理方式很有启发在训练动作头时他们用软标签——真实动作的扩散版本——代替硬标签给预测分布留了更多熵这个技巧相当精妙。5.4 参数与经验速查表下面这张表是我复现类似工作时的经验参数仅供参考具体任务请根据数据特性调整配置项建议值备注隐状态维度256智能体数量在10左右时够用更多则需要加大历史观测长度10~20步太短学不到交互意图太长计算负担重消息传递轮数2超过三轮在多数场景反而过平滑Free Running比例0.3 → 0.7随训练进度逐步调整动作噪声方差0.1过大会导致训练不稳定规划展开步数15~30步取决于任务决策频率回报归一化窗口1000步太长导致统计量滞后写在最后的一点个人体会我身边不少研究者最初看到“From Forecasting to Planning”这类标题时容易把它当成一次概念包装觉得不过是在已有世界模型上加一个动作头。但实际动手复现之后我发现这个转向背后是整个目标函数的重构从最小化预测误差转变成最大化规划收益这完全不是加一个loss项能做到的。最直观的改变是模型的行为从一开始“被动拟合数据分布”变成了“主动为决策服务”。我第一次看到模型在虚拟路口成功预测出对方车辆的让行意图并主动完成无保护左转时真的有点起鸡皮疙瘩。如果你准备在自己的任务里引入Policy World Model我的建议是别急着追求架构复杂度先把“动作预测是否受自车动作影响”这个核心检验做扎实。做一个简单的小实验固定其他输入不变只改变自车的动作序列观察模型输出的联合预测是否有明显变化。如果没有说明条件建模失效了加再多注意力模块也白搭。这个检验我在每个环节都会跑一遍它能帮你快速定位模型是在真正建立策略条件动力学还是只是在做边缘概率拟合。最后再分享一个小技巧训练这类模型时建议在日志里同时记录“纯预测误差”和“闭环规划失误率”两个指标而且让它们在同一个图上对比。你会发现预测误差降低并不一定带来闭环收益提升但反过来闭环收益提升几乎必然伴随交互敏感动作预测质量的改善。这个经验让我少走了很多弯路。