跳到主要内容

DreamerV3:通过世界模型掌握多样领域

论文:Mastering Diverse Domains through World Models
作者:Danijar Hafner、Jurgis Pasukonis、Jimmy Ba、Timothy Lillicrap
会议:ICLR 2024
原文:arXiv:2301.04104
对话来源:ChatGPT 分享对话 1 · ChatGPT 分享对话 2

本文按分享对话的原始顺序整理,保留大部分解释与例子,仅做表述和排版上的整理。带 的标题是对话中的重点内容(尤其是 RSSM 三损失、free bits、Critic 的 λ-return、Actor 的 return normalization 等),会显示在右侧目录 / 侧边栏中。

对话整理顺序

  1. DreamerV3 整体要解决什么:通用世界模型与跨 domain 训练。
  2. Figure 3 如何区分 World Model Learning 与 Actor-Critic Imagination。
  3. PlaNet 与 Dreamer 的 h、z 是否不同(用户追问)。
  4. World Model 三个损失:prediction、dynamics、representation。
  5. Critic 如何学习:λ-return、bootstrapping、EMA critic。
  6. Actor 如何学习:entropy 与 return normalization。
  7. symlog 与 twohot:数值尺度稳定。
  8. 实验、消融与 scaling 结论。
  9. DreamerV3 之后的后续工作。

一句话概括

DreamerV3 提出一个通用的世界模型算法:用 RSSM 学习环境 dynamics,在 latent space 里做 imagination rollout,再用想象轨迹训练 Actor-Critic。核心贡献不是新的 RSSM,而是通过 free bits、symlog、twohot、return normalization 等稳定技巧,让同一套超参数在 150 多个任务上稳定工作。

真实观测 → Encoder → (h_t, z_t) → RSSM 预测 future → imagination trajectory → Actor/Critic → action

⭐ 论文总览:DreamerV3 要解决什么

为什么需要 World Model

传统 RL 每次都要真实环境试错。Minecraft 里找钻石的奖励极稀疏:99.99% 时间 reward = 0,只有找到钻石 reward = 1,直接 RL 非常困难。

Dreamer 的思路是学习一个环境的内部模拟器(world model),就像人看到杯子就知道“推它会掉下去、可能碎”,不需要每次真实行动试错。

整体结构

          observation
|
v
Encoder
|
v
World Model
|
-----------------
| | |
state reward continuation
|
v
imagination
|
v
Actor-Critic
|
v
action

四个主要部分:

  1. Encoder:观察 → latent state(不直接预测像素,因为像素太高维)。
  2. World Model(RSSM):预测未来状态。
  3. Reward model:预测未来奖励。
  4. Continue model:预测 episode 是否结束。

最重要的是 Imagination(想象训练):Agent 在脑子里练习。真实环境一天只能抓 1000 次,但 world model 内部可以模拟 100 万个未来。

DreamerV3 相比前代提升在哪

论文重点不是提出新的 RSSM,而是回答:为什么以前 world model 只在少数环境有效,而 DreamerV3 可以跨 150 多个任务。主要贡献是:

  1. Universal normalization:用 symlog 压缩 reward 尺度。
  2. KL balancing:让 encoder 学观察、dynamics 学预测,避免 posterior collapse。
  3. Discrete latent:用 categorical latent 替代连续 latent,更稳定。

与前代的关系

PlaNet (2019) → Dreamer (2020) → DreamerV2 → DreamerV3
| | | |
world model imagination discrete generalization
+ MPC + actor-critic latent (跨 domain)

一句话总结:

DreamerV3 的核心不是“更强的 RL 算法”,而是证明了一个足够稳定的 World Model 可以成为通用智能体的大脑。

⭐ Figure 3:World Model Learning 与 Actor-Critic Imagination

图 3 把训练分成两块:

  • 左边 (a) World Model Learning:先学“世界怎么变化”,大量使用真实观测 xtx_t
  • 右边 (b) Actor Critic Learning:让 actor 在学好的世界模型里“做梦”,用想象轨迹学策略,除起点外基本不再看真实图像。

符号

符号含义
xtx_ttt 时刻真实观测(如 Minecraft 图像)
ztz_tstochastic latent state(随机离散 latent)
hth_tdeterministic recurrent state(RNN 记忆)
ata_t动作
rtr_treward
vtv_tcritic 预测的 value
x^t\hat{x}_tdecoder 重建出的观测

完整 latent state:

st=(ht,zt)s_t=(h_t,z_t)

直观理解:

  • hth_t:根据过去发生的事情,我记住了什么;
  • ztz_t:结合当前真正看到的图像,我认为现在世界处于什么状态。

左图:World Model Learning

真实图像 xtx_t 进入 encoder,与 hth_t 结合得到 posterior latent ztz_t

q(ztht,xt)q(z_t\mid h_t,x_t)

所以 ztz_t 不是单纯 encoder(x) 的输出,而是 RNN state + 当前观测共同决定。

hth_t 由上一时刻的 ht1,zt1,at1h_{t-1}, z_{t-1}, a_{t-1} 共同更新:

ht+1=f(ht,zt,at)h_{t+1}=f(h_t,z_t,a_t)

prior 与 posterior

训练时有真实图像,可以用 posterior:

q(ztht,xt)q(z_t\mid h_t,x_t)

但 imagination 阶段未来没有 xtx_t,只能用 prior:

p(ztht)p(z_t\mid h_t)

两者通过 KL loss 拉近,否则训练时用 posterior 很好、imagination 时 prior 立刻崩。

右图:Actor-Critic Learning

从真实 latent state s1s_1 出发,actor 产生 a1a_1,world model 用 prior 想象 s2s_2,不断 rollout:

s1a1s2a2s3a3s_1 \xrightarrow{a_1} s_2 \xrightarrow{a_2} s_3 \xrightarrow{a_3} \cdots

整个过程中不需要再进入真实环境。橙色的 vtv_t 是 critic(这个状态未来大概能得多少累计奖励),黄色的 rtr_t 是 learned reward model 预测的想象奖励。

为什么右图没有 decoder

左图需要 decoder 训练表示,但 Actor 只关心 latent sts_t,不关心未来图像长什么样。所以右图直接 latent → latent,非常高效。

两部分的灵魂:

q(ztht,xt)vsp(ztht)q(z_t\mid h_t,x_t)\quad\text{vs}\quad p(z_t\mid h_t)

左图有现实修正,右图完全靠模型自己做梦。

⭐ 为什么需要 stochastic z(含 PlaNet 与 Dreamer 的 h、z)

用户在 PlaNet 里理解 h 是确定状态、z 是方便 planner 筛选的随机状态;为什么 Dreamer 里 z 反而像是融入图像后的信息?

关键结论:PlaNet 和 Dreamer 在 h、z 这件事上本质是同一套 RSSM 逻辑。

  • hth_t 是 deterministic recurrent state,负责把历史压成确定性记忆;
  • ztz_t 是 stochastic state,负责表达“在当前历史条件下,当前真实 latent state 可能是什么”。

PlaNet 里同样有两种 ztz_t

  • prior:不看当前图像,只根据历史预测 p(ztht)p(z_t\mid h_t)
  • posterior:训练时看到真实图像后修正 q(ztht,xt)q(z_t\mid h_t,x_t)

所以“训练时用图像得到 posterior”并不是 Dreamer 新加的机制,PlaNet 的 RSSM 本来就有。

需要修正的一点:PlaNet planner 筛选的是 action sequences(CEM 采样很多 at:t+Ha_{t:t+H} 并 rollout),而不是专门采样 ztz_t 来筛选。ztz_t 的作用首先是表达 uncertainty / partial observability。

为什么非得有 stochastic z

因为真实环境通常不是完全由历史唯一确定。机器人走到十字路口,历史只有“一直是一条走廊”,还没看到拐角里面,所以 world model 认为 p(ztht)p(z_t\mid h_t) 有多种可能:40% 左边有障碍、30% 右边有障碍、30% 两边都没有。看到真实图像后,posterior 集中到与 observation 一致的 latent。

prior=预测,posterior=看完现实后的修正\text{prior}=\text{预测},\qquad \text{posterior}=\text{看完现实后的修正}

PlaNet 与 Dreamer 真正不同在哪

RSSM 的 h、z 定义没变,变的是学完 world model 之后怎么用:

  • PlaNet:RSSM + online planner(现场 CEM 搜索动作序列);
  • Dreamer:RSSM + Actor-Critic(提前想象轨迹,训练 π(as)\pi(a|s),执行时直接输出动作)。

⭐ World Model 训练:三个损失

RSSM 的三个核心方程:

ht=fϕ(ht1,zt1,at1)h_t=f_\phi(h_{t-1},z_{t-1},a_{t-1}) ztqϕ(ztht,xt)z_t\sim q_\phi(z_t\mid h_t,x_t) z^tpϕ(z^tht)\hat z_t\sim p_\phi(\hat z_t\mid h_t)

三个角色:

  • Sequence model:确定性更新 hth_t,是“看当前 xtx_t 之前的预测”。
  • Encoder:看到真实图像后得到 posterior ztz_t
  • Dynamics predictor:不看图像预测 z^t\hat z_t(prior)。

ztz_tz^t\hat z_t 区分:ztz_t 来自 encoder posterior,z^t\hat z_t 来自 dynamics prior;训练目标让两个分布接近。

得到 (ht,zt)(h_t,z_t) 后做三个预测:

r^tpϕ(r^tht,zt),c^tpϕ(c^tht,zt),x^tpϕ(x^tht,zt)\hat r_t\sim p_\phi(\hat r_t\mid h_t,z_t),\quad \hat c_t\sim p_\phi(\hat c_t\mid h_t,z_t),\quad \hat x_t\sim p_\phi(\hat x_t\mid h_t,z_t)

总 loss:

L(ϕ)=Eqϕ[t=1T(βpredLpred+βdynLdyn+βrepLrep)]\mathcal L(\phi) = \mathbb E_{q_\phi} \left[ \sum_{t=1}^{T} \left( \beta_{\rm pred}\mathcal L_{\rm pred} + \beta_{\rm dyn}\mathcal L_{\rm dyn} + \beta_{\rm rep}\mathcal L_{\rm rep} \right) \right]

权重 βpred=1\beta_{\rm pred}=1βdyn=1\beta_{\rm dyn}=1βrep=0.1\beta_{\rm rep}=0.1

Prediction Loss

Lpred=lnpϕ(xtzt,ht)lnpϕ(rtzt,ht)lnpϕ(ctzt,ht)\mathcal L_{\rm pred} = -\ln p_\phi(x_t\mid z_t,h_t) -\ln p_\phi(r_t\mid z_t,h_t) -\ln p_\phi(c_t\mid z_t,h_t)

同时训练 decoder、reward predictor、continue predictor,要求 (ht,zt)(h_t,z_t) 能解释真实世界。

⭐ Dynamics Loss 与 stop-gradient

Ldyn=max(1,DKL[sg(qϕ(ztht,xt))pϕ(ztht)])\mathcal L_{\rm dyn} = \max \left( 1, D_{\mathrm{KL}} \left[ \operatorname{sg}(q_\phi(z_t\mid h_t,x_t)) \,\|\, p_\phi(z_t\mid h_t) \right] \right)

这里 sg\operatorname{sg} 是 stop-gradient:把 q 当固定 target,只更新 p,让 dynamics predictor 去追 encoder posterior。

为什么需要 stop-gradient:如果两边都更新,q 可以变简单、p 也变简单,最后一起塌成常数分布,KL 为 0 但模型废了。

⭐ Representation Loss 与 KL balancing

Lrep=max(1,DKL[qϕ(ztht,xt)sg(pϕ(ztht))])\mathcal L_{\rm rep} = \max \left( 1, D_{\mathrm{KL}} \left[ q_\phi(z_t\mid h_t,x_t) \,\|\, \operatorname{sg}(p_\phi(z_t\mid h_t)) \right] \right)

和 dynamics loss 唯一区别是 stop-gradient 反过来:固定 p,更新 q。让 encoder 学到的 representation 不要离谱,要更容易被 dynamics 预测。

两个 KL 在拔河:

  • Prediction loss 对 q 说“多保存信息”(否则重建不好);
  • Representation loss 对 q 说“别记那么多未来预测不了的随机细节”。

最终 latent 要既 informative 又 predictable。

为什么 βrep=0.1\beta_{\rm rep}=0.1:如果 representation 约束太强,encoder 会去迎合 p,最好预测的东西是常数(zt=0z_t=0),latent 就完全没信息。所以更倾向于让 dynamics 学预测 representation,而不是强迫 representation 迁就 dynamics。

⭐ Free bits 与 posterior collapse

两个 loss 都带 max(1,KL)\max(1,KL),也就是 free bits:当 KL 已经小于 1 nat 后,就不再施加 KL 压力。

KL=0.7,0.5,0.2不再惩罚\text{KL}=0.7,0.5,0.2 \Rightarrow \text{不再惩罚}

为什么要这样:如果强迫 KL(qp)=0KL(q\|p)=0,即 q=pq=p,而 q 看过图像、p 没看过,最简单的办法就是 q 干脆别利用 xtx_t,图像信息彻底消失,这就是 posterior collapse。所以 KL 到 1 nat 左右就够了(约 1/ln21.441/\ln 2\approx1.44 bits)。

为什么强调跨 domain

DreamerV3 的目标是同一套超参数跑 Minecraft、Atari、DMC、机器人任务。复杂 3D 场景有大量控制无关细节(树叶、纹理、光照、背景),需要较强 regularization;静态背景的简单游戏可能只有某几个像素决定球/子弹/敌人位置,需要较弱 regularization。free bits + 较小的 representation loss 让同一套参数适配不同 domain。

两个稳定技巧

  1. symlog:vector observation 数值范围可能极大,先 symlog 压缩再 reconstruction,避免大数值 gradient 支配训练。
  2. 1% uniform:categorical latent 混入 1% 均匀分布,避免某个类别概率变成 0 导致 KL 数值爆炸(论文观察到过 KL spikes)。

三个损失一起看

Prediction loss   → z_t 说:“把真实世界的重要东西记住!”
Dynamics loss → p 说:“你得学会预测 encoder 实际得到的 z_t!”
Representation loss → q 说:“别编码一堆未来完全预测不了的随机细节!”

Dreamer 找的是 informative 与 predictable 之间的 sweet spot。

⭐ Critic 学习:λ-return、bootstrapping 与 EMA

Critic 回答:从这个 state 出发,按当前 actor 继续走,未来累计回报大概是多少。

Critic 预测 return 分布

真正的 return 是:

Rt=τ=0γτrt+τ,γ=0.997R_t=\sum_{\tau=0}^{\infty}\gamma^\tau r_{t+\tau},\qquad \gamma=0.997

Critic 不直接输出一个标量,而是输出 return 的分布:

vψ(Rtst)v_\psi(R_t\mid s_t)

需要 scalar 时取期望:

vt=Evψ(st)[R]v_t=\mathbb E_{v_\psi(\cdot\mid s_t)}[R]

为什么预测分布:同一状态可能“50% 概率 return=0、50% 概率 return=100”,均值 50 其实一次都不会发生;而且跨 Atari/Minecraft/DMC/robot 的 return 数量级差异大。所以用 categorical distribution + 指数间隔的 bins。

imagined trajectory 从哪来

从 replay buffer 取真实 trajectory,经 encoder 得到真实 posterior state s1s_1,再从这里开始 imagination rollout 到 T=16T=16。除起点外都是想象的。

只想象 16 步,第 17 步以后怎么办

用 bootstrapping:只 rollout 一段,后面让 critic 估计。这就是 λ-return:

Rtλ=rt+γct[(1λ)vt+λRt+1λ],RTλ=vTR_t^\lambda = r_t+ \gamma c_t \left[ (1-\lambda)v_t+ \lambda R_{t+1}^\lambda \right], \qquad R_T^\lambda=v_T
  • λ=0\lambda=0:基本完全相信 critic(variance 小,但 critic 不准时 target 也不准);
  • λ=1\lambda=1:几乎全靠 imagined reward 递推(依赖真实 reward,但长 rollout 误差累积、variance 大);
  • 0<λ<10<\lambda<1:短期相信 imagined rewards,长期相信 critic。

ct{0,1}c_t\in\{0,1\} 是 continuation flag:episode 结束时 ct=0c_t=0Rtλ=rtR_t^\lambda=r_t,后面截断。

Critic 的 loss

L(ψ)=t=1Tlnpψ(Rtλst)\mathcal L(\psi) = -\sum_{t=1}^{T} \ln p_\psi(R_t^\lambda\mid s_t)

用 imagined rewards + critic bootstrap 算出 target RtλR_t^\lambda,再 maximum likelihood 训练 distribution。这和普通 (V(st)Rtλ)2(V(s_t)-R_t^\lambda)^2 概念上一样,只是 distributional value prediction。

鸡生蛋问题与 EMA critic

RtλR_t^\lambda 里有 vtv_tvtv_t 又来自 critic,所以 critic 用自己的预测生成 target(bootstrapping)。如果 critic 变来变去,target 也震荡。于是维护 critic 参数的 EMA:

ψˉαψˉ+(1α)ψ\bar\psi\leftarrow \alpha\bar\psi+(1-\alpha)\psi

用 EMA critic 的 output 对当前 critic 做 regularization,作用类似 DQN 的 target network。

Replay critic loss

Critic 不只在意想象轨迹上训练,还用 replay buffer 的真实轨迹额外训练(权重 βrepval=0.3\beta_{\rm repval}=0.3)。因为 world model 的 reward predictor 可能不准,需要拿真实 reward 校准。具体做法:从 replay state sts_t 重新启动 imagination,得到当前 policy 下的 on-policy value annotation,再配合真实 rewards 算 replay λ-return。

另外,reward predictor 和 critic output layer 初始化成 0,避免早期随机网络输出夸张的 reward/value,让 actor 追着纯幻觉 reward 跑。

Actor、World Model、Critic 的分工

Actor 决策 → World Model 模拟后果 → Critic 判断长期价值

World model 只可靠 rollout 有限步(T=16),Critic 把 horizon 之外的长期回报压缩成 V(s)V(s)

⭐ Actor 学习:entropy 与 return normalization

这一节解决一个工程但关键的问题:怎么让同一个 actor loss 在奖励极稀疏、极密集、数值尺度差很多的环境里都能工作。

Actor 目标与 entropy

atπθ(atst)a_t\sim\pi_\theta(a_t\mid s_t)

Actor 想让高 RtλR_t^\lambda 的动作概率变大,但不希望太快变成几乎确定的策略,所以加 entropy H[π]H[\pi] 鼓励探索。

entropy 权重的问题

论文固定 η=3×104\eta=3\times10^{-4}。若环境 A 的 R0.01R\approx0.01、环境 B 的 R10000R\approx10000,在 B 里 entropy 基本被忽略(exploitation),在 A 里 entropy 相对作用大得多(exploration)。不归一化,同一个 η\eta 在不同环境意义完全不同。

Actor loss

L(θ)=t=1Tsg(Rtλvψ(st)max(1,S))logπθ(atst)+ηH[πθ(atst)]\mathcal L(\theta) = -\sum_{t=1}^{T} \operatorname{sg} \left( \frac{R_t^\lambda-v_\psi(s_t)} {\max(1,S)} \right) \log \pi_\theta(a_t\mid s_t) + \eta H[\pi_\theta(a_t\mid s_t)]

核心是 advantage:

At=Rtλvψ(st)A_t=R_t^\lambda-v_\psi(s_t)

At>0A_t>0 说明这个动作比 critic 预期好,提高概率;At<0A_t<0 则降低概率。减 vψv_\psi 是因为要关心“比正常表现好多少”,而不是绝对 return。sg\operatorname{sg} 表示 Actor 只把 advantage 当常数权重,梯度不穿过 critic/return/world model。

⭐ S 是什么(return normalization)

S=EMA(Per(Rtλ,95)Per(Rtλ,5),0.99)S = \operatorname{EMA} \left( \operatorname{Per}(R_t^\lambda,95) - \operatorname{Per}(R_t^\lambda,5), 0.99 \right)

SS 约等于当前 return 的典型范围。用 95% − 5% percentile 而不是 max − min,因为 outlier 会毁掉它(一批 return 1~5 里混一个 10000,max−min 会让正常 advantage 全变成接近 0)。再用 EMA 平滑 batch 抖动。

为什么是 max(1, S)

如果 S>1S>1 才缩放 A/SA/S;如果 S<1S<1,则 A/max(1,S)=AA/\max(1,S)=A,即只缩小特别大的 return,绝不把小 return 放大。这叫 denominator limit。

为什么不能把小 return 放大:sparse reward 下,模型噪声可能产生 A=0.001A=0.001,如果用标准 normalization 会被放大成巨大 policy gradient,actor 把噪声当 reward signal。用 max(1,S) 杜绝这一点。

和 exploration 的关系

sparse reward 时 A0A\approx0,REINFORCE 项接近 0,entropy 相对更重要 → 继续探索;发现明显高 reward 后,真正的 reward signal 压过 entropy → 开始 exploitation。所以这个 normalization 隐式实现了“reward 远 → 探索,reward 到手 → 利用”。

为什么不减去 offset / 不用标准 advantage normalization

减一个不依赖 action 的 offset 不改变期望 policy gradient,因为 Eaπ[logπ(a)]=0\mathbb E_{a\sim\pi}[\nabla\log\pi(a)]=0,所以只需要除 SS 控制 range。

标准 advantage normalization(Aμσ\frac{A-\mu}{\sigma},如 PPO)会强行让 policy gradient 始终保持差不多的尺度:即使根本没有真正 reward,模型噪声也会被放大成看起来很强的 policy signal,把 entropy 压过去、停止探索。DreamerV3 坚持“可以 scale down,绝不 scale up”。

数值例子

π=[0.7,0.2,0.1]\pi=[0.7,0.2,0.1],采样到第二个动作,v(st)=10v(s_t)=10Rtλ=14R_t^\lambda=14,所以 At=4A_t=4

  • S=20S=20At=4/20=0.2A'_t=4/20=0.2,只适度提高该动作概率;
  • S=0.1S=0.1:不是 4/0.1=404/0.1=40,而是 4/max(1,0.1)=44/\max(1,0.1)=4,没有放大。

⭐ 数值稳定性:symlog 与 twohot

这一节解决:不同任务数值尺度差太大,怎么让重建、reward prediction、critic prediction 都稳定训练。

symlog 与 symexp

symlog(x)=sign(x)ln(x+1)\operatorname{symlog}(x)=\operatorname{sign}(x)\ln(|x|+1) symexp(x)=sign(x)(ex1)\operatorname{symexp}(x)=\operatorname{sign}(x)\left(e^{|x|}-1\right)

它是对正负都能用的 log。例如 1,100,100001,100,10000 变换后变成 0.69,4.62,9.210.69,4.62,9.21,尺度被压缩;x1|x|\ll1 时 symlog(x)≈x,小值几乎不变。所以“小值近似线性,大值对数压缩”。

普通连续 target 的训练:

L(θ)=12(f(x,θ)symlog(y))2\mathcal L(\theta)=\frac12\left(f(x,\theta)-\operatorname{symlog}(y)\right)^2

网络预测 symlog(y) 而不是 y,推理时再 symexp 还原。它比 running mean/std normalization 更稳,因为变换是 stationary 的,不会随训练变化。

reward / return 为什么用 twohot categorical

reward 和 return 是多峰、带噪声的随机量,同一个 state 可能是“30% return=0、70% return=100”,MSE 预测标量 70 即使均方意义合理,也可能不是任何真实出现的 return。所以用 categorical distribution。

bins 构造:先在 symlog 空间均匀放 bin,再 symexp 映射回原始值空间:

B=symexp([20,,+20])B=\operatorname{symexp}([-20,\ldots,+20])

于是真实空间里 bin 是指数间隔的:靠近 0 很密,远离 0 很稀。网络输出 logits 后 softmax 得到各 bin 概率,最终预测:

y^=softmax(f(x))B\hat y=\operatorname{softmax}(f(x))^{\top}B

two-hot encoding

target y=17y=17 落在 bins 10102020 之间,用线性插值编码成 [0,0.3,0.7,0][0,0.3,0.7,0]

qk=bk+1ybk+1bk,qk+1=ybkbk+1bkq_k=\frac{b_{k+1}-y}{b_{k+1}-b_k},\qquad q_{k+1}=\frac{y-b_k}{b_{k+1}-b_k}

这允许 categorical model 表达连续值,而不是只能输出离散 bin center。

为什么用分类而不是回归

categorical cross entropy 的梯度由 pqp-q 决定,不直接与 y|y| 成正比;target=1 和 target=100000 只要映射到对应 bins,梯度尺度差不多。这让 gradient magnitude 与 target magnitude 解耦,对“同一套超参数跨 domain”至关重要。

symlog/twohot 用在哪

  • Vector observations:先 symlog 再进 encoder,decoder target 也在 symlog 空间训练。
  • Reward predictor 和 Critic:symlog/symexp twohot categorical loss。

注意这节和 Actor 的 return normalization 不是一回事:symlog/twohot 控制 prediction learning 的数值稳定性;return normalization 控制 actor policy gradient 中 exploration/exploitation 的尺度。

实验与消融

验证什么

作者在 8 个 domain、150+ tasks 上测试,并强调 fixed hyperparameters,验证前面的 free bits、symlog、twohot、return normalization、categorical latent 是否真的兑现了“减少跨任务调参”。

与 PPO 比较

作者专门实现了一个强 PPO,因为 PPO 是典型的 model-free RL,想公平地验证:固定超参数下,world model 范式是否真的比通用 model-free 方法更泛化。结果是 Dreamer 在各 domain 上明显更强。

benchmark 为什么选得杂

覆盖连续/离散 action、image/vector observation、dense/sparse reward、不同 reward scale、2D/3D、procedural generation,测试“动作形式变了、观测形式变了、reward 尺度变了、稀疏程度变了还能不能学”。

  • Atari:高维视觉、离散动作,超过 MuZero / Rainbow / IQN。
  • ProcGen:随机关卡,测 generalization。
  • Atari100k:400K frames,测 sample efficiency(真实数据可反复用于 imagination)。
  • Proprio Control:18 个连续控制任务,输入是向量,证明 Dreamer 不是“视觉游戏算法”。
  • Visual Control:20 个纯视觉控制任务,只给 pixels。
  • BSuite:credit assignment、reward scale、stochasticity、memory、exploration 等 RL failure mode,Dreamer 在 scale robustness 提升尤其明显。
  • Minecraft:极长 horizon + sparse reward,从零、不用人类数据,100M 步内发现钻石。

Minecraft 不是靠超长 rollout

Dreamer 的 imagination horizon 是 T=16,不可能一次模拟 36000 步。长期行为靠 critic bootstrapping:短期靠 world model rollout,长期把收益折叠进 value。

Ablation 结论

  • 每个 robustness trick 平均都有贡献,但某个技巧往往只对特定任务重要。
  • 最重要的 robustness technique 是 world model 的 KL objective(dynamics/representation loss、stop-gradient、free bits),其次是 return normalization 和 symexp twohot。
  • Figure 6b:Dreamer 的 latent representation 主要靠 unsupervised reconstruction loss,而不是 reward/value gradient。这使它更接近 task-agnostic world representation(对比 MuZero 的 task-specific representation)。
  • 这也引出未来方向:用大量无监督数据 pretrain world model。

Scaling 结论

训练 12M 到 400M 共 6 个模型尺寸,性能随尺寸单调增加;而且模型越大,达到同样性能所需的环境数据反而更少(data efficiency 更高)。replay ratio 越高(同样真实数据多更新几次),性能也越高。所以 Dreamer 有两个“花更多算力”的旋钮:model size ↑ 和 replay ratio ↑,都能用 GPU 算力换真实交互减少。

与 PlaNet / 前代的关系

版本重点动作选择
PlaNetplanning在线 CEM / MPC
Dreamerpolicy learningimagination 中训练 actor-critic
DreamerV3generalization同一套超参数跨 150+ 任务

PlaNet 更像“现在现场想很多方案”;Dreamer 更像“训练期间反复做梦,把长期经验压进 Actor 和 Critic”。

与三维视觉 / 机器人世界模型的联系

Pi3X / VGGT 学的是静态空间表示(image → camera/depth/point map);DreamerV3 学的是可预测、动作条件化的时间状态(image + action → latent dynamics → policy)。未来机器人方向希望:

camera → 3D representation → world model → future prediction → action

老师说的“多预测光流、物体、动作,让预测互相辅助”,本质就是从 3D scene understanding 走向 world model。

DreamerV3 之后的后续工作

沿着 DreamerV3 这条路线,后续比较值得看的工作:

  1. Dreamer 4(Hafner 团队,2025):DreamerV3 的正统后继,重点转向更强的可扩展 world model 和更复杂对象交互。
  2. STORM / TWISTER:把 RSSM 的 recurrent dynamics 换成 Transformer world model;TWISTER 加入长时间尺度 contrastive predictive objective,在 Atari100k 上报告了高 human-normalized score。
  3. Robust Representation for World Models:挑战“重建所有像素是否必要”,加入 temporal/forward prediction auxiliary objective,让 representation 更偏向可预测、任务相关的动态信息。
  4. LS-Imagine:针对 long-horizon imagination 的瓶颈(DreamerV3 只有 T=16)。
  5. Genie 3 / 大规模生成式 world model:world model 从 RL 内部 latent dynamics 扩展成通用交互式环境模拟器。

如果只选一篇 DreamerV3 之后马上读的,推荐 Dreamer 4;如果选一篇最可能启发自己改模型的,推荐 TWISTER(它直接挑战 RNN dynamics、短期预测目标、representation learning 这几个核心假设)。

官方资料

  • 论文:arXiv:2301.04104
  • 项目主页与代码:可在论文页查找官方链接。