Part VI · 第 24 章 Model-based 方法 · 24.3

Dreamer 与 TD-MPC

机器人在真实世界里的每一次尝试都很贵。世界模型的办法是:先从经验里学一个能"做梦"的模型,再把大部分学习搬进梦里。本节讲当今最有影响的两条路线。Dreamer 用循环状态空间模型(RSSM)把图像压成一个既有记忆又有随机性的隐状态,然后完全在想象出来的轨迹上训练 actor-critic;TD-MPC 不重建图像,只学一个能预测奖励和价值的隐空间,每一步都用 MPPI 在里面规划一小段,再用学到的价值函数接上远处的未来。五个实验都在浏览器里实时训练:一个会分岔的模型、在想象中学会控制关节的 Dreamer、被 U 形陷阱困住又靠价值函数逃出来的规划器、被干扰物骗走的重建式隐变量,以及让同一组超参数适用于任何奖励尺度的 symlog 与 two-hot。

约 55 分钟 前置:24.1 学习动力学模型 · 17.2 RNN 与状态空间模型 · 19.1 VAE · 20.4 Actor-Critic · 13.4 MPC 5 个交互

    1为什么机器人需要它

    20.4 节的 SAC 在一个单关节手臂上要 1000–1750 个环境步才学会到达目标(误差低于 8°),PPO 要几千到上万步。在仿真里这不算什么;在真机上,这意味着几十分钟到几小时的电机磨损和看护,复杂一点的任务要几百万步,根本付不起。24.1 节和 24.2 节已经给出了基于模型的答案:先学 \(s'=f(s,a)\),再在模型里规划(PETS)或生成假数据(MBPO)。真实机器人还要再过两道坎:

    • 机器人看到的是图像,不是状态。相机给出的是几万个像素,速度、被遮挡的物体都不在单张图里。我们需要一个从观测序列里学出来的紧凑状态,既要记住过去(17.2 节的 RNN),又要承认未来有不确定性(19.1 节的隐变量)。这就是 Dreamer 的循环状态空间模型 RSSM。
    • 模型越往后预测越不准。24.1 节看到了误差累积。所以两条路线都只在模型里走很短的一段(Dreamer 想象 15 步,TD-MPC 规划 3–5 步),更远的未来交给一个用时序差分(TD)学出来的价值函数(20.2、20.4 节)。

    围绕这两点,形成了两个家族:

    • Dreamer(Hafner 等):PlaNet(ICML 2019)学一个 RSSM 并在隐空间里用 CEM 规划;Dreamer(ICLR 2020)改为在想象中训练 actor-critic,部署时只需跑一次策略网络;DreamerV2(ICLR 2021)换成离散隐变量,在 Atari 上达到人类水平;DreamerV3(2023 年预印本,2025 年发表于 Nature)用一组固定超参数覆盖 150 多个任务,并且第一个从零开始(不用人类数据)在 Minecraft 里挖到钻石。DayDreamer(CoRL 2022)把 Dreamer 直接搬上真实机器人。
    • TD-MPC(Hansen、Wang、Su,ICML 2022)与 TD-MPC2(Hansen、Su、Wang,ICLR 2024):隐空间模型不重建图像,只要求它能预测奖励、价值和自己的下一个隐状态;每一步用 MPPI(6.11 节、13.4 节)在隐空间里规划一个短视界,末端接上学到的 Q 值。

    2直觉:一个会做梦的滤波器

    把 RSSM 想成 4.8 节卡尔曼滤波的学习版。每一步它维护两部分状态:确定性的 \(\mathbf h_t\)(一个 GRU 的隐藏状态,17.2 节)负责记忆,随机的 \(\mathbf z_t\) 负责"这一步可能发生什么"。它有两种工作方式:

    • 看着走(滤波):有观测 \(o_t\) 时,用后验 \(q_\theta(\mathbf z_t\mid\mathbf h_t,o_t)\) 推断隐状态,就像卡尔曼滤波的"更新"步。
    • 闭着眼走(做梦):没有观测时,只用先验 \(p_\theta(\hat{\mathbf z}_t\mid\mathbf h_t)\) 采样往前推,就像只有"预测"步。Dreamer 的想象、PlaNet 的规划都在这一模式里进行。
    $$ \mathbf h_t=f_\theta(\mathbf h_{t-1},\mathbf z_{t-1},a_{t-1}),\qquad \hl{prior}{\hat{\mathbf z}_t\sim p_\theta(\hat{\mathbf z}_t\mid\mathbf h_t)},\qquad \mathbf z_t\sim q_\theta(\mathbf z_t\mid\mathbf h_t,o_t),\qquad \hat o_t\sim p_\theta(o_t\mid\mathbf h_t,\mathbf z_t),\qquad \hat r_t\sim p_\theta(r_t\mid\mathbf h_t,\mathbf z_t). $$

    为什么不只用一个确定性的 \(\mathbf h_t\)?因为未来常常分岔。下图是一个最小的例子:夹爪把一个销子放到一道窄脊上,销子的横向位置 \(x\) 每 0.1 秒更新一次。离开脊顶时它滑向较近的谷底(\(\pm0.7\));正好落在脊顶(\(|x|<0.12\))时,它以各一半的概率倒向左边或右边。两个一步模型同时在线训练:

    • 确定性模型 \(\hl{det}{x'=f(x)}\),用均方误差回归。在脊顶上它只能学到两种结果的平均,也就是"留在原地附近"。
    • 隐变量模型:先验 \(p(z\mid x)\)、后验 \(q(z\mid x,x')\)、解码器 \(x'=g(x,z)\),用 19.1 节的 ELBO 训练,KL 项的权重是 \(\beta\)。这就是一步的 RSSM(这里状态 \(x\) 直接可见,所以不需要 \(\mathbf h\))。

    训练之后,两个模型都从脊顶 \(x_0=0\) 出发"做梦" 10 步:随机模型每一步从先验采样 \(z\),确定性模型只有一条路。

    FIG 1一个输入,两种未来:确定性模型 vs 随机隐变量
    从脊顶出发的 10 步:真实 vs 梦
    一步预测 x′ 的分布(x = 0)
    左:横轴是步数,纵轴是销子位置 \(x\);浅紫色带是脊顶,两条绿色虚线是谷底。绿色细线是 60 条真实的未来,琥珀色细线是随机模型的 60 个梦(统计用 200 个),红色粗线是确定性模型唯一的梦。右:从 \(x=0\) 走一步的结果,绿色柱是真实分布(两个尖峰),琥珀色柱是随机模型从先验采样的 400 个预测,红色竖线是确定性模型的预测。改变 \(\beta\) 会从头重新训练(同一个随机种子)。
    试一试
    • 用默认的 \(\beta=2\) 训练至少 500 步,直到左右两个谷底各收到至少 30% 的梦。红线这时在哪里?
    • 把 \(\beta\) 设为 20,训练至少 500 步,直到 KL(读数里的滑动平均)低于 0.01 nat,而且至少一个谷底收到的梦少于 15%。隐变量还在起作用吗?
    • 把 \(\beta\) 设为 0.1,训练至少 500 步,直到 KL 高于 1 nat 而某一个谷底收到的梦少于 10%。重建误差很小,梦却是偏的:为什么?
    核心洞见

    在种子 1 下,\(\beta=2\) 训练 500 步后,左右谷底分别收到约 51% 和 45% 的梦,KL 约 0.5–0.6 nat;确定性模型的唯一一条梦则随训练在左右之间摇摆,最后停在哪一边纯属偶然。能分岔的梦需要随机的隐状态,而随机隐状态需要先验和后验对得上。\(\beta=20\) 时 KL 被压到约 0.001 nat,后验不再携带信息,解码器学会忽略 \(z\)(后验坍缩,19.1 节),模型退化成确定性的;\(\beta=0.1\) 时后验自由地用 \(z\) 编码答案,KL 涨到 1.3–2 nat,先验却跟不上,从先验采到的 \(z\) 几乎都解码成"向右"(约 99%)。这正是 DreamerV2 提出 KL 平衡的原因:让 KL 主要去训练先验靠近后验,而不是把后验压向一个还没学好的先验(第 5 节)。

    3动手玩:Dreamer,在想象中学习

    有了能做梦的世界模型,Dreamer 的训练循环只有三件事,交替进行:

    1. 采数据:用当前策略(加探索噪声)在真实环境里跑一个回合,存进重放缓冲区。
    2. 学世界模型:从缓冲区里取一段段真实序列,训练 RSSM(重建、奖励、KL)。
    3. 在想象中学行为:从缓冲区里的真实状态出发,用先验和当前策略想象 \(H\) 步,在这些梦里的轨迹上训练评论家和演员。真实环境一步都不用。

    评论家 \(v_\psi\) 回归的目标是 \(\lambda\)-回报,它把想象出的奖励和末端的价值混在一起(与 20.4 节 GAE 的 \(\lambda\) 是同一个想法):

    $$ \hl{lamret}{G^\lambda_t}=\hat r_{t+1}+\gamma\Big[(1-\lambda)\,v_\psi(\hat s_{t+1})+\lambda\,G^\lambda_{t+1}\Big],\qquad G^\lambda_{\hl{Hh}{H}}=v_\psi(\hat s_{\hl{Hh}{H}}),\qquad \max_\phi\ \mathbb E\Big[\textstyle\sum_{t=0}^{\hl{Hh}{H}-1}\hl{lamret}{G^\lambda_t}\Big]. $$

    这里 \(\hat s_t=(\mathbf h_t,\hat{\mathbf z}_t)\) 是想象出的模型状态,\(a_t\sim\pi_\phi(a_t\mid\hat s_t)\)。第一版 Dreamer 的演员直接对模型求导:整条想象轨迹都是可微的网络(转移、奖励、价值、策略),所以 \(\sum_t G^\lambda_t\) 对策略参数 \(\phi\) 的梯度可以沿着轨迹反向传播回去(17.2 节的 BPTT),这叫"解析的价值梯度"。DreamerV3 改用 REINFORCE 式的梯度(第 5 节)。

    下图把这个循环放在 20.4 节的同一个任务上:受重力作用的单关节手臂,2 秒内转到随机目标并保持住,评估用同样的 24 组(起点,目标)。为了在浏览器里跑得动,世界模型直接作用在关节角和角速度上(不是从图像学出的隐状态),是一个 4→32→32→2 的 tanh 网络,预测一步的变化;奖励函数已知。演员和评论家都是 3→32→32→1 的网络。每个真实回合(40 步)之后做 40 次更新,每次从缓冲区取 8 个起点各想象 \(H\) 步,\(\gamma=0.97\),\(\lambda=0.95\),演员的梯度穿过学到的模型。

    FIG 2Dreamer 实时训练:真实一步,想象一百步
    最近一个真实回合(含探索噪声)
    评估误差(°,对数)· 真实 vs 想象
    左:琥珀色是手臂,绿色虚线是目标角度(从竖直向下量起),重放的是最近一个真实回合。右上:琥珀色是这次训练的评估误差,紫色虚线是上一次训练(换设置或重置之前),横轴是真实环境步数。右下:同一个起点和目标下,当前演员在真实物理里的关节角(绿色)和在学到的模型里想象的关节角(青色虚线),横轴是 40 步,阴影带是想象视界 \(H\),水平虚线是目标。
    试一试
    • 用默认设置(\(H=15\),评论家开)按"训练",直到评估误差低于 3°。用了多少真实步、多少想象步?
    • 选 \(H=1\) 并关掉评论家,训练至少 5 个回合:误差一直停在 30° 以上。演员在想象里到底能看到什么?
    • 保持 \(H=1\),打开评论家,训练到误差低于 25°。和上一个任务相比,是谁把一步之外的后果告诉了演员?
    核心洞见

    在种子 1 下,默认设置第 3 个回合(120 个真实步)误差就降到 7.8°,之后在 5°–17° 之间起伏,第 17 个回合(680 步)低于 3°,约 26 个回合后稳定在 1° 左右。每个真实回合配 \(40\times8\times15=4800\) 个想象步,是真实步数的 120 倍。作为对照,20.4 节里 SAC 要 1000–1750 步、PPO(\(N=16\))要 4480 步才第一次低于 8°。世界模型用计算换样本。评论家的作用要看视界:\(H=1\) 且没有评论家时,演员只看见一步的奖励 \(r(s_t,a_t)\),其中唯一依赖动作的是力矩惩罚,于是它学会"什么都不做",误差停在 36.6°;打开评论家后,价值函数替它看见了一步之外,第 21 个回合降到 21.8°(但过程很不稳定)。在这个任务里 15 步已经覆盖了整个动作,关掉评论家反而更快(第 4 个回合就低于 3°):评论家也是一个学出来的模型,早期的误差同样会被演员利用。

    4第二个视角:TD-MPC,规划一小段,剩下的交给价值

    Dreamer 把规划"蒸馏"进一个策略网络;TD-MPC 反过来,每一步都真的规划。它的模型 TOLD(task-oriented latent dynamics,面向任务的隐动力学)有五个部件:编码器 \(\mathbf z_t=e_\theta(o_t)\)(论文记作 \(h_\theta\),这里换个字母,免得和 RSSM 的 \(\mathbf h_t\) 混淆)、隐动力学 \(\mathbf z_{t+1}=d_\theta(\mathbf z_t,a_t)\)、奖励 \(R_\theta(\mathbf z_t,a_t)\)、价值 \(Q_\theta(\mathbf z_t,a_t)\) 和一个策略 \(\pi_\theta(\mathbf z_t)\),全部是确定性的 MLP。规划时,MPPI 采样一批长度为 \(H\) 的动作序列,用模型推演,按下面的分数打分,取前 \(k\) 名加权平均,迭代几轮,执行第一个动作:

    $$ \phi(a_{t:t+H})=\sum_{i=0}^{\hl{plan}{H}-1}\gamma^{i}R_\theta(\mathbf z_{t+i},a_{t+i})\;+\;\hl{Vterm}{\gamma^{H}Q_\theta(\mathbf z_{t+H},a_{t+H})},\qquad \mathbf z_{t+i+1}=d_\theta(\mathbf z_{t+i},a_{t+i}),\quad a_{t+H}=\pi_\theta(\mathbf z_{t+H}). $$

    没有末端那一项,这就是 PETS 那样的纯模型规划(24.2 节):只看得见 \(H\) 步。下图把它放进一个房间:移动机器人从左边出发,目标在右边,中间有一个开口朝向机器人的 U 形墙;每步最多移动 0.08,奖励是到目标距离的负数,\(\gamma=0.98\),每回合最多 70 步。直奔目标会一头扎进 U 形底部,而那里离目标只有 0.63,是一个很深的局部最优;正确的路要先绕开,大约 25 步。规划器是 TD-MPC 式的 MPPI:96 条样本、前 12 名、4 轮迭代、温度 0.5,上一步的解平移后作为下一步的初值。为了把规划单独拿出来看,这里用的是房间的真实动力学,价值是 40×40 网格上的一张表,用同步的 TD 备份 \(V(s)\leftarrow\max_a[r+\gamma V(s')]\)(16 个方向)训练;TD-MPC 用的是网络和学到的隐空间。

    FIG 3短视界 + 末端价值:从 U 形陷阱里走出来
    房间、价值表与 MPPI 样本
    底色是价值表:越青 = 价值越高(训练前全为 0,不画)。红色粗线是墙,琥珀色圆点是机器人,绿色圆圈是目标(半径 0.1 内算到达)。蓝色细线是最后一轮 MPPI 样本中的一半(每隔一条画一条),琥珀色线是前 12 名,琥珀色粗线是当前计划,绿色线是已走过的路径。"TD 备份"按钮开始或暂停价值训练(每次同步更新全部 1600 格),读数里的"残差"是最近一次备份中最大的变化量。
    试一试
    • 关掉末端价值,把视界调到 \(H\ge20\),按"运行"直到回合结束:机器人被困住了。再试更长的视界,最长 30。
    • 按"TD 备份"把价值表训练到残差低于 0.01,打开末端价值,把视界设为 \(H\le3\),运行一个回合:机器人到达目标。
    • 按"重置价值",只做不超过 15 次 TD 备份就暂停,打开末端价值再运行一个回合:机器人又被困住了。看看底色:价值信息传到哪里了?
    核心洞见

    没有末端价值时,\(H\) 从 1 到 30 机器人全部停在离目标 0.63 的 U 形底部:要发现绕路更好,规划器得在 60 维的动作序列空间里偶然采到一条完整的绕路,96 条样本远远不够。价值表经过 80 次备份收敛(残差 < 0.01)后,\(H=1\) 到 10 都能在 23–26 步到达目标。价值函数把"远处"压缩成了一个数,规划只需负责附近。反过来,视界不是越长越好:用收敛的价值,\(H=15\) 要 43 步,\(H=25\) 要 62 步,\(H=30\) 又被困住,因为同样的样本数要搜索的维度翻了几倍。价值也必须先学好:15 次备份之后价值信息只从目标传出去约 15 步的距离,U 形开口处仍是一片 0(乐观的初值),规划器又被骗进陷阱;25 次之后 \(H\le10\) 已经够用。这就是 TD-MPC 的分工:TD 学习负责长远,MPC 负责眼前,而 TD-MPC2 默认只规划 \(H=3\) 步。

    要不要解码器?

    Dreamer 的隐状态要能重建图像,这是一个很丰富的学习信号:每个像素都在提供梯度。代价是它在乎的是"图像里什么占的像素多",而不是"什么和任务有关"。TD-MPC 去掉了解码器,只用三个损失训练隐空间:预测奖励、预测价值(TD 目标),以及隐状态一致性:模型预测的下一个隐状态 \(d_\theta(\mathbf z_t,a_t)\) 要接近慢速移动平均的编码器 \(e_{\theta^-}\) 对真实下一帧的编码:

    $$ \mathcal L_{\text{recon}}=\hl{dec}{\big\|\hat o_t-o_t\big\|^2}+\big(R(\mathbf z_t)-r_t\big)^2,\qquad \mathcal L_{\text{TD-MPC}}=\hl{cons}{\big\|d_\theta(\mathbf z_t,a_t)-e_{\theta^-}(o_{t+1})\big\|^2}+\big(R_\theta(\mathbf z_t,a_t)-r_t\big)^2+\big(Q_\theta(\mathbf z_t,a_t)-y_t\big)^2. $$

    下图比较两种隐空间,都是 2 维。观测是 10×10 的图像:一个小圆斑是机器人(它在动作下移动,奖励是它到左下角目标的距离,取负),一个更大的圆斑是干扰物,比如镜头前走过的人,每一步跳到一个随机位置,和任务无关也无法预测。重建式模型训练编码器、解码器和奖励头;无解码器模型训练编码器、残差式隐动力学(一致性损失,目标编码器取移动平均 \(\tau=0.02\))和奖励头(同时预测当前和下一步的奖励)。我们不评估它们的损失,而是问:从 2 维隐码里能读回多少信息?用 5 近邻回归在 300 张固定的测试图上算 \(R^2\)(1 = 全部读回,0 或负数 = 读不回)。这里没有价值项;在 TD-MPC 里它和奖励项起同样的作用。

    FIG 4隐空间里留下了什么:重建 vs 无解码器
    观测与重建(10×10)
    300 张测试图的 2 维隐码
    左:上面是一张测试观测(绿色小圆圈标出机器人的真实位置,紫色大圆圈标出干扰物,红色十字是目标),下面是重建式模型的重建。右:两个模型的隐码散点,每个点是一张测试图,青色点越不透明 = 机器人离目标越近(奖励越高)。如果隐空间编码了奖励,不透明度会沿某个方向渐变;如果只编码了干扰物,不透明的点和透明的点会混在一起。两个模型并排训练,每帧各走相同的步数;\(R^2\) 每 200 步重算一次。
    试一试
    • 保持干扰物开启,训练至少 1000 步,直到:重建式隐码读回干扰物位置的 \(R^2>0.8\)、读回奖励的 \(R^2<0.2\),而无解码器隐码读回奖励的 \(R^2>0.5\)。
    • 关掉干扰物,训练至少 400 步,直到重建式隐码读回机器人位置的 \(R^2>0.8\)。和无解码器的比,谁对机器人位置记得更全?
    核心洞见

    有干扰物时,训练 1200 步后重建式隐码读回干扰物的 \(R^2\) 是 0.95,读回奖励的 \(R^2\) 约为 0(−0.02):干扰物占的像素是机器人的 4 倍多,两个维度全被它占去了,尽管模型也在预测奖励。无解码器的隐码读回奖励的 \(R^2\) 是 0.64(2400 步时 0.75),干扰物约为 0:既然干扰物无法预测、和奖励无关,一致性和奖励损失都不需要它。没有干扰物时情况反过来:重建式在 200 步时读回机器人位置的 \(R^2\) 就有 0.83(2400 步 0.95);无解码器的读回奖励几乎完美(0.99),但机器人位置只有 0.6–0.75,因为它只需记住"离目标多远"。重建保留看得见的一切,无解码器只保留预测奖励和价值所需的东西。前者在像素都相关时学得又快又全,后者在杂乱、有干扰的真实画面里更稳,但信号更弱,学得也慢。

    一组超参数走天下:symlog 与 two-hot

    DreamerV3 和 TD-MPC2 的一个共同目标是:不调超参数,直接用到新任务上。最大的障碍是尺度:一个任务每步奖励约为 1,另一个约为 1000,回报和价值的量级可以差好几个数量级。两者的办法相同:评论家(以及奖励头)不直接回归原始的数值。DreamerV3 用

    $$ \hl{symlog}{\operatorname{symlog}(x)=\operatorname{sign}(x)\ln(|x|+1)},\qquad \operatorname{symexp}(y)=\operatorname{sign}(y)\big(e^{|y|}-1\big),\qquad \hl{twohot}{\hat y=\textstyle\sum_i p_i\,b_i,\quad \mathcal L=-\sum_i t_i\log p_i}. $$

    symlog 把大数压扁、在 0 附近近似恒等;网络预测 symlog 值,用的时候再 symexp 回去。two-hot 把回归变成分类:在一组 symexp 间隔的格点 \(b_i\) 上输出 softmax 概率 \(p_i\),预测值是期望;目标 \(y\) 落在相邻两格之间,就按距离把权重分给这两格(目标向量 \(t\) 只有两个非零元,因此叫 two-hot),用交叉熵训练。交叉熵的梯度大小与 \(y\) 的量级无关。下图让三种头去拟合同一条"回报曲线",它乘上尺度 \(c\)(范围约 \(-1.01c\) 到 \(-0.04c\)),用同一个 Adam 学习率 \(3\times10^{-3}\)、同样的 1→32→32 网络;two-hot 用 41 个格点,覆盖 \(\pm\operatorname{symexp}(10)\approx\pm22026\)。

    FIG 5同一个学习率,三种尺度:MSE、symlog、two-hot
    目标与三种预测(÷ c)
    相对误差(对数)vs 步数
    左:横轴是状态 \(x\),纵轴是数值除以尺度 \(c\);虚线是目标,红色是原始 MSE 头,蓝色是 symlog 头,绿色是 two-hot 头(超出画面的部分被截掉)。右:相对误差 = 均方根误差 ÷ 目标的标准差(1 等于只会猜平均值),对数刻度。换尺度会从头训练三个头(同一个种子)。
    试一试
    • 选尺度 \(c=10^4\),训练至少 1500 步:原始 MSE 的相对误差仍大于 1,而 two-hot 低于 0.1。再回到 \(c=1\) 比较三者。
    核心洞见

    \(c=1\) 时三者都能学好(2000 步后 MSE 0.011、symlog 0.037、two-hot 0.029),原始 MSE 甚至最好。\(c=10^4\) 时 1500 步后 MSE 是 2.73,比只猜平均值还差;symlog 0.16,two-hot 0.075。原因不是梯度太大:Adam 会把梯度归一化,每一步参数最多移动约一个学习率,而输出要到达 \(-10^4\) 量级,参数得走很远的路。symlog 和 two-hot 把任何尺度都变成了网络习惯的 \(O(1)\) 数值。代价是精度:symlog 在压缩后的空间里平均误差,换回原尺度会放大;two-hot 的精度受格点间距限制。DreamerV3 对奖励头和评论家用 two-hot(格点按指数间隔),对向量观测用 symlog;TD-MPC2 对奖励和价值用对数变换空间里的离散回归(101 个格点)。

    5再看数学

    RSSM 的训练目标:按时间展开的 ELBO

    记模型状态 \(s_t=(\mathbf h_t,\mathbf z_t)\)。对一段真实序列 \(o_{1:T},a_{1:T},r_{1:T}\),世界模型最小化

    $$ \mathcal L(\theta)=\sum_{t=1}^{T}\Big[\hl{dec}{-\ln p_\theta(o_t\mid s_t)}-\ln p_\theta(r_t\mid s_t)+\beta\,\mathrm{KL}\big(q_\theta(\mathbf z_t\mid\mathbf h_t,o_t)\,\big\|\,\hl{prior}{p_\theta(\mathbf z_t\mid\mathbf h_t)}\big)\Big],\qquad \mathbf z_t\sim q_\theta,\ \ \mathbf h_t=f_\theta(\mathbf h_{t-1},\mathbf z_{t-1},a_{t-1}). $$

    这正是 19.1 节的 ELBO(取负号),只是每一步的先验不再是固定的 \(\mathcal N(0,I)\),而是由过去决定的 \(p_\theta(\mathbf z_t\mid\mathbf h_t)\),所以 KL 项同时做两件事:把后验拉向先验(正则化表示),把先验拉向后验(训练"做梦"的转移模型)。FIG 1 显示这两件事会互相拖累。DreamerV2 的 KL 平衡把它拆开、分别加权:\(\alpha\,\mathrm{KL}(\mathrm{sg}(q)\|p)+(1-\alpha)\,\mathrm{KL}(q\|\mathrm{sg}(p))\),\(\alpha=0.8\),sg 表示停止梯度;DreamerV3 写成"动力学损失"和"表示损失"两项,权重 1 和 0.1,并加上 free bits:每一项低于 1 nat 时截断为 1,不再优化,防止 KL 被压到 0(FIG 1 中 \(\beta=20\) 的后验坍缩)。DreamerV2 起,\(\mathbf z_t\) 是 32 个各有 32 类的类别变量,用直通(straight-through)估计反向传播;DreamerV3 再把每个类别分布混入 1% 的均匀分布,避免概率为 0。

    在想象中学行为

    从缓冲区里真实序列的后验状态出发,用先验和策略想象 \(\hat s_{t+1}\sim p_\theta(\cdot\mid\hat s_t,a_t)\),\(a_t\sim\pi_\phi(\cdot\mid\hat s_t)\),再算 \(\lambda\)-回报(第 3 节的递推)。评论家最小化 \(\sum_t\tfrac12\big(v_\psi(\hat s_t)-\mathrm{sg}(G^\lambda_t)\big)^2\)(DreamerV3 用 two-hot 交叉熵代替平方误差,并把评论家向自己的移动平均正则化)。演员的两种梯度:

    $$ \text{V1:}\ \ \max_\phi\ \mathbb E\Big[\sum_{t}\hl{lamret}{G^\lambda_t}\Big],\qquad \text{V3:}\ \ \mathcal L(\phi)=-\sum_t\mathrm{sg}\!\Big(\frac{\hl{lamret}{G^\lambda_t}-v_\psi(\hat s_t)}{\max(1,S)}\Big)\ln\pi_\phi(a_t\mid\hat s_t)-\eta\,\mathcal H\big[\pi_\phi(\cdot\mid\hat s_t)\big]. $$

    V1 的梯度是"解析的":沿想象轨迹反向传播,方差小,但要求模型可微而且导数可信(FIG 2 就是这样做的,梯度穿过学到的模型)。V3 对离散和连续动作都用 REINFORCE(20.3 节)加基线 \(v_\psi\),不需要模型的导数;为了让一个固定的熵系数 \(\eta=3\times10^{-4}\) 适用于所有任务,回报除以 \(\max(1,S)\),其中 \(S\) 是一批回报的第 95 与第 5 百分位数之差的移动平均:只缩小大回报,不放大小回报(否则稀疏奖励下会放大噪声)。V1 与 V3 的想象视界都是 \(H=15\),\(\lambda=0.95\)。

    TD-MPC:训练 TOLD 与规划

    从缓冲区取一段长度为 \(H\) 的真实片段,只编码第一帧 \(\mathbf z_t=e_\theta(o_t)\),之后的隐状态都由模型自己推出来 \(\mathbf z_{i+1}=d_\theta(\mathbf z_i,a_i)\),梯度沿时间反向传播:

    $$ \mathcal J(\theta)=\sum_{i=t}^{t+H}\rho^{\,i-t}\Big[c_1\big\|R_\theta(\mathbf z_i,a_i)-r_i\big\|^2+c_2\big\|Q_\theta(\mathbf z_i,a_i)-\big(r_i+\gamma\,Q_{\theta^-}(\mathbf z_{i+1},\pi_\theta(\mathbf z_{i+1}))\big)\big\|^2+c_3\,\hl{cons}{\big\|d_\theta(\mathbf z_i,a_i)-e_{\theta^-}(o_{i+1})\big\|^2}\Big],\qquad \mathcal J_\pi=-\sum_{i}\rho^{\,i-t}Q_\theta\big(\mathbf z_i,\pi_\theta(\mathrm{sg}(\mathbf z_i))\big). $$

    \(\theta^-\) 是参数的指数移动平均(目标网络,20.2 节),\(\rho<1\) 让近处的预测权重更大(论文记作 \(\lambda\),这里换成 \(\rho\),免得和 \(\lambda\)-回报混淆)。价值项就是 20.2 节的 TD 目标,只是"下一状态的最优动作"由策略 \(\pi_\theta\) 近似,因为在 TD 目标里每次都规划太贵了。规划时(TD-MPC 原文:\(H=5\)、512 条样本另加 5% 来自 \(\pi_\theta\) 的样本、6 轮迭代,取前 64 名),每轮按 \(\phi\) 选出前 \(k\) 名,按 \(\Omega_i\propto\exp(\phi_i)\) 的某个温度加权,重新估计每一步动作的均值和标准差;最后执行第一个动作,下一步把解平移一格作为初值。本页 FIG 3 用 \(\Omega_i=\exp\big((\phi_i-\phi_{\max})/0.5\big)\)。和 6.11 节的 MPPI 相比,唯一本质的变化是分数里多了末端价值,以及部分样本来自策略网络。

    TD-MPC2 保留了这套框架,改的是让它在不调参的情况下变大变稳:所有 MLP 加 LayerNorm 和 Mish 激活;隐状态用 SimNorm 归一化(分成若干组,每组做 softmax,投影到单纯形上);5 个 Q 函数的集成,TD 目标取随机两个中的较小值(20.4 节双评论家的推广);奖励和价值用对数变换空间里的离散回归(101 个格点,即 FIG 5 的 two-hot 思想);策略先验用最大熵目标训练(20.4 节的 SAC);多任务时加一个可学习的任务嵌入。默认规划视界 \(H=3\)、512 条样本(其中 24 条来自策略先验)、前 64 名、6 轮迭代。

    6机器人中的它:真实机器人与两条路线的取舍

    Dreamer (V1–V3)TD-MPC / TD-MPC2
    隐状态RSSM:GRU 的确定性部分 + 随机部分(V2 起为类别变量)确定性 MLP 的隐向量(TD-MPC2 用 SimNorm);没有循环记忆
    学隐空间的信号重建观测 + 奖励 + KL奖励 + 价值(TD)+ 隐状态一致性,不重建
    怎样行动策略网络一次前向,部署便宜每一步在隐空间里做 MPPI,需要更多计算,但能在测试时纠正策略的错误
    长远想象 15 步 + \(\lambda\)-回报中的价值规划 3–5 步 + 末端 Q
    典型强项部分可观测、需要记忆的任务;离散和连续动作;从图像学习高维连续控制(灵巧手、肌肉骨骼、人形);多任务大模型
    真实系统里

    DayDreamer(Wu、Escontrela、Hafner、Goldberg、Abbeel,CoRL 2022)不用仿真器,直接在真实机器人上跑 Dreamer:Unitree A1 四足机器人从背朝下躺着开始,在 1 小时内学会翻身、站起来并行走,中途不需要人工复位;之后用棍子推它,它在 10 分钟的继续学习内学会扛住轻推、被推倒后快速翻身站起。在 UR5 和 XArm 两台机械臂上,它从相机图像和稀疏奖励学会多物体的抓放,表现接近人类遥操作;Sphero 小球机器人只看图像学会导航到目标。TD-MPC 系列:TD-MPC2 用同一组超参数在 DMControl、Meta-World、ManiSkill2、MyoSuite 的 104 个连续控制任务上超过基线,并训练了一个 3.17 亿参数的单一智能体完成 80 个任务;Feng、Hansen 等(CoRL 2023)先用离线数据预训练 TD-MPC 的世界模型,再在真实的 xArm 上微调,在一个带有未见过干扰物的视觉抓取任务里,只用 20 次试验把成功率从 22% 提到 67%。DreamerV3 的 Minecraft 钻石实验说明了同一套方法能处理极长的任务链。软件:两条路线都有作者的开源实现(DreamerV3 基于 JAX,TD-MPC2 基于 PyTorch)。往后看:把模型换成大规模视频预测器的"世界模型"是 Part VII 的话题;只用离线数据学习时的分布偏移见 20.5 节;把学到的模型放进经典 MPC(梯度法、线性化、残差)见 24.4 节。

    7常见误区

    误区 1:忘了优化器会利用模型的错误

    演员和规划器都在模型里最大化回报,哪里模型过于乐观,它们就往哪里去。FIG 2 里打开评论家时误差先降后升,就是演员在追逐一个还没学好的价值函数的梯度。对策:想象和规划只走短视界;不停地采新的真实数据,让模型在策略去的地方变准;用集成估计不确定性并惩罚它(24.2 节的 PETS、MBPO,21.3 节);评估时始终看真实环境里的回报,而不是模型自己预测的回报。

    误区 2:只数真实步数,不数计算

    "样本效率高 10 倍"说的是真实交互。FIG 2 里每个真实步配 120 个想象步,每个想象步还要过三个网络并反向传播;TD-MPC 每个控制周期要推演几千条隐轨迹。在真机上这通常值得(电机时间比 GPU 时间贵),但控制频率受限于规划速度,比较算法时要同时报告真实步数和墙钟时间。

    误区 3:把 KL 当成越小越好的正则项

    在世界模型里,KL 衡量的是"观测带来了多少先验预料不到的信息"。KL 接近 0(FIG 1 的 \(\beta=20\))通常不是好事:后验坍缩,模型不再用随机隐变量,梦变成确定性的;KL 很大而先验跟不上(\(\beta=0.1\))则梦是偏的。看重建误差判断不了这两种失败,要直接检查从先验出发的开环预测。KL 平衡和 free bits 就是为此设计的。

    误区 4:以为视界越长越好,或者价值可以晚点再学

    FIG 3 里没有价值时 \(H=30\) 也逃不出陷阱,有价值时 \(H=30\) 反而又被困住:模型误差随视界累积(24.1 节),采样规划的搜索维度随视界线性增长。另一方面,乐观初始化(全 0)的价值在没学好时会把规划器骗进陷阱。TD-MPC 用短视界,并且价值和模型从第一步起就一起训练。

    误区 5:以为一种隐空间对所有任务都最好

    重建式隐空间会把容量花在大面积、但和任务无关的东西上(FIG 4 的干扰物:光照、背景、走过的人);无解码器的隐空间只记住预测这个奖励所需的信息,换一个奖励(比如目标换了位置)它可能已经把需要的信息扔掉了(FIG 4 无干扰时只记住了"离目标多远")。也别忘了尺度:同一组超参数要跨任务使用,奖励和价值头就需要 symlog 或 two-hot 这样的尺度无关的目标(FIG 5)。

    8小练习

    1. RSSM 为什么除了确定性的 \(\mathbf h_t\) 还要一个随机的 \(\mathbf z_t\)?
    选项 B。确定性模型对分岔的未来只能预测平均或者随便选一支(FIG 1 的红线);随机的 \(\mathbf z_t\) 从先验采样,梦才能落到两个谷底。GRU 当然能记住多步信息,这正是 \(\mathbf h_t\) 的作用(选项 A 错);重建误差主要由后验决定,与此无关(选项 C);奖励头照样需要(选项 D)。
    2. Dreamer 训练演员和评论家时,用的轨迹从哪里来?
    选项 D。真实数据只用来训练世界模型;行为学习完全在想象中进行,起点是真实经验里的状态,长度只有 \(H\)(15 步),更远的部分由 \(\lambda\)-回报里的价值负责。选项 A 是无模型方法;选项 B 会失去样本效率;选项 C 的长想象会累积模型误差。
    3. TD-MPC2 默认只规划 \(H=3\) 步,却能完成需要几百步的任务。最主要的原因是?
    选项 A。FIG 3 中没有价值时任何视界都被困住,有了收敛的价值 \(H=1\) 到 10 都能到达。模型不会"在 3 步后完全准确"(选项 B),采样也搜索不了整条长轨迹(FIG 3 中 \(H=30\) 失败,选项 C),TD-MPC 根本不重建图像(选项 D)。
    4. 一台机械臂的相机视野里有一台不停播放视频的显示器。哪种世界模型的隐空间最可能被它带偏?
    选项 C。重建损失按像素求和,显示器占很多像素、变化又大,隐空间会优先编码它(FIG 4 中重建式隐码读回干扰物的 \(R^2\) 为 0.95、读回奖励约为 0)。不可预测又与奖励无关的内容对奖励、价值和一致性损失都没有帮助,所以选项 A、B 的隐空间不会去编码它。这也是 TD-MPC 系列选择不重建的理由之一。
    5. 在 FIG 5 中,尺度 \(c=10^4\) 时原始 MSE 头用 Adam 学得极慢。最直接的原因是?
    选项 B。Adam 用梯度的二阶矩归一化,更新量的大小约为学习率,与梯度量级无关,所以不会因为梯度大而发散(选项 A 错),但也不会因为误差大而走得更快。线性输出层要产生 \(-10^4\) 的值,权重或偏置得变得很大,以 \(3\times10^{-3}\) 一步需要成千上万步。隐藏层输入在 \([-1,1]\) 内,不会因为目标尺度而饱和(选项 C);目标只是乘了一个常数(选项 D)。symlog 和 two-hot 把输出拉回 \(O(1)\)。

    9延伸阅读

    • R. S. Sutton, Dyna, an Integrated Architecture for Learning, Planning, and Reacting, SIGART Bulletin, 1991 — "用模型生成经验来学习"的源头
    • D. Ha & J. Schmidhuber, Recurrent World Models Facilitate Policy Evolution, NeurIPS 2018 — "World Models":VAE + RNN 的世界模型,在梦里训练控制器
    • D. Hafner, T. Lillicrap, I. Fischer, R. Villegas, D. Ha, H. Lee & J. Davidson, Learning Latent Dynamics for Planning from Pixels, ICML 2019 — PlaNet:RSSM 与隐空间 CEM 规划
    • D. Hafner, T. Lillicrap, J. Ba & M. Norouzi, Dream to Control: Learning Behaviors by Latent Imagination, ICLR 2020 — Dreamer:想象中的 actor-critic 与解析价值梯度
    • D. Hafner, T. Lillicrap, M. Norouzi & J. Ba, Mastering Atari with Discrete World Models, ICLR 2021 — DreamerV2:类别隐变量与 KL 平衡
    • D. Hafner, J. Pasukonis, J. Ba & T. Lillicrap, Mastering Diverse Control Tasks through World Models, Nature 640, 2025 (arXiv:2301.04104, 2023, Mastering Diverse Domains through World Models) — DreamerV3
    • P. Wu, A. Escontrela, D. Hafner, K. Goldberg & P. Abbeel, DayDreamer: World Models for Physical Robot Learning, CoRL 2022
    • J. Schrittwieser et al., Mastering Atari, Go, Chess and Shogi by Planning with a Learned Model, Nature, 2020 — MuZero:不重建观测、只预测奖励价值策略的模型
    • N. Hansen, X. Wang & H. Su, Temporal Difference Learning for Model Predictive Control, ICML 2022 — TD-MPC
    • N. Hansen, H. Su & X. Wang, TD-MPC2: Scalable, Robust World Models for Continuous Control, ICLR 2024
    • Y. Feng, N. Hansen, Z. Xiong, C. Rajagopalan & X. Wang, Finetuning Offline World Models in the Real World, CoRL 2023
    • G. Williams, A. Aldrich & E. A. Theodorou, Model Predictive Path Integral Control: From Theory to Parallel Computation, Journal of Guidance, Control, and Dynamics, 2017 — MPPI