世界模型:在内部状态中预测行动后的世界
从状态表示、转移与奖励模型,到想象滚动、模型预测控制、不确定性和模型利用,理解“在脑中试走”怎样帮助又怎样误导智能体。
- 从真实轨迹学习状态与转移
- 在模型内滚动候选动作
- 按预测回报与风险评分
- 只执行近期动作
- 用真实观察校正状态
- 把模型利用反例回流训练
1世界模型解决什么问题直觉
规划之所以昂贵又危险,根本原因在于:如果每个候选行动都要放到真实世界里试一次,试错的代价可能大到无法承受。真实机器人的一次碰撞可能损坏硬件,游戏里的一次失败可能丢掉长时间积累的进度,生产系统里的一次写操作可能污染真实数据。智能体需要一种办法,在真正动手之前就大致知道某个行动会带来什么后果,从而把明显糟糕的方案先过滤掉。
世界模型就是为此而生。它的核心思路是把高维、嘈杂的观察压缩成一个内部状态,然后在这个内部状态上预测:采取某个动作之后,下一状态会是什么、会得到多少奖励、以及本轮会不会终止。一旦有了这样的预测能力,智能体就可以在“想象”中模拟行动后果——先在心里推演若干候选方案,筛掉明显差的选择,最后只把唯一一个候选真正执行出去。这样,真实环境里发生的试错次数被大幅减少,代价也随之降低。
需要强调它的输入与输出:输入是当前状态和某个候选动作,输出是对下一状态、奖励或终止概率的预测。三者共同构成智能体做决策时所需的全部关键信息:下一状态决定“接下来会到哪一步”,奖励决定“这一步值不值”,终止概率决定“这条路径是否走到头了”。
一个关键的边界必须说清:世界模型不是对世界的完整复制,而是针对决策任务保留必要变量的近似模拟器。它只关心那些真正影响行动后果的变量,其余无关细节会被压缩或丢弃。这意味着,能生成一段逼真视频,并不等于预测对了行动后果。像素看起来合理,却可能在碰撞、库存或奖励上完全错误。判断一个世界模型好坏的依据,是它预测的动作后果是否可靠,而不是它生成的画面是否好看。
2状态、动作、转移和奖励机制
一个可以用于规划的世界模型,至少要能够回答四个量:当前状态是什么、采取某个动作后状态会变成什么、这一步能获得多少奖励、以及可选地能否把状态还原成观察。它们分别对应模型里的几个组件,可以写成下面这组式子:
zₜ = E(o₍≤ₜ₎),ẑ₍ₜ₊₁₎ = f(zₜ, aₜ),r̂ₜ = g(zₜ, aₜ)
逐一拆开看每一步的含义。
编码器 E 的作用是把当前以及历史的观察 o₍≤ₜ₎ 压成一个内部状态 zₜ。观察可能是高维的,比如一帧画面、一串传感器读数;状态则是模型内部选择的紧凑表示。动力学函数 f 是核心的转移模型:给定当前状态 zₜ 和一个候选动作 aₜ,它预测下一步状态 ẑ₍ₜ₊₁₎。这里的“帽子”表示这是预测值,而不是真实环境里实际发生的状态。奖励模型 g 用同样的输入 zₜ 和 aₜ,估计这一步的动作价值 r̂ₜ,也就是这一步值不值得做。这三个组件共同让智能体能够在想象中推进未来:先编码状态,再反复用 f 预测下一状态、用 g 评估每一步的回报。
可选地,模型还可以带一个解码器,把状态 z 还原成观察,用于辅助训练。它的用途在于给出一个可对照的重构目标,帮助编码器学到更有信息量的状态,但它本身不是做决策所必需的。
状态是否“够用”是一个关键问题。如果环境是部分可观察的,单看当前一帧往往不足以判断局势——比如只看到一帧画面,无法区分物体是正在向左还是向右移动,也无法知道被遮挡的库存还剩下多少。这时状态就不能只由当前观察决定,而必须整合历史信息,或者显式地维护一个关于隐藏变量的信念分布。这正是编码器 E 的输入写成 o₍≤ₜ₎、而不是单个 oₜ 的原因:它把直到当前时刻为止的全部观察都纳入编码,从而把速度、隐藏库存这类跨时间的信息带进状态里。
由此可以给出“状态充分”的精确含义:给定状态 z 和接下来的动作序列之后,预测未来就不再需要更早的历史。换句话说,z 把过去所有与决策相关的信息都压缩进来了,过去的观察可以被安全地丢弃。需要特别澄清的是,状态充分是一个建模目标,而不是一个只要把向量维度做得足够大就会自动成立的性质。维度大只是提供了容纳信息的空间,如果编码器没有真正把需要的信息装进去,状态再长也仍然可能丢失关键量。
3训练信号从哪里来学习
世界模型不是凭空猜测的,它的全部预测能力来自真实环境里收集到的轨迹。一条轨迹由若干步组成,每一步记作 (o, a, r, o′):在观察 o 下采取了动作 a,得到奖励 r,并转移到下一个观察 o′。训练的目标就是让模型从大量这样的真实样本里学会“如果这样做了,接下来会怎样”。在训练时,模型的各个部分被同时优化:状态表示、对下一状态或下一观察的预测、奖励预测,以及终止预测,都要朝着与真实轨迹一致的方向调整。
训练信号的选择决定了模型把容量花在哪里,也决定了它的盲区。这里有一个明显的张力:如果只重建像素,模型容易把大量容量花在背景纹理这类与决策无关的细节上,画面还原得再好,对控制也未必有用;反过来,如果只预测奖励,模型可能丢掉那些对未来行动重要、但当前这一步本身没有奖励的因素——比如一个现在拿不到分、但为后续得分铺路的中间动作。因此实践中通常把多种目标组合起来使用,各自保留一部分信息,互相弥补盲区。
观察重建的目标是保留视觉细节。它的价值在于给编码器一个可对照的重构信号,但也正是它最容易滑向“漂亮但与控制无关”的盲区。潜在转移的目标是保留状态动力学,即让状态在潜在空间里按真实规律演化;它的风险是表示坍塌——模型可能把所有输入都映射到几乎相同的状态上,让转移变得无意义,这时就需要额外的约束来防止这种退化。奖励与终止预测的目标是直接对齐任务信号;它的盲区在于稀疏奖励和代理漏洞——当奖励很少出现时,纯奖励监督难以传播,而一旦奖励本身有可钻的空子,模型会学会利用奖励函数的缺陷而不是完成真实任务。对比预测的目标是让状态能够区分不同的未来;它的盲区在于负样本和增强方式的定义偏差,负样本选得不好或增强方式不恰当,都会让“可区分”的标准失真。
这些目标必须组合使用,因为单一目标无法同时覆盖所有必要信息。此外还有一条容易被忽略的要求:训练所用的探索数据必须覆盖规划器将来可能选择的动作。如果模型只在某类动作的轨迹上训练,规划器却选出了训练分布之外的动作,那么模型对这些动作的预测就不可靠,后续的规划也就建立在不可靠的预测之上。
| 目标 | 保留什么 | 盲区 |
|---|---|---|
| 观察重建 | 视觉细节 | 漂亮但与控制无关 |
| 潜在转移 | 状态动力学 | 表示坍塌需额外约束 |
| 奖励/终止 | 任务直接信号 | 稀疏奖励、代理漏洞 |
| 对比预测 | 可区分未来 | 负样本与增强定义偏差 |
4一次两步规划怎样在模型内发生运行示例
用一个具体的小场景可以看清规划在模型内部究竟是如何发生的。设想一辆小车距离目标还有 3 格,而在它正前方第 2 格处有一个坑。现在有两条候选路线:直行和绕行。世界模型要做的事情,是对这两条路线各自在想象中滚动两步,预测每一步的奖励,然后把奖励折算成总回报进行比较。
每一步的预测奖励记为 r̂₁ 和 r̂₂,分别表示第 1 步和第 2 步的预测奖励。为了比较不同时间点的奖励,还要用一个折扣因子 γ 把未来的奖励折到当下;这里取 γ = 0.9,于是两步预测回报的计算方式是 r̂₁ + γ × r̂₂,真实的两步回报同理用真实的奖励按同一公式计算。
先看直行。第 1 步向前走一格,预测奖励是 +2(离目标更近);第 2 步继续向前,正好踩进坑里,预测奖励是 −10。于是预测回报为 +2 + 0.9 × (−10) = −7.0,与真实两步回报 −7.0 完全一致。再看绕行。第 1 步绕开,预测奖励是 0;第 2 步再向目标移动,预测奖励是 +2。预测回报为 0 + 0.9 × 2 = 1.8,同样等于真实的 1.8。规划器比较这两个数:−7.0 对 1.8,自然会选择绕行。这正是两步想象的价值——它让规划器看到了“短期正奖励之后紧跟的灾难”,从而避免了直行的短视选择。
关键的第三行揭示了模型的误差如何被放大。假设世界模型在训练时漏掉了坑这个信息——它没有从观察里学到前方有坑。那么对直行路线,模型仍会预测第 1 步 +2、第 2 步 +2,得到预测回报 +2 + 0.9 × 2 = 3.8。这个数比绕行的 1.8 高,于是模型会把直行排到第一,而真实的直行回报其实是 −7.0。这是一个被错误高估的估计:模型以为自己走的是最安全的路,实际却是最危险的路。
这一行的含义值得强调:规划器只能优化预测回报,而无法直接优化真实回报。当世界模型漏掉了坑,它就会把最危险的路线排到第一;而且规划能力越强,搜索得越充分,就越会稳定地利用这个误差——因为一个更强的规划器会更彻底地挖掘模型内部那个错误的“直行有利”结论。所以问题的解决办法不是“搜索更多”,因为搜索再多也搜不出模型不知道的坑。正确方向是:收集坑附近的数据让模型补上这个信息,表达预测的不确定性,惩罚分布之外的轨迹,以及缩短开放环滚动的长度。这最后一点直接引出了下一步的问题:为什么只执行第一步、然后重新观察,能降低长滚动带来的误差。
| 候选 | r̂₁ | r̂₂ | γ=0.9 的预测回报 | 真实两步回报 |
|---|---|---|---|---|
| 直行 | +2 | −10 | −7.0 | −7.0 |
| 绕行 | 0 | +2 | 1.8 | 1.8 |
| 模型漏掉坑 | +2 | +2 | 3.8(错误高估) | −7.0 |
5模型预测控制为什么只执行第一步闭环
既然规划器已经在模型里滚动出了十步的最佳动作序列,为什么不全套执行出去,而偏偏只执行第一步?答案是:模型的预测会随滚动长度累积误差,滚得越远,后续几步就越不可信。模型预测控制(model predictive control)的做法是:每一轮在模型内向前滚动 H 步,选出一个预测回报最高的动作序列,但只把序列里的第一个动作真正执行出去。执行之后,环境返回真实的观察,智能体用这个真实观察更新自己的状态,然后重新开始一轮滚动和优化。如此周而复始:规划 H 步、执行 1 步、再观察、再规划。
这样做的核心收益是频繁校正。因为每一轮都只迈出一小步就停下来用真实观察校正,预测误差没有机会在长链条上持续累积;同时,智能体也能对环境中其他主体的行为或突发变化做出响应——如果对手或环境在途中改变了局面,下一轮规划会立刻把这个新信息纳入进来。
代价同样明确:每一步都要重新规划一次,计算负担显著增加。因此需要在滚动长度 H、候选动作数量、以及实时延迟这三者之间做取舍。H 越大,单轮规划看得越远,但单步预测误差累积得越多,单轮计算也越重;候选越多,搜索越充分,但同样拖慢响应。实际系统里这三者是相互挤压的预算。
还有一点必须分清:校正所用的“检查点”必须来自真实环境。执行器实际返回的位置、库存数量或测试结果才是可信的校正依据;而模型自己续写出来的“现在已经到达某某位置”绝不能当作检查点。如果把模型续写的中间状态当作真实状态来校正,就等于让误差闭环自证,失去了用真实观察打断误差累积的意义。模型预测控制的全部价值,正在于它不断地回到真实环境索取下一步的真相。
6误差为什么随滚动长度放大误差传播
直觉上会有一个疑问:如果模型平均每一步只错一点点,为什么把规划滚到很长之后会完全偏离真实轨迹?答案藏在误差在时间上的累积方式里。设每一步的状态误差上界为 ε,动力学对状态的敏感度近似为 L——它衡量上一步状态里的小扰动会被下一步转移放大还是缩小多少。那么误差的粗略递推可以写成:
e₍ₜ₊₁₎ ≤ L · eₜ + ε
这个式子从左到右读是这样的:下一步的误差,至多等于“上一步误差被动力学放大 L 倍”再加上“这一步新引入的误差 ε”。两项叠加,误差就会逐步滚起来。
L 的取值决定了误差的整体走向。当 L < 1 时,上一轮误差每经过一步都被缩小,误差有可能被压在一个受控范围内;当 L ≈ 1 时,上一步的误差几乎原样传下来,再加上每一步新引入的 ε,误差近似线性累积;当 L > 1 时,上一轮的误差不但不衰减反而被放大,误差会迅速膨胀,长滚动很快就会完全偏离真实轨迹。真实的高维动力学里,L 往往并不小于 1,这正是长规划危险的数学来源。
还有一个让情况更糟的因素:规划器选择的动作并不是训练数据里那种随机采样的动作,而是专门去寻找模型预测的高回报区域的动作。这意味着规划器会主动地、有偏向地把轨迹推进模型“自认为有利”的地方——而这些地方恰恰可能是模型预测最不可靠的区域,因为训练数据未必覆盖它们。于是误差的分布本身发生了偏移:随机验证集上看起来不错的模型,在被规划器诱导出来的轨迹上可能错得离谱。
由此得到一个直接的评估结论:不能只报告随机验证集上的一步均方误差(MSE)。一步 MSE 只反映了随机动作分布下的平均单步误差,完全看不到误差沿规划轨迹累积的后果。真正有意义的评估还应该测量规划策略所诱导轨迹上的多步预测误差、奖励误差、预测的校准程度,以及最终得到的真实回报。只有这些指标才能揭示:当规划器真的用这个模型去滚动未来时,误差会不会失控。
7状态混叠和不确定性失败边界
一个棘手的情形是:两个画面看起来完全一样,却需要采取完全相反的动作。设想小车正在移动,但仅凭一帧画面看不出它是在向左还是向右运动。如果编码器把这两个不同的真实状态映射成同一个 z,就发生了状态混叠(state aliasing)。混叠的后果很直接:同一个状态 z、同一个动作 a,在真实世界里却对应着两种不同的未来。此时若模型用一个确定性的均值来预测下一状态,很可能给出一个现实中根本不存在的“中间结果”——比如小车既向左又向右的平均位置,而这个位置对应不了任何真实的物理演变。
处理混叠的办法,是让状态显式地携带隐藏信息,并把不确定性明确地传递给规划器。具体手段包括:用历史递归或记忆把过去几帧的差别编码进状态;用概率分布或粒子信念来表示隐藏状态,而不是用单个点估计。这样模型就不再把“向左”和“向右”压成同一个点,而是保留它们各自的可能性和权重。
不确定性的来源不止观测不充分这一种,可以按来源分别看对应的策略。环境随机性是指同一个动作在真实世界里本身就有随机结果,比如同样的推力,地面打滑程度不同,小车滑行的距离也不同;对这种随机性,正确做法是预测一个分布,并在规划时优化风险敏感的回报,而不是只盯着期望值。观测不充分是指关键量在观察里根本看不到,比如速度或隐藏库存;对策是整合历史或维护信念状态。数据不足是指某些区域训练时没覆盖到,比如从未见过坑边的动作;对策是用模型集成、置信边界来度量不确定性,并回到真实环境里补足探索。环境变化是指规则或其他主体的行为随时间改变了,模型学到的规律已经过时;对策是持续做漂移检测并进行在线校正。
这些不同来源的共同点在于:把“我不知道”当作一等公民对待。世界模型不只是预测一个最可能的结果,还要告诉规划器这个预测有多不可靠。规划器拿到不确定性之后,才可能在“模型很确定时大胆推进、模型很没底时谨慎保守”之间做出合理选择,而不是在错误的确定性上孤注一掷。
| 不确定来源 | 例子 | 策略 |
|---|---|---|
| 环境随机性 | 相同动作有随机滑移 | 预测分布,优化风险敏感回报 |
| 观测不充分 | 看不到速度/隐藏库存 | 整合历史或维护信念状态 |
| 数据不足 | 未见过坑边动作 | 模型集成、置信边界、回到真实探索 |
| 环境变化 | 规则或其他主体改变 | 漂移检测与在线校正 |
8怎样发现模型利用评测
有一种失败模式值得单独拿出来看:规划器在模型里拿到了超高的回报,真实环境里的表现却反而变差。这就是模型利用(model exploitation)。它的发生机制是:策略在搜索过程中找到了模型的漏洞,而这个漏洞在真实世界里并不存在。一个典型的例子是,模型错误地预测某个不现实的动机会反复得分,于是规划器就反复选择那个动作,在想象中刷出越来越高的回报,真实环境里却一无所获甚至受损。
发现模型利用的直接办法,是比较两个回报:模型预测的回报,和真实回放(replay)得到的回报。两者之差称为 model exploitation gap——模型利用缺口。这个缺口越大,说明策略在想象中“赚到”的回报越没有真实基础。为了定位缺口到底来自哪里,可以按两个维度切片:动作新颖度(越偏离训练分布的动作,模型越容易给出离谱预测)和滚动长度(滚动越长,误差越可能累积放大)。
抑制模型利用的手段有若干条,可以组合使用:限制策略不要偏离训练数据的分布太远;对模型不确定的状态施加惩罚,让规划器避开没把握的区域;用模型集成之间的分歧来度量不确定性,分歧大的地方少信;以及定期把候选动作放回真实环境里验证,并把验证中发现的反例加入训练数据,让模型在下一次训练时补上这些漏洞。
最后一条边界必须写清:真实环境的评测必须是隔离的、限权的。理由在于,“为了验证模型”并不能成为授权高风险动作无限试错的理由。把候选动作放回真实环境验证是有成本的,可能造成真实碰撞或真实数据污染,因此验证只能在一个受控、受限的范围内进行,绝不能为了填满模型利用缺口而放任智能体在真实环境里随意试错。发现和修复模型利用的目标,是让想象里的回报和真实回报重新对齐,而不是用真实环境去无限兜底。
10把因果链连起来综合
把前面各步串起来,可以看到世界模型从问题到可验证实践的一条完整因果链。
起点是:从真实轨迹里学习状态表示和转移规律。智能体先在真实环境里收集轨迹,训练出编码器、动力学、奖励和终止预测。这是全部想象能力的地基——模型能预测什么,完全由这一步学到什么决定。
第二步是:在模型内部滚动候选动作。给定当前状态,规划器枚举若干候选动作,反复用动力学函数在想象中推进未来,得到一串串虚拟轨迹。
第三步是:按预测回报与风险对候选评分。仅看预测回报还不够,还要把不确定性、模型利用风险纳入考量,选择真正可靠的方案,而不是只选模型自认为最赚的那条。
第四步是:只执行近期动作。模型预测控制在每轮滚动后只执行第一个动作,把长滚动预测的误差风险控制在一步之内。
第五步是:用真实观察校正状态。执行之后,从真实环境取回下一观察,更新状态,让下一次规划建立在新的事实上,而不是建立在模型自己的续写上。
最后一步是:把模型利用的反例回流训练。凡是在想象中回报高、在真实回放中回报低的反例,都收集回来加入训练数据,让模型在下一次迭代中补上这些漏洞。
这六步形成一个闭环:学习转移 → 模型内滚动 → 风险评分 → 只执行近步 → 真实校正 → 反例回流。每一步都在为下一步提供更可靠的输入,同时每一步也都在约束上一步的误差。世界模型最终是否可用,取决于这个闭环是否能在“预测”与“真实”之间保持持续的对齐:模型预测得越准,规划越有价值;而每一次回到真实环境,都是对模型的一次校正,也是对规划能力的一次再投资。
- World Models:潜在世界模型与控制
- Dream to Control: Learning Behaviors by Latent Imagination:Dreamer 潜在想象学习
- Mastering Diverse Domains through World Models:DreamerV3
- PETS: Deep Reinforcement Learning in a Handful of Trials using Probabilistic Dynamics Models:不确定动力学与模型预测控制