Model-based RL 讲了模型怎样被规划器(planner)利用、误差怎样累积。真动手时,第一个问题往往更朴素:这个模型到底该输出什么?下一时刻的全部状态、下一帧图像,还是只要能算对奖励(reward)和价值?模型该预测什么,取决于你打算拿它做什么;省掉的那部分信息,换任务时可能就补不回来。

一个推箱子小任务

下面所有选择都用同一个自拟环境,数字都能手算,不代表任何真实实验。

一条 8 格的轨道,格子编号 0–7。手在 $h$,箱子在 $b$,手在箱子左边。每步手向左或向右走一格($a=-1$ 或 $+1$),撞到左墙就原地不动。手向右走进箱子所在的格子时,箱子被推着一起右移一格。箱子进入格 6 的那一步得 1 分,回合(episode)结束。

相机拍到 24 个像素:一行 8 个像素亮出手的位置,一行 8 个像素亮出箱子的位置,另有 8 个“窗外的云”像素,每步各自以一半概率亮或灭,和任务毫无关系。

真实状态只有两个整数 $(h,b)$;智能体看到的却是 24 个像素。同一个环境,可以让模型学 4 种不同的东西。

预测下一状态:两个数,规则里有“接触”

最直接的模型输入 $(h,b,a)$,输出 $(h',b')$。真实规则是:$h'$ 等于 $h+a$(不越过左墙);只有当 $a=+1$ 且 $h+1=b$ 时,$b'=b+1$,否则 $b'=b$。

模型要输出的只有两个数,有了它,可以枚举动作序列做 MPC,可以像 Dyna 那样生成额外的 transition,也可以在奖励改变时直接重新打分。难点在“接触”:箱子只在手贴着它时才动。这是一条不连续的规则。如果训练数据里手大多离箱子很远,网络可能把“贴着才推”学成“靠近一点就推一点”,预测出半格半格的位置。

预测下一帧:连云也一起学

如果没有 $(h,b)$,只有像素,可以让模型直接预测下一帧的 24 个像素。Oh 等(2015)就在 Atari 上做过以动作为条件的下一帧预测,并报告这些预测对控制有用。

问题在于损失怎么分配。每个云像素以一半概率为 0 或 1,平方误差最优的预测是 0.5,期望误差 $0.25$。8 个云像素加起来:

$$ 8\times0.25=2 . $$

这是每帧都去不掉的误差。再看把箱子放错一格:箱子那一行有两个像素错了,误差是 $1^2+1^2=2$。在像素平方误差里,“把箱子放错一格”和“猜不准窗外的云”罚得一样多,可只有前者会让规划出错。预测 0.5 的灰色云图也是一张真实世界里从不出现的“平均帧”,这和 Model-based 那篇讲的“把两条路平均成墙”是同一个问题。

真实图像里,无关像素往往比这个例子多得多,而决定成败的物体可能只占几十个像素。观测(observation)模型的好处是不需要人先定义状态,预测结果也能直接看;代价是容量和计算都花在大量与决策无关的细节上,滚动一步也更慢。

预测潜在状态:压缩以后在小空间里滚动

折中做法是先用编码器(encoder)把 24 个像素压成一个小向量 $z$,再学 $z'=g(z,a)$ 和奖励预测;需要时再解码回图像。PlaNet(Hafner 等,2018)从图像学潜在动力学,并在潜在空间里做规划;World Models(Ha & Schmidhuber,2018)展示了智能体可以完全在模型生成的“梦”里训练,再转回真实环境。后来的 Dreamer(Hafner 等,2019)只在潜在空间里想象轨迹(trajectory),把学到的价值的梯度沿想象轨迹反传来学行为,详见世界模型系列的 Dreamer 一篇。

World Models 智能体的流程图:V(VAE)把每帧观测压成 latent z,M(MDN-RNN)根据 z 和动作更新隐藏状态 h,C(线性控制器)只看 z 和 h 输出动作。这是“先压缩、再在 latent 里预测”的一个早期版本。
原文图World Models 智能体的流程图:V(VAE)把每帧观测压成 latent z,M(MDN-RNN)根据 z 和动作更新隐藏状态 h,C(线性控制器)只看 z 和 h 输出动作。这是“先压缩、再在 latent 里预测”的一个早期版本。图源:Ha and Schmidhuber, 2018 · World Models · Figure 8 · CC BY 4.0 · 转为 WebP

在潜在空间里滚动很快,但 $z$ 里留下什么,由训练目标决定。如果要求从 $z$ 重建当前帧,$z$ 就得记住当前这 8 个云像素,尽管下一步的云根本无法预测;如果只要求预测奖励,$z$ 又可能丢掉以后换任务才用得上的信息。规划那篇已经提醒过:重建图像好看,不代表控制需要的信息还在。

只预测奖励、价值和策略:MuZero 式的价值等价

再走一步:模型根本不必预测状态或图像。MuZero(Schrittwieser 等,2019)的模型由 3 部分组成:表示函数把历史观测编码成隐藏状态(hidden state),动力学函数根据隐藏状态和动作给出下一个隐藏状态和即时奖励,预测函数从隐藏状态输出策略(policy)和价值。论文明确说,隐藏状态不需要能重建观测,“nor is there any requirement for the hidden state to match the unknown, true state …”,即也不要求它对应环境未知的真实状态(§1)。

在推箱子里,这意味着什么?箱子被推之前不动,被推之后总贴在手的右边,所以箱子进格 6 的那一刻,正好是手第一次走到格 5 的那一刻。只要箱子还在手右边、没到终点,不论执行哪串动作,奖励出现的时间只取决于 $h$,与 $b$ 无关。 例如 $(h,b)=(1,3)$ 和 $(1,4)$:一直向右走,两者都在第 4 步拿到 1 分;先退一步再一直向右,两者都在第 6 步拿到。

所以只为这个奖励训练的模型,完全可以把这两个状态映成同一个隐藏状态,也可以忽略所有云像素。训练信号里没有任何东西要求它区分。Grimm 等(2020)把这种思路叫价值等价:如果两个模型对一组策略和函数给出相同的 Bellman 更新,它们就是价值等价的;纳入的策略和函数越多,满足条件的模型越少,最后只剩完全刻画环境的模型。

现在换一个任务:每推一次箱子扣 0.1 分,其余不变(不打折扣)。一直向右走,$(1,3)$ 要推 3 次,回报(return) $1-0.3=0.7$;$(1,4)$ 只推 2 次,回报 $0.8$。状态模型的转移没变,换一个打分函数重新规划即可;价值等价模型的奖励头和价值头都为旧任务训练,隐藏状态里可能根本没有 $b$,必须收集新任务的数据再训练。

转移怎么表示:MLP、图网络、局部线性

决定了预测什么,还要决定用什么函数来表示转移。

表示 在推箱子里怎么写 好处 局限
MLP 把 $(h,b,a)$ 拼成向量,输出 $(\Delta h,\Delta b)$ 通用,不需要先验结构 接触规则要从数据里学;换成两个箱子要重新设计输入
图网络 手和箱子各是一个节点,相对位置放在边上 同一个边函数用于每一对物体,加第二个箱子不用改结构 要先把场景切成物体
局部线性 不接触时 $h'=h+a,\ b'=b$;接触时换另一组线性关系 可以接 LQR、iLQR 这类求解器 只在接触模式不变的一段轨迹附近成立

图网络的例子来自 Sanchez-Gonzalez 等(2018):把刚体当节点、关节当边,学到的节点函数和边函数在各部件之间共享。论文报告,这样的模型能零样本推广到连杆数不同的系统。

局部线性模型的代表用法是 Levine & Abbeel(2014):在轨迹附近拟合随时间变化的线性动力学,不去学一个全局模型,再用这些局部解指导神经网络策略。它省掉了全局建模,但推箱子这类“接触一下规则就变”的场景,正是局部线性最容易出错的地方。

不一定要参数化:回放、转移图、高斯过程、符号规则

模型也不必是一个神经网络。

回放(replay)或情景记忆(episodic memory)。 把见过的 $(s,a,r,s')$ 全部存下来,查询时直接查表。推箱子里手在箱子左边、箱子在终点左边的状态只有 15 个,乘 2 个动作是 30 种组合;几百条随机交互就能全部覆盖,这时查表模型在这个确定性环境里就是精确的。没见过的组合,它什么也答不出。van Hasselt 等(2019)认为经验回放和基于模型的方法有共同特点,并据此推测:如果模型只用来从见过的状态生成 transition,基于回放的算法应当不差;他们在 Atari 上报告,基于回放的算法在数据效率上超过了先前使用参数化模型的结果。

转移图。 把见过的状态当节点、见过的转移当边,规划就成了最短路问题:从 $(1,3)$ 出发,到“箱子在 6”最少要走 4 条边。Search on the Replay Buffer(Eysenbach 等,2019)用回放里的观测当节点,用目标条件价值函数估计边的距离,再用图搜索找出一串子目标。错误的捷径边会被最短路算法优先使用。

高斯过程。 数据很少时,它同时给出预测均值和方差(variance),离数据越远方差越大。PILCO(Deisenroth & Rasmussen,2011)用高斯过程预测状态变化量,把模型不确定性带进长时程预测,并解析计算策略梯度(policy gradient);论文报告在一台真实的 cart-pole 上,总共约 17.5 秒交互就学会了起摆和平衡。代价是精确推断的计算量随数据点数立方增长(Rasmussen & Williams,第 2 章);常用的平滑核也会把推箱子的接触跳变抹成一段斜坡。

符号规则。 像 STRIPS(Fikes & Nilsson,1971)那样写算子:“向右推”的前提是手在 $x$、箱子在 $x+1$、$x+2$ 为空,效果是手到 $x+1$、箱子到 $x+2$。规则写对了,对任意位置、任意个箱子都精确,几乎不需要数据。难处是:符号得有人给,或者另外学出来;箱子打滑这类噪声、摩擦这类连续量也很难写进去。

确定性还是随机

推箱子的状态转移是确定的,云是随机的。如果箱子有 20% 的概率打滑不动,$b'$ 就成了一个分布,点预测会落在两种结果之间。怎样预测分布、怎样区分偶然和认知不确定性(epistemic uncertainty),Model-based 那篇已经展开,这里不重复。值得一提的是,MuZero 原论文的动力学函数是确定性的,论文把随机转移的扩展留作后续工作。

放在一起看

下表是定性的经验取舍,不是测量结果;具体好坏取决于任务、模型大小和数据量。

模型 数据效率 不确定性 规模 适合的规划方式 典型失败
状态 MLP(可做 ensemble) 中,需要见过接触附近的数据 单个网络没有,ensemble 给近似 需要已有低维状态 MPC / CEM、Dyna、可微时用梯度 不连续处被抹平,规划器利用外推误差
图网络 结构合适时较高 同上 随物体数增长 同上,可换物体数 物体切分错,或关系没覆盖到
局部线性 在轨迹附近很高 常配噪声协方差 只覆盖一段轨迹 LQR / iLQR 类 接触模式一变就失效
观测模型 低,要学全部像素 需要显式建模 像素越多越慢 像素空间里的采样规划 损失花在无关细节,平均成模糊帧
潜在状态(带重建) 中 可用随机潜在变量 滚动快 潜在空间 CEM、想象中训练 丢掉控制需要的信息,或保留太多无关信息
价值等价(MuZero 式) 取决于奖励多密 原论文为确定性 可配大规模搜索 树搜索 换任务要重训;隐藏状态难检查
回放 / 情景记忆 只覆盖见过的 没有 内存随数据线性增长 Dyna 式重放 答不出没见过的状态动作
转移图 只覆盖见过的 边距离可能估错 节点多时搜索变贵 图搜索、子目标 错误捷径边被优先使用
高斯过程 小数据时高 后验方差 精确推断随数据量立方增长 解析梯度的策略搜索 平滑核抹平跳变,数据多了算不动
符号规则 规则正确时几乎不需要数据 通常没有 物体多也能处理 经典符号规划 符号从哪来,噪声和连续量难表达

怎么选一个起点

先问部署时要用模型做什么。只想多生成训练数据,回放加一个短 rollout 的状态模型可能就够了;要在每步搜索,就得考虑滚动速度和误差累积;奖励会常换,就保留能重新打分的状态模型,而不是只学价值;只有像素、状态又难以手工定义,才需要观测模型或潜在状态模型。

截至 2026 年 10 月,用大规模视频或交互数据训练的学习型世界模型,能在多大程度上替代手工建模或按任务训练的模型,仍是快速变化的方向;哪种潜在表示最适合控制也还没有定论。这部分放在本站的世界模型系列里跟踪,这里只讲已经比较稳定的取舍。

接着读:规划和学习怎样互相喂。回到 Model-based 总览,或看规划与 LQR。

本页术语 14
规划器 planner
利用模型比较未来动作序列,再选择当前要执行的动作
奖励 reward
RL 里指导策略更新的标量信号
回合 episode
从初始状态开始的一次交互过程;采样片段结束不一定代表任务真正结束
观测 observation
智能体实际收到的信息,可能只是环境完整状态的一部分
编码器 encoder
把原始输入压成向量的那一半模型
轨迹 trajectory
与环境交互得到的一串状态、动作和奖励;采样时也可能只保存其中一段
隐藏状态 hidden state
这里指环境中未直接观测到的真实状态;不要与 RNN 内部的隐藏表示混为一谈
策略 policy
给定状态,规定怎样选动作;可以输出一个动作,也可以输出动作的概率分布
回报 return
从某一步开始,把后续奖励按约定累加;有折扣时还要乘上相应的折扣权重
回放 replay
用固定输入重新执行一段数据或模型链路,检查结果是否一致
情景记忆 episodic memory
对具体事件及其时间、情境的记录
方差 variance
估计量的波动幅度;重要性加权最容易在这里爆炸
策略梯度 policy gradient
通过改变动作的概率来提高期望回报;不要求环境本身可微
认知不确定性 epistemic uncertainty
数据或模型知识不足造成的不确定性,可通过新证据减少,但估计并不自动可靠