OpenAI公开Dota 2论文:胜率99.4%,「手术」工具连续迁移训练

admin 2025-02-02 39人围观 ,发现54个评论

选自OpenAI

作者:Berner等机器之心编译
参与:熊猫



该游戏也有很多全职的职业玩家;其2019年国际冠军赛的奖金池已经超过了3500万美元(这是全世界电子竞技游戏中最多的)。该游戏由于一局时间较长、部分可观测性以及高维度的观察和动作空间,这些给强化学习带来了严峻的挑战。另外,Dota2的规则也很复杂——该游戏已经历经超过十年的活跃开发,其游戏逻辑使用了数十万行代码来实现。

要为这样复杂的环境创造合适的智能体,关键是要将现有的强化学习系统扩展至前所未有的规模,这需要在数以千计的GPU上执行几个月的训练。为了实现这一目标,OpenAI构建了一个分布式的训练系统,训练出了名为OpenAIFive的Dota2游戏智能体。2019年4月,OpenAIFive击败了一支Dota2世界冠军战队(OG战队),这是首个击败电子竞技游戏世界冠军的AI系统。OpenAI也将该系统开放给了Dota2社区进行对战试玩;在超过7000局游戏中,OpenAIFive的胜率为99.4%。
论文地址:

OpenAI表示,训练过程还面临着另外一个难题:游戏环境和代码一直在不断升级和变化。为了避免在每次变化之后再从头开始训练,他们开发出了一套工具,能以最低的性能损失继续完成训练——OpenAI将其称之为「手术(surgery)」。在超过10个月的训练过程中,OpenAI大约每两周执行一次手术。这套工具让OpenAI可以经常改进他们的智能体,这只需要很短的时间——比典型的从头开始训练方法要短得多。随着AI系统解决的问题越来越大,越来越难,进一步研究不断变化的环境和迭代开发就显得至关重要了。

Dota2难在哪儿?

Dota2游戏对战发生在一个方形的地图中,两支队伍各自保卫位于对角线上的己方基地。每支队伍的基地都有一个远古遗迹(ancient);

当某方的远古遗迹被敌方摧毁时,游戏便宣告结束。每支队伍由5位玩家组成,每位玩家控制一个英雄单位,每个英雄都有自己独特的技能;

游戏期间,每方都有持续派出的「小兵(creep)」单位,但这些小兵不由玩家控制,它们会按路径向敌方基地前进,并会攻击任何出现在其攻击范围内的敌方单位和建筑;

玩家可从小兵收集金币和经验等资源,然后可通过购买物品和升级来提升英雄的战斗力。

为了玩Dota2,AI系统必须解决多种难题:

长时间对局。Dota2游戏一般会以30帧每秒的速度持续大约45分钟。OpenAIFive每4帧选择一个动作,则每局比赛需要执行大约20000步。比较一下,国际象棋一般持续80步,围棋是150步。

部分可观察的状态。每支队伍都只能看见己方单位和建筑附近的部分游戏状态;地图中的其余部分都是隐藏起来的。如果要玩得好,需要基于不完整的数据进行推断以及建模敌方的行为。

高维度的动作和观察空间。Dota2有一个很大的地图,地图中有10个英雄、几十个建筑、几十个非玩家单位,另外还有神符、树和侦查守卫(眼)等长尾的游戏特征。

OpenAIFive每个时间步骤会观察大约16000个值(大部分是浮点数和有数百种可能性的类别值)。同时,OpenAI对动作空间进行了离散化处理;其模型在每个时间步骤从8000到80000(具体数量取决于英雄)个动作选择一个。相比之下,国际象棋每次观察需要大约1000个值(这些值大都是有6个可能性的类别值),围棋大约需要6000个值(全都是二元值)。围棋的分支因子(branchingfactor)大约是35个可行动作,围棋的大约是250。

另外需要说明,OpenAIFive在玩常规模式的游戏时还有两个限制条件:

英雄池只有17个英雄——在常规游戏时,玩家是在比赛前从117个英雄中选择一个,而OpenAIFive目前只支持其中17个;

不支持能让玩家同时暂时控制多个单位的物品(幻象神符、支配头盔、幻影斧、死灵书)。OpenAI移除这些物品的原因是控制多个单位会引入额外的技术复杂性。

训练系统

让AI玩Dota

为了将「以超人级水平玩这个复杂游戏」的模糊问题转换成一个可以优化处理的详细目标,OpenAI提出了以下框架。

尽管Dota2引擎的运行频率是30帧每秒,但OpenAIFive每隔4帧(称为一个时间步骤)才采取一个动作。在每个时间步骤,OpenAIFive都从游戏引擎接收一个观察,其中编码了作为人类玩家可以看到的所有信息,比如单位血量、位置等。然后,OpenAIFive向游戏引擎返回一个离散的动作,其中编码了一个所需的移动、攻击等。

当然,某些游戏机制是用人工编写的逻辑控制的,而不是使用策略。这其中包括:英雄购买物品、获得技能的指令、对独特的信使单位的控制、英雄应当保留物品。OpenAI表示,他们相信用AI方法替代人工编写规则最终能让智能体取得更好的表现,但即便如此,现有的智能体就已经取得了超人类的表现。

在训练期间,环境中的某些属性经过了随机化处理,包括游戏中的英雄和英雄购买的物品。因为在与人类对手对战时会出现各种不同的战略和情况,所以为了保证稳健性,必须进行足够多样化的训练。

OpenAI将策略π定义为从观察历史映射到动作的概率分布的函数,并将其参数化为了一个有大约1.59亿个参数(θ)的循环神经网络。该神经网络主要由单层的4096单元的LSTM构成(见图1)。给定一个策略,OpenAI玩游戏的方式是在每个时间步骤不断重复地将当前观察传递为输入,然后从输出的分布采样一个动作。


图1:简化版的OpenAIFive模型架构

为了控制一支队伍的五个英雄,OpenAI为每个英雄都使用了同一策略函数(具有相同的参数θ)的不同副本。因为Dota2中的可见信息和战争迷雾(迷雾中友方单位附近的区域是可见的)是全队共享的,所以每位英雄的观察几乎都是相同的。

对策略进行优化

OpenAI的目标是找到能最大化与人类职业玩家对战时获胜的概率的策略。在实践中,研究者对奖励函数执行了最大化操作,这个奖励函数还包含一些其它信号,比如角色死亡、收集资源等。
另外,他们还应用了多种技术以在计算奖励函数时利用该问题的零和多玩家(zerosummultiplayer)结构。比如说,通过减去敌方队伍所获得的奖励,使得智能体的奖励被对称化处理(symmetrize)。
OpenAI团队在该项目一开始就构建好了这个奖励函数,因为团队对游戏的有一定的了解。尽管随着游戏版本更新,这个奖励函数也有过些许变化,但他们发现初始的奖励选择效果已经很好。而之后增加的奖励信号对训练成功而言也非常重要。

对于策略的训练则使用了近端策略优化(PPO),这是AdvantageActorCritic的一种变体。这种优化算法使用了通用优势估计(GAE),这是一种标准的基于优势的方差缩减技术,可稳定和加速训练。OpenAI使用了一个中心化的共享式的LSTM模块来训练网络。这一模块会向不同的全连接层提供输入,从而得到策略和价值函数输出。


图2:系统概况:该训练系统由4种主要类型的机器构成

OpenAI使用了从Dota2收集的自我博弈(self-plaer)经验来训练策略;在16个时间步的样本上使用了带有截断式的反向传播的Adam优化器。

系统使用「Rollout」运行自我博弈。它们以接近1/2的实时时间运行这些游戏,因为OpenAI团队发现以这样的速度能并行运行略多于两倍的游戏,从而增大总吞吐量。

「Rollout」能以异步的方式发送正在进行的游戏中的数据,而不是等到整局游戏结束才发送数据进行优化。

整个系统运行在自定义的分布式训练平台Rapid上,基于谷歌的云平台上。为了执行快速GPU训练,研究者还使用了blocksparse软件库。

通过「手术」实现连续迁移

当然随着项目推进,代码和游戏环境也在逐渐变化。为了解决从头开始训练的问题,OpenAI提出了一种名为「手术(surgery)」的新方法。

「手术」可被视为一套工具集,它能够对旧模型执行离线操作,从而得到与新环境兼容的新模型。即便这个新模型的参数向量与旧模型的大小和语义不同,但它也仍然能以同样的水平执行游戏策略。然后,OpenAI使用有新参数向量的新模型开始在新环境中进行训练。在环境、观察和动作空间都不变的最简单情况下,其标准简化为:坚持让新策略实现与旧策略一样的从所观察状态到动作的概率的函数:


这是保留变换的Net2Net风格的函数的一个特例。OpenAI已经开发出了能尽可能准确地实现公式(1)的工具(如添加观察、扩展层和其它情况);而当对环境、观察空间或动作空间的修改类型无法完全满足准确实现的标准时,也可以近似地实现它。


表1:在OpenAIFive训练期间执行过的所有成功的「手术」和重大的环境改变

「手术」能在无损性能的同时实现连续的训练(见图4)。


图4:在正在开发中的环境中训练

实验和评估

OpenAIFive是从2018年6月30日到2019年4月22日的单次训练过程的产物。经过十个月的770±50PFlops/s·days计算量的训练之后,其在三局两胜制比赛中击败了Dota2冠军战队,并在持续多日的在线展示中击败了99.4%的人类玩家。

为了有效地利用这种水平的算力,整个系统进行了三个方向的扩展。第一,批大小为100万到300万的时间步(将其分组为长度在16的展开式LSTM窗口)。第二,使用了超过1.5亿参数的模型。第三,OpenAIFive的训练用去了180天(由于重启和恢复,实际时间超过10个月)。
相比于AlphaGo,OpenAIFive的批大小大50到150倍,模型大20倍,训练时间长25倍。但同期也有另一些研究能在规模与这一项目匹敌或甚至规模更大一些,比如DeepMind的《星际争霸2》智能体研究《GrandmasterlevelinStarCraftIIusingmulti-agentreinforcementlearning》以及OpenAI的一项机器人研究《SolvingRubik'sCubewithaRobotHand》。

人类评估

在训练期间,OpenAIFive与许多业余玩家、职业玩家和职业战队进行了比赛,以便跟踪记录研究进展。

4月13日,OpenAIFive与Dota2现世界冠军OG战队进行了一场高水平的竞技比赛,在三局两胜比赛中获胜(2-0),这表明OpenAIFive确实能学习到最高水平的操作技术。

但是,机器学习系统通常不能很好地应对意料之外的情况。尽管在展示比赛中胜过世界冠军确实能说明OpenAIFive能力出色,但这不能证明其能够广泛地理解人类社区可能面临的各种难题。
为了探索OpenAIFive能否被稳定地用于创造性或分布外的玩法,OpenAI启动了OpenAIFiveArena(竞技场),在2019年4月18-21日期间开放给公众进行在线挑战。OpenAIFive与3193支队伍共进行了7257局比赛,胜率为99.4%。29支队伍在总共42场比赛中击败了OpenAIFive。

尽管人类评估才是最终目标,但也需要在训练期间对智能体进行自动化的评估。OpenAI的做法是以TrueSKill评分系统为指标,比较一些固定的参照。图3给出了OpenAIFive的TrueSkill评分随时间的变化情况。


图3:OpenAIFive的TrueSkill评分在训练期间的变化情况

通过Rerun验证「手术」的效果

为了验证新提出的「手术」方法所能节省的时间和资源,OpenAI在2019年5月18日到2019年6月12日之间训练了另一个智能体,但仅使用了最终的环境、模型架构等。OpenAI称这个训练过程为Rerun,其没有经历蜿蜒曲折的游戏规则变化、对神经网络参数的修改、对超参数的在线实验等等。

Rerun完成了两个月的150±5PFlops/s·days计算量的训练(见图4)。这个时间跨度显著长于「手术」变化的频率(每1-2周一次)。简单比较来看,如果在20次重大手术之后的每一次都从头开始训练,则该项目需要耗时40个月,而不是10个月(在实际操作时,一般更倾向于做更少的改变)。手术的另一个优势是总是会有能力出色的智能体可供评估,这能显著收紧实验改变的迭代周期。对于OpenAIFive的目标(探索全新任务和构建全新环境)而言,持续性的训练具有显著的重大优势。


图4:OpenAIFive与Rerun的训练过程

当然,在环境是预构建的和一开始就被很好理解的环境中,对「手术」的需求会很小。Rerun消耗的资源仅有OpenAIFive的20%:如果能提前获取最终训练环境,就没有必要在不同的游戏版本上开始训练。

Rerun的最终性能比OpenAIFive更好,与OpenAIFive最终版对战的胜率超过98%。OpenAI团队的想法是希望验证最终的代码和超参数可以重现OpenAIFive的性能,因此他们就此停止了训练。他们相信Rerun还能实现进一步的提升,不仅包括能够继续提升的性能,还有学习率和视野范围等没有最终确定的超参数。

「手术」过程让OpenAI能成功地每周修改环境。但是,OpenAIFive最终达到的水平还是逊于从头开始训练的模型所能实现的水平。学习如何在长时间训练的同时又不影响最终性能是一个很有潜力的未来研究方向。

最后,尽管目前构想的「手术」还远不够完美,有了合适的工具,这种方法能在无需为重启训练的同时,将特定的变化整合进长时间运行的实验中。

猜你喜欢
    不容错过