World Models 这篇论文的标题被翻译成“世界模型”,我第一次读到的时候,印象最深的并不是数学推导,而是作者公开的一段实验视频:一辆小车在赛道上飞速奔驰,画面却不是来自真实环境,而是模型在自己脑子里“脑补”出来的未来。这个视频之所以让我记住,是因为它把论文里最反直觉的一层意思表达得很清楚——智能体可以先把环境学成一个内部模型,然后在这个想象出来的世界里反复练习,等练得差不多了再回到现实。它就是 2018 年那篇关于循环世界模型的强化学习论文,后来也以“循环世界模型促进策略进化”的名字发表在顶会上。
这篇总结适合三类人看:第一次接触世界模型、想搞懂它和传统强化学习有什么区别的入门者;准备在赛车环境或类似控制任务上复现的老手;以及做自动驾驶仿真、游戏 AI、具身智能,想了解“预测未来”这套思路能带来什么的人。我会按“它在解决什么问题—三个模块怎么分工—完整训练流程—实验结果—复现排坑—后续演进”的顺序讲,尽量把原理和代码级别的细节都交代清楚。
1. 这篇论文到底想解决什么问题
1.1 实实在在的交互太贵,先学会想象
强化学习的本质是试错,但试错的成本往往高得离谱。让一个机械臂在真实车间里做一万次尝试,可能毁掉一堆零件;让一辆自动驾驶车在马路上试错,那就更不是能接受的方案。即使是游戏,完整跑完一局也需要实打实的模拟时间。
传统的 model-free 强化学习不学环境模型,直接通过海量交互去学策略,它的问题就是样本效率低。而 model-based 的思路是:先利用已有的交互数据学一个“环境模拟器”,再用这个模拟器来生成更多训练样本。World Models 论文把这种做法推到了极致——它不只是把模拟器当成数据生成器,而是让策略的绝大部分训练直接在纯想象的隐空间里完成,真实环境只在采集数据和最终评测时出现。
打个比方:学开车有两种路径。一种是把车直接开到马路上,靠碰碰撞撞积累经验,这对应 model-free;另一种是先在模拟器里把赛道和车感摸熟,等水平差不多了再上真车,这对应 model-based。World Models 的特别之处在于,模拟器本身也是从“日常开车录像”里学出来的,而不是人工建模的。
1.2 “醒着”和“做梦”:用内部模型替换真实环境
论文里有一组很关键的概念:wake(醒)和 dream(梦)。醒着的状态是指智能体在真实环境里观测、行动、获得奖励,这些真实交互非常宝贵,不能浪费;做梦的状态是指智能体用已经学到的世界模型,在潜在空间里自己生成未来的轨迹。
为什么要区分这两个状态?因为成本完全不同。真实环境里跑 1000 步,需要渲染、物理计算、收集图像,耗时很长;而梦境里跑 1000 步,只是几次矩阵乘法和采样,速度快好几个数量级。作者把这个思路贯彻得很彻底:控制器(策略)的训练完全放在梦境里,醒着的过程只负责两件事——采集数据用来学世界模型,以及最后测试一下控制器在真实环境里到底行不行。
这个设计还有一个隐藏的好处:安全。危险的工况可以先在想象中演练,不用拿真机去冒风险。后来很多世界模型工作在做机器人策略时,都会强调“先在梦里练到足够好,再挑一小部分梦验证”,就是从这里延伸出来的。
1.3 为什么要拆成三块而不是一个黑盒
World Models 把整个智能体拆成三个独立模块:V(Vision Model,视觉模型)、M(Memory Model,记忆模型)、C(Controller,控制器)。这也是它最容易被忽略的一个设计决定:为什么不用一个端到端的网络从图像直接映射到动作?
答案在于,三个模块解决的是完全不同类型的问题。V 要解决的是感知层面的问题——把像素压缩成紧凑的隐状态;M 要解决的是时序层面的问题——根据当前状态和历史预测下一步;C 要解决的是决策层面的问题——给出一个合适的动作。它们各自的监督信号完全不一样:V 用重建误差,M 用未来状态的似然,C 用累计奖励。硬塞进一个网络里,梯度会在不同目标之间打架,训练极不稳定,出了问题也特别难排查。
拆开之后的好处非常实际:三个模块可以分开训练、分开调参、分开替换。甚至可以说,把感知压缩、时序记忆、决策控制这三个能力分开,本身就是对人类认知结构的一种借鉴——你先看懂周围,再记住发生了什么,最后决定怎么做。
2. 三大模块的原理:V、M、C 各自在做什么
2.1 视觉模块 V:把高清画面压成 32 维潜在向量
赛车环境的输入是 64×64×3 的 RGB 图像,如果直接把这种原始像素喂给记忆模型,模型要处理的信息量太大,而且大部分像素(比如远处的天空、路边的树)和驾驶决策关系不大。V 模块的作用就是把图像压缩成一个 32 维的潜在向量 z。
论文用的是变分自编码器(VAE),而不是普通自编码器。普通自编码器学出来的是确定性编码,隐空间的几何性质差,插值和采样都不自然;VAE 让编码器输出后验分布的参数,然后通过重采样得到 z,并加上 KL 散度让隐空间向先验靠拢。这样学出来的隐空间是平滑的、带概率意义的,后续做预测和采样都方便得多。
具体结构上,编码器通常用几层步长为 2 的卷积把 64×64 逐渐降到很小的分辨率,再接全连接层输出隐变量的均值和方差;解码器则镜像地把 z 还原成图像。V 用重建误差加 KL 项训练,训练完成后,控制器的输入端就变成一个 32 维的“压缩感知”。
从实际经验来看,32 维对 64×64 的彩色图像来说是非常狠的压缩,重建出来的画面必然是糊的。但这恰恰是 V 的功劳而不是缺陷:它逼着模型只保留和任务最相关的信息,丢掉那些对驾驶没有帮助的细节。
2.2 记忆模块 M:用混合高斯预测不确定的未来
M 模块接收当前隐状态 z_t 和动作 a_t,输出的是对下一时刻隐状态 z_{t+1} 的预测,同时还要预测奖励和终止标志。为了做到这一点,M 内部使用了一个循环神经网络(比如 LSTM)来维护隐藏状态 h_t。
先说为什么要循环网络。赛车控制里很多信息单看一帧根本看不出来:汽车当前速度是多少、车身倾斜角度多大、这个弯道前面还有没有更急的弯。肉眼从一帧图像里能猜出大概,但精确的状态必须靠时间序列记忆。h_t 把这些历史信息攒在一起,相当于智能体的“工作记忆”。
再说为什么要用混合密度网络(MDN)来输出预测。如果直接用回归,让网络输出一个确定的 z_{t+1},问题在于未来本身是不确定的。比如车开到岔路口,可能左转也可能右转,真实世界会走向两个完全不同的分支;如果强行让网络去逼近这两个分支的“平均”,得到的是一个两边都不靠的中间状态,毫无预测意义。
MDN 的做法是:让网络输出多个高斯分布的参数(均值、方差)和对应的权重。预测时,把 z_{t+1} 取作几个高斯分布的混合。这样模型可以明确表达“有一半概率走左边,有一半概率走右边”,每个分支都有自己的均值和不确定性估计。
训练 M 的损失是最小化观测到的真实 z_{t+1} 在预测混合分布下的负对数似然,同时加上奖励预测的回归损失和终止标志的分类损失。这样一来,练好的 M 就不只是一个图像预测器,而是一个小型的、自洽的动态模拟器——它知道下一步隐状态会长什么样、奖励大概有多少、什么时候游戏结束。
2.3 控制器 C:一个线性策略也能在梦境里进化出来
控制器的输入是把当前隐状态 z_t 和记忆状态 h_t 拼起来,输出是三个连续量:转向、油门、刹车。论文里用的策略非常简单,就是一个线性层,可能再加一个 tanh 把输出限制在合理范围。全篇最反直觉的地方就在这里:决策模块竟然不做成深层网络?
原因其实很合理。控制器的任务是在“已经有了一个高质量世界模型”的前提下做决策,它要解决的主要问题是长时间尺度的奖励分配,而不是从高维输入里提取特征。特征提取已经被 V 和 M 干完了,C 只需要做简单的映射,所以线性策略足够了。
训练 C 用的不是反向传播,而是进化策略(论文里用 CMA-ES)。为什么不用梯度?有三个现实原因。第一,梦境环境虽然可微,但从起点到终点的展开时间很长,梯度在递归网络里传几十上百步很容易爆炸或消失;第二,进化策略只关心最终的累计奖励,不需要对奖励函数求导,这对离散动作、非平滑奖励都更鲁棒;第三,进化策略天然适合并行,开几十上百个梦境轨迹很容易。
每次进化迭代,就是从若干条真实轨迹的起点附近采样一批初始状态,然后在梦境里用当前控制器生出整段轨迹,按累计奖励给每个个体打分,再用 CMA-ES 更新策略参数。几百次迭代后,控制器就“记住”了怎么在这套世界模型里开到高分。
2.4 一个完整周期里的数据流向
把三个模块串起来看,一个完整周期的数据流动是这样的。真实环境下,智能体拿到当前帧图像,先用 V 的编码器把它压成 z_t,接着 z_t 送入 M,M 根据内部记忆 h_t 和上一时刻的隐状态/动作更新得到新的 h_t,控制器把 z_t 和 h_t 拼在一起输出动作。动作一方面被真实环境接收、推动世界变化,另一方面作为输入再交给 M,让 M 预测未来的隐状态。
在梦境阶段,流程几乎一样,唯一的区别是:z_t 不再来自真实图像,而是来自 M 自己预测出的 z_{t+1};奖励也不来自真实环境,而是来自 M 预测出的奖励。也就是说,从某个真实起点出发后,之后的整个轨迹都是想象出来的。
这个设计里有一个很关键的细节:控制器看到的输入同时包含当前观测的压缩结果 z_t 和到目前为止的一整段历史 h_t,这让它既能对当前画面做出反应,又能根据过去几帧“推测”速度、趋势和弯道走势,这是赛车任务能跑出好成绩的核心原因。
3. 从数据采集到梦境驾驶的完整训练流程
3.1 第一步:用随机策略采集原始轨迹
整个流程的第一步,也是最容易被人忽视的一步:用随机策略去真实环境里采集数据。论文的做法是开若干个随机策略的智能体,让它们各自跑大量回合,最后攒下上万条轨迹。这些轨迹的质量不需要多高,甚至绝大部分都是乱开的,但它们覆盖了各种各样的路况和状态。
为什么不能用专家数据?因为我们的目的不是模仿,而是要建立一个对整个环境状态空间都有覆盖的动态模型。随机策略虽然开得烂,但它在探索上的随机性反而保证了数据多样性,让后续 V 和 M 见过更多“奇奇怪怪”的局面。对这些数据,只需要保存图像、动作、奖励和终止标志,后续一切训练都从这份数据集出发。
这里要提醒一句:数据量越大,世界模型学得越好,但采集成本也跟着涨。先用小数据量把整个流程跑通,再上大规模采集,是复现时最稳妥的顺序。
3.2 第二步:预训练视觉模型和记忆模型
拿到轨迹后,先单独训练 V。把每一帧图像喂给 VAE,最小化重建误差和 KL 散度,练到重建质量足够稳定就行。V 练好之后,把所有轨迹里的图像都过一遍 V 的编码器,得到每帧对应的 32 维 z,并把动作、奖励、终止标志同步对齐,形成一份隐空间轨迹数据集。
接着用这份隐空间数据集训练 M。训练时的输入是当前的 z_t 和动作 a_t,监督目标是下一帧的 z_{t+1}。为了高效,通常按长度 100 左右的片段切分数据,用 teacher forcing 的方式逐时间步更新 LSTM 隐藏状态,并累加三个损失:隐状态预测的 MDN 损失、奖励回归损失、终止分类损失。
这里有一个特别容易踩的细节:M 训练时用的是真实轨迹里观测到的 z_t,而不是 M 自己的预测值,这叫 teacher forcing。它可以加速收敛,但也会造成“训练时吃的都是真食,到了梦境里被迫吃自己的预测”这种偏差。后面复现坑那一节我会详细展开。
3.3 第三步:冻结世界模型,在梦境里进化控制器
V 和 M 都练好后,就把它们整体冻结,当作一个不可变的“梦境模拟器”,开始进化控制器。每轮进化,先从数据集里随机挑若干条真实轨迹的起始位置,把对应的 z 和初始记忆作为起点,然后让控制器在梦境里连续决策,每步都用 M 预测下一个 z、下一个奖励和终止标志。
控制器个体的适应度,就是这条梦境轨迹里的累计预测奖励。每个体跑完自己的梦境轨迹后,CMA-ES 根据这批个体的得分分布更新控制器参数。如此反复几百轮,控制器的策略会逐渐从“瞎打方向”变成“能保持前进、避免撞墙、尽量刷满圈”。
3.4 训练中几个容易被忽略的细节
第一个细节是给隐状态加噪声。为了让控制器在真实环境里也稳定,训练时会往控制器看到的 z_t 上添加高斯噪声,相当于一种数据增强。这个习惯后来在很多世界模型代码里都保留了下来,目的是缩小梦境和现实之间的分布差异。
第二个细节是给隐变量设置合适的下限。很多复现代码会对隐变量的方差设置一个较小且固定的下限,而不是让它完全自由学习;这样既能保留压缩表达能力,又能避免 KL 项把隐空间压得太死,导致 z 对控制器失去信息量。
第三个细节是采样起点。梦境轨迹必须从真实轨迹的起点出发,不能随随便便从一个随机隐状态出发,否则梦境环境的状态分布和真实环境完全不匹配,进化出来的控制器在真实环境里会直接崩盘。
3.5 常用超参数速查
下面列一组复现时常用的配置,供参考。需要注意:不同环境、不同资源条件,这些值需要按实际情况调整,不要照抄。
| 项目 | 常见取值 | 说明 |
|---|---|---|
| VAE 隐变量维度 | 32 | 压缩强度,越大重建越好但预测更难 |
| 卷积层下采样方式 | 步长 2 的卷积 | 逐层缩小到低分辨率再接全连接 |
| LSTM 隐藏单元数 | 256 | 记忆容量,太小存不住长时程信息 |
| MDN 高斯分量数 | 5 | 太小表达不了多模态,太大容易过拟合 |
| 训练片段长度 | 100 左右 | 过长梯度容易爆,过短学不到长程依赖 |
| 进化策略种群规模 | 64 左右 | 越大越稳但单轮耗时越长 |
| 进化迭代数 | 数百轮 | 早期就能看到分数上升,后期要耐心 |
4. 实验效果与关键结论
4.1 赛车环境:梦里练出的车手超过普通玩家
论文的主实验在开源强化学习环境库的赛车任务上完成。这个任务要求智能体仅凭摄像头画面操控小车,在随机生成的赛道上跑完一圈,每帧都会扣一点点分,跑过新路块会有正奖励。任务难点在于:赛道每局都不同,智能体必须学会通用的驾驶能力,而不是背板。
作者用上文那套流程,在控制器完全没接触真实环境奖励的情况下——注意,控制器的全部训练都发生在梦境里——跑出了一个非常高的分数。论文报告的分值大约在 906 分,已经接近甚至超过普通人类玩家的水平。这个结论在当时相当惊人:控制器从没在真实环境里亲自跑过,只是在一个自己想象出来的世界里练过车,结果到了真实赛道也能开得又快又稳。
4.2 梦境视频:想象出来的赛道其实有很多错误
论文公开的梦境视频里,小车很快就画出了一条看起来完全合法的赛道,弯道、直道、路肩都有模有样。但如果你逐帧细看,会发现赛道偶尔会穿越草地、路况边缘开始扭曲、远处景物出现奇怪的幻影。也就是说,这个梦境并不是对真实世界的精确仿真,而是模型在“自圆其说”。
这一点极其重要。世界模型的目标不是逐像素复刻现实,而是提供一个足够好的决策训练场。哪怕梦境里有明显失真,只要错误分布得比较随机、不在某个固定位置规律性出现,进化出来的控制器依然能学到通用的驾驶能力。这有点像我们人类记梦——梦里的细节不一定对,但情绪和空间关系足够真实,醒来后你照样知道该往哪躲。
4.3 消融实验:没有记忆的控制器寸步难行
论文里最有说服力的一个消融是去掉记忆模块。当控制器只能拿到当前时刻的 z_t,拿不到 h_t 时,它在赛车任务里的表现非常差。原因很容易理解:单帧图像看不到车速,判断不了当前弯道的曲率和入弯速度,驾驶员相当于被蒙住了一半眼睛。
这个结果提醒我们,世界模型里的“循环预测”不只是为了预测未来,它本身也在为决策提供时序上下文。后来几乎所有世界模型方法都保留了这个设计:隐状态刷新由循环网络完成,决策模块读取的始终是“当前感知+历史记忆”的拼接。
4.4 从 2D 赛车扩展到 3D 射击场景
论文还做了第二个实验:把同一套流程搬到一个 3D 射击类游戏研究环境里。这个环境里,智能体需要在一个封闭场景里移动、转向,应对出现的敌人。视觉输入同样是图像,但环境更复杂、时序依赖更强、奖励也更稀疏。
作者展示了同样的方法论在 3D 环境里的可行性:用随机策略采集数据、训练 VAE 和 MDN-RNN、在梦境里进化控制器,得到的策略可以在真实环境里完成一定程度的游走和应对,而不是原地发呆。这个实验的价值在于证明了这套方法不是赛车环境特化出来的花架子,而是具有一定通用性的世界模型范式。
5. 复现踩坑记录与问题排查
5.1 VAE 那关:重建糊、潜在变量塌缩
我第一次复现时,最典型的失败是重建出来的图像成一片色块,隐空间完全没有结构。后来发现大概率是 KL 项权重过大,把隐变量直接压成了标准正态噪声,这叫后验塌缩。解决的办法一般是降低 KL 权重、给 KL 加退火,或者直接给隐变量的方差设一个合理的下限。
另一个常见问题是 VAE 训练好之后,重建画面过糊。这很正常,因为 32 维隐空间本来就不指望还原所有像素细节,但如果你发现连赛道和车辆都认不出来,那多半是压缩过头了,需要适当扩大隐变量维度或者加深解码器。
判断 VAE 是否合格,别只看重建图像。更有效的办法是把编码后的 z 喂给 M,看 M 能不能在隐空间里做出有意义的预测;如果重建漂亮但预测稀烂,大概率是隐空间里混进了大量不参与时序变化的信息。
5.2 MDN 那关:混合高斯怎么都不收敛
MDN 的损失是负对数似然,训练时最容易出现的情况是方差项坍缩到非常小,导致某个高斯分量的似然变成尖峰,数值上溢出。一般要在损失里对方差做下限裁剪,或者给协方差加一个很小的常数值,防止数值灾难。
还有一次,我发现混合权重一直退化成单一高斯,等于白混合。检查后发现是循环网络的初始化有问题,隐藏状态初始得太大,网络一开始就只能依赖一个分量来降低损失。把隐藏状态初始化为零附近或者缩小初始化范围后,混合权重重新变得有区分度。
MDN 训练时给每个步的损失加一个“方差下限”的做法非常推荐,这看起来像作弊,但实际能显著稳定训练。我做过对比:不加方差保护,损失曲线经常中途跳到 NaN;加上之后,训练过程一路平稳。
5.3 梦境与现实的 Gap:在想象中练得越好,真实环境越崩
复现者最容易遇到的一个现象是:控制器在梦境里刷分刷得很高,一放到真实环境里立刻原地打转。这说明梦境环境给出的隐状态分布和奖励分布与真实环境差异太大。
排查时我做了两件事。第一,检查梦境里 M 预测的奖励是不是整体偏离真实奖励太多;如果是,说明 M 的奖励预测没学好,需要调整奖励预测损失的占比,或者加大奖励相关的训练数据权重。第二,给控制器训练时的 z 输入加噪声,这招很朴素但非常有效——它逼着控制器不要把赌注押在某个精确的隐状态上,而是学会对观测扰动鲁棒。
还有一个经验是:控制器训练时,偶尔把梦境里的 z 换回真实轨迹里对应的 z,让控制器在“半梦半醒”的状态下训练。这样它既能享受梦境的高效率,又不至于对幻觉状态过度依赖。
5.4 工程效率:别让数据预处理拖垮训练
整条流程最耗时间的地方,往往不是模型前向传播,而是图像编码。几百万帧的 64×64 图像要过一遍 VAE 编码器,再存成训练样本,如果每次训练轮都重新编码一遍,时间会翻好几倍。
我的建议是把 V 的训练和编码彻底分开:先训练好 V,然后一次性把所有轨迹帧编码成 z,落盘保存;之后 M 的训练和梦境模拟都只读这份 latent 数据。宁可多花点磁盘空间,也要把重复计算省掉。
另外,赛车环境本身渲染很重,数据采集时可以提高帧跳过率,让每个动作重复作用于物理几步,再取关键帧作为观测。这样能在不牺牲太多信息的情况下,把数据集的有效时间跨度拉长。
5.5 快速排查表
把前面踩过的坑整理成一张表,遇到问题直接对着查。
| 现象 | 可能原因 | 处理建议 |
|---|---|---|
| VAE 重建是一片模糊色块 | KL 权重过高、隐变量维度太小 | 降低 KL 权重、增设方差下限、增大隐维度 |
| 梦境里轨迹很快就发散 | M 的预测误差累积 | 给 M 训练时喂部分预测值,减少 teacher forcing 依赖 |
| 控制器梦境高分但现实拉胯 | 梦境与真实分布偏移 | 训练时对 z 加噪声,或混合真实观测片段 |
| MDN 损失出现 NaN | 方差坍缩 | 对方差加下限保护、梯度裁剪 |
| 进化分数一直不涨 | 起点采样分布不对 | 从真实轨迹起点采样,别用随机隐状态 |
| 训练时间过长 | 重复编码图像 | 一次性编码落盘,后续只读 latent 数据 |
6. 从 2018 到现在的世界模型演进
6.1 梦中学强化学习成为一条主流路线
World Models 发表之后,“用学习到的环境模型做梦想训练”从一个小众技巧变成了一条主流研究路线。后续一大票工作把隐空间从简单的高斯向量升级成带有更强结构的循环状态空间,并在几十款经典 2D 游戏、沙盒建造类任务等环境里,用远少于 model-free 方法的数据量训练出高水平的智能体。
这条路线和原来的 World Models 有个共同点:策略优化完全发生在想象出来的隐空间里,真实环境只负责采数据、验成果。区别在于,后续工作多把“感知压缩”和“时序预测”融合成一个可端到端微调的组件,并且加入了更多目标导向的损失函数,让模型既学会预测,也学会怎么在预测里找到最优行为。
6.2 生成式世界模型:从预测隐状态到生成可玩环境
另一个明显的演进方向是“生成式世界模型”。传统 world model 预测的是紧凑隐状态,后来一些工作直接把图像序列当成离散 token,用大规模自回归模型去预测下一帧 token,想象力显著增强,梦境视频可以连续生成数千步而不塌陷。再往后,业界甚至出现了能从一段文字描述或一张静态图直接生成一个可交互 3D 环境的工作——你走进去,环境会响应你的动作,生成下一步画面。
这可以说是 World Models 思想的终极形态:环境本身不再是物理模拟器,而是一个被你学会的生成网络。从这个角度看,论文里那句关于“学会世界的模型就能在梦里生活”的话,正在一点点变成工程现实。
6.3 工业落地:仿真、自动驾驶与内容生产
我在和做自动驾驶仿真的朋友聊天时,他们不止一次提到 world model 类方法在闭环测试中的应用:用学习到的世界模型去生成各种极端交通场景,把策略在想象里磨一遍,再挑最有价值的场景回放给真实系统验证。这比在真实道路上凑场景高效得多。
在机器人领域,世界模型被用来做 sim-to-real 的辅助:先在虚拟环境里大规模学习,再用少量真实数据微调世界模型,让策略最终的部署误差降到可控范围。在游戏和内容生产领域,生成式世界模型则被用来快速搭建可玩原型,或为设计人员提供即时反馈的环境编辑器。
如果你现在想跟进这个方向,我建议先把原始论文里的 V-M-C 分工想透,再去看最新的生成式版本。因为无论换什么样的 backbone、损失函数、环境,核心问题始终是同一个:什么是适合当前任务的隐状态表示,以及如何让这个隐状态的预测足够可信。
最后分享几个我实际做实验的体会。第一,这篇论文非常适合作为 model-based RL 的起点,但只看论文不看代码,很多细节会漏掉,尤其是 M 同时预测隐状态、奖励、终止标志这一点,论文文字里一笔带过,代码里却是整条梦境训练能跑通的基石。第二,如果你手头算力有限,建议先拿一个很小规模的环境把 V-M-C 的流程跑通,再搬到正式环境;一上来就冲赛车任务,容易同时踩到数据、训练、调参三座大山。第三,这一整套范式的真正魅力不在于某个模块有多先进,而在于它把“理解世界”和“在想象中行动”这两件事彻底解耦了。我做复现时最大的一个收获,就是意识到好的智能体不一定要把所有经验都用来直接学动作——拿出一部分经验去学世界是怎么运转的,往往更划算。希望这篇 World Models 论文总结能帮你少走点弯路。