Dota 2 with Large Scale Deep Reinforcement Learning翻译

news/2024/11/9 10:11:12/

摘要

2019年4月13日,OpenAI Five成为第一个在电子竞技游戏中击败世界冠军的AI系统。Dota2游戏为AI系统提供了新的挑战,例如长时间相关的视野,不完全的信息和复杂的连续状态动作空间,所有这些挑战将会要求具有更强能力的AI系统。OpenAI Five利用现有的强化学习技术,扩大到从每2秒大约200万帧的批量数据中学习。我们开发了一个用于持续训练的分布式系统和工具,使我们能够连续训练OpenAI五个月。通过击败DOTA 2世界冠军(OG),OpenAI Five表现出self-play强化学习方法可以在一项艰巨的任务上实现出色的表现。

1.介绍

人工智能的长期目标是解决先进的现实世界挑战问题。游戏作为解决现实问题的基石,人们已经沿着这条路进行了几十年的探索,从Backgammon(1992)到Chess(1997),再到Atari(2013)。2016年,AlphaGo使用深度强化学习和蒙特卡罗树搜索击败了围棋世界冠军。近年来,强化学习(RL)模型已经解决了诸如机器人操纵,文本摘要,以及星际真霸和我的世界等电子游戏任务。
  相对于AI再如国际象棋或围棋中的成功,复杂的电子游戏更能捕捉现实世界的复杂和连续的性质。DOTA 2是2013年Valve公司开发的多人实时策略游戏,2013年和2019年间在线玩家数量平均在500,000至1,000,000之间。这场比赛由职业玩家积极竞技;2019年国际锦标赛的奖金池超过3500万美元(这是世界上任何电子竞技游戏中最大的奖金)。由于长时间相关的视野,部分可观测性和高维的状态动作空间,该游戏对强化学习具有重大挑战。DOTA 2的规则也很复杂,这场比赛已经开发了十多年,游戏逻辑由数十万行代码实现。
  解决这种复杂环境的关键需要利用数千个GPU训练多个月,将现有的强化学习系统扩展到更强的水平。为了达到这一水平,我们建立了一个分布式训练系统,并训练一个称为OpenAI Five的Dota2 agent。2019年4月,Openai Five击败了Dota 2世界冠军(OG),这是第一次AI系统击败了电子竞技的世界冠军。我们还将OpenAI Five开源到Dota 2社区以供玩家进行比赛,OpenAI Five在超过7000场的比赛中获得99.4%的胜率。
  在第2节中,我们更详细地描述了DOTA 2,以及它所呈现的挑战。在第3节中,我们讨论了训练系统的技术组成部分,然后将大部分细节留到其引用的附录中。在第4节中,我们总结了我们的长期实验和击败世界冠军的过程。我们还描述了关于强化学习在电子竞技游戏上的经验,这可能会推广到其他复杂的任务。

2.Dota 2

Dota2是在一个方形地图上进行比赛,其中两支队伍在地图上以相对的位置进行对抗。每个团队基地都包含一个叫做ancient的建筑,当其中一个ancient被敌对团队摧毁时,游戏将结束。团队有五名成员,每个成员都控制着一个具有独特能力的英雄单位。在比赛期间,两支队伍都有一个恒定的小兵单位流,且不受玩家控制,这些单位会攻击任何对手单位或建筑物。玩家收集来自小兵的金币等资源,然后使用这些资源购买物品和提高能力来增加英雄的力量。
  为了玩Dota 2,AI系统必须解决下列各种挑战:

  • Long time horizons。Dota 2游戏每秒包含30帧图像且运行大约45分钟。Openai Five每四帧选择一个动作,因此每个episode产生约20,000个步骤。相比之下,国际象棋通常进行80次移动,围棋进行150次移动。
  • Partially-observed state。游戏中的每支队伍只能看到他们的单位和建筑物附近的游戏状态,而地图的其余部分是隐藏的。高端玩家需要基于不完整的数据进行推断,并建模对手的行为。
  • High-dimensional action and observation spaces。Dota 2在包含十个英雄,数十个建筑物,数十个非玩家单位等长尾游戏特征(入符文,树木和守卫)的大地图上比赛。OpenAI Five每个步骤需要观察大约16,000个值(大多数浮点数和数百种分类概率)。我们离散化了动作空间,因此在平均每个时刻,我们的模型在8,000到80,000动作中选择(取决于英雄)。与之相对,国际象棋每次需要观察大约一千个值(主要是6个分类概率值),围棋达到六千个值(所有二进制)。国际象棋的约有35个有效动作,围棋达到250个左右。

我们的系统在以下两个限制上玩Dota2:

  • 具有17英雄的子集 - 在正常的游戏玩家中,可从117英雄池中任意选择一个,而我们仅支持其中17个。
  • 不支持玩家同时控制多个单位(幻象符文, 支配头盔, 幻影斧, 死灵之书)。我们删除了这些,以避免增加agent控制多个单位的技术复杂性。

3.训练系统

3.1 Playing Dota using AI

在这里插入图片描述
  人类玩家使用键盘,鼠标和计算机显示器与Dota 2游戏进行交互。他们能够实时做出决定,然后所采取的行动能导致长期的结果。我们采用下面的框架以将在superhuman级别玩复杂游戏的模糊问题转化为适合优化的详细目标。
  虽然Dota2引擎以每秒30帧速率运行,但OpenAI Five只在每秒4帧上行动,我们将每4帧称为一个timestep。再每个时刻,OpenAI Five接收从游戏引擎编码的人类玩家能看到的所有信息,例如单位的生命值,位置等(对于观测信息的深入讨论可参见附录E)。OpenAI Five然后向游戏引擎返回离散的动作,这个动作包括移动,攻击等。
  另外,某些游戏机制由人工编写的脚本逻辑控制,而不是依靠策略:英雄购买的物品和升级的技能,控制信使单位,以及英雄留在背包中的物品。虽然我们认为,即使没有脚本控制这些行动,agent仍然能够表现的很好,但是脚本控制能够达到superhuman的表现。我们的动作空间和脚本操作的完整细节在附录F中进行介绍。
  在训练期间,环境的一些属性被随机化,包括游戏中的英雄以及英雄购买的物品,这是因为必须使用足够多样化的游戏方式训练agent,以确保在面对人类对手时选择策略的广泛性和鲁棒性。有关领域随机化的详细信息,请参阅第O.2小节。
  我们将策略 ( π ) (π) (π)定义为基于观测历史来输出动作概率分布的函数,我们将其作为循环神经网络参数化,具有大约1.59亿的参数 ( θ ) (θ) (θ)。神经网络主要包括单层的4096单元的LSTM(参见图1)。我们通过不断地将当前观测信息作为输入,并在每个时刻输出分布的采样来玩游戏
  另外,我们使用同一个策略函数(具有相同参数 θ θ θ)来控制团队中的每个英雄(每个英雄具有独立的embedding)。由于可观测信息和战争迷雾可以在Dota 2同一团队中共享,所以观察结果对于每个英雄都近乎相同。
  我们不是使用屏幕上的像素,而是使用一组数据数组以近似于人类玩家可用的信息(关于观测空间的完整细节可参见附录E)。这种近似是不完全的,因为人类每次只能访问少量信息。反过来说,虽然我们小心确保了将人类可观测信息应用到模型,但是模型每个时刻都会同时看到所有可用的信息,而人类需要主动点击以查看地图的各个部分和单位状态。OpenAI Five使用这个语义观测空间有两个原因:首先,因为我们的目标是研究战略规划和高级决策,而不是专注于视觉处理。其次,我们在所有游戏训练中以像素呈现每一帧是不可行的,这需要耗费非常多的计算资源。虽然存在这些差异,但我们不认为agent在与人类玩家进行对抗测试时会引入大量偏差。为了允许五个网络选择不同的动作,LSTM从观测处理中接收额外的输入,以指示五个英雄中的哪一个(如附录中的图17所示)。
  由于问题的扩展性和每个实验的规模和费用,彻底研究策略和训练系统的所有细节并不实用。有许多细节,即使是一些大型的细节,都是为了历史原因或基于初步调查而没有进行消融对比。

3.2 Optimizing the Policy

在这里插入图片描述
  我们的目标是寻找一种策略,以最大化在游戏中战胜专业玩家的概率。在实践中,我们最大化一种奖赏函数,包括角色死亡,资源收集等额外信号。在计算奖赏函数时,我们还应用了几种技术来利用多人玩家对战中的零和游戏问题,例如,我们通过减去敌方队伍获得的奖赏以对称化奖励。有关奖赏函数的详细信息我们将在附录G中讨论。在项目开始之前,我们根据团队成员对游戏的熟悉程度构建了奖赏函数。虽然我们会在游戏版本改变时进行轻微的调整,但我们发现我们的初始选择奖励的方式相当不错。这些额外信号的存在对于成功训练agent很重要(如附录G中所述)。
  该策略是使用近端策略优化(PPO)进行训练的,其是actor-critic方法的一种优化变体。该优化算法使用广义优势函数估计(GAE)来稳定和加速训练。我们首先用一个共享的LSTM块,然后将该LSTM块连接到多个完全独立的全连接层,以生成策略和价值函数的输出。
  训练系统如图2中所示。我们使用self-play收集的玩Dota 2的经验来训练我们的策略,类似于[18]。优化器GPU的中央池接收游戏数据并在称为经验缓冲区的局部缓冲区中异步存储。每个优化器GPU使用随机从经验缓冲区中采样的mini-batch数据以计算梯度。在同步参数之前,需要使用NCCL allreuce在池中平均梯度。以这种方式,实际的batch size是每个GPU上的batch size(120个样本,每个包含16个步骤)的总和,总批量大小为f 2,949,120个步骤。
  我们使用Adam优化器优化按16个步骤截断的训练数据,并使用额外的设置在 ± 5 v ±5\sqrt{v} ±5v 之间的参数裁剪梯度,其中 v v v是(未删除的)梯度的第二次的运行估计。每隔32个梯度步骤,优化器将新版的参数发布到名为controller的中央Redis存储。controller还存储有关系统状态的所有元数据,用于停止和重新启动训练。
  Rollout worker运行self-play游戏。他们在大约以实际时间的一半运行这些游戏,因为我们发现我们可以在这种速度下并行地运行多次游戏,以增加总吞吐量。我们在附录K中描述了与dota 2引擎的集成方法。他们在80%的游戏中使用最新政策,并在20%的游戏中以较旧策略运行(有关对手采样的详细信息,请参阅附录N)。Rollout worker是用来运行游戏引擎的,而不是选择策略的,它们与单独的GPU池进行通信,该GPU池以大约60的batch向Rollout worker传递策略。并且,该GPU池频繁地调用控制器以收集最新参数。
  Rollout worker从正在进行的游戏中异步发送数据,而不是等待整个游戏完成。有关数据是如何汇总的请参照附录C中的图8。有关保持rollout-优化紧密循环的好处,请参见图5B。因为我们使用带有 λ = 0.95 λ=0.95 λ=0.95的GAE,所以需要在多个时间步骤 1 / λ = 20 1/λ=20 1/λ=20上平滑GAE奖赏,使用256个时间步长能导致相对较小的损失。
  整个系统在我们的自定义的称为Rapid的分布式训练平台上运行。我们使用来自blocksparse库的OPS进行快速GPU训练。对于训练中使用的超参数的完整列表,请参阅附录C。

3.3 Continual Transfer via Surgery

随着项目的进展,我们的代码和环境会因为以下三种不同的原因改变:

  1. 在我们实验和学习时,我们对训练过程(奖励结构,观测空间等)或甚至到神经网络的架构都会实施更改。
  2. 随着时间的推移,我们扩展了agent的动作和状态空间以支持更多游戏机制。这些并没有逐步引入,以努力建立一个完美的课程学习。
  3. Valve公司会不时发布新的DOTA 2版本,包括游戏机制以及英雄,物品,地图等属性的变更,为了与人类玩家对抗,我们的agent必须能在最新的游戏版本上进行对抗。

这些变化可能回修改模型每一层的形状和大小,观测值的语义含义等。
  当发生这些变化时,旧模型的大多数方面都可能与新环境相关。但是参数向量的拣选会具有挑战性并限制重现。由于这些原因,从头训练是应对这种变化的一种安全方法。
  然而,训练OpenAI Five会耗时多个月,这代价会很大。因此,这激励我们开发需要应对跨领域和特征变化的模型的方法。游戏每次发生变化(大约两周一次)都需重新训练模型,这在时间和金钱上代价都是很大的,例如,在我们与世界冠军(OG)打比赛的8天前,Dota 2版本改为了7.21d,如果我们没有基于先前的agent继续训练,这将是不可能的。
  我们的方法,被称为“surgery”,可以被视为一个工具的集合,以便对旧模型 π θ π_θ πθ执行离线操作,以获得与新环境兼容的新模型 π ^ θ ^ \hat π_{\hat θ} π^θ^即使参数向量 θ ^ \hat θ θ^ θ θ θ具有不同的尺寸和语义,他们仍然能执行相同的水平。然后,我们使用 π ^ θ ^ \hat π_{\hat θ} π^θ^开始在新环境中进行训练。在环境,观察和动作空间没有改变的最简单情况下,我们的工具实现的新策略具有与老版本相同的函数(基于观测状态得到的动作概率):
∀ o π ^ θ ^ ( o ) = π θ ( o ) (1) \forall o~\hat \pi_{\hat \theta}(o)=\pi_{\theta}(o)\tag{1} o π^θ^(o)=πθ(o)(1)
这种情况是Net2Net式函数保留转换的特殊情况。我们同样开发了在可能的(添加观察,扩展层和其他情况)的情况下实现公式1的工具,以及对环境,观察空间或动作空间修改的近似。有关手surgery的进一步讨论,请参阅附录B。


http://www.ppmy.cn/news/570473.html

相关文章

java键盘监听wasd控制_dota2rpg自定义按键绑定及WASD移动的实现

本文的目的是在DOTA2自定义游戏中实现一个WASD控制的8方向移动,如果你想实现的是4方向的,稍微修改一点点代码也可以做到。 通过本文,你也可以了解到DOTA2自定义按键的流程。 本文的所有代码你都可以在我开源的Endless Dungeon项目中找到 一、…

用C#钩子写一个改键外挂

我的微信群——软件开发测试工程师交流群,欢迎扫码: 改键是一种习惯,比如在玩儿lol或者dota的时候。理论上玩儿什么游戏都可以改键。 做一个窗体(点击Install——应用改键,点击Uninstall——撤销应用)&…

笑傲江湖客户端服务器地址修改,《笑傲江湖》改键调整操作手把手教你玩笑傲...

《笑傲江湖》采用全新引擎AngelicaIII打造,秉承原著武侠精髓,首推新派动作武侠网游概念——融入动作及格斗游戏要素,强调真实的打击感与流畅的动作连贯度,并运用方向判定、位移闪避、移动战斗、攻防一体等多重技术手段&#xff0c…

dota2html颜色代码,技术向教程 如何在DotA2中使用彩色字体

技术向教程 如何在DotA2中使用彩色字体 编译:M82A1炸菜 如何使用16进制编辑器对DotA2文字就行颜色编辑 需要:十六进制编辑器、记事本、控制台 1.打开steam平台 2.在游戏库中选择DotA2,右击,选择属性 3.设置启动项,填入“-console”,确定 4.打开DotA2游戏,并且使用“`”键…

基于低级键盘钩子的dota改键(全局+免DLL注入)MFC实现(源码+总结)

上一篇文章已经写了基于 普通键盘钩子(单线程DLL)来实现dota改键。http://blog.csdn.net/a576323437/article/details/8037138 这一次,基于 低级键盘钩子 (全局 免DLL注入)来实现。先看下总结: 低级键盘钩…

dota2游戏c语言,新手科普:Dota2操作按键设置和游戏设置详解

DOTA2的设置里有四个大项。控制,游戏,视频,音频。 后面两个自己根据自己配置水平设置就是。我主要讲控制和游戏。 控制: 页面1:单位行为 攻击,移动,停止,保持这种命令就不用说了。这…

基于键盘钩子的dota改键(单线程+DLL)MFC实现(源码+总结)

呼。。终于可以摒弃网上带广告的改键工具了。。 历经三天,写出自己的dota改键软件最简单版了。 还学习了两个新知识,钩子和动态链接库。下面以一个新手的角度,总结下这三天遇到的大小问题。 一般钩子在什么时刻被调用? 操作系统把…

War3Tool dota改键v3.3版

wartool魔兽全屏改键功能:1.支持11平台自定义改建,自动进局域网(同类软件暂时没发现这个功能)2.技能改键,可以有效的切换适合你的技能键3.war3路径扫描,运行本程序一键就能打开war3 (翻遍用户) 喜欢的朋友可…