P-DreamerV3-2023:固定超参跨域的 RSSM 世界模型(Mastering Diverse Domains through World Models / Mastering diverse control tasks through world models)
作者 / 机构:Danijar Hafner, Jurgis Pasukonis, Jimmy Ba, Timothy Lillicrap(Google DeepMind / University of Toronto)
发表:arXiv 2023.01 首发(标题 Mastering Diverse Domains through World Models);正式收录 Nature 2025(标题改为 Mastering diverse control tasks through world models,vol. 640, pp. 647–653,DOI 10.1038/s41586-025-08744-2)
arxiv:2301.04104 · 代码:github.com/danijar/dreamerv3 · 项目页:danijar.com/project/dreamerv3
在线索中的位置:T09 · World Model 作 simulator 主线 A「model-based RL 复兴」的当前制高点。
一句话定位:第一个固定超参就跨 150+ 任务(含 Minecraft 钻石)的 model-based RL 算法——通过 RSSM + symlog/twohot 归一化 + free bits,让 latent world model 真正"通用"。
动机
model-based RL 一直被两个老问题卡住:
- Brett's ratio / model bias:学的世界模型有误差,policy 在错模型上想象会 exploit 模型 bug,部署到真环境就崩。
- 每个 domain 都要手调超参:DreamerV2 在 Atari/Crafter 上能用,但每类环境要单独调 KL 系数、reward scale、模型大小、horizon……不通用。
Hafner 的核心 question:能不能做一套固定超参的 model-based RL,使世界模型在大尺度(Atari 几百分、Minecraft 几千分、proprio control 小数)的 reward 跨度、不同观测模态(图像/符号)、不同 action repeat 频率下都稳定?
方法核心:RSSM + 在想象中训 actor-critic + 大量归一化 trick
1. RSSM 世界模型(论文 Eq. 1)
状态 = 确定性 $h_t$ + 离散随机 $z_t$(世界模型参数记 $\phi$,与 actor $\theta$、critic $\psi$ 区分):
$$h_t = f_\phi(h_{t-1}, z_{t-1}, a_{t-1}) \quad \text{(GRU, deterministic)} \tag{1a}$$
$$\hat z_t \sim p_\phi(\hat z_t \mid h_t) \quad \text{(prior, encoder-agnostic, 用于 imagination)} \tag{1b}$$
$$z_t \sim q_\phi(z_t \mid h_t, o_t) \quad \text{(posterior, 仅训练时看观测)} \tag{1c}$$
$z_t$ 由 $d/16$ 个 categorical 组成,每个 categorical 32 类(沿用 DreamerV2 的 32 类设置;categorical 个数随 model size 变化——见下方 Table 3,默认 200M 模型 $d=1024$ 对应 64 个 categorical × 32 类 = 2048 维离散 latent)。V3 把 V2 的离散 latent 通用化到所有 domain,包括 DMC proprio 输入——之前 V2 只在图像上用离散。
Sequence model(GRU)的关键架构细节(论文 Networks 小节,Sec. "Implementation Details"):
- GRU 使用 block-diagonal recurrent weights,分成 8 个 block——这样可以在不二次增加参数量/FLOPs 的情况下使用大数量的 memory units。
- GRU 每步输入是 $(z_t, a_t, h_t)$ 的线性 embedding 拼接,允许 block 间混合。
- 序列模型激活用 RMSNorm + SiLU(非 ReLU/GELU),是 V3 的工程改动。
- 1% unimix 同样注入 encoder、dynamics predictor、actor 的所有 categorical 分布,防止零概率导致的无穷大 log-prob。
2. 世界模型训练损失(Eq. 2–3)
$$\mathcal{L}(\phi) = \mathbb{E}_{q_\phi, p_\phi}\!\left[\sum_{t=1}^{T}\Big(\beta_{\text{pred}}\,\mathcal{L}_\text{pred}(\phi) + \beta_{\text{dyn}}\,\mathcal{L}_\text{dyn}(\phi) + \beta_{\text{rep}}\,\mathcal{L}_\text{rep}(\phi)\Big)\right] \tag{2}$$
三个 loss 都是 KL 项,差别在条件(论文 Eq. 3):
$$\mathcal{L}_\text{pred}(\phi) = -\ln p_\phi(x_t|z_t,h_t) - \ln p_\phi(r_t|z_t,h_t) - \ln p_\phi(c_t|z_t,h_t) \quad\text{(图像/向量重建 + reward + continue)}\tag{3a}$$
$$\mathcal{L}_\text{dyn}(\phi) = \max\!\Big(1,\;\mathrm{KL}\big(\text{sg}(q_\phi(z_t|h_t,x_t))\,\|\,p_\phi(z_t|h_t)\big)\Big) \quad\text{动态损失}\tag{3b}$$
$$\mathcal{L}_\text{rep}(\phi) = \max\!\Big(1,\;\mathrm{KL}\big(q_\phi(z_t|h_t,x_t)\,\|\,\text{sg}(p_\phi(z_t|h_t))\big)\Big) \quad\text{表征损失}\tag{3c}$$
sg 是 stop-gradient。dynamic loss 和 representational loss 拆分是 V3 的关键设计——dyn loss 逼 prior 自己预测(防止 posterior 偷懒只看观测),rep loss 鼓励 posterior 编码观测里超出 prior 预测的信息。两者反向梯度方向不同,分别加权($\beta_\text{dyn}=1.0$, $\beta_\text{rep}=0.1$)。
Free bits 的精确机制(论文 Eq. 3 的 $\max(1,\cdot)$):当 KL 值低于 1 nat 时,loss 被 clip 到 1(即梯度为 0),相当于把这条 KL 项"冻结",让优化器专注其他 loss;只有当 KL 飙升超过 1 nat 时才产生梯度把它压回去。这种「下限保护」避免 KL 项压倒重建、把表征压成平凡。注意 free bits 是 1 nat ≈ 1.44 bits(论文原文),不是「每维 1 nat」——KL 是对所有 $d/16$ categorical 整体计算的总 KL。这是 V3 替代 V2「按环境调 KL 系数」的核心机制——3D 复杂环境细节多需要弱 regularizer,2D 像素游戏像素细节重要也需弱 regularizer,free bits 让两边都满足。
3. Image decoder + reward/continue heads(Eq. 4)
decoder $p_\phi(o_t|h_t, z_t)$ 重建观测;reward head $p_\phi(r_t|h_t,z_t)$、continue head $p_\phi(c_t|h_t,z_t)$(二分类 done)从 latent 出。不重建动作(这是 V3 简化,避免 reward/action 耦合)。图像 decoder 用 transpose-conv + sigmoid 输出;DMC proprio 任务用 3 层 MLP。
4. Actor-Critic 在想象中训(Eq. 4–7)
完全不碰真实数据——直接从 replay 抽种子 $(h_1, z_1)$,用 prior $p_\phi$ 滚出想象的 latent 轨迹 $h_{2:H}, z_{2:H}$($H=15$ imagination horizon,论文 Table 4),在想象轨迹上训 actor $\pi_\theta$ 和 critic $V_\psi$。
Critic(论文 Eq. 5)输出对称指数间隔 bin 上的分类分布,用 symexp + twohot:
$$\mathcal{L}(\psi) = -\sum_{t=1}^{T}\ln p_\psi(R_t^\lambda \mid s_t), \quad R_t^\lambda = r_t + \gamma c_t\big((1-\lambda)v_t + \lambda R_{t+1}^\lambda\big),\quad R_T^\lambda = v_T \tag{5}$$
$\lambda=0.95$ 的 TD($\lambda$) 在想象轨迹上展开(bootstrapped λ-return)。Critic 输出 twohot 分类分布而非标量——把连续 return 用 symexp 压到指数间隔 bin 上,作为分类 target。
双 critic loss(论文 Sec. Critic learning):critic loss 同时施加在两套轨迹上:
- imagined trajectories:loss scale $\beta_\text{val}=1.0$
- replay buffer trajectories:loss scale $\beta_\text{repval}=0.3$——把 imagination rollout 起点的 $R_t^\lambda$ 当作 replay 轨迹的 on-policy value annotation,再在 replay 真实 reward 上算 λ-return。这让 critic 既学想象的、又学真实的,缓解 reward 预测困难环境下的训练不稳。
Critic EMA regularizer(关键稳定化):因为 critic 回归的 target 依赖自己预测,用 EMA 平滑版 critic 参数 $\bar\psi$ 当 target,loss scale $\beta_\text{pol}=0.98$,EMA decay 0.99。这类似 DQN target network 但允许用当前 critic 算 return。
零初始化(论文 Sec. Critic learning):reward predictor 和 critic 的 output weight matrix 初始化为 0,避免训练初期随机网络 hallucinate 大 reward/value 拖慢学习。twohot 分布的 output weights 同样零初始化。
Actor(论文 Eq. 6)用 percentile return normalization + REINFORCE + entropy:
$$\mathcal{L}(\theta) = -\sum_{t=1}^{T}\mathrm{sg}\!\left(\frac{R_t^\lambda - v_\psi(s_t)}{\max(1, S)}\right)\log\pi_\theta(a_t|s_t) + \eta\,H\!\big(\pi_\theta(a_t|s_t)\big) \tag{6}$$
return 范围 $S$(论文 Eq. 7):用 return batch 的 5%–95% 百分位差(不是 max-min——为抗 outlier),再用 EMA(decay 0.99)平滑:
$$S = \mathrm{EMA}\big(\mathrm{Per}(R_t^\lambda, 95) - \mathrm{Per}(R_t^\lambda, 5),\;0.99\big) \tag{7}$$
关键 trick:当 $S < 1$ 时强制取 $\max(1, S)$,即只缩放大 return、不动小 return——避免稀疏 reward 下噪声被放大。这是 V3 跨 domain 通用的灵魂 trick:Atari return 几百、Minecraft 几千、Control 小于 1,固定 entropy 系数 $\eta$ 没法统一,但对归一化后的 return,单个 $\eta=3\times10^{-4}$ 全适用。$\eta$ 不归一化(绝对量),让 entropy bonus 的相对作用随训练衰减——探索期强、收敛期弱。
5. Symlog / symexp / twohot(论文 Eq. 8–11)
这是 V3 让 fixed-hparam 通用的数学基础。
symlog squared loss(用于 decoder 和 reward head 的回归,论文 Eq. 8):
$$\hat y = \mathrm{symexp}(f(x,\theta)),\qquad \mathcal{L}(\theta) = \tfrac{1}{2}(f(x,\theta) - \mathrm{symlog}(y))^2 \tag{8}$$
symlog / symexp(论文 Eq. 9)——「bi-symmetric logarithmic family」函数:
$$\mathrm{symlog}(x) = \mathrm{sign}(x)\,\ln(|x|+1) \tag{9a}$$
$$\mathrm{symexp}(x) = \mathrm{sign}(x)\,(\exp(|x|)-1) \tag{9b}$$
关键性质:① 压缩大值量级;② 关于原点对称、保留符号(解决 log 不能处理负值的痛点);③ 原点附近近似恒等函数($\mathrm{symlog}(x)\approx x$ for $|x|\ll 1$)——小值预测不受影响。
symexp twohot loss(用于 reward head 和 critic,论文 Eq. 10–11):
$$\hat y = \mathrm{softmax}(f(x))^T B,\qquad B = \mathrm{symexp}(-20\ldots+20) \tag{10}$$
bin 集合 $B$ 是把 $[-20, +20]$ 用 symexp 映射成 指数间隔的 bin 位置(论文原话「exponentially spaced bins」),不是线性间隔!bin 数量 $|B|$ 论文未单值列出,但默认配置(结合源码和 Appendix)是 255 个 bin。注意 bin 在正负两侧分别从小到大累加(避免大值求和时浮点误差)。
twohot encoding(论文 Eq. 12):连续值 $x$ 在最接近的两个 bin $b_k, b_{k+1}$ 上线性插值,权重由距离反比给出(论文 Eq. 12):
$$\mathrm{twohot}(x)_i = \begin{cases} |b_{k+1}-x|/|b_{k+1}-b_k| & i=k \\ |b_k-x|/|b_{k+1}-b_k| & i=k+1 \\ 0 & \text{else} \end{cases} \tag{12}$$
twohot 的两值之和 = 1,是 onehot 在连续值上的推广。输出权重初始化为 0——避免初始网络 hallucinate reward/value。loss 是 categorical cross-entropy:
$$\mathcal{L}(\theta) = -\mathrm{twohot}(y)^T \log\mathrm{softmax}(f(x,\theta)) \tag{11}$$
关键意义:MSE 在 return=1000 时梯度量级 $10^6$,return=0.1 时梯度 $10^{-2}$——根本没法统一。twohot 分类 loss 只依赖概率而非 bin 位置的连续值,把量级差异和梯度大小解耦,让所有 domain 共享一套 head + loss + optimizer。这是 V3 "固定超参"成立的最关键工程 trick。
6. 观测归一化与输入编码
- 图像观测:用 stride-2 卷积编码到 6×6 或 4×4 后 flatten;decoder 用 transpose-conv + sigmoid 输出(不加 symlog——论文原文明确 symlog 仅用于 vector)。
- 符号/proprio 观测:用 symlog 编码后再过 3 层 MLP(encoder/decoder 都用 MLP)。
- Reward 用 symexp 间隔 bin 上的 twohot 编码作为分类 target 喂 reward head(不是「symlog 编码后 twohot」——target 本身是连续标量,twohot 编码用 symexp 间隔 bin 离散化)。
- Action:连续域用 tanh squash 到 $[-1,1]$;离散域 one-hot。
超参表(论文 Table 4 + Appendix 网络/优化器细节,全部 domain 共享)
| 超参 | 值 | 出处 |
|---|---|---|
| Replay capacity | $5\times10^6$ transitions | Table 4 |
| Batch size × length | 16 × 64(=1024 transitions/梯度步) | Table 4 |
| Sequence model | GRU with block-diagonal recurrent weights, 8 blocks, RMSNorm + SiLU | Sec. Networks |
| Recurrent units | $8d$(block size = $d$) | Table 3 |
| Codes per latent | $d/16$,每个 32 类 | Table 3 |
| Hidden size $d$ (MLP) | model-dependent: 256/384/512/768/1024/1536 对应 12M/25M/50M/100M/200M/400M | Table 3 |
| Imagination horizon $H$ | 15 | Table 4 |
| Discount horizon $1/(1-\gamma)$ | 333(即 $\gamma\approx 0.997$,全 domain 共享) | Table 4 |
| $\lambda$(TD($\lambda$)) | 0.95 | Table 4 |
| Critic loss scale $\beta_\text{val}$ / replay $\beta_\text{repval}$ | 1.0 / 0.3 | Table 4 |
| Critic EMA regularizer $\beta_\text{pol}$ / decay | 0.98 / 0.99 | Table 4 |
| Actor loss scale / entropy $\eta$ / unimix | 1 / $\mathbf{3\times10^{-4}}$(固定)/ 1% | Table 4 |
| Actor RetNorm scale $S$ / limit $L$ / decay | $\mathrm{Per}(R,95)-\mathrm{Per}(R,5)$ / 1 / 0.99 | Table 4 |
| $\beta_\text{pred}$, $\beta_\text{dyn}$ | 1.0 | Table 4 |
| $\beta_\text{rep}$ | 0.1 | Table 4 |
| Latent unimix / Free nats | 1% / 1 nat | Table 4 |
| Learning rate(world model / actor / critic 共享) | $4\times10^{-5}$ | Table 4 |
| Activation | RMSNorm + SiLU(非 ReLU/GELU) | Table 4 |
| Gradient clipping | AGC(0.3)——Adaptive Gradient Clipping,clip per-tensor 到对应 weight matrix L2 norm 的 30% | Sec. Optimizer |
| Optimizer | LaProp($\epsilon=10^{-20}$, $\beta_1=0.9$, $\beta_2=0.99$) | Sec. Optimizer |
| Image size | 64×64,stride-2 conv 编码到 6×6 或 4×4,sigmoid 输出 | Sec. Networks |
| Replay ratio | 32(Atari/DMLab/Minecraft)/ 64(ProcGen)/ 128(Atari100K)/ 512(Proprio/Visual Control)/ 1024(BSuite) | Table 2 |
| Critic twohot bins | 255(默认);$B=\mathrm{symexp}(-20\ldots+20)$ 指数间隔 | Sec. Robust predictions |
Model size sweep(论文 Table 3):12M / 25M / 50M / 100M / 200M(推荐默认)/ 400M。model dim $d$ 大约按 1.5 倍增长,交替用 2 的幂和 2 的幂 ×1.5(保证 tensor shape 是 8 的倍数,硬件友好)。Atari/ProcGen/DMLab/Minecraft/BSuite/Atari100K 用 200M;Proprio/Visual Control 用 12M(论文实测与 200M 等效,但快很多)。默认推荐 XL=200M。
实验
150+ 任务覆盖(论文 Sec. Results):
- Atari 57 games(200M frames,sticky action):超 MuZero、Rainbow、IQN;人类归一化中位分具体数值待核(论文 Figure 1/4 给出可视化对比,正文未单值列出)。
- DM Control Suite:Proprio 20 tasks + Visual 20 tasks(同一组 20 任务,观测模态不同),1M 步预算下达到或超过 DMPO、TD-MPC2、DrQ-v2 等专用方法。
- Crafter:SOTA。
- BSuite 23 environments(468 configs):泛化/capacity/credit assignment 测试,总分超 Boot DQN 等。
- ProcGen 16 games(50M frames,hard difficulty):超 PPG、Rainbow。
- DMLab 30 tasks(100M steps):超 IMPALA、R2D2+ 在 1B 步的表现(data efficiency 增益 >1000%)。
- Atari 100k(26 games,400K frames):sample-efficient 设定下超 IRIS、TWM、SimPLe、SPR(EfficientZero 用 tree search + 重置 level 难直接比较)。
- Minecraft(MineRL Diamond task):第一个能从零(无人类数据、无 curriculum)采到钻石的算法(10 seeds 全部成功;之前 VPT 需 720 GPU·9 天 + 人类数据,Voyager 用 LLM + 高层 scripting)。
关键的 fixed-hparam claim:除 replay ratio(按 benchmark 调,控制 data efficiency vs compute trade-off,见 Table 2)和 model size(Control 用 12M)外,所有算法超参固定——包括 $\gamma=0.997$、$\eta=3\times10^{-4}$、batch、lr、free bits。这是 V3 与 V2 的本质区别——V2 每个 Atari game 都要调 KL 系数。论文原话(Sec. Hyperparameters):「The same values are used across all benchmarks... We do not use any hyperparameter annealing, prioritized replay, weight decay, or dropout.」
消融(Appendix C):
- 去掉 symlog twohot:reward 跨度大的 domain(Atari/Minecraft)训不动。
- 去掉 dyn/rep KL 拆分:posterior 偷看观测、prior 学不到长程。
- 去掉 unimix:categorical prior 容易 mode collapse。
- 去掉 critic EMA/target net:critic 震荡、actor 不稳定。
- 去掉 actor return normalization:跨 domain 失败。
为什么重要
- 第一个"通用"的 model-based RL:固定超参通 150+ 任务,是 model-based RL 第一次摆脱"每任务调参"。这把 latent world model 从学术玩具变成可 scale 的范式。Nature 2025 收录正是因为这一普遍性。
- 证明 latent world model 路线可行:后续 TWM、IRIS、Δ-IRIS 都是在 DreamerV3 的 RSSM / discrete latent / twohot 基础上做 Transformer 化或结构改造。
- 想象训练范式的事实标准:在 latent 空间 rollout + actor-critic 这套工程被后来所有 model-based RL 沿用——和 Cosmos/Genie 那种像素生成式 WM 不同轨道,但仍是当前最稳的 model-based RL baseline。
- Minecraft 钻石:第一个采到钻石的 model-based 方法。对长程稀疏 reward 任务是 milestone。
局限
- Wall-clock 仍慢:每步要 imagination rollout(H=15),单步计算贵。sample efficient 但 wall-clock 不一定省。
- 覆盖训练分布:和所有 model-based 一样,分布外泛化弱。replay 外的 $(s, a)$ 世界模型不会预测。
- 不是生成式 simulator:latent WM 不生成像素,不能像 Cosmos/Genie/1X WM 当 data engine 喂 image-based VLA。这是 T09 两条主线分界。
- 图像 decoder 推理时不用:训练才用 decoder,部署只跑 latent。这节省算力但也意味着 latent 不可视、不可解释。
复现要点
- 复现门槛:⭐⭐(跑通)/ ⭐⭐⭐(改)
- 官方代码 github.com/danijar/dreamerv3,单 A100 能跑 Atari/Crafter,DMC 大多数任务,多卡跑 Minecraft。全部实验单 A100 即可复现(论文 Sec. Results 强调)。
- 关键坑:① unimix 1% 不能省(省了 mode collapse);② twohot critic 必须配 symexp target 且输出权重零初始化;③ batch=16×64 不能改小(小 batch RSSM 不稳);④ EMA critic target + EMA regularizer 必须有;⑤ replay 必须 large(5M)以保 prior 训练分布覆盖;⑥ LaProp + AGC 不可换 Adam——V3 实测 Adam 在长训练偶有 spike,LaProp 解耦归一化和动量解决此问题。
- 跑 Minecraft 需要 MineRL v0.4.4 + 64 env instance + 100M steps(≈100 游戏天内),10 seeds 才能可靠报 diamond 比例。论文修正了原 MineRL 环境的若干 bug(破 diamond ore 提前终止、jump 按键 200ms 等)。
与 Dreamer V1/V2 的关系
| 版本 | 年份 | 关键改进 | 通用性 |
|---|---|---|---|
| Dreamer (V1) | 2020, arxiv:1912.01603 | 首次提出在 latent RSSM imagination 里训 actor-critic | DMC only |
| DreamerV2 | 2021, arxiv:2010.02193 | 离散 latent $z$,Atari 超越 model-free | Atari 调 KL |
| DreamerV3 | 2023, arxiv:2301.04104 | symlog/twohot/return-norm/dyn-rep KL 拆分 | 固定超参 150+ 任务 |
相关
- 建立在:World Models [Ha & Schmidhuber 2018, arxiv:1803.10122]、PlaNet [Hafner 2018]、Dreamer V1/V2、TD($\lambda$)、categorical VAE [VQ-VAE 系]、PlaNet 的 RSSM 雏形。
- 同期/后续 model-based RL:IRIS [Micheli 2022, arxiv:2209.00588](Transformer + discrete autoencoder tokenize)、TWM [Robine 2023]、Δ-IRIS、DreamerPro、DayDreamer(应用到真机)。
- 对照生成式 world model:Genie / Cosmos / 1X WM——像素级生成、当 simulator;和 DreamerV3 的 latent 想象是平行而非替代。
- 本仓库线索:T09 World Model 作 simulator 主线 A 制高点。