DOTAFS

Personal learning notes

PAPER NOTE · HA & SCHMIDHUBER · 2018

World Models

世界模型,就是让 AI 在“脑内”拥有一个简化的环境模拟器:它能根据现在看到的东西和准备做的动作,猜接下来会发生什么。它想解决的核心问题是:AI 不必把每一次尝试都放到真实环境里,而能先在内部模型中练习,再把学到的行动方式带回真实环境。本文这篇 2018 年论文只在赛车和 Doom 游戏中验证这条思路,并不等于已经学会模拟真实世界。

ZERO-BASE PRIMER

先分清三种“学习”

监督学习
给 AI 题目和标准答案,让它从大量例子中学会“看到这种输入,应该给出什么答案”。
非监督 / 自监督学习
不给人工标准答案,让 AI 从数据自身寻找规律,或把数据的一部分当成另一部分的答案。
强化学习
不给每一步的正确动作,只在行动后给奖励或惩罚,让 AI 学会怎样行动才能获得更高的长期总分。

放回这篇论文:V 和 M 从采集到的画面序列中学习压缩与预测,属于非监督 / 自监督这一侧;C 没有“正确动作”标签,而是根据游戏总分,用进化策略寻找更好的行动规则。

任务
CarRacing-v0 / VizDoom Take Cover
输入
连续 RGB 帧与动作
核心
VAE + MDN-RNN + Linear Controller
阅读顺序
问题 → 架构 → 细节 → 实验 → 比较
01 / RESEARCH QUESTION

他们想解决什么问题?

先把“世界”缩小到一个赛车游戏:AI 每一刻只收到一张画面,然后要决定方向盘和油门。如果它一边学会从画面中认出赛道,一边摸索“这样转弯会不会撞墙”,还要同时判断哪个动作最终得分更高,就需要在游戏里反复撞车,试错次数会非常多。

World Models 因此把问题拆成两步:能否先从画面和动作中学出一个会预测后果的内部环境,再让一个很小的控制器在里面练习?在这篇论文里,内部环境负责压缩画面并预测下一时刻的可能状态;控制器只负责根据当前状态选择动作。到 Doom 实验时,控制器甚至完全在模型生成的 Dream 中训练,最后才被放回真实游戏测试。

输入

高维像素序列、Agent 执行过的动作,以及环境是否结束。

学习

先压缩每一帧的空间结构,再预测隐状态随动作变化的概率分布。

控制

让小型 Controller 只读取当前隐状态和循环网络记忆,输出动作。

验证

在赛车中直接控制,在 Doom 中完全于 Dream 训练后迁回真实游戏。

“Can agents learn inside of their own dreams?”

World Models 原始交互文章提出的问题

它与之前工作的关系

这不是第一个 model-based RL,也不是第一个学习潜空间的模型。它真正特殊的地方,是把高维视觉、随机未来和“在模型里训练策略”组合成一条非常清楚的工程管线。

路线环境表示优势当时的主要限制
Model-free RL不显式学习动力学省去模拟器误差问题真实采样需求高;表征、记忆、策略纠缠在一起
PILCO / Gaussian Process带不确定性的显式动力学低维连续控制中样本效率很高高维像素和大数据下较难扩展
潜空间动力学先压缩,再预测 latent state预测比直接生成像素便宜不少方法仍要在真实环境中完成策略训练或微调
World ModelsVAE 的 z + RNN 的 h原始 RGB 输入;随机未来;Controller 可在 Dream 中训练策略会利用模型漏洞;性能受内部世界质量限制
先记住

它不是“一个大网络直接输出动作”,而是三个职责分离的模块:V 负责看,M 负责想象后果,C 负责选动作。

02 / ARCHITECTURE

先看全局:V、M、C 怎样组成一个闭环

World Models 原文中的 VAE、MDN-RNN 与 Controller 总览图
原文总览图。画面先进入 V,隐状态与动作进入 M,C 同时读取 z 与 h。原图:Ha & Schmidhuber,CC BY 4.0。
VISION / VAE

一帧有上万个像素;V 把它压成较短的隐向量 z,只留下对任务有用的结构。

  1. 数据

    用随机策略在真实环境跑轨迹,保存 (frame, action, next frame)。赛车实验采集了 10,000 条 rollout。

  2. 空间

    单独训练 VAE,使每帧 64 × 64 RGB 图像变成短向量 z

  3. 时间

    固定 VAE 后训练 MDN-RNN,学习 p(zₜ₊₁ | zₜ, aₜ, hₜ)

  4. 策略

    固定 V 与 M,只优化 Controller。论文用 CMA-ES,不依赖策略梯度。

  5. 部署

    C 在每一帧读取 [zₜ, hₜ] 并输出动作;Doom 实验把同一个 C 从 Dream 直接迁回游戏。

03 / FROM SHALLOW TO DEEP

三个模块具体学了什么

V / VISION

VAE:把像素换成可预测的状态

它追求的不是完美还原,而是保留控制任务需要的结构。

输入一张 64 × 64 × 3 的图,Encoder 输出高斯分布的均值和方差,从中采样 latent vector z,Decoder 再尝试重建原图。CarRacing 使用 32 维 z,VizDoom 使用 64 维 z。

结构
4 层卷积 + 4 层反卷积,stride 2
损失
重建误差 + KL divergence
训练
独立训练 1 epoch
原论文的 VAE 编码和解码流程图,包含输入、隐变量与重建画面
原文 VAE 图。左右是真实与重建画面,中间是采样得到的 z。原图:Ha & Schmidhuber,CC BY 4.0。
可操作例子

拖动四个教学用隐变量,比较原始观察与有损重建。

OBSERVATION原始画面64 × 64 × RGB
ENCODEz ∈ ℝ32 DECODE
RECONSTRUCTION从 z 重建细节会丢失

不要把每一维硬解释成语义。真实 VAE 的 latent 往往是分布式表征。这里让四维分别影响弯度、车位、地平线和路宽,只是为了看清“短向量能够控制重建结构”。

M / MEMORY

MDN-RNN:预测的不是唯一未来,而是一组可能

动作相同,下一状态仍可能不同;概率分布比单点回归更合适。

RNN 读取当前的 zₜ、动作 aₜ 与记忆 hₜ,输出下一隐状态的 mixture density。论文使用 5 个高斯混合分量;CarRacing 的 LSTM 有 256 个 hidden units,Doom 有 512 个,并额外预测死亡/结束信号。

输出
5-component Gaussian mixture
意义
表达未来的多峰与不确定性
训练
固定 V 后训练 20 epochs
原论文 MDN-RNN 输入 z、动作、记忆并预测下一 latent distribution 的图
原文 MDN-RNN 图。RNN 并不直接输出“下一张确定图片”,而是输出下一 z 的分布参数。原图:Ha & Schmidhuber,CC BY 4.0。
可操作例子

选择动作并调节温度 τ,观察采样未来如何分叉。

CURRENT zt直行时,未来样本集中在道路中央P(zt+1 | at, zt, ht)
当前画面 zt
历史记忆 ht
动作 atSTRAIGHT

温度不是简单的“噪声大小”。它控制采样分布的尖锐程度:太低会生成过于容易、可被利用的世界;适度提高能逼 Controller 学到更稳健的策略。

C / CONTROLLER

Controller:把复杂性留在世界模型里

理解世界的网络很大,真正做决定的网络可以很小。

Controller 只接收 [zₜ, hₜ],经一个线性层输出动作,再用 tanh 限制范围。CarRacing 的 C 只有 867 个参数,Doom 为 1,088 个。论文使用 CMA-ES 在参数空间搜索策略,因此 V 与 M 在此阶段都保持冻结。

CarRacing
steering / gas / brake
VizDoom
left / stay / right
优化
CMA-ES evolution strategy
可操作例子

换一个弯道,查看线性策略根据 z 与 h 的组合选出动作。

zt + ht前方道路向右弯
INPUT FEATURES
OUTPUT ACTION
LEFT0.00
STRAIGHT0.00
RIGHT0.00

C 还没有输出动作。

04 / EXPERIMENTS

实验真正证明了什么

EXPERIMENT A

CarRacing:记忆 h 是否真的有用?

这个任务每次随机生成赛道,官方“解决”标准是连续 100 次平均分达到 900。只靠当前帧的 z,车能开,但遇到急弯会摇摆和出界;加入 M 的 hidden state 后,Controller 能使用最近的时间信息判断道路如何变化。

对照变量

C 的输入是否包含 M 的 hidden state。

结果

z only 为 632;增加一层隐藏层也只有 788;z + h 达到 906。

解释

单帧告诉车“现在在哪里”,时间记忆帮助它判断“赛道正在怎样弯”。

EXPERIMENT B

VizDoom:能否完全在 Dream 中训练?

Agent 需要左右躲避火球,得分是生存时间。作者先用真实轨迹训练 V 和 M,然后让 C 只与 MDN-RNN 生成的环境交互。最后把 C 原样放回 VizDoom,不再微调。

REAL ENVIRONMENT
frames + actions
WORLD MODEL
M
STEP 1 / COLLECT

先在真实环境中随机探索

保存每一步的画面和动作,让模型看到“做了什么”以及“接下来发生了什么”。

为什么温度 τ 决定能不能迁回现实

低温 Dream 很稳定,也很容易被 Controller 找到漏洞:它在虚拟环境中活得很久,回到真实 Doom 却立刻失败。温度提高后,世界模型生成更难、更分散的未来,虚拟分数下降,真实分数反而上升。最佳真实迁移出现在 τ = 1.15。

Dream 得分真实 Doom 得分
不同温度下的 Dream 与真实 Doom 平均生存得分 温度从 0.1 增加到 1.3 时,Dream 得分下降,真实 Doom 得分先上升后下降,1.15 时最高。 0500100015002000 0.100.501.001.151.30 temperature τ 真实环境 1092 ± 556
τDream真实 Doom读法
0.102086 ± 140193 ± 58梦太容易,策略几乎不能迁移
0.502060 ± 277196 ± 50仍在利用模型的确定性
1.001145 ± 690868 ± 511现实性能开始超过基准
1.15918 ± 5461092 ± 556最好的真实迁移
1.30732 ± 269753 ± 139世界过难,训练收益下降
05 / ADVANTAGES & LIMITS

它比其他方法好在哪里,又缺了什么

01

职责分离

V 与 M 用无监督目标学习世界,C 只面对低维决策问题。每个模块可以单独训练、替换和检查。

02

在 latent space 模拟

预测 32 或 64 维 z 比预测每个 RGB 像素便宜,也更容易让 RNN 关注与控制有关的变化。

03

Controller 很小

把容量放进世界模型后,策略仅有约千个参数,CMA-ES 就能搜索,不需要再端到端反向传播。

04

显式处理不确定性

MDN 输出分布,温度还能调整 Dream 的难度。Doom 实验证明“不确定性”直接影响 sim-to-real。

比较维度Model-freePILCO 一类World Models
输入尺度可直接接像素,但样本昂贵更适合低维状态先把像素压成 z
动力学不显式建模概率模型,重视 uncertaintyMDN-RNN 的 latent distribution
策略训练位置真实/官方模拟环境模型与真实数据循环可完全在 Dream 中
可检查性策略内部较难拆解模型不确定性可分析重建、rollout、C 可分别观察
主要失败方式样本不足或奖励设计错误扩展性和模型偏差Controller 利用 Dream 漏洞

论文自己承认的限制

  • 模型漏洞。Controller 会主动搜索能得高分的状态,一旦进入训练数据之外的区域,M 的错误会被放大。
  • 容量与遗忘。一个有限 RNN 很难长期记住复杂世界;新经验也可能覆盖旧动态。
  • 逐帧预测不等于规划。M 会生成下一个状态,但论文没有显式的层级目标、搜索树或长期规划器。
  • 压缩会丢物理细节。视觉上不重要的细节,可能恰好决定碰撞、接触或稳定性。
我的判断

World Models 最重要的贡献不是某个单独网络,而是一个非常清楚的接口设计:pixels → z → probabilistic dynamics → small policy。后来的 latent dynamics、Dreamer 系列和很多 learned simulator 都沿着这条思想继续推进。

06 / EXTENSION

把这个思路换成 PBD,会发生什么

如果观察不再是赛车画面,而是布料粒子的 xv 和约束状态,V 可以省略或换成图网络 Encoder;M 学习“当前粒子状态 + 外力/抓取动作 → 下一状态”;C 则选择抓取点、目标位移或 solver 参数。

这和判断“它是不是布料”不是同一个问题。分类器回答材料类别,World Model 回答动作之后状态怎样变化。对 PBD 来说,后者更像代理求解器或加速器,但必须额外检查约束误差、穿透、能量和长 rollout 稳定性。

GROUND TRUTHPBD solverx, v, constraints
DATAtrajectory(st, at, st+1)
LEARNMθpredict next state
ROLLOUTDreamfast approximation
可操作例子

左右分别是显式约束求解与带小误差的学习模型;连续推进后比较误差累积。

REAL显式约束求解
MODEL学习模型预测
STEP 0平均位置误差 0.00 px

两边从完全相同的状态开始。

观察重点:单步误差很小不代表 rollout 稳定。训练时最好同时记录 stretch/bend constraint violation、碰撞穿透和能量漂移,而不只比较位置 MSE。