版本与译文说明
原作者:David Ha、Jürgen Schmidhuber。原题:World Models;副标题:Can agents learn inside of their own dreams?(智能体能在自己的梦境中学习吗?)。作者项目页标注日期为 2018 年 3 月 27 日。本译稿依据本站保存的 2026 年 9 月 26 日网页快照,译者为世界模型图谱。
译文覆盖项目报告正文和技术附录。正文中的“我们”指原作者;“首个解法”“当时最佳结果”及排行榜比较均保留为作者在该报告中的陈述。实验数字来自原报告,本站没有独立复现实验。这里翻译的是项目报告,会议论文《Recurrent World Models Facilitate Policy Evolution》是另一个版本。
译稿保留作者的模型结构图、训练曲线与结果直方图,图内英文和原文件不作改动。原页的视频、交互演示、第三方插图和完整参考书目请随文末原文链接阅读。静态译稿保留图表所解释的文字与结果数据,将一段 rollout 伪代码按同一执行顺序写成步骤;公式用可直接阅读的数学符号表示。正文与附录中的重复模型说明予以保留。
作者项目页的 Reuse 段落说明,除另有注明外,文字和图示采用 Creative Commons Attribution 4.0(CC BY 4.0);来自其他来源的插图不包含在该许可内。本中文译文是翻译与排版改编,亦采用 CC BY 4.0,并保留原作者、原文和改编说明。译稿未复制第三方插图。
摘要
我们探索如何为常见的强化学习环境构建生成式神经网络模型。我们的世界模型可以通过无监督学习快速训练,学到环境在空间和时间上的压缩表征。把世界模型提取的特征作为智能体的输入,就能训练出一个十分紧凑、简单的策略,完成指定任务。我们甚至可以让智能体完全在世界模型生成的梦境环境中训练,再把学到的策略迁回实际环境。
引言
人类通过有限的感官认识世界,并逐渐形成一个心智模型。我们的决策和行动以这个内部模型为依据。系统动力学的奠基者 Jay Wright Forrester 曾这样描述心智模型:
我们头脑中携带的周围世界的图景,只是一个模型。没有人能在头脑中想象整个世界、整个政府或整个国家。人只会挑选一些概念,以及这些概念之间的关系,用它们来表示真实系统。
每天涌入的信息极其庞大。为了处理这些信息,大脑会学习它们在空间和时间上的抽象表征。我们能观察一个场景,再记住对它的抽象描述。已有证据还提示,我们在某个时刻感知到的内容,受到大脑依据内部模型作出的未来预测的影响。原文配图以视觉错觉说明这种预测与知觉之间的联系。
理解大脑中的预测模型,可以从一个更具体的角度入手:它也许并非泛泛地预测未来,而是在当前运动动作给定的情况下,预测未来的感官数据。面对危险时,我们能本能地依据这种预测模型行动,迅速作出反射性反应,无须先有意识地规划整套行动。
以棒球为例,击球手只有毫秒级的时间决定怎样挥棒,这比视觉信号从眼睛传到大脑所需的时间还短。我们之所以能击中时速 100 英里的快速球,是因为能本能地预测球将在何时到达何处。对职业球员而言,这一过程发生在意识之外:肌肉会依照内部模型的预测,在正确的时间和位置反射性地挥棒。他们能迅速根据对未来的预测行动,不必先有意识地推演各种未来情境,再形成计划。
阅读漫画时,我们学会以空间的方式感知时间。漫画家、漫画理论家 Scott McCloud 写道:“在漫画的世界里,时间和空间是同一回事。”原文中的相关插图来自他的《Understanding Comics》,署名与版权归 Scott McCloud。
在许多强化学习问题中,人工智能体也能受益于对过去和当前状态的良好表征,以及一个对未来的良好预测模型。理想情况下,这是一个可以在通用计算机上运行的强大预测模型,例如循环神经网络(RNN)。
大型 RNN 具有很强的表达能力,可以学习数据中丰富的空间和时间表征。然而,文献中许多无模型强化学习方法往往只使用参数较少的小型神经网络。强化学习算法常受信用分配问题制约:在许多任务里,正负奖励要到一连串动作结束后才给出,算法必须判断哪些步骤造成了最终结果,哪些步骤该得到奖励或承担责任。传统算法因此难以学习大型模型中的数百万个权重。实践中,人们常用较小的网络,让训练更快地收敛到一个良好的策略。
我们希望能高效地训练基于大型 RNN 的智能体。反向传播可以高效训练大型神经网络。在这项工作中,我们把智能体拆成一个较大的世界模型和一个较小的控制器:先通过无监督学习训练大网络,学到智能体所处世界的模型,再让小控制器借助这个世界模型学习任务。小控制器把信用分配问题限制在较小的搜索空间里;较大的世界模型则保留了系统的容量与表达能力。通过世界模型提供的视角训练智能体,我们展示了它能学到高度紧凑的任务策略。
原文补充了当时的参数规模背景:典型无模型强化学习模型约有 10³ 到 10⁶ 个参数;本文考察的是约 10⁷ 个参数的模型,仍小于当时一些拥有 10⁸ 甚至 10⁹ 个参数的深度学习模型。原则上,文中流程也能利用更大的网络。
本文把 1990—2015 年间一系列关于 RNN 世界模型和控制器的研究思想,与较新的概率建模工具结合起来,用一个简化方法在现代强化学习环境中检验其中的一些关键概念。实验表明,这一方法能够解决一项有挑战的赛车导航任务:智能体仅根据像素输入驾驶,而此前更传统的方法尚未达到该任务要求的分数。
多数已有的基于模型的强化学习方法虽然会学习环境模型,却仍在实际环境中训练。我们还探索另一种做法:用生成环境完全替代实际强化学习环境,只在智能体内部世界模型生成的环境中训练控制器,再将策略迁回实际环境。
智能体可能利用生成环境的不完善之处。为缓解这个问题,我们调节内部世界模型的温度参数,控制生成环境的不确定性。让控制器在噪声更多、更加不确定的环境中训练,有助于防止它钻内部世界模型的空子。后文还会讨论基于模型的强化学习中,其他学习动力学模型并利用它训练智能体的相关研究。
智能体模型
我们提出一个受自身认知系统启发的简单模型。智能体的视觉感知组件把看到的内容压缩成一个小型表征编码;记忆组件根据历史信息预测未来编码;决策组件则仅依据视觉和记忆组件产生的表征,决定采取什么动作。
World Models 的视觉、记忆与控制器三组件总览。
这三个紧密配合的组件分别是视觉(Vision,V)、记忆(Memory,M)和控制器(Controller,C)。
VAE:视觉模型 V
环境在每个时间步都向智能体提供高维观察输入,通常是视频序列中的一帧二维图像。V 模型的作用,是为每一帧观察学习抽象、压缩后的表征。
实验中,我们使用变分自编码器(VAE)作为 V 模型。它把时间步 t 接收到的每一帧压缩成低维潜在向量 zₜ,再用这个压缩表征重建原始图像。原页用流程图和交互演示展示了这一过程。
变分自编码器的流程:将观察压缩为潜在向量,再重建图像。
原页的 VizDoom 演示使用从游戏环境截取的画面训练 VAE。读者可以加载随机截图,把它编码成小型潜在向量 z,再据此重建截图;也可以通过滑块改变 z 的数值,观察重建怎样变化,或随机生成 z,查看 VAE 学到的可能画面空间。
MDN-RNN:记忆模型 M
V 模型压缩智能体在每一帧看到的内容,我们还希望压缩随时间发生的变化。因此,M 模型负责预测未来:预测 V 接下来可能产生的 z 向量。许多复杂环境本身具有随机性,所以我们训练 RNN 输出概率密度函数 p(z),而不是对 z 给出一个确定值。
我们用高斯混合分布近似 p(z),训练 RNN 根据当前与过去可获得的信息,输出下一个潜在向量 zₜ₊₁ 的概率分布。混合密度网络(MDN)作为输出层,产生用于采样下一潜在向量的高斯混合分布参数。
带混合密度网络输出层的 RNN;输出分布参数,用于采样下一个潜在向量。
具体而言,RNN 建模的是 P(zₜ₊₁ | aₜ, zₜ, hₜ)。aₜ 表示时间 t 的动作,hₜ 是时间 t 的 RNN 隐藏状态。采样时,我们可以调节温度参数 τ,控制模型的不确定性;后面训练控制器时,这个参数会派上用场。
这一方法称为混合密度网络与循环神经网络的结合,即 MDN-RNN。它曾用于手写轨迹、草图等序列生成任务。原页用 SketchRNN 预测草图下一笔的演示作类比;这里,我们用相似的模型预测下一个潜在向量 z。
控制器 C
控制器 C 决定采取哪些动作,以最大化智能体在一次环境轨迹中的期望累计奖励。实验中,我们刻意让 C 尽可能小、尽可能简单,并把它与 V、M 分开训练,使智能体的大部分复杂性留在世界模型 V 和 M 中。
C 是一个简单的单层线性模型,在每个时间步把 zₜ 和 hₜ 直接映射成动作 aₜ:
aₜ = W꜀[zₜ; hₜ] + b꜀
W꜀ 和 b꜀ 分别是权重矩阵与偏置向量,把拼接后的输入向量 [zₜ; hₜ] 映射成输出动作向量 aₜ。对 zₜ₊₁ 的预测并不直接输入控制器;C 接收的是 hₜ 与 zₜ。如果我们想采样 zₜ₊₁,hₜ 已经包含了生成高斯混合分布参数所需的信息。
把三个组件接在一起
每个时间步 t,原始观察先由 V 处理,得到 zₜ。C 接收 zₜ 与 M 的隐藏状态 hₜ 拼接成的向量,输出用于运动控制的动作 aₜ。M 再接收当前 zₜ 和 aₜ,更新隐藏状态,得到下一时间步使用的 hₜ₊₁。
智能体的完整流程:V 编码观察,C 根据潜在向量与记忆状态产生动作,M 更新记忆状态。
原文给出的 rollout(controller) 伪代码,以 env、rnn、vae 为全局变量。给定控制器 C,这个函数返回一次环境轨迹中的累计奖励。它按以下顺序运行:
- 重置环境:obs = env.reset();初始化记忆:h = rnn.initial_state();令 done = False,cumulative_reward = 0。
- 只要 done 尚为 False,就用 z = vae.encode(obs) 编码当前观察。
- 控制器计算动作:a = controller.action([z, h])。
- 环境执行动作:obs, reward, done = env.step(a)。
- 累加奖励:cumulative_reward += reward;更新记忆:h = rnn.forward([a, z, h])。
- 轨迹结束后返回 cumulative_reward。
C 的极简设计还有实际好处。只要能定义性质良好、可微分的损失函数,深度学习就能高效训练复杂的大模型。V 和 M 可以用现代 GPU 加速器及反向传播高效训练,所以我们希望大部分模型复杂性和参数都放在那里。相比之下,线性控制器的参数极少。这使我们能够尝试较不常规的训练方式,例如用进化策略(ES)处理信用分配困难的强化学习任务。
优化 C 时,我们选择协方差矩阵自适应进化策略(CMA-ES),因为它在最多几千个参数的解空间中表现良好。我们在一台多核 CPU 机器上并行运行多条环境轨迹,演化 C 的参数。模型、训练步骤和环境的具体细节见技术附录。
赛车实验:用世界模型提取特征
预测式世界模型能够提取有用的空间和时间表征。把这些特征输入控制器,就能训练一个紧凑、极简的控制器,完成连续控制任务,例如仅根据像素输入,在俯视赛车环境中学习驾驶。下面介绍怎样训练前述智能体来完成这项赛车任务。
据我们所知,该智能体是第一个达到任务规定分数的已知解法。训练智能体在随机生成的赛道上晃动前进、取得中等分数并不困难;CarRacing-v0 把“解决任务”定义为连续 100 次试验的平均奖励达到 900,这意味着智能体只能犯很少的驾驶错误。
每次试验都会随机生成赛道。智能体需要尽可能快地经过尽可能多的赛道区块,并控制三个连续动作:左右转向、加速和制动。
训练 V 之前,我们先用随机策略收集 10,000 条环境轨迹。智能体多次随机探索,记录动作 aₜ 及其造成的环境观察。对更复杂、随机策略不足以覆盖的环境,我们将在后文介绍迭代训练。
这些数据用于训练 V,学习每一帧的潜在空间。VAE 将画面编码成低维向量 z;训练时,最小化原始画面与解码器根据 z 重建的画面之间的差异。虽然有损压缩会丢掉细节,z 仍保留了每幅 64 × 64 像素图像的主要内容。原页的交互演示可以查看这种重建。
V 训练好后,我们把每个时间步的画面预处理成 zₜ。MDN-RNN 利用这些向量和记录的随机动作 aₜ,学习高斯混合分布 P(zₜ₊₁ | aₜ, zₜ, hₜ)。原则上 V、M 可以端到端一起训练,但我们发现分开训练更实用,结果令人满意,也不需要穷尽式调节超参数。单独训练 M 不需要图像,因此一张 GPU 就能处理大量长潜在向量序列,甚至一次输入一个回合的全部 1000 帧编码,以捕捉较长时间的依赖关系。
这个实验里的世界模型 V 和 M 不知道环境的实际奖励信号。它的任务只是压缩和预测观察到的图像序列,只有控制器 C 可以获得奖励。线性控制器仅有 867 个参数,适合用 CMA-ES 这样的进化算法优化。
原页视频并排展示环境的实际观察和世界模型保留的观察。每个时间步都可以用 VAE 从 zₜ 重建画面,以查看智能体在轨迹中实际获得的信息质量。
赛车实验步骤
- 用随机策略收集 10,000 条轨迹。
- 训练 VAE(V),把每帧编码成 32 维潜在向量 z ∈ ℝ³²。
- 训练 MDN-RNN(M),建模 P(zₜ₊₁ | aₜ, zₜ, hₜ)。
- 演化控制器(C),最大化一条轨迹的期望累计奖励。
| 模型 | 参数量 |
|---|---|
| VAE | 4,348,547 |
| MDN-RNN | 422,368 |
| 控制器 | 867 |
赛车结果:只有视觉模型
只要观察有良好的表征,训练智能体驾驶并不困难。此前研究表明,给定人工设计的观察信息,例如激光雷达信息、角度、位置和速度,就能训练小型前馈网络,得到令人满意的导航策略。因此,我们先限制 C,使它只能访问 V、不能访问 M,控制器便成为 aₜ = W꜀zₜ + b꜀。
在这个设置下,智能体仍能沿赛道行驶,却会摇晃,在急弯处驶离赛道。100 次随机试验的平均分数为 632 ± 251,与当时 OpenAI Gym 排行榜中的其他智能体和 A3C 等传统深度强化学习方法的表现相近。给 C 的策略网络增加一个隐藏层后,分数提升到 788 ± 141,仍未达到解决环境的要求。
赛车结果:完整世界模型
V 提供的 zₜ 只表示某一时刻的观察,预测能力有限。M 则专门学习预测 zₜ₊₁。由于这一预测由时间 t 的 RNN 隐藏状态 hₜ 产生,hₜ 适合作为提供给智能体的学习特征。把 zₜ 与 hₜ 结合起来,C 就同时获得当前观察及对未来预期的良好表征。
让智能体同时使用 zₜ 和 hₜ,明显改善了驾驶表现:驾驶更稳定,也能有效应对急弯。在赛车中的快速反应决策里,它不需要提前规划、展开假想的未来情境。hₜ 包含未来概率分布的信息,智能体可以直接查询 RNN 来指导动作,就像前文的棒球手或经验丰富的一级方程式车手那样,在紧张时刻迅速预测该在何时驶向何处。
| 方法 | 平均分数 |
|---|---|
| DQN | 343 ± 18 |
| A3C(连续动作) | 591 ± 45 |
| A3C(离散动作) | 652 ± 10 |
| ceobillionaire 的算法(未发表) | 838 ± 11 |
| 仅 V 模型,输入 z | 632 ± 251 |
| 仅 V 模型,输入 z,增加隐藏层 | 788 ± 141 |
| 完整世界模型,输入 z 和 h | 906 ± 21 |
智能体在 100 次随机试验中得到 906 ± 21 的分数,达到了任务要求,并在当时取得新的最佳结果。此前采用传统深度强化学习方法的尝试,平均分数约在 591—652;排行榜中当时报告的最佳解法,在连续 100 次随机试验中平均分数为 838 ± 11。
传统深度强化学习方法往往要预处理每帧图像,例如进行边缘检测,并把最近几帧堆叠为输入。相比之下,我们的世界模型接收原始 RGB 像素流,直接学习空间与时间表征。据我们所知,这是首个被报告达到该任务解决标准的方法。
赛车梦境
世界模型能够建模未来,也就能自行生成假想的赛车情境。给定当前状态,我们让它输出 zₜ₊₁ 的概率分布,从中采样一个 zₜ₊₁,再把这个样本作为实际观察。训练好的 C 可以放回这个由 M 生成的梦境环境中。
在原页演示中,训练好的策略被部署到 MDN-RNN 生成的模拟环境,画面由 VAE 解码器渲染。读者可以点击画面左右两侧或使用方向键覆盖智能体动作:左右转向,上下加速或制动;右下角的滑块通过调节 τ 改变环境的不确定性。
我们刚才看到,在实际环境中学到的策略,也能在梦境环境里一定程度地运作。这带来一个问题:能否让智能体在自己的梦境中学习,再把策略迁回实际环境?
VizDoom 实验:在梦境中学习
如果世界模型对当前用途足够准确,对当前问题也足够完整,我们应该能用它替代实际环境。毕竟,智能体并不直接观察现实,而是只看到世界模型让它看到的内容。这个实验先训练世界模型模仿 VizDoom 环境,再让智能体在它生成的梦境环境里训练。
在 VizDoom: Take Cover 任务中,智能体需要躲开房间另一侧怪物发射的火球。这些火球的目的就是杀死智能体。环境没有显式奖励,因此,为模拟自然选择,我们把一条轨迹的累计奖励定义为存活的时间步数。每条轨迹最多运行 2100 步,约 60 秒;连续 100 条轨迹的平均存活时间超过 750 步,约 20 秒,任务即被视为解决。
VizDoom 实验步骤
VizDoom 的设置大体与赛车任务一致,但有几个关键区别。赛车中的 M 只预测下一个潜在向量;要构建一个可供智能体训练的世界模型,这里的 M 还要预测智能体下一帧是否死亡。这是一个二元事件 doneₜ,简记为 dₜ。
M 能同时预测下一观察和 done 状态后,我们就具备了构造完整强化学习环境的要素。将 M 封装为 gym.Env 接口,使它像真正的 OpenAI Gym 环境一样工作,然后在这个虚拟环境中训练智能体。
生成梦境时,不需要 V 编码任何真实像素帧,因此智能体完全在潜在空间环境中训练。这有多种好处,后文会讨论。虚拟环境与实际环境接口相同,策略学好后,可以方便地部署回实际环境,检查迁移效果。
- 用随机策略收集 10,000 条轨迹。
- 训练 VAE(V),把每帧编码成 64 维潜在向量 z ∈ ℝ⁶⁴,再用 V 将收集的图像转换为潜在空间表征。
- 训练 MDN-RNN(M),建模 P(zₜ₊₁, dₜ₊₁ | aₜ, zₜ, hₜ)。
- 演化控制器(C),最大化虚拟环境中的期望存活时间。
- 把学到的策略用于实际 Gym 环境。
| 模型 | 参数量 |
|---|---|
| VAE | 4,446,915 |
| MDN-RNN | 1,678,785 |
| 控制器 | 1,088 |
在梦境中训练
经过训练,控制器学会在梦境环境中移动,躲避 M 生成的怪物发射的致命火球。智能体在这个虚拟环境中取得约 900 时间步的分数。
原页演示展示智能体怎样在梦境中行动:M 学习生成怪物及朝智能体发射的火球,C 则找到躲避这些生成火球的策略。这里,V 仅用于把 M 产生的 zₜ 解码成可观看的像素图像。演示允许用左右键或点击画面覆盖动作,并用滑块控制温度、调节不确定性。
我们的 RNN 世界模型学着模仿人类程序员设计的完整游戏环境。它仅从随机回合收集的原始图像数据中学习,模拟游戏的主要方面,包括游戏逻辑、敌人行为、物理和三维画面渲染。
例如,智能体选择向左时,M 学习把它移向左侧,并相应调整内部游戏状态表征。智能体试图移动得过远时,M 也学习用关卡两侧的墙阻止它越界。有时,M 需要跟踪多个怪物发射的多个火球,使它们沿各自方向连贯移动,还必须检测智能体是否被火球击中而死亡。
与实际游戏不同,虚拟环境可以额外加入不确定性,让梦境中的游戏更难。采样 zₜ₊₁ 时提高温度 τ,就能增加这种不确定性:火球的运动更随机,轨迹更难预测;智能体有时甚至会纯粹因运气不好而死亡,找不到明确原因。
我们发现,在较高温度下表现良好的智能体,通常在正常设置中也表现更好。提高 τ 还有助于防止控制器利用世界模型的不完善之处,后面会详细讨论。
把策略迁回实际环境
我们把虚拟环境中训练的智能体放回原始 VizDoom 场景。在连续 100 次随机试验中,它取得约 1100 时间步的分数,远高于规定的 750 步,也比在更难的虚拟环境中的分数高。后文将比较它与其他模型的结果。
原页视频并排展示实际环境裁切后的 64 × 64 像素画面,以及潜在向量的重建。虽然 V 未能准确保留每帧的全部细节,例如怪物数量,智能体仍能用学到的策略在实际环境中行动。虚拟环境本身连怪物的准确数量都不能始终跟踪;能够在噪声更多、更不确定的虚拟噩梦里存活的智能体,在原本较干净的环境中反而表现很好。
钻世界模型的空子
小时候玩电子游戏,我们可能发现过设计者没有预料的漏洞。玩家能获得无限生命或生命值,轻松通关原本困难的游戏,却可能因此失去学习正常游戏技巧的机会。初步实验中,我们发现智能体也找到了一种对抗性策略:它以特定方式移动,让 M 管理的虚拟环境中的怪物,在某些轨迹里一次火球也不发。即使火球开始形成,它也能通过移动让火球“熄灭”。
M 只是环境的近似概率模型,有时会生成不符合实际环境规则的轨迹。前文已经提到,房间另一侧的怪物数量也不能被 M 精确复现。因此,即使实际环境中不存在这类漏洞,C 仍可能利用世界模型。
让 M 生成虚拟环境,也意味着把 M 的全部隐藏状态暴露给控制器。这相当于让智能体访问游戏引擎的全部内部状态与记忆,而不仅仅是玩家可见的观察。为最大化期望累计奖励,它便能高效寻找操纵引擎隐藏状态的方法。
在学到的动力学模型里训练策略的弱点就在这里:智能体容易找到欺骗动力学模型的对抗性策略。策略在模型中看似很好,在实际环境中却失败,通常是因为它访问了偏离训练分布、模型预测错误的状态。
这也许解释了为何许多学习强化学习环境动力学模型的早期工作,没有让模型完全替代实际环境。确定性动力学模型一旦不完美,就容易被利用。PILCO 等方法采用贝叶斯模型,以不确定性估计在一定程度上缓解这一问题,但并未彻底解决。一些较新的研究结合基于模型和无模型方法:先用学到的策略初始化策略网络,再在实际环境中用无模型方法微调。
为增加 C 利用 M 缺陷的难度,我们让 MDN-RNN 建模实际环境中可能结果的分布,而不只预测一个确定的未来。即使实际环境是确定性的,MDN-RNN 也将它近似为随机环境。这样,我们可以用 τ 控制 M 的随机程度,让 C 在更随机的环境版本中训练,并调节逼真程度与可被利用程度之间的取舍。
VAE 编码的潜在空间只使用单个对角高斯分布,高斯混合似乎显得过于复杂。但混合密度模型中的离散模式,对包含随机离散事件的环境很有用,例如怪物究竟决定发射火球,还是留在原地。单个对角高斯也许足以编码一帧图像,带混合密度输出层的 RNN 则更容易建模含有离散随机状态的复杂环境逻辑。
例如,把温度设得极低,τ = 0.1,几乎等于用确定性 LSTM 生成环境来训练 C。由于模式坍塌,无论智能体做什么,怪物都不会发射火球。M 无法切换到高斯混合中形成并发射火球的另一种模式。在这个生成环境里学到的策略,多数时候都能拿到满分 2100,但放到实际世界中显然会失败,甚至比随机策略还差。
原页演示还展示了约 τ = 0.5 时,MDN-RNN 也很难生成火球。即使用滑块把 τ 提高到 1.0,智能体仍有时能欺骗 M,使正在形成的火球熄灭。
把 τ 作为 M 的可调参数,我们便能在不同不确定性水平的虚拟环境中训练 C,再观察策略迁回实际环境后的表现。实验结果如下:
| 温度或基线 | 虚拟环境分数 | 实际环境分数 |
|---|---|---|
| 0.10 | 2086 ± 140 | 193 ± 58 |
| 0.50 | 2060 ± 277 | 196 ± 50 |
| 1.00 | 1145 ± 690 | 868 ± 511 |
| 1.15 | 918 ± 546 | 1092 ± 556 |
| 1.30 | 732 ± 269 | 753 ± 139 |
| 随机策略基线 | 不适用 | 210 ± 108 |
| Gym 排行榜 | 不适用 | 820 ± 58 |
提高 M 的温度,会让 C 更难找到对抗性策略;但温度过高,也会使环境难到智能体无法学到有用内容。因此,τ 是一个需要调节的超参数。温度还会改变智能体找到的策略类型:τ = 1.15 时,最高分数为 1092 ± 556;提高到 1.30 后,分数降低,但策略风险较小,回报方差也更低。作为比较,当时报告的最佳分数为 820 ± 58。
迭代训练流程
我们的实验任务相对简单,用随机策略收集的数据就能训练出合理的世界模型。但更复杂的环境会怎样?在困难环境里,智能体只有学会有策略地穿行,才会接触世界中的某些部分。
复杂任务需要迭代训练。智能体必须探索世界,不断收集新观察,使世界模型逐渐改进、细化。根据 Learning to Think 改写的流程如下:
- 随机初始化 M 与 C 的参数。
- 在实际环境中运行 N 条轨迹。智能体可以在轨迹过程中学习;把所有动作 aₜ 和观察 xₜ 保存到存储设备。
- 训练 M,建模 P(xₜ₊₁, rₜ₊₁, aₜ₊₁, dₜ₊₁ | xₜ, aₜ, hₜ);同时训练 C,在 M 内最大化期望奖励。
- 任务尚未完成时,返回第二步。
我们已经展示,一轮迭代足以解决简单任务。困难任务则要求第二步中的控制器,主动探索有利于改进世界模型的环境区域。一个令人期待的研究方向,是给智能体加入人工好奇心、内在动机与信息寻求能力,鼓励新的探索。尤其可以根据压缩质量的改善,扩展奖励函数。
原页给出基于像素的摆杆上举实验。第一轮后,随机策略收集的数据大多位于下半部的稳态附近,M 因而难以预测摆杆上举后的状态。即便如此,C 在 M 中仍学会了向上摆动。经过 20 轮,把上举策略部署到实际环境,收集更多摆杆位于上半部的数据后,M 对环境的建模更准确,C 也能在 M 中学到更好的策略。
在当前方法中,M 是对下一帧概率分布建模的 MDN-RNN。如果它预测很差,说明智能体遇到了自己不熟悉的世界区域。我们可以调整并复用 M 的训练损失来鼓励好奇心:在实际环境中反转损失的符号,智能体便被鼓励探索不熟悉的部分,新收集的数据有望改善世界模型。
迭代流程要求 M 不只预测下一观察 x 与 done,还预测下一时间步的动作和奖励。这对更难的任务可能是必要的。例如,智能体要学会复杂的运动技能才能行走时,世界模型可以学习模仿已经学会走路的 C。大型世界模型吸收行走这样的困难技能后,较小的 C 可以依赖这些已吸收的技能,集中学习更高层次的导航行为。
这与肌肉记忆有相似之处。学会弹钢琴后,你不再需要占用工作记忆,把每个音符逐一翻译成手指动作;这些过程已被编码到意识之外。
神经科学中的海马回放也提供了一个联系:动物休息或睡眠时,大脑会重放近期经历。回放对记忆巩固很重要,原先依赖海马的记忆,会随时间变得不再依赖海马。Foster 形容,回放“与其说像做梦,不如说像思考”。读者可以阅读 Replay Comes of Age,了解神经科学视角下的回放及其与理论强化学习的联系。
迭代训练可能让 C—M 模型自然形成分层学习方式。强化学习中的自博弈和 PowerPlay 等研究,也在探索可以产生自然课程学习的方法。我们认为,这是强化学习中令人期待的研究领域之一。
讨论
我们展示了让智能体完全在模拟的潜在空间世界里训练、完成任务的可能性。这有许多实际好处。游戏引擎通常需要大量计算,把状态渲染成图像,或计算与当前任务并不直接相关的物理过程。我们可能不想在实际环境中训练时浪费这些计算,而希望在模拟环境中按需反复训练。逐步学会模拟现实的智能体,可能有助于把策略迁回现实世界。我们的方法也可能补充此前的 sim2real 路线。
深度学习框架还能让世界模型模拟在分布式环境中得到 GPU 加速。把世界模型实现为完全可微的循环计算图,还意味着有机会在梦境中直接用反向传播微调策略,最大化目标函数。
把 V 实现为独立训练的 VAE 也有局限:它可能编码观察中与任务无关的部分。无监督学习本身不知道什么对当前任务有用。例如,VAE 重建了 Doom 侧墙上不重要的砖纹,却没能重建赛车环境中与任务相关的赛道区块。若与一个预测奖励的 M 一起训练,VAE 可能学会关注任务相关区域;代价是面对新任务时,可能无法不经重训就有效复用 VAE。
学习任务相关特征也与神经科学有联系。获得奖励时,初级感觉神经元会解除抑制,这提示它们通常学习的是任务相关特征,而不只是任意特征,至少成年阶段如此。
另一个问题是世界模型容量有限。现代存储设备可以保存迭代训练产生的大量历史数据,但基于 LSTM 的世界模型未必能把所有记录的信息装进连接权重。人脑能以某种分辨率保存数十年、甚至数百年的记忆,而反向传播训练的神经网络容量更有限,还会遭遇灾难性遗忘。未来若要让智能体探索更复杂的世界,我们会考察用更大容量的模型替换 VAE 与 MDN-RNN,或加入外部记忆模块。
与早期基于 RNN 的 C—M 系统一样,我们的方法逐个时间步模拟可能未来,还没有利用类似人类的分层规划或抽象推理来忽略无关的时空细节。更一般的 Learning to Think 并不受这种朴素方法限制:循环控制器 C 可以学会调用循环模型 M 的“子程序”,以任意可计算的方式复用它们解决问题,例如分层规划,或利用 M 类似程序的权重矩阵的一部分。
较新的 One Big Net 扩展,把 C 与 M 合并成一个网络,用类似 PowerPlay 的行为回放,将教师网络的行为压缩进学生网络,避免学习新预测和控制技能时遗忘旧技能。对这些更一般方法的实验,留待未来研究。作者欢迎读者通过项目页的 GitHub 讨论区提出问题与反馈。
致谢与引用
感谢 Blake Richards、Kory Mathewson、Kyle McDonald、Kai Arulkumaran、Ankur Handa、Denny Britz、Elwin Ha 和 Natasha Jaques 对本文的认真反馈,以及从各自专业领域提供的观点与见解。
文中的交互演示使用 p5.js 构建。模型能在浏览器中运行,得益于 Google 的 People+AI Research Initiative(PAIR)团队开发的浏览器硬件加速机器学习框架 deeplearn.js。特别感谢 Nikhil Thorat 和 Daniel Smilkov 的支持。
感谢 Chris Olah 及 Distill 编辑团队提供宝贵反馈、慷慨的编辑支持,并支持我们使用 distill.pub 技术。也感谢 Alex Graves、Douglas Eck、Mike Schuster、Rajat Monga、Vincent Vanhoucke、Jeff Dean 和 Google Brain 团队的反馈,以及对探索这一研究方向的鼓励。
文中错误由我们承担,不代表审阅者与同事的观点。如发现错误或有修改建议,欢迎参与项目讨论。实验使用 Google Cloud Platform 提供的 P100 GPU 和 64 核 CPU Ubuntu Linux 虚拟机,以 TensorFlow 和 OpenAI Gym 实现。
学术引用请使用:Ha, David and Schmidhuber, Jürgen. Recurrent World Models Facilitate Policy Evolution. Advances in Neural Information Processing Systems 31, pp. 2451–2463, 2018. Curran Associates, Inc. 项目页另提供 BibTeX,以及题为 World Models Experiments 的实验复现说明。
附录:变分自编码器
这里进一步介绍模型和训练方法。我们使用卷积变分自编码器(ConvVAE)作为 V。与普通自编码器相比,为潜在向量 zₜ 施加高斯先验,会限制每帧的信息压缩容量;但面对 M 生成的不现实的 zₜ ∈ ℝᴺᶻ,这种先验也让世界模型更稳健。
潜在向量 zₜ 从各维因子化的高斯分布 N(μₜ, σₜ²I) 采样。均值 μₜ ∈ ℝᴺᶻ,方差为对角形式 σₜ²I。环境提供高维像素图像时,我们先把每帧缩放为 64 × 64 像素,作为 V 的观察。每个像素的 RGB 通道各用一个 0 到 1 之间的浮点数表示。
ConvVAE 接收 64 × 64 × 3 的输入张量,经四个卷积层编码成低维的 μₜ 和 σₜ。赛车任务的 Nᶻ 为 32,Doom 任务为 64。潜在向量 zₜ 再经四个反卷积层解码、重建图像。原页的结构图标出了各层张量形状和层配置。
卷积变分自编码器的编码器与解码器结构。
每个卷积层和反卷积层的步幅为 2。原图以“激活类型、输出通道数 × 滤波器大小”标注各层。除输出层外,卷积和反卷积层都用 ReLU 激活;输出需限制在 0 到 1 之间。我们用随机策略收集的数据训练一个 epoch,以输入图像和重建图像之间的 L² 距离衡量重建损失,并同时优化 KL 损失。
附录:混合密度网络与循环神经网络
M 采用 LSTM 循环神经网络,输出层为混合密度网络。它以高斯混合分布建模下一时间步潜在向量 z 的概率分布。方法与 Graves 的 Generating Sequences with RNNs 中无条件手写生成部分,以及 SketchRNN 的仅解码器部分相似。区别在于,我们不建模 z 各元素之间的相关参数,而让 MDN-RNN 输出各维因子化高斯分布的对角协方差矩阵。
实现 M 时,我们把 LSTM 与 MDN 输出层结合。原页给出 MDN-RNN 结构图,并再次说明:用高斯混合分布建模 zₜ 的概率,不建模潜在向量元素间的相关参数。
技术附录中的 MDN-RNN 结构图。
手写和草图生成预测的是下一笔的概率密度,这里预测下一潜在向量的概率密度。每个时间步从该密度采样,便能生成环境。在 Doom 任务中,MDN-RNN 还预测智能体在当前帧死亡的概率;概率大于 50% 时,虚拟环境把 done 设为 True。由于每步死亡都是低概率事件,我们发现阈值方法比从伯努利分布采样更稳定。
MDN-RNN 用随机策略智能体收集的数据训练 20 个 epoch。赛车 LSTM 使用 256 个隐藏单元,Doom 使用 512 个。两个任务都使用五个高斯混合分量,不建模相关参数,因此 zₜ 从各维因子化的高斯混合中采样。
用记录数据进行教师强制训练时,我们预先存储每帧的 μₜ 和 σₜ。每次构造训练批次,都重新采样输入 zₜ ∼ N(μₜ, σₜ²I),避免 MDN-RNN 对某一次固定采样的 zₜ 过拟合。
附录:控制器
两个环境都使用 tanh 非线性,将动作限定到相应范围。赛车转向范围为 −1.0 到 1.0,加速和制动各为 0.0 到 1.0。Doom 把离散动作转换到 −1.0 到 1.0 的连续空间,再将该范围均分成三段,分别表示左移、不动和右移。
C 的输入特征由 zₜ 和 MDN-RNN 的隐藏状态组成。赛车中,隐藏状态是 LSTM 的输出向量 hₜ ∈ ℝᴺʰ;Doom 中,同时使用细胞状态向量 cₜ ∈ ℝᴺʰ 和输出向量 hₜ。
附录:进化策略与赛车评估
我们用 CMA-ES 演化 C 的权重。按照 Evolving Stable Strategies 中的方法,种群规模为 64,每个智能体在不同初始随机种子下执行任务 16 次。适应度取这 16 条随机轨迹的平均累计奖励。原页训练曲线画出每一代中最佳、最差和平均适应度。
环境要求智能体在 100 条随机轨迹中的平均分数超过 900。我们每隔 25 代取出表现最好的智能体,在 1024 条随机轨迹中评估,把平均分数画为红线。1800 代后,一个智能体在 1024 条随机轨迹中取得 900.46 的平均分数。
CarRacing-v0 训练曲线。红线为每隔 25 代进行的 1024 条随机轨迹评估;1800 代后的平均分数为 900.46。
采用 1024 条而非 100 条轨迹,是因为 64 核机器的每个进程已配置为运行 16 次;每隔 25 代,正好用一整代的计算量完成 1024 次评估。同一智能体在 100 条轨迹中的平均分数为 906 ± 21,原页还给出了累计奖励直方图。
完整世界模型智能体在 100 条随机轨迹中的累计奖励分布;作者报告的平均分数为 906 ± 21。
我们另测试了只有 VAE 向量 zₜ、无法访问 RNN 隐藏状态的智能体。第一种直接把 zₜ 映射为 aₜ;第二种在两者之间增加一个含 40 个 tanh 单元的隐藏层,让 C 的参数量增至 1443,便于与原设置比较。两者的平均分数分别为 632 ± 251 和 788 ± 141。
仅使用潜在向量 zₜ 的智能体:作者报告的平均分数为 632 ± 251。
仅使用 zₜ,并增加一个含 40 个 tanh 单元的隐藏层:作者报告的平均分数为 788 ± 141。
附录:DoomRNN
我们在生成的 Doom 环境中进行了相似实验,把这个环境称为 DoomRNN。我们没有在实际 VizDoom 环境中训练智能体,而仅用 VizDoom 通过随机策略收集训练数据。DoomRNN 只在潜在空间运行,每步无须渲染图像,也无须运行真正的 Doom 游戏引擎,因此计算效率更高。
虚拟 DoomRNN 环境使用略高的温度 τ = 1.15,让智能体在更有挑战的环境里学习。最佳智能体在 1024 条随机轨迹中的平均分数为 959,对应原图红线的最高点。
DoomRNN 训练曲线。智能体在生成环境中训练,红线最高点对应 1024 条随机轨迹中的平均分数 959。
同一智能体部署到实际 DoomTakeCover-v0 环境后,在连续 100 条随机轨迹中取得 1092 ± 556 的平均分数。原页直方图展示了这 100 次试验的存活步数。
迁移到实际 DoomTakeCover-v0 环境后,连续 100 次试验的存活步数分布;作者报告的平均分数为 1092 ± 556。
译者术语表
以下术语表由译者补充,用于统一本译稿的用词,不属于原报告正文。正文中的 actual environment 译为“实际环境”;在这里,它指 CarRacing 或 VizDoom 游戏环境,不表示实体机器人或物理世界实验。
| 原文 | 译法与含义 |
|---|---|
| world model | 世界模型 |
| latent vector / latent space | 潜在向量/潜在空间 |
| rollout | 一条环境轨迹;按具体上下文也表述为一次试验 |
| credit assignment | 信用分配:判断哪些行动造成了最终奖励 |
| model-free / model-based RL | 无模型/基于模型的强化学习 |
| controller | 控制器 |
| mixture density network | 混合密度网络 |
| temperature | 温度参数,用于调节采样的不确定性 |
| teacher forcing | 教师强制:训练时使用记录序列中的输入 |
| catastrophic forgetting | 灾难性遗忘 |
原文与来源
图片:David Ha、Jürgen Schmidhuber · World Models(2018)· CC BY 4.0 · 原图未改动