使用 ML-Agents 将特工培训速度提高 7 倍

在ML-Agents 的 v0.9 和 v0.10 版中,我们引入了一系列旨在缩短训练时间的功能,即异步环境、生成式对抗模仿学习(GAIL)和软演员批判(Soft Actor-Critic)。之前,我们与合作伙伴JamCity 一起展示了在 ML-Agents v0.8 中引入的并行 Unity 实例功能,该功能使我们能够为他们的泡泡射击游戏Snoopy Pop 训练代理,其速度是单个实例的 7.5 倍。在这篇博文中,我们将解释 v0.9 和 v0.10 如何在这些成果的基础上更上一层楼,并说明我们可以将 Snoopy Pop 的训练时间再缩短7 倍,从而在合理的时间内训练出性能更强的代理。
Unity ML-Agents 工具包的目的是让游戏开发人员能够使用深度强化学习(DRL)为可玩和不可玩的角色创建复杂而有趣的行为。DRL 是一款功能强大的通用工具,可用于学习从基于物理的角色到解谜游戏的各种行为。然而,DRL 需要大量的游戏数据来学习有效的行为--这对于通常受限于加速程度的真实游戏来说是个问题。
几个月前,随着ML-Agents v0.8 版本的发布,我们推出了让 ML-Agents 在一台机器上运行多个游戏 Unity 实例的功能,从而大幅提高了我们在训练过程中可以收集的训练样本(即代理的观察、行动和奖励)的吞吐量。我们与JamCity合作,培训一名代理玩Snoopy Pop拼图游戏。利用 v0.8 版的并行环境功能,我们在难度较高的《史努比流行音乐》关卡中实现了高达 7.5 倍的训练速度。
但是,并行环境只能到此为止--在一台机器上并发运行 Unity 实例的数量是有限的。为了在资源有限的机器上缩短训练时间,我们必须另辟蹊径。一般来说,有两种方法可以缩短训练时间:增加每秒收集的样本数量(样本吞吐量),或减少学习良好行为所需的样本数量(样本效率)。因此,在 v0.9 版中,我们改进了并行训练器,以异步方式收集样本,从而提高样本吞吐量。
此外,我们还增加了生成式对抗模仿学习(Generative Adversarial Imitation Learning,GAIL),它可以利用人类示范来指导学习过程,从而提高样本效率。最后,在 v0.10 中,我们引入了软行为批判(Soft Actor-Critic,SAC)训练器,它的采样效率大大高于 v0.8 中的近端策略优化训练器。这些变化使单机训练时间又缩短了 7 倍。对于《史努比流行音乐》来说,这意味着我们不仅能够创建解决关卡的代理,还能创建与人类玩家用相同步骤解决关卡的代理。随着样本吞吐量和效率的提高,我们能够在一台机器上训练多个级别的 Snoopy Pop,而以前需要在机器集群上进行多天的训练。这篇博文将详细介绍 ML-Agents 的每个后续版本所做的改进,以及这些改进对 Snoopy Pop 中的结果有何影响。
我们在ML-Agents v0.8博客文章中首次介绍了我们将ML-Agents与 Snoopy Pop 集成的情况。下图概括了代理所能看到的、所能做的以及所获得的奖励。请注意,与之前的史努比流行音乐实验相比,我们降低了正奖励的幅度,增加了对使用气泡的惩罚,迫使代理将注意力从简单地完成关卡转移到用尽可能少的步骤清除气泡上,就像人类玩家所做的那样。这比勉强赢下关卡要难得多,而且要花费更长的时间来学习好的策略。

在 ML-Agents v0.8 中,我们引入了同时训练多个 Unity 实例的功能。虽然我们对 Snoopy Pop 单个实例的加速能力有限,但多核处理器允许我们在一台机器上运行多个实例。由于每次游戏都是独立的,因此我们可以轻松地并行收集训练数据。
每个模拟环境都将数据输入一个共同的训练缓冲区,然后训练器利用这些数据更新其策略,以便更好地进行游戏。这种新模式使我们能够收集到更多的数据,而无需改变时间尺度或任何其他可能对游戏机制产生负面影响的游戏参数。
在 ML-Agents v0.9 中,我们分别对样本效率和样本吞吐量进行了两项改进。
异步环境
在 v0.8 版本的并行环境实现中,每个 Unity 实例都会与其他实例同步迈出一步,训练器会同时接收所有观察结果并发送所有操作。对于某些环境,例如 ML-Agents 工具包提供的环境,代理以大致相同的固定频率做出决策,因此按部就班地执行决策不成问题。不过,在真实游戏中,某些操作可能比其他操作耗时更长。例如,在《史努比爆爆爆》中,清除大量泡泡的动画时间要比不清除泡泡的动画时间长,赢得游戏并重置关卡的时间要比打一枪的时间长。这意味着,即使其中一个并行环境采取了其中一个时间较长的行动,其他并行环境也必须等待。
在 ML-Agents v0.9 中,我们启用了异步并行环境。只要至少有一个环境完成了它的操作,培训师就可以发送一个新的操作并进行下一步。对于步进时间不同的环境,这可以显著提高样品吞吐量。

生成式对抗模仿学习(GAIL)
在典型的 DRL 训练过程中,代理以随机行为进行初始化,在环境中执行随机操作,并可能遇到一些奖励。然后,它就会强化那些能产生更高回报的行为,随着时间的推移,这种行为就会趋向于在环境中获得最大回报的行为,随机性就会降低。
然而,并非所有的最佳行为都能通过随机行为轻易找到。例如,奖励可能是稀疏的,即代理必须采取许多正确的行动才能获得奖励。或者,环境中可能有许多局部最优点,即代理可能去的地方看似能让它获得最大回报,但实际上是一条不正确的路径。这两个问题都有可能通过暴力随机搜索来解决,但需要很多很多样本才能做到。它们为训练 Snoopy Pop 提供了数百万个样本。在某些情况下,它可能永远找不到最佳行为。
但是,如果我们能做得更好一些,通过向代理提供游戏中的人类示范来引导它做出好的行为呢?这一研究领域被称为 "模仿学习"(Imitation Learning),在 v0.3 版中加入了 ML-Agents。在 ML-Agents(智能代理)中,模仿学习的缺点之一是它只能独立于强化学习使用,纯粹根据示范来训练代理,而没有来自环境的奖励。
在 v0.9 版中,我们根据 Jonathan Ho 及其同事的研究引入了 GAIL,以解决这两个问题。您可以在他们的论文中阅读更多关于该算法的信息。
要将模仿学习与 ML-Agents 结合使用,首先要让人类玩家(或机器人)多次玩游戏,并将观察结果和操作保存到演示文件中。在训练过程中,代理可以像往常一样在环境中行动,并收集自己的观察结果。在高层次上,GAIL 的工作原理是训练第二种学习算法(用神经网络实现的判别器),以对特定的观察结果(和行动,如果需要的话)进行分类,确定是来自代理,还是来自演示。然后,对于代理收集到的每个观察结果,都会根据其观察结果和行动与演示结果的接近程度给予奖励。代理会学习如何最大限度地提高回报。判别器会根据代理的新观察结果进行更新,从而提高判别能力。在这种迭代方式中,判别器变得越来越难对付--但代理人却越来越善于 "欺骗 "判别器和模仿示范。
由于 GAIL 只是给代理一个奖励,而不改变学习过程,因此我们可以将 GAIL 与基于奖励的 DRL 结合起来,只需将 GAIL 的奖励与游戏本身的奖励加权求和即可。如果我们确保游戏奖励的幅度大于 GAIL 奖励的幅度,那么代理就会受到激励,跟随人类玩家的游戏路径,直到找到大量的环境奖励。

自首次发布以来,ML-Agents 工具包一直使用近端策略优化(PPO)--一种稳定、灵活的 DRL 算法。在 v0.10 版中,为了加快您在真实游戏中的训练速度,我们在Tuomas Haarnoja 及其同事的工作基础上发布了第二种 DRL 算法 SAC。SAC 最初是为在真实机器人上学习而设计的,其关键特性之一是样本效率。对于游戏来说,这意味着我们不需要运行那么长时间就能学到好的政策。
DRL 算法分为政策内和政策外两类。像 PPO 这样的策略算法会收集一定数量的样本,根据这些样本学习如何改进策略,然后相应地更新策略。通过使用当前政策收集样本,它可以学会如何自我改进,提高采取有回报行动的概率,减少无回报行动。大多数现代策略算法(如 PPO)也会学习某种形式的评估函数,如价值估计(即代理处于特定状态时,到事件结束时的预期奖励折现总和)或 Q 函数(即在特定状态下采取特定行动时的预期奖励折现总和)。在 "按政策 "算法中,这些评估器会估算出假设采取当前政策的一系列奖励。无需赘述,这种估算有助于算法更稳定地进行训练。
非政策算法(如 SAC)的工作原理略有不同。假设环境具有固定的动态和奖励函数,那么在给定状态下采取特定行动与获得某种累积奖励之间存在某种最佳关系(即最佳政策能够获得什么?)如果我们知道了这种关系,学习有效的政策就会变得非常容易!非政策算法不是学习当前政策有多好,而是学习所有政策的最优评估函数。这是个比 "按政策 "情况下更难的学习问题--实际函数可能非常复杂。但是,由于你学习的是全局函数,你可以使用从一开始就收集到的所有样本来帮助学习评估器,这使得非策略算法比策略算法更节省样本。这种对旧样本的重复使用被称为 "经验重放",所有样本都存储在一个大型的 "经验重放 "缓冲区中,该缓冲区可存储价值 100 个(甚至数千个)游戏的数据。
在我们的工具包中,我们对最初的 SAC 算法进行了调整,使其支持您在 ML-Agents 中习惯使用的所有功能--循环神经网络(记忆)、分支离散动作、好奇心、GAIL 等。

在之前的实验中,我们已经证明,对于《史努比流行音乐》中的一个复杂关卡(第 25 关),我们发现在一台机器上从单一环境(即 ML-Agents v0.7)到 16 个并行环境的训练时间减少了 7.5 倍。这意味着使用一台机器就能在 9 小时内找到第 25 级的基本解法。利用这种能力,我们训练我们的代理进一步掌握第 25 级--即解决人类性能的第 25 级问题。请注意,这比简单地解决关卡要花费更多的时间--平均大约需要 33 个小时。
在这里,如果一个代理在 1000 步内达到了人类的平均水平(以人类使用的气泡数或低于人类使用的气泡数解决了该关卡),我们就宣布它 "掌握 "了该关卡。就第 25 级而言,这相当于 25.14 步/气泡,这是 21 个同级人类游戏的平均值。
然后,我们逐步测试了 v0.9 和 v0.10 中的每项改进,并测量了在关卡中超越人类性能所需的时间!显示的每个值都是三次运行的平均值,因为各次运行的训练时间可能不同。有时,代理商运气好,很快就找到了好的解决方案。所有运行都是在 16 核机器上进行的,训练由 K80 GPU 加速。训练期间并行运行 16 个实例。
在 GAIL 实验中,我们使用了 21 次人类播放《史努比流行音乐》的演示来训练结果。请注意,第 25 关中的泡泡颜色是随机生成的,因此这 21 次闯关绝不可能涵盖本关所有可能的棋盘配置。如果是这样,代理就会通过记忆和复制玩家的行为来快速学习。然后,我们将 GAIL 奖励信号与史努比波普游戏提供的奖励信号混合在一起,这样 GAIL 就能在早期引导代理学习,但允许它在后期找到自己的解决方案。
并行环境(v0.8) 异步环境(v0.9) GAIL 与 PPO(v0.9) SAC(v0.10) GAIL 与 SAC(v0.10) 达到人类性能的时间
(小时)
34:03 31:08 23:18 5:58 4:44 样本吞吐量(样本/秒) 10.83 14.81 14.51 15.04 15.28
下面让我们用图表的形式来直观地显示速度的提升。我们看到,通过使用异步环境来提高样本吞吐量,可以在不改变算法的情况下减少训练时间。然而,培训时间的最大缩减来自于培训样本效率的提高。请注意,在 ML-Agents v0.9 和 v0.10 之间,样本吞吐量没有发生实质性变化。增加演示并使用 GAIL 指导训练意味着代理在达到相同训练行为时所使用的样本减少了 26%,我们也看到训练时间也相应减少了。改用非政策算法 Soft Actor-Critic,意味着代理解决这一关卡所需的样本量比 vanilla PPO 少了81% 。
这些改进并不是新奖励功能和达到人类性能目标所独有的。如果我们让 SAC+GAIL 简单地解决这个关卡,就像我们在之前的实验中做的那样,我们可以在 1 小时 11 分钟内完成,而 SAC+GAIL 只用了 1 小时 15 分钟。8 小时 24 分钟。

如果您想在机器学习和游戏这一令人兴奋的交叉领域工作,我们正在招聘多个职位,请申请!
如果您使用了本版本中提供的任何功能,我们很乐意听取您的意见。如对 Unity ML-Agents 工具包有任何反馈意见,请填写以下调查表,并随时直接给我们发送电子邮件。如果您遇到任何问题或有任何疑问,请在ML-Agents GitHub 问题页面与我们联系。