WorldSense 技术笔记

读懂 Dreamer:世界模型是怎么学会'想象'的?

2026年8月25日 · 阅读约20分钟 · DreamerV3, 世界模型, RSSM, 强化学习, imagination, Dreamer系列
目录

Dreamer 系列 · 第 1 篇

本篇从架构层面讲清楚 Dreamer 的整体设计。如果你已经读过 RSSM 代码解析系列,这篇可以帮你把零散的代码细节串成完整的架构理解。

Dreamer 最重要的思想,不是"训练一个会生成未来画面的模型",而是训练一个足够支持决策的 latent world model,然后让策略在这个内部世界里学习

这篇文章围绕这条主线,把 Dreamer 的设计逻辑从头到尾讲一遍。

一、Dreamer 到底在解决什么问题?

强化学习的核心循环是:智能体与环境交互 → 获得奖励 → 改进策略。这个循环的问题在于,每一步交互都需要真实的环境计算——对于机器人控制这类复杂任务,这意味着大量的仿真时间甚至真实机器人时间。

Dreamer 的思路是:与其在真实环境中反复试错,不如先学一个世界模型,然后在模型的"想象"中训练策略。

这听起来简单,但要做到需要解决几个关键问题:世界模型怎么表征环境状态?怎么从想象中学出有用的策略?怎么避免想象误差把策略带偏?

从 V1 到 V3,Dreamer 的演进可以粗略理解成三个方向:更好的 latent representation、更稳定的 imagination learning,以及更强的跨任务泛化能力。

二、Dreamer 为什么主要在 latent space 中预测?

在讲架构之前,先建立一个最重要的直觉。

Dreamer 并不是完全不预测 observation,而是不需要把未来像素级视频作为策略学习的主要载体。Dreamer 的关键是在 latent space 中学习对预测和决策有用的 dynamics。

假设机器人当前看到一张 1024×1024 的 RGB 图像。如果世界模型每一步都必须精确预测下一帧的每一个像素,大量计算都会浪费在与决策无关的视觉细节上。Dreamer 的做法是先把观测压缩成 latent state,再在 latent space 中预测未来。只要 latent representation 保留了与预测和决策相关的信息,就不必要求世界模型精确重建未来画面的每一个像素。

换句话说,Dreamer 不是预测世界"长什么样",而是预测决策需要知道的世界状态。

这是理解后续所有设计的核心出发点。

三、全局架构图

Dreamer 的训练可以理解成两个循环:**Observe(观察)**负责从真实环境数据学习世界模型;**Imagine(想象)**负责在 latent space 中生成未来轨迹,并利用这些轨迹训练策略。

需要注意的是,imagination 中的 action 和真实环境中的 action 是两条不同的路径:imagination 中的 action 用来推进世界模型预测下一个 latent state,而真实环境中的 action 才真正改变环境。

              ┌─────────────────────────────────────┐
              │          OBSERVE 阶段                 │
              │                                     │
              │   Real Environment                  │
              │        │                            │
              │   observation o_t                   │
              │        │                            │
              │        ▼                            │
              │    Encoder                          │
              │        │                            │
              │        ▼                            │
              │   ┌──────────────────────┐          │
              │   │        RSSM          │          │
              │   │                      │          │
              │   │  deterministic h     │          │
              │   │        +             │          │
              │   │  posterior z         │ ← obs    │
              │   └──────────┬───────────┘          │
              │              │                      │
              │         latent state                │
              └──────────────┼──────────────────────┘
              ┌──────────────┼──────────────────────┐
              │          IMAGINE 阶段                 │
              │              ▼                       │
              │   ┌──────────────────────┐           │
              │   │    IMAGINATION       │           │
              │   │                      │           │
              │   │    Prior rollout     │           │
              │   │         ↓            │           │
              │   │    latent states     │           │
              │   └──────────┬───────────┘           │
              │              │                       │
              │       ┌──────┴──────┐                │
              │       ▼             ▼                │
              │     Actor         Critic             │
              │       │                            │
              │       ▼                            │
              │  imagined action                   │
              │       │                            │
              │       ▼                            │
              │  Prior dynamics                    │
              │       │                            │
              │       ▼                            │
              │  next latent state                 │
              │  (继续 rollout)                     │
              └────────────────────────────────────┘

    同时,Actor 的策略也在真实环境中执行:

              Actor (当前策略)
                 action
            Real Environment
             observation
            RSSM / Posterior
            (更新世界模型)

在 Observe 阶段,Posterior 和 Prior 通过 KL loss 互相约束:

Prior:      p(z_t | h_t)
              KL loss(两侧 stop-gradient)
Posterior:  q(z_t | h_t, o_t)

Posterior 是训练世界模型时的"观测校正器",Prior 是 imagination 时真正被 rollout 的模型。 这个关系非常关键。

四、Observe:世界模型怎么学习?

Observe 阶段的目标是从真实环境数据中学习环境的 latent dynamics。

观测 o_t → 编码器 → o_t^emb
              RSSM: h_t = f(h_{t-1}, z_{t-1}, a_{t-1})
              Posterior: q(z_t | h_t, o_t^emb)  ← 看得到观测
              Prior:     p(z_t | h_t)            ← 看不到观测
              feature_t = concat(h_t, z_t)
                        → deterministic state + stochastic state
                        → 具体维度由模型配置决定

这里有两个关键组件:

Posterior 看得到观测。 它利用真实观测来"纠正" latent state——相当于在说:“给定我看到的画面和记住的历史,当前状态最可能是什么?”

Prior 看不到观测。 它只能依赖过去的 latent state 和 action——相当于在说:“仅凭我的记忆,我预测下一步状态应该是什么?”

训练时通过 KL loss 约束 Prior 与 Posterior 的分布差异,并使用 KL balancing 控制两侧的学习力度,使模型既能学习可靠的 posterior representation,又能让 prior 在没有观测时复现这种 latent dynamics。这样在想象阶段(没有观测可用时),Prior 就能独立工作。

以 DreamerV3 的默认配置为例,deterministic state(8192维)和 stochastic state(32×64=2048维)拼接后形成 10240 维 feature。但这不是固定值——维度由模型配置决定。

关于 RSSM 的确定性转移、Block GRU、categorical latent 等代码细节,可以参考 RSSM 代码解析系列

五、Imagine:世界模型怎么"做梦"?

Imagine 阶段是 Dreamer 最核心的设计。

在 Dreamer 里,“想象"本质上就是让 RSSM 的 prior dynamics 在没有真实 observation 的情况下,根据当前 latent state 和 Actor 产生的 action,不断预测后续 latent states。

从 replay buffer 中采样的真实观测序列对应的 posterior latent state 出发
    只用 Prior 做 rollout(不看观测)
    h_t, z_t ~ Prior → feature_t → Actor → action_t
    feature_t → Critic → value_t
    feature_t → Reward predictor → reward_t
    用 imagined (reward, value) 更新 Actor 和 Critic

Reward predictor 的作用是根据 imagined latent state 预测对应的 reward;这样 imagination 即使没有真实环境,也能获得训练 Actor 所需的 reward signal。

需要特别强调的是:Actor 和 Critic 的参数更新主要在 imagined trajectories 上进行,但这些 imagination 的起点以及世界模型本身,都来自真实环境采集的数据。

Dreamer 的完整循环是:真实环境收集数据 → 学习世界模型 → 从真实数据的 latent state 开始想象 → 训练 Actor/Critic → Actor 回到真实环境执行 → 产生新数据 → 继续训练世界模型。需要强调的是,Observe 和 Imagine 并不是一次性执行的两个独立训练阶段,而是在整个训练过程中反复交替进行的。

这和"纯模型自我训练"有本质区别。

六、为什么在"梦"里训练不会立刻跑偏?

一个自然的疑问是:在模型想象出来的轨迹上训练策略,不会越训越偏吗?

Dreamer 用几个机制来控制这个问题:

有限 horizon + value bootstrap。 Dreamer 使用预先设定的有限 imagination horizon,避免让 latent model 无限向前 rollout;在 horizon 末端,通过 value estimate 对更远期的回报进行 bootstrap。因此,策略既能利用模型提供的短期 imagined futures,又不需要让世界模型承担无限长的预测任务。

KL loss 约束 Prior 与 Posterior 的一致性。 训练时通过 KL loss 约束 Prior 与 Posterior 的分布差异,并使用 KL balancing 控制两侧的学习力度。这样可以让 Prior 在真实数据覆盖的状态分布附近尽可能逼近 Posterior,为 imagination 提供更可靠的 latent dynamics;但它并不能消除长 horizon rollout 中的误差累积。

持续重新数据采集。 Actor 在真实环境中执行当前策略并持续收集新数据,这些数据进入 replay buffer,用于进一步更新世界模型和策略。这样世界模型不会一直在自己的想象中"闭门造车”。

当然,想象训练的局限性也是存在的。对于需要极长时程规划的任务,或者环境动态非常复杂(如接触丰富的操控任务),世界模型的想象误差可能会显著影响策略质量。这也是当前 model-based RL 仍在积极探索的方向。

七、V1 → V2 → V3 到底改变了什么?

DreamerV1:展示"想象训练"可行

DreamerV1 的核心贡献之一,是展示了一个重要思路:用学习到的 latent dynamics 生成 imagined trajectories,并在这些轨迹上训练 Actor-Critic,可以有效解决连续控制任务。

DreamerV2:引入 categorical latent

V2 将 RSSM 的 stochastic state 改为 categorical latent,并使用 straight-through estimator,使离散 latent 可以参与端到端训练。多个 categorical variable 的组合为状态提供了紧凑的离散表征,这种离散 latent 表征是 V2 在 Atari 等视觉控制任务上取得提升的重要组成部分。

DreamerV3:走向更强的通用性

V3 做了几个重要的工程改进,每个改进都针对一个具体问题:

改进主要解决的问题
symlog不同任务 reward/value 数值尺度差异
unimixcategorical 分布过早变得过于尖锐
KL balancingprior / posterior 学习不平衡
free_natsKL 项过度影响 latent learning
Block GRU + 大 deter提升 deterministic memory capacity,同时控制计算成本

具体说明:

这些改进让 DreamerV3 在多种不同类型的任务上展现出了较强的通用性,也使它成为研究世界模型与 model-based RL 时非常有代表性的开源实现。

八、Dreamer 在世界模型中的位置

世界模型是一个很大的概念,Dreamer 是其中一条特定路线的代表。下面这张表把当前几种主要范式放在一起对比:

范式代表核心思路
Latent dynamics + RLDreamerV1/V2/V3在隐状态空间学习 dynamics,并通过 imagination 优化策略
Generative / interactive world modelGenie 等学习生成/预测环境未来状态
Video / diffusion world modelDIAMOND 等在视觉空间中生成未来观测
VLA policyRT-2、OpenVLA、π0直接学习视觉/语言到动作的映射

需要说明的是,VLA 与前三者不是严格意义上的同一分类维度,这里的分类主要用于建立直觉,并不是严格互斥的 taxonomy。

Dreamer 路线的特点是:它不直接预测像素级的未来画面,而是在一个压缩的隐空间中预测未来状态。这通常可以显著降低预测和规划的表示空间成本,但代价是 latent representation 不一定保留所有像素级细节。

关于不同架构路线的对比,可以参考 世界模型架构演进:RSSM、Transformer 与统一世界模型

九、一个直觉例子

为了把"世界模型 → imagination → policy"这条链路讲得更具体,可以想象一个简单的场景:

机器人看到:"前面有墙"

Posterior(看得到观测):
  "我现在知道前面有墙"

Prior(看不到观测,只凭记忆):
  "根据过去几步,我预测前面大概率还是墙"

Imagine(用 Prior rollout 未来):

  向左行动:
    latent state → reward/value
    "未来回报更高"

  向右行动:
    latent state → reward/value
    "未来回报更低"

Actor:
  "那我选择向左"

注意这里不只是"Prior 自己知道哪边安全"——而是三者各司其职:

Prior 负责"预测会发生什么",Reward model 负责"会得到什么奖励",Critic 负责"这个未来长期值多少",Actor 负责"选择做什么"。

World Model   → What will happen?
Reward Model  → What reward will I get?
Critic        → How valuable is this future?
Actor         → What should I do?

这是 Dreamer 最核心的职责分工。

这就是 Dreamer 的核心循环:Posterior 从真实观测中得到可靠 latent → Prior 学会不看观测也能预测 latent → latent dynamics 支持 imagination → Reward/Critic 评价 imagined futures → Actor 根据评价学习 → 新策略回到真实环境收集数据 → 世界模型继续变好。

十、把之前的文章串起来

到这里,博客上的世界模型内容可以形成这样的阅读路径:

世界模型入门 → RSSM 深度解析 → RSSM 代码系列(6篇)
                              本篇:Dreamer 整体架构
                        Dreamer 训练技巧 → GPU 选型

如果你刚接触世界模型,建议从 什么是机器人世界模型? 开始。

如果你想看代码级别的 RSSM 拆解,RSSM 代码解析系列 从 stochastic state 一路讲到 KL balancing 和 imagine reset。

如果你对训练过程中的实际问题感兴趣,DreamerV3 训练技巧 总结了从环境配置到超参调优的实战经验。

十一、总结:Dreamer 真正"梦"的是什么?

Dreamer 的"梦"并不是预测一段未来视频,而是让 agent 在一个学习出来的 latent world 中进行低成本的 counterfactual trial-and-error:

“如果我现在做这个动作,接下来可能发生什么?这个未来值不值得?”

世界模型负责预测,Critic 负责评价,Actor 负责选择。真实环境则不断提供新的数据,纠正这个内部世界。

所以 Dreamer 的核心不是"想象得多逼真",而是"想象得是否足以支持正确决策"。

下一篇我们会深入讨论 Dreamer 中 Actor-Critic 的设计——它们是怎么在想象空间中工作的,以及 symlog 变换为什么对价值学习如此重要。


← 从代码理解 RSSM(六):默认配置、四条公式与代码↔数学↔语义对照 机器人世界模型到底在做什么?从感知到行动的完整链路 →

评论

W
侯晓琴

西北工业大学硕士,十余年自动化与 AI 工程经验。著有《Visual C++入门很容易》《C++程序设计经典300例》。目前聚焦世界模型与具身智能方向,记录从传统自动化到机器人 AI 的转型之路。