一句话定位
DreamerV3 是第三代 Dreamer,一个只用一套固定超参数就在 8 大领域、150+ 个任务上打败各领域专用调优算法的通用 model-based RL 算法:它学一个 RSSM 世界模型,把感官输入编码成离散隐状态,然后完全在世界模型”想象”出的隐轨迹上训练 actor-critic。靠 symlog、symexp-twohot、KL balancing + free bits、百分位 return 归一化这一套鲁棒性变换,DreamerV3 首次在不用任何人类数据、不用课程的情况下从稀疏奖励里在 Minecraft 里挖到钻石——每个训练的 agent 都能在 100M 环境步内挖到,且首颗钻石约在 30M 步(约 17 天游戏时长)出现,全程只用单张 A100。论文即 2025 年 Nature 正刊(s41586-025-08744-2)。
背景与定位
RL 的老问题是”换个领域就得重新调参”:PPO 之类通用算法鲁棒但性能一般,而各领域(连续控制、离散动作、稀疏奖励、像素输入、3D 空间、棋类)都各自有专门算法,迁移到新任务要花大量人力、经验和算力反复调超参。DreamerV3 的目标就是造一个不用重新配置就能掌握新领域的通用算法。
谱系(RSSM 世界模型一脉):planet(2018,PlaNet,首次提出 RSSM,从像素学隐动力学做规划)→ dreamer-v1(2019,Dream to Control,在隐想象中学 behavior,但只做连续控制)→ dreamer-v2(2020,Mastering Atari with Discrete World Models,离散隐状态,Atari 上超人类)→ DreamerV3(开箱即用地跨越多样 benchmark)。
核心卖点是”一套配置、零调参”(one config, no tuning):论文强调所有 benchmark 用完全相同的超参数,涵盖本体感受/视觉输入、连续/离散动作、2D/3D 世界,不做任何超参退火、不用 prioritized replay、不用 weight decay、不用 dropout。而里程碑成果是 Minecraft 挖钻石:此前 VPT 需要 720 张 GPU 训 9 天 + 承包商采集的人类键鼠数据,MineRL 竞赛方案也依赖人类轨迹或领域课程;DreamerV3 用 MineRL 竞赛动作空间、1 张 GPU 训 9 天、无人类数据,成为首个从零挖到钻石的算法。
模型架构
RSSM 世界模型由 6 个部件组成(参数统一记为 ϕ,端到端联合训练):
- Encoder
zₜ ~ qϕ(zₜ | hₜ, xₜ):把感官输入编码成随机离散表示 zₜ。图像用 stride-2 卷积(下采样到 6×6 或 4×4 再展平),向量输入先做 symlog 变换再过 3 层 MLP。 - Sequence model(序列模型)
hₜ = fϕ(hₜ₋₁, zₜ₋₁, aₜ₋₁):一个 GRU,采用 block-diagonal 分块循环权重(8 块),让循环单元数量能变大而参数/FLOPs 不平方增长;每步输入是 zₜ、动作 aₜ、循环态的线性 embedding(块间混合)。 - Dynamics predictor(动力学预测器)
ẑₜ ~ pϕ(ẑₜ | hₜ):只从 hₜ 预测下一步隐表示,MLP。 - Reward predictor
r̂ₜ ~ pϕ(r̂ₜ | hₜ, zₜ):1 层 MLP。 - Continue predictor
ĉₜ ~ pϕ(ĉₜ | hₜ, zₜ):预测 episode 是否延续 cₜ∈{0,1},逻辑回归,1 层 MLP。 - Decoder
x̂ₜ ~ pϕ(x̂ₜ | hₜ, zₜ):重建输入,图像用转置 stride-2 卷积(sigmoid 输出),向量用 3 层 MLP。
模型状态是 hₜ 与 zₜ 的拼接 sₜ={hₜ,zₜ},Markov 性由此保证。隐表示从一组 softmax 分布中采样,采样步用 straight-through 直通梯度。为避免 KL loss 突刺(deep VAE 里报告过),encoder 和 dynamics predictor 的类别分布都参数化成 1% 均匀 + 99% 网络输出的混合(unimix),杜绝出现确定性分布。
Actor-Critic(在世界模型的隐轨迹上学,环境交互时直接从 actor 采样、无 lookahead 规划):
- Actor
aₜ ~ πθ(aₜ | sₜ)、Criticvψ(Rₜ | sₜ),都是 3 层 MLP。reward 与 continue 预测器是 1 层 MLP。 - Critic 输出指数间隔分箱的类别分布(distributional),而非正态,以应对回报跨数量级、多模态。
symlog 类预测贯穿全网:向量观测的 encoder 输入与 decoder 目标都用 symlog;reward 头和 critic 用 symexp-twohot loss(下节详述)。
模型规模(Table 3,6 档,12M→400M 参数),由 model dimension d 派生,d 约按 1.5 倍递增(在 2 的幂与其 1.5 倍间交替,保证张量是 8 的倍数):
| 参数量 | 12M | 25M | 50M | 100M | 200M | 400M |
|---|---|---|---|---|---|---|
| Hidden size d | 256 | 384 | 512 | 768 | 1024 | 1536 |
| Recurrent units (8d) | 1024 | 3072 | 4096 | 6144 | 8192 | 12288 |
| Base CNN channels (d/16) | 16 | 24 | 32 | 48 | 64 | 96 |
| Codes per latent (d/16) | 16 | 24 | 32 | 48 | 64 | 96 |
层数与 latent 数在各规模间固定;学习率、batch size 等所有超参也在各规模间固定。默认用 200M(两个控制 suite 上用更快的 12M 即达同等性能)。
注:本页数字取自所抓取的 arXiv v2(2024-04-17,即 Nature 版)。该版给出 6 档 12M–400M;早期 v1(2023-01)的规模划分与之不同。
数据
DreamerV3 是在线 RL、无外部数据集:数据来自 agent 自己与环境交互,存进 replay buffer 反复回放训练。
- Replay buffer:容量 5×10⁶,均匀采样 + online queue(每个 minibatch 先用不重叠的在线轨迹,再用均匀采样的历史轨迹补齐)。采数据时把隐状态存进 buffer 用于初始化世界模型,训练 rollout 后把新的隐状态写回。论文用均匀回放(说 prioritized replay 也能提升但为实现简单没用)。
- 训练量用 replay ratio 参数化:每采 1 个环境步训练的时间步数(不含 action repeat)。例如 Atari 上 replay ratio=32、action repeat=4、batch 形状 16×64 → 每 128 个环境步做 1 次梯度更新,200M 环境步共 150 万次梯度步。
- 规模(8 领域 / 150+ 任务,Table 2):
| Benchmark | 任务数 | 环境步预算 | Action Repeat | Env 实例 | Replay Ratio | GPU-天 | 模型 |
|---|---|---|---|---|---|---|---|
| Minecraft | 1 | 100M | 1 | 64 | 32 | 8.9 | 200M |
| DMLab | 30 | 100M | 4 | 16 | 32 | 2.9 | 200M |
| ProcGen | 16 | 50M | 1 | 16 | 64 | 16.1 | 200M |
| Atari | 57 | 200M | 4 | 16 | 32 | 7.7 | 200M |
| Atari100K | 26 | 400K | 4 | 1 | 128 | 0.1 | 200M |
| BSuite | 23 | — | 1 | 1 | 1024 | 0.5 | 200M |
| Proprio Control | 18 | 500K | 2 | 16 | 512 | 0.3 | 12M |
| Visual Control | 20 | 1M | 2 | 16 | 512 | 0.1 | 12M |
(BSuite 共 23 个环境、468 个配置;Atari100K 的 400K 环境步 = action repeat 后 100K = 约 2 小时游戏时间。)默认 16 个环境实例;BSuite 与 Atari100K 用单实例;Minecraft 因环境步进慢用 64 个远程 CPU worker。种子数:Dreamer 与 PPO 每 benchmark 各 5 个(ProcGen 因算力只 1 个,BSuite 按要求 10 个,Minecraft 10 个以可靠统计挖到钻石的比例)。
数据效率:DMLab 上 100M 步就超过 IMPALA、R2D2+ 在 1B 步的成绩,即 >1000%(10×)的数据效率提升;且更大模型不仅分更高,还需要更少交互。
训练方法
世界模型 loss(式 2):L(ϕ) = E[ Σₜ (βpred·Lpred + βdyn·Ldyn + βrep·Lrep) ],权重 βpred=1、βdyn=1、βrep=0.1。
- Lpred(预测损失):decoder 与 reward predictor 用 symlog 平方损失,continue predictor 用逻辑回归。
- Ldyn(动力学损失):
max(1, KL[ sg(qϕ(zₜ|hₜ,xₜ)) ‖ pϕ(zₜ|hₜ) ]),训序列模型去预测下一隐表示。 - Lrep(表示损失):
max(1, KL[ qϕ(zₜ|hₜ,xₜ) ‖ sg(pϕ(zₜ|hₜ)) ]),让表示更可预测。 - 两者靠 stop-gradient sg(·) 与不同 loss scale 区分(KL balancing);并用 free bits——把动力学/表示损失在低于 1 nat ≈ 1.44 bits 时截断(
max(1,·)),已经学好就不再优化,把学习重心留给预测损失。此前的世界模型需按环境视觉复杂度调表示损失权重;“free bits + 小表示损失权重”这一组合让固定超参跨域可用。向量观测再用 symlog 防止大输入/大重建梯度,进一步稳住与表示损失的 trade-off。
Critic 学习(式 5):折扣 γ=0.997(等价 discount horizon 1/(1−γ)=333),想象/预测 horizon 论文正文记 T=16、超参表记 H=15。用 bootstrap 的 λ-return(λ=0.95)整合预测奖励与 value。Critic 回归 return 分布,用最大似然(categorical)。为覆盖预测 horizon 之外的回报,critic 学 return 的分布而非点估计。稳定技巧:(1) critic loss 同时作用于想象轨迹(βval=1)与回放轨迹(βrepval=0.3);(2) 向 critic 自身参数的指数滑动平均(EMA,decay 0.98)正则(类似 target network,但用当前 critic 算 return);(3) reward predictor 与 critic 的输出权重矩阵初始化为 0,避免初始就”幻想”出大奖励拖慢起步。
Actor 学习(式 6):用 Reinforce 估计器(离散连续通用),熵正则鼓励探索,固定熵尺度 η=3×10⁻⁴。关键是 percentile return 归一化:把回报近似压到 [0,1] 区间——按公式只需除以范围 S,且为在稀疏奖励下不放大噪声,只缩小大回报、对低于阈值 L=1 的小回报不动(除数取 max(1,S))。范围 S 取第 5 到第 95 百分位之差并用 EMA(decay 0.99)平滑:S = EMA(Per(R,95) − Per(R,5), 0.99),以对异常值鲁棒。论文指出:归一化 advantage(如 PPO)会在稀疏奖励下放大噪声压过熵正则;按标准差归一化在稀疏奖励下(标准差近零)会爆炸;带下限的 return 归一化才能跨域稳定。
Robust predictions(跨域尺度鲁棒的两把刷子):
- symlog / symexp:
symlog(x)=sign(x)·ln(|x|+1),symexp(x)=sign(x)·(exp(|x|)−1)。symlog 平方损失L=½(f(x,θ)−symlog(y))²,读出ŷ=symexp(f(x,θ))。对称压缩大正负值、在原点近似恒等、保号,既能快速逼近大值又不干扰小目标;避免了截断大目标(Huber)、归一化带来的非平稳、或检测到新极值时改权重(PopArt)。 - symexp twohot loss:对随机目标(奖励/回报),网络输出对指数间隔分箱
B=symexp(linspace(−20,+20))的 softmax logits,读出为箱位加权平均(可落在箱间取任意连续值);训练用 twohot 编码目标(onehot 对连续值的推广:只有最近两个箱非零、和为 1,按线性距离分配)+ 类别交叉熵。loss 只依赖箱概率、不依赖箱位数值,把梯度大小与目标大小解耦。
优化器/正则:**AGC(Adaptive Gradient Clipping)**按每张量权重 L2 范数的 **30%(0.3)**裁剪梯度(ε=10⁻³),把裁剪阈值与 loss scale 解耦;再用 LaProp 优化器(先 RMSProp 归一化再动量平滑,ε=10⁻²⁰、β1=0.9、β2=0.99),比 Adam 更稳、允许更小 ε。学习率 4×10⁻⁵,激活 RMSNorm + SiLU,batch 16 × 长度 64。不用超参退火/prioritized replay/weight decay/dropout。
让”一套配置跨域”成立的鲁棒性技术小结(相对 DreamerV2 的新增项):观测 symlog、KL balancing + free bits、所有类别分布 1% unimix、百分位 return 归一化、reward 头与 critic 的 symexp-twohot loss;架构上 block GRU、RMSNorm、SiLU;优化器 AGC + LaProp;replay 更大容量 + online queue + 存/更新隐状态。
Infra(训练 / 推理工程)
- 单卡训练:论文中所有 Dreamer 与 PPO agent 都各自训练在单张 Nvidia A100 上,作者强调这让许多研究实验室可复现。
- Wall-clock(GPU-天,Table 2):Atari100K 与 Visual Control 各约 0.1 天、Proprio 0.3 天、BSuite 0.5 天、DMLab 2.9 天、Atari 7.7 天、Minecraft 8.9 天(约 9 天)、ProcGen 最贵 16.1 天。Minecraft 用 64 个远程 CPU worker 加速环境步进。
- 模型规模 scaling 行为:6 档 12M→400M,性能随规模单调上升,且更大模型同时提高最终分与数据效率(需要更少交互);提高 replay ratio(梯度步数)也可预测地提升数据效率——给了”加算力换性能”的可预测路径。
- 对比 VPT:VPT 用 720 GPU × 9 天 + 人类数据;Dreamer 用 1 GPU × 9 天、无人类数据,达同一 Minecraft 目标。
- 官方复现实现:JAX,需 Python 3.11+,
pip install -r requirements.txt+python dreamerv3/main.py --configs <task> --run.train_ratio 32,默认跑 GPU(可切 CPU/TPU)。仓库自述为”基于 DreamerV2 代码库的 reimplementation,与 Google/DeepMind 无关,已验证复现官方结果”。 - 推理/部署侧数字(吞吐、延迟、显存占用等)未披露。
评测 benchmark
跨 8 领域、150+ 任务、固定超参,对手多为各 benchmark 上专门设计+调优的算法,另加一个跨域固定超参的高质量 PPO(Acme 实现,在 ProcGen 上已复现官方高调 PPO 成绩)。
- Atari(57 games,200M frames,sticky actions):Dreamer 200M 达 Gamer median 830%、Gamer mean 3381%、Record mean 74%、Record mean capped 38%,超过 MuZero(median 693%、mean 3054%、record 66%/capped 34%)且只用其一小部分算力,也超过 Rainbow、IQN。PPO 仅 median 180%/mean 892%/record 21%。
- Atari100K(26 games,400K frames ≈ 2h):超过基于 transformer 的世界模型 IRIS、TWM,以及 model-free 的 SPR 和 SimPLe。EfficientZero 靠在线树搜索+prioritized replay+超参调度+提前重置关卡保持 SOTA,但因此难公平比较——Dreamer 在不加这些复杂度下超过其余最好方法。
- ProcGen(16 games,50M frames,hard/unlimited):追平调优专家 PPG、超过 Rainbow;作者的固定超参 PPO 也追平官方高调 PPO。
- DMLab(30 tasks,100M frames,3D 空间/时序推理):100M 步即超过 IMPALA、R2D2+ 在 1B 步的成绩 → >1000%(10×)数据效率。
- Proprio Control(18 tasks,500K steps,本体感受连续控制):新 SOTA,超过 D4PG、DMPO、MPO。
- Visual Control(20 tasks,1M steps,纯图像连续控制):新 SOTA,超过用数据增强的专用方法 DrQ-v2、CURL。
- BSuite(23 环境 / 468 配置,专测信用分配、奖励尺度鲁棒、记忆、泛化、探索):新 SOTA,超过 Boot DQN 等,尤其在”尺度鲁棒”一类提升明显。
- Minecraft Diamond(从稀疏奖励从零挖钻石):首个做到的算法。回报 Dreamer 9.1 vs IMPALA 7.1 / Rainbow 6.3 / PPO 5.1(Table 5)。10 个种子的 Dreamer agent 100% 在 100M 步内挖到至少一颗钻石,基线 0%;按 episode 计,预算处约 0.4% 的 episode 拿到钻石(留作未来挑战);首颗钻石约在 30M 步 / 17 天游戏时长(项目页)。基线能推进到铁镐(iron pickaxe)但无一挖到钻石。
Ablation(14 任务上):所有鲁棒性技术都有贡献,最关键是世界模型的 KL 目标(KL balance + free bits),其次是 return 归一化,再次是 symexp twohot;每项通常只在部分任务上关键。学习信号消融显示:Dreamer 主要靠世界模型的无监督重建损失(停掉重建梯度掉得比停掉 reward/value 梯度更狠),与多数只靠任务奖励/value 梯度的 RL 相反——这暗示未来可用无监督数据预训练。Scaling:6 档模型规模 + 不同 replay ratio 在 Crafter 与一个 DMLab 任务上都稳健学习,规模越大分越高且越省交互。
创新点与影响
- 一套固定超参跨 8 领域 / 150+ 任务打败各领域专用调优算法,把”换域重调参”这一 RL 落地瓶颈拿掉,且全程单张 A100 可复现。
- 首个从零(无人类数据、无课程)在 Minecraft 挖到钻石的算法,解决一个被公认的 AI 里程碑难题(稀疏奖励、探索难、长时序、程序生成开放世界)。
- 一整套跨尺度鲁棒的预测/归一化变换(symlog、symexp-twohot、KL balancing + free bits、百分位 return 归一化、1% unimix),把”如何稳健地学并利用世界模型”这一长期开放问题工程化落地。
- 可预测的 scaling:性能随模型规模(12M→400M)与梯度步数单调提升,且更大模型更省数据——给出”加算力换性能/数据效率”的确定路径。
- 世界模型以无监督重建为主的发现,为”用互联网视频等无监督数据预训练世界模型”打开方向;作者在结论里点名未来做”跨域单一世界模型 / 从网络视频学世界知识”。
- 局限(论文自陈):钻石仍只在 0.4% 的 episode 里挖到,远未”稳定挖钻石”,留作未来挑战;DMLab 因算力只跑到 100M 步(对手放到 1B 步作参照);Minecraft 沿用 block-breaking 设定并对 jump/掉落物等做了环境层面修正,非完全原生动作空间。
原始链接
- 论文(arXiv abs):https://arxiv.org/abs/2301.04104
- 论文 PDF:https://arxiv.org/pdf/2301.04104 (抓取到的是 v2 / 2024-04-17,即 Nature 版正文 + 附录)
- Nature 正刊:https://www.nature.com/articles/s41586-025-08744-2
- 官方代码(JAX 复现实现):https://github.com/danijar/dreamerv3
- 项目主页:https://danijar.com/project/dreamerv3/
一手源存档(sources/)
- dreamer-v3—github-readme — GitHub README 存档(sources/world-model/2023/dreamer-v3—github-readme.md)
- dreamer-v3—project — 项目主页存档(sources/world-model/2023/dreamer-v3—project.md)
- 论文全文按约定不入库,仅引用 arXiv URL(上)。