编者按:关于OpenAI的那篇博客,相信很多玩家一早起来就已经看过了。昨晚打完Dota2时,云玩家小编也在Reddit上看了相关视频,还和队友一起推测了会儿内在机制。但不曾想,我这一睡就又错过了头条。本文会重新编译原博内容,并补上被大家忽视的一些关键点。
去年,OpenAI的强化学习bot在中路solo中击败职业选手Dendi,赢得众人瞩目,但Dota2是一个5人游戏,在那之后,我们目标是制作一个由神经网络构成的5人团队,它能在8月份举办的Ti8国际邀请赛上,用有限的英雄击败职业队。时至今日,我们有了OpenAI Five,它已经可以在比赛中击败业余玩家。
OpenAI Five玩的是限制版的Dota2,它只会瘟疫法师、火枪、毒龙、冰女和巫妖5个英雄,因为镜像训练,它的对手也只能玩这5个。游戏的“限制性”主要体现在以下几方面:
英雄受限(上述5个);
没有假眼和真眼;
没有肉山;
不能隐身(消耗品和相关物品,可以理解为没有雾、微光、隐刀、大隐刀、隐身符等);
没有召唤物和分身(没有分身斧、分身符、支配头盔等);
没有圣剑、魔瓶、补刀斧、飞鞋、知识之书、凝魂之露(没有骨灰?);
每队五只无敌信使(和加速模式一样);
不能扫描。
这些限制使OpenAI Five的游戏和正常游戏有一定区别,尤其是队长模式,但总体而言,它和随机征召等模式差别不大(对于冰女这样的五号位,没有眼完全没法玩吧!)。
OpenAI Five每天玩的游戏量相当于人类玩家180年的积累,和围棋AI一样,它从自学中提取经验。训练设备是256个GPU和128,000个CPU,使用的强化学习算法是近端策略优化(PPO)。因为不同英雄间技能、出装各异,这5个英雄使用的是5个独立的LSTM,无人类数据,由英雄从自己的数据中学习可识别策略。
实验表明,在没有根本性进展的前提下,强化学习可以利用LSTM进行大规模的、可实现的长期规划,这出乎我们的意料。为了考察这个成果,7月28日,OpenAI Five会和顶级玩家进行比赛,届时玩家可以在Twitch上观看实况转播。
OpenAI Five击败OpenAI员工队伍
如果一个AI能在像星际、Dota这样复杂的游戏里超越人类水平,那它就是一个里程碑。相较于AI之前在国际象棋和围棋里取得的成就,游戏能更好地捕捉现实世界中的混乱和连续性,这就意味着能解决游戏问题的AI系统具有更好的通用性。醉翁之意不在酒,它的目标也不仅仅是游戏。
Dota2是一款实时战略游戏,一场比赛由2支队伍构成,每支队伍5人,在游戏中,每个玩家需要操控一个“英雄”单位。如果AI想玩Dota2,它必须掌握以下几点:
时间较长。Dota2的运行帧数是30帧每秒,一场游戏平均45分钟,也就是一场游戏要跑80,000帧左右。在游戏中,大多数动作(action,例如让英雄移动到某一位置)产生的独立影响相对较小,但一些独立动作,比如TP,就可能会对游戏战略产生重大影响。同时,游戏中也存在一些贯彻始终的战略,比如推线、farm(刷钱)和gank(抓人)。OpenAI Five的观察频率是4帧一次,也就是场均20,000个动作,而国际象棋一般在40步以内就能决出胜负,围棋是150步。这些动作几乎都具有战略性意义。
视野有限。在Dota2中,地图本身是黑的,只能靠英雄和建筑提供一定视野(禁止插眼),这就意味着比赛要根据不完整的数据信息进行推断,同时预测敌方英雄的发育进度。国际象棋和围棋都是全知视角。
高维的、连续的动作空间。在比赛中,一个英雄可以采取的动作有数十个,其中有些是对英雄使用的,有些是点地面的。对于每个英雄,我们把这些连续的动作空间分割成170,000个可能的动作(有CD,不是每个都能用),除去其中的连续部分,平均每帧约有1000个动作可以选择。而在国际象棋中,每个节点的分支因子只有35个,围棋则是平均250个。
高维的、连续的观察空间。Dota2的地图相当丰富,比如一场比赛中有10个英雄、几十个建筑、多个NPC单位,以及包括神符、树木、圣坛(火锅)等在内的诸多要素。我们的模型通过V社的Bot API观察游戏状态,用20,000个数据(大多数是浮点数据)总结了整张地图的所有信息。相较之下,国际象棋只有约70个(8×8棋盘),围棋只有约400个(19×19棋盘)。
Dota2的游戏规则非常复杂——它已经被积极开发了十几年,游戏逻辑代码也有数十万行。对于AI来说,这个逻辑需要几毫秒才能执行,而国际象棋和围棋只需几纳秒。目前,游戏还在以每两周一次的频率持续更新,不断改变语义环境。
我们使用的算法是前阵子刚推出的PPO,这次用的是它的大规模版本。和去年的1v1机器人一样,OpenAI Five也是从自学中总结游戏经验,它们从随机参数开始训练,不使用任何人类数据。
强化学习(RL)研究人员一般认为,如果想让智能体在长时间游戏中表现出色,就难免需要一些根本上的新突破,比如hierarchical reinforcement learning(分层强化学习)。但实验结果表明,我们应该给予已有算法更多信任,如果规模够大、结构够合理,它们也能表现出色。
智能体的训练目标是最大化未来回报,这些回报被折扣因子γ加权。在OpenAI Five的近期训练中,我们把因子γ从0.998提高到了0.9997,把评估未来奖励的半衰期从46秒延长到了五分钟。为了体现这个进步的巨大,这里我们列几个数据:在PPO这篇论文中,最长半衰期是0.5秒;在Rainbow这篇论文中,最长半衰期是4.4秒;而在Observe and Look Further这篇论文中,最长半衰期是46秒。
尽管当前版本的OpenAI Five在“补刀”上表现不佳(大约是Dota玩家的中位数),但它对于经验、金钱的的优先级匹配策略和专业选手基本一致。为了获得长期回报,牺牲短期回报是很正常的,就好比队友抱团推塔时,玩家不该自己在线上补刀刷钱。这是个振奋人心的发现,因为我们的AI系统真的在进行长期优化。
模型结构
看不清图请向论智君索取
每个OpenAI Five神经网络都包含一个单层的LSTM(左下淡紫),其中有1024个神经元。输入当前的游戏状态(从Valve的Bot API中提取)后,它会单独计算各个action head(输出动作标签),如图中下方亮蓝色方框中的X坐标、Y坐标、目标单位等,再把所有action head合并成一系列动作。
下图是OpenAI Five使用的观察空间和动作空间的交互式演示。它把整张地图看做一个有20,000个数据的列表,并通过8个列举值的列表来采取行动。这个场景是夜魇上天辉高地,我们选中冰女,可以发现,冰女脚下的9×9小方格表示她可以前进位置,其中白色目标方块的坐标是(-300,0)。大方框表示可以放Nova地方,目标分别是投石车、小兵、毒龙、巫妖、瘟疫法师和另一个冰女。
OpenAI Five可以就自己观察到的内容对缺失信息做出反应。例如火枪的一技能是榴霰弹,这是一个范围伤害,虽然除了星际玩家以外的正常玩家都看得到这个区域,但它并不属于OpenAI Five的观察范围。即便“看不到”,每当AI走进霰弹区时,它们还是会急着走出来,因为那时它们的血量在不断下降。
探索
既然AI可以学会“深谋远虑”,那接下来的问题就是环境探索。前文提到了,OpenAI Five玩的是限制版Dota2,即便少了很多复杂内容,它还有上百种道具、数十种建筑物、法术、单位类型和游戏机制要学习——其中某些内容的组合还会产生更强大的东西。对于智能体来说,有效探索这个组合广阔的空间并不容易。
OpenAI Five的学习方法是自我训练(从随机参数开始),这就为探索环境提供了初级经验。为了避免“战略崩溃”,我们把自我训练分成两部分,其中80%是AI和自己对战,剩下20%则是AI和上一版AI对战。经过几个小时的训练,带线、刷钱、中期抓人等战略陆续出现了。几天后,它们已经学会了基础的人类战略:抢对面的赏金神符,走到己方外塔附近补刀刷钱,不停把英雄送去占线扩大优势。在这个基础上,我们做了进一步训练,这时,OpenAI Five就已经能熟练掌握5人推塔这样的高级策略了,
2017年3月,我们的第一个智能体击败了机器人,却对人类玩家手足无措。为了强制在战略空间进行探索,在训练期间(并且只在训练期间),我们随机化了它的各项属性(血量、移速、开始等级等),之后它开始能战胜一些玩家。后来,它又在另一名测试玩家身上屡战屡败,我们就又增加了随机训练,AI变强了,那名玩家也开始输了。
OpenAI Five使用了我们之前为1v1智能体编写的随机数据,它也启用了一种新的“分路”方法。在每次训练比赛开始时,我们随机地将每个英雄“分配”给一些线路子集,并对其进行惩罚以避开这几路。
上述探索自然离不开回报的指引。我们为Dota2设计的回报机制基于人类玩家对行为的具体评判:团队作用、技能施放、死亡次数、助攻次数和击杀次数等。为了防止智能体钻漏洞,我们的方法是计算另一队的平均表现,然后用本队英雄表现减去这个值来具体评判。
英雄的技能点法、装备和信使管理都从脚本导入。
团队合作
Dota2是个团队合作游戏,但OpenAI Five的5名英雄间不存在神经网络上的明确沟通渠道。他们的团队合作由一个名为“team spirit”的超参数控制,范围是0到1,由它给每个英雄的加权,让它们知道这时是团队利益更重要还是个人刷钱更重要。
Rapid
这个AI是在我们的强化学习训练系统Rapid上实现的,后者可以应用于Gym环境库。我们已经用Rapid解决了OpenAI的许多其他问题,比如Competitive Self-Play。
整个训练系统被分为rollout workers和optimizer两部分,其中前者运行一个游戏副本,并用一个智能体收集经验,后者则在一系列GPU中执行同步梯度下降。rollout workers通过Redis跟optimizer同步经验。如上图所示,每个实验还包括一个Eval workers的过程,它的作用是评估经过训练的智能体和参考智能体。除此之外还有一些监控软件,如TensorBoard、Sentry和Grafana。
在同步梯度下降过程中,每个GPU在各自batch计算梯度,然后再对梯度进行全局平均。我们最初使用MPI的allreduce进行平均,但现在用我们自己的NCCL2封装来并行GPU计算和网络数据传输。
上图显示了不同数量的GPU同步58MB数据(OpenAI Five参数)的延迟,几乎可以被并行运行的GPU计算所掩盖。
我们还为Rapid开发了Kubernetes、Azure和GCP后端。
到目前为止,OpenAI Five已经在限制版Dota2中获得了非常辉煌的战绩:
顶级OpenAI员工队伍:天梯分2500+(前46%玩家)
观看比赛的最强观众队(包括解说Blitz):天梯分4000-6000(前90-99%玩家)——非开黑
V社员工队伍:天梯分2500-4000(前46-90%玩家)
业余选手队伍:天梯分4200(前93%玩家)——开黑队
半职业队:天梯分5500(前99%玩家)——开黑队
4月23日,OpenAI Five首次击败机器人脚本;5月15日,它在和OpenAI员工队的较量中1胜1负,首次战胜人类玩家;6月6日,它突破OpenAI队、观众队和V社队的封锁,决定性地赢得了所有的比赛。之后我们又和业余队、半职业队进行了非正式比赛,OpenAI Five没有像预想中那样一败涂地,而是在和两个队的前三场比赛中都赢了两场。
这些AI机器人的团队合作几乎是压倒性的,它们就像5个无私的玩家,知道最好的总体战略。——Blitz
我们也从OpenAI Five的比赛中观察到了一些东西:
它们会为了抢夺敌方优势路舍弃自家优势路(天辉的下路和夜魇的上路),使对方无力回防。这种战略近几年常出现在职业队伍比赛中,解说Blitz也称自己是从液体(李逵)那里得知这点的。
推动局势转变,比对面更快地把战局从前期推进中期。这样做的具体方法是:(1)如下图所示,成功的gank;(2)在对面抱团后,及时反制。
它们在少数领域背离了目前的游戏风格,比如AI前期会给辅助更多经验和钱,让它们在强势期打足伤害,扩大局面优势,打赢团战,然后抓住对方失误快速致胜。
OpenAI Five可以观察的信息和人类玩家相同,游戏里有什么数据,它就看到什么数据。比如玩家需要手动去检查英雄位置、血量情况和身上的装备。我们的方法并没有从根本上与观察状态相关联,但仅从游戏渲染像素看,它就需要数千个GPU。
对于许多人关心的APM问题,OpenAI Five只有150-170(每4帧一次动作,理论上最高有450)。但需要注意的是,这150是有效操作,不是逛街和打字嘲讽,它的平均反应时间为80ms,比人类快。
这两个差异在1v1中最为重要,但在比赛中,我们发现人类玩家可以轻松适跟上AI的节奏,所以双方竞技还是比较公平的。事实上去年Ti7期间,一些职业玩家也和我们的1v1 AI做了多次训练,根据Blitz的说法,1v1 AI改变了人们对1v1的看法(AI采用了快节奏的游戏风格,现在每个人都适应了)。
二元回报能够提供良好的表现。1v1模型的回报是多尺度的,包括击杀英雄、连续击杀等。我们做了一个实验,让智能体只能从输赢中获得回报。如上图所示,和常见的平滑曲线(黄线)相比,虽然它(紫线)在训练中期出现了一个较慢并且稍微平稳的阶段,但它的训练结果和黄线很接近。这个实验用了4,500个CPU和16个k80 GPU,模型性能达到半专业级(70个TrueSkill),而我们的1v1模型是90个TrueSkill。
可以自学卡兵。在去年的1v1模型中,我们独立训练模型卡兵,并附加一个“卡兵块”奖励。我们团队的一名员工在训练2v2模型时,因为要休假,于是建议他(现在的)妻子看看要花多久才能提高性能。令人惊讶的是,这个模型居然在没有任何特殊指引和回报激励的情况下得出了卡兵会产生优势的结论。
我们仍在修复错误。上图中的黄线模型已经可以击败业余玩家,但修复了一些Bug后,它的提升非常明显。这给我们带来的启示是即便已经击败更强的人类玩家,我们的模型还是可能隐藏着严重错误。
我们现在正在为8月份的Ti8做准备,虽然不知道击败职业队伍的愿望能否实现,但我们相信,通过努力工作,至少我们得到了一个真正的机会。
以上内容是截至6月6日的OpenAI Five简介,我们会继续进行更新,并把后续工作和结果汇总成一个成熟报告。7月28日,我们会邀请一线选手和AI在线比拼,千万记得来参加。
PS:我们的工作围绕Dota2,但不仅限于Dota2,招聘正在进行中(https://openai.com/jobs/)!
原文地址:blog.openai.com/openai-five/#observations