原文链接 – OpenAI Five
我们由五位神经元网络组成的队伍,OpenAI Five,已经开始在DOTA2中击败非职业队伍。虽然现在还有一些约束(译者注:功能不完善,文末有说明),我们的目标是在8月的TI8比赛上使用限定的英雄池击败最顶级的职业队伍。我们可能不会成功:因为DOTA2是现在世界上最流行、最复杂的电子竞技之一,拥有着富有创造力和积极态度的职业选手,他们一整年的进行训练为了在DOTA每年近四千万刀的奖金池里分一杯羹(世界上奖金池最高的电子竞技)。
OpenAI Five每天通过自我对抗的训练数据等值于正常游戏时间180年。训练使用大规模版本的Proximal Policy Optimization,运行在256个GPU和128000个CPU核心上 – 相当于去年TI7上AI Solo比赛使用的大规模版本。他对每个英雄配置非人类玩家数据,通过LSTM学习到了非常明显的游戏策略。这表明了强化学习通过大量且能完成的计算量可以实现长期训练 – 并不需要对训练、学习算法有突破进展,这和我们在开始这个项目时的估计相反。
为了测试我们的进展,我们会在2018年7月28号与顶尖玩家举行一场比赛,你可以在Twitch上在线观看或者申请成为挑战者。
困难
AI技术发展的里程碑之一就是能在星际争霸、DOTA这类电子游戏中超越人类。相比较之前围棋与象棋的里程碑,复杂的电子游戏开始刻画繁杂并且连续的真实世界。我们的愿景是希望能让解决复杂电子游戏的系统具有普适性,能应用在游戏之外。
DOTA2是一个有二支队伍对抗的实时策略游戏,每队五人,每人控制一个英雄。那么一个DOTA的AI必须掌握以下要素:
- 长时间的预见性。一场DOTA游戏大约45分钟,每秒产生30帧,整场游戏大约80000帧。许多行为(比如移动)造成次要影响,但是一些独特的行为(比如使用TP)会影响游戏策略,甚至一些游戏策略会影响整场游戏。OpenAI Five每4帧观测一次,整场DOTA大约20000次操作,而象棋一局大约40步,围棋一局也在150步之内分出胜负,他们的每一步都对全局策略都有影响。
- 状态部分可观测。单位和建筑只能查看围绕在他们附近的信息,地图上的其他地方则被战争迷雾覆盖,敌人和敌人的策略在迷雾中被隐藏。精彩的操作要求基于不完整的信息就能作出,同时还能推断出对手的下一步动作。而象棋和围棋都是全信息查看的。
- 多维度、连续的操作空间。在DOTA中,一个英雄有差不多几十个操作,大多数操作作用于其他单位或者是地面的指定位置。如果我们把空间离散化,那么每个英雄有将近170000种操作方式(并不是所有的都有意义,比如使用冷却中的技能)。如果不算连续操作的部分,每一次操作平均有1000个有效的选择,这项数据在象棋中为35,围棋中为250。
- 多维度,连续的观测空间。DOTA进行在一个巨大的无缝地图上,有10名英雄,几十个建筑,几十个NPC,还有一些像神符、树木、真假眼的游戏特性。我们的模型通过Value的Bot接口来观测游戏状态,这些接口有大约20000项(大多是浮点数)来体现人类可观测的数据。这个数据在象棋中为70,围棋中大约为400。
DOTA的规则非常复杂 – 这游戏已经活跃的发展超过10年,游戏逻辑差不多有数十万行代码。每帧逻辑大约花费几毫秒执行,而象棋和围棋的引擎只需要几微秒。DOTA大约每二周更新一次,持续的更新迭代游戏内容。
我们的方法
我们的系统学习使用Proximal Policy Optimizationdada大规模版本,OpenAI Five和早期的1v1 bot整个学习过程都是自我学习。他们从随机参数开始训练,并不利用搜索到的数据和人类录像数据。
OpenAI 1V1 Bot | OpenAI Five | |
CPUs | 60000个Azure上的CPU | 128000个GCP上的虚拟机CPU |
GPUs | 256个Azure上的K80 | 256个GCP上的P100 |
经验搜集 | 每天大约300年 | 每天大约180年(5个英雄就是900年) |
观测数据 | 大约3.3kB | 大约36.8kB |
每秒观测数 | 10 | 7.5 |
批尺寸 | 8,388,608个观测数据 | 1,048,576个观测数据 |
每分钟处理批 | 大约20 | 大约60 |
强化学习的研究者(包括我们自己)一度认为长期规划需要在学习算法上有突破,比如hierarchical reinforcement learning。结果表明我们缺乏对现有算法的信心 – 至少在足够多的数据和合理探索方式的前提下,算法是OK的。
我们的AI对象被训练成最大化未来收益的指数衰减总和,使用γ作为指数衰减的权重因子。在最近的OpenAI Five的训练中,我们将γ从0.998(意味着会考虑半衰期46秒的未来收益)打磨到了0.9997(意味着会考虑半衰期5分钟的未来收益)。相比较而言,在论文PPO中最长的半衰期为0.5秒;在论文Rainbow中为4.4秒;在Observe and Look Further中为46秒。
现阶段的OpenAI Five补刀水平还很弱(纵观我们的测试比赛,DOTA职业解说Blitz评价大概就是平均玩家水平),它的优先目标选取大约就是普通职业水平。为了获得对地图战略性控制这种长期收益,OpenAI Five往往会放弃打钱这种短期收益,进行抱团推塔。这种观察迫使我们相信:整个系统现阶段是可行的。
模型结构
每一个OpenAI Five网格包含一个单层,1024个单位的LSTM用来观测当前的游戏状态(根据Value提供Bot接口),然后在几条可能的行为中选取一条最合适的。每一个行为都有自己的实际意义,比如多久后执行行动,使用什么行动,这个行动执行在单位的网格坐标哪个点上等等。上面的每一项都经过独立计算。
OpenAI Five能对没有训练过的信息作出反应。比如,OpenAI Five的观测训练数据里并没有榴弹枪的范围(矮人狙击手的1技能),但是人类可以直观从屏幕上观察到范围。尽管如此,我们可以看到OpenAI Five能够学习走出榴弹枪的范围(虽然还不能避免进入),因为他的血量在减少。
研究
尽管现有的学习算法已经满足长期规划,但是我们仍然需要研究整个游戏环境。尽管我们设置了一些约束,游戏有上百个物品,几十个建筑,神符,各种单位,以及一长串需要学习的技术 – 他们可以组合成强力的连招。在巨大的空间效率问题面前,探索大量的连招并不容易。
OpenAI Five的学习通过自我对抗(用随机权重开始),这提供了研究整个环境的自然场景。为了避免策略崩溃,AI代理80%的训练量和自己对抗产生,余下的20%通过与过去的自己对抗产生。在开始的一些游戏里,英雄在地图上漫无目的的移动。通过几个小时的训练后,他已经有了对线,打钱,中路团的概念。再经过几天的训练后,他们会了一些人类的基本策略:看准机会去拿神符,再回一塔收兵线;通过游走Gank帮助线上打出优势。进一步训练后,他们学会了5人速推这种高端的策略。
在2017年3月,我们的AI代理可以打败Bot,但是在与人类对战时就完全找不到北了。为了进一步强化策略,在训练期间(也仅仅就在训练的时候),我们随机了一些单位的属性(生命、速度、起始等级等等),后来他开始击败人类。又过了一段时间,当一位测试选手总是可以击败我们的1v1 bot,我们增加训练的随机性,这位测试选手开始落败了(我们的机器人团队最近在物理机器人上使用了相同的随机技术,将模拟数据传输应用到真实世界)。
OpenAI Five使用我们之前为1v1 bot创造的随机方法,他有一个新的分路随机性。在每场训练赛的开始,我们随机指派每一位英雄到对应的线上,直到随机选择分路的时间结束后才不会对离开线的行为作惩罚。
良好的获益机制也对研究有帮助。我们的获益机制基本上和人类在进行游戏时所考虑的方向一致:身上的钱,KDA,抢人头等等。我们通过减掉对方队伍的平均收益来延后处理AI代理的获益,主要是为了防止互刷的情况出现。
我们硬编码了几套物品和技能方案(将他们写入了脚本),信使的方案也被写入的脚本。
配合
OpenAI Five在英雄的自然网络之间并没有一个明确的交流渠道。团队协作被我们称之为“团队精神”的参数控制着。这个参数的范围从0到1,OpenAI Five每个英雄上参数值的多少影响着他们是先考虑自己的收益还是整个团队的收益。我们在训练中不断的从0到1打磨这个数值。
Rapid
我们的系统跑在一个名字叫“Rapid”的通用强化学习训练系统上,他可以被运行在任何Gym的环境中。我们把Rapid用在解决OpenAI的其他问题上,这其中包括自我对抗。
整个训练系统被拆分为功能实施模块,这些模块可以运行游戏的副本、作为代理收集经验、优化在GPU中运行同步梯度下降的节点。这些实施模块通过Redis同步他们的经验到优化器。每个实验还包括对AI代理之间对抗评估的模块,比如TensorBoard,Sentry,Grafana这些监控软件。
在同步梯度下降的时候,每个GPU计算他负责梯度部分,随后这些梯度将会进行整体平均化。我们一开始使用MPI’sallreduce作为平均化方法,现在我们使用自己的NCCL2封装GPUs进行并行计算与网络数据传输。通过不同GPU数量来同步58MB数据(OpenAI Five参数的数据大小)的延迟如右图。通过GPU并行计算,延迟能够被降的足够低。
我们已经实现将Kubernetes,Azure和GCP作为Rapid的后端。
游戏
迄今为止,OpenAI Five已经和以下队伍进行了对抗(在我们的约束下):
- OpenAI员工最好的队伍:2500 MMR(好于46%的玩家)。
- 观看OpenAI与员工对战的最好观众(包括Blitz,他解说了第一场比赛):4000~6000MMR(好于90~99%玩家),他们从来没有组队玩过。
- Valve员工队伍:2500-4000 MMR (好于46~90%的玩家)。
- Amateur队伍:4200 MMR(好于93%的玩家),一起作为队伍训练。
- Semi-pro队伍:5500 MMR (好于99%的玩家),一起作为队伍训练。
4月23号的OpenAI Five版本打败了我们的脚本方案;5月15号的版本和队伍1进行了比赛,1胜1负;6月6号的版本横扫了队伍1-3;我们安排了OpenAI Five与队伍4和5的练习赛,本来预估会输,但是他赢了BO3里的前2场。
我们观察OpenAI Five:
- 不断的离开自己优势路(天灾上路,天辉下路)去控制对面的优势路,迫使战斗发生在对手不利于防御的地方。这种策略在近几年已经被职业圈接受,现在已经是一个流行策略。Blitz评论道:自己打了8年DOTA,才由Liquid战队告诉他这一策略。
- 加快前中期的节奏,通过:(1)有效的gank;(2)更早的抱团推塔,让对方猝不及防。
- 在一些游戏方式上非主流,比如他会给辅助英雄早期更多的资源。OpenAI Five的优先次序使得更早达到伤害峰值,进而不断扩大优势,赢得团战,抓住对面失误赢得胜利。
与人类对战不同
OpenAI Five与人类一样会获得相同的战局信息,但是像位置、血量,物品存量这些立即可见的数据人类必须手动的查看。我们的方案并没有模仿人类行为看观察这些状态,因为仅仅从游戏中渲染几个像素都需要上千个GPU。
OpenAI Five一分钟大约有150-170个操作(每4帧观测一次,理论最大值可以到450)(译者注:每秒30帧,一分钟1800帧,每4秒观测一次,所以理论是450)。神反应对于人类高手才有可能,但是对于OpenAI Five是很平常的事情。OpenAI Five的平均反应时间是80ms,这比人类玩家要快。
这些不同在1v1中影响巨大(1v1中反应时间是67ms),但是游戏还是相对平衡的,因为人类也可以从AI上学习到东西。很多职业选手在TI7之后使用我们的AI进行训练,根据Blitz的说法,1v1 Bot已经改变了人们对1v1的认知(AI使用更快的节奏,现在人类也不断学习适应这种节奏)。
惊喜的发现
- 双重收益有更好的表现。我们的1v1有成熟的收益机制,包括最近击中、击杀等等。我们进行过一个收益指标仅仅为赢或者输的实验,他明显慢一个数量级,相比较其他平滑的学习曲线,在中期会有停滞。这个实验使用了4500个CPU,16个K80 GPU,训练的水平是半职业(70TrueSkill),而1v1 Bot最好成绩是90。
- 卡兵碰巧的被自主学会了。对于1v1,我们学习卡兵使用了强化学习的“卡兵”收益。我们队伍里的一个成员留下一个2v2的训练模型去度假了,打算看看长期的训练会有什么效果。令人惊奇的是,模型在没有任何收益引导的情况下学会了卡兵。
- 我们一直在修BUG。图表显示了一份能击败业余玩家代码的训练,这是一个与我们已经修过几个BUG(比如系统在训练中Crash,AI到达25级后的消极收益行为)的版本比较。这些表明在修复这些潜在的BUG后,AI有很大的可能性击败更厉害的人类。
展望
我们的队伍一直致力于8月份的目标。我们并不知道这个目标是否可以达成,但是我们坚信努力的工作(加一点点运气)总会有一些机会。
这篇文章描述的内容基于我们系统6月6号的版本,我们会在超越人类表现的路上持续更新,一旦这项工程完成我们会写一篇报告。请在7月28号加入我们,我们会在那时与顶尖选手进行比赛。
我们潜在的动机已经超越的DOTA。真实的AI应该处理由DOTA带来的挑战升级,这些挑战可不同于象棋、围棋、雅达利游戏、Mujoco基准测试任务。最终,我们衡量DOTA AI系统的成功取决于他是否应该到真实世界中,如果你有兴趣,请加入我们。
[当前模型约束]
- 比赛为英雄限定为死灵法师,矮人狙击手,毒龙,冰女和巫妖。
- 不能插眼
- 不能打肉山
- 不能有隐形相关内容
- 不能有召唤物和幻象
- 不能使用圣剑,魔瓶,补刀斧,远行鞋,经验书,魂泪
- 5个无敌的信使,不能用于侦察和吃伤害
- 不能用扫描
(全文结束)
转载文章请注明出处:漫漫路 - lanindex.com