Dota 2被攻陷!OpenAI 人工智能5V5模式击败人类玩家
选自OpenAI
机器之心编译
2017 年,OpenAI 在 Dota2 TI 决赛现场以 1 对 1 solo 的方式击败了「Dota 2」世界顶级玩家。经过一年的发展,OpenAI 于昨日宣布他们的 AI bot 在 5 v 5 团队赛中击败业余人类玩家,并计划之后能够击败顶级专业团队。机器之心对OpenAI的博客内容进行了编译介绍。
我们团队构建的模型,OpenAI Five,已经击败业余 Dota2 团队了。虽然如今是在有限制的情况下,但我们计划到 8 月份在有限英雄池下击败 TI 赛中的一支顶级专业队伍。我们可能不会成功,因为 Dota2 是当前最流行也最复杂的电子竞技游戏之一,一批有激情与创造力的玩家经年训练,想要瓜分 4000 万美金的奖金池。
通过自我对抗学习,OpenAI Five 每天相当于玩 180 年的游戏。训练上,它使用 256 块 GPU、12 万 8000 个 CPU 核心使用近端策略优化(Proximal Policy Optimization)方法进行训练,这是在我们去年建立的 solo Dota2 系统上的扩增。当我们为每个英雄使用单独的一个 LSTM,模型就可以在没有人类数据的情况下学到可识别的策略。这表明强化学习即使没有根本性的进步,也能够产生大规模但也可接受的长期规划。这出乎了我们刚开始时的预料。
问题
人工智能的一个里程碑就是在星际争霸或者 Dota 这类复杂的电子游戏中超越人类的水平。相比于上一个里程碑,即国际象棋与围棋,复杂电子游戏开始反映真实世界的混乱与连续的本质。因此我们希望,能够解决复杂电子游戏的系统可以成为通用的、在游戏之外有广阔应用场景的系统。
Dota2 是一个实时的 5 v 5 策略游戏,每个玩家控制一个英雄。而玩 Dota 的 AI 需要掌握以下技能:
- 长线策略。Dota 游戏平均每秒 30 帧,一场时常 45 分钟,大概 8 万 tick。大部分操作(例如操纵英雄移动)都有单独的小影响,但一些个体行为可能会影响到游戏战略,例如 TP 回家。此外,还有一些策略可能会终结整场游戏。OpenAI Five 每 4 帧观察一次,产生了 2 万个决策。相比之下,国际象棋一般在 40 步之前就结束了,围棋大概 150 步,但这些游戏每一步都很有策略性。
- 局部可观测状态。己方单位和建筑的视野都有限。地图的其他部分是没有视野的,可能藏有敌人和敌方策略。高玩通常需要基于不完整数据做推理,以及建模敌方意图。而国际象棋和围棋都是完全信息博弈。
- 高维、持续的行为空间。在 Dota 中,每个英雄能采取数十种行为,而且许多行为要么面向敌方单位,要么点地移动位置。我们把这个空间离散到每个英雄 17 万种可能的操作(不是每 tick 都有效,例如在技能冷却时放技能就是无效操作);不计算连续部分,每 tick 平均 1000 个可能有效行为。国际象棋的行为数量大概是 35,围棋 250。
- 高维、连续的观察空间。Dota 是在一张包含 10 个英雄、20 几个塔、数十个 NPC 单位的地图上操作的游戏,此外还有神符、树、眼卫等。通过 Valve(Dota 2 的运营公司)的 Bot API,我们的模型把 Dota 游戏视为 2 万个状态,也就代表人类在游戏中可获取到的所有信息。国际象棋代表大概 70 个枚举值(8x8 的棋盘,6 类棋子和较小的历史信息)。围棋大概有 400 个枚举值(19x19 的棋盘,黑白 2 子,加上 Ko)。
Dota 规则也非常复杂,这类游戏开发了十几年,成百上千的代码行实现游戏逻辑。而且游戏每两周更新一次,环境语义一直在变。
方法
我们的系统使用一个高度扩展版本的近端策略优化(Proximal Policy Optimization)算法进行学习。OpenAI Five 和之前的 1v1 机器人都是通过自我对抗进行学习的。他们从随机参数开始,并不从人类玩家的方法中进行搜索或者自举。
强化学习研究人员(包括我们自己)过去普遍认为,进行长时间范围的学习需要根本性的算法突破,例如层级强化学习(hierarchical reinforcement learning)。而我们的结果显示,我们并没有充分信任现有的模型——至少当他们以足够的规模和合理的探索方式运行的时候。
我们的智能体被训练以最大化未来奖励的指数衰减和,其中指数衰减因子被称为 γ。在 OpenAIFive 最新一轮的训练中,我们将 γ 从 0.998(以 46 秒为半衰期)调整到了 0.997(以 5 分钟为半衰期)。相比之下,OpenAI 的近端策略优化(PPO)论文中最长的时间跨度为半衰期 0.5 秒,DeepMind 的 Rainbow 论文中最长的时间跨度为半衰期 4.4 秒,Google Brain 的 Observe and Look Further 论文中则使用了 46 秒的半衰期。
虽然当前 OpenAI Five 的补兵能力略差(看我们的测试赛,专业 Dota 解说员 Blitz 估计它的补兵能力只有职业玩家的中值水平),但它在选择优先攻击目标上能达到专业水平。获取长期奖励(例如插眼控图)通常需要牺牲短期奖励(例如发育后的金钱),因为团推时要也要耗费时间。这一观察加强了我们的信念:系统会随长时间而有优化。
模型架构
每个 Open AI Five 网络包含一个单层、1024 个单元的 LSTM 网络,它能观察当前的游戏状态(从 Valve 的 Bot API 中抽取)并通过一些可能的行动 Head 发出下一步采取的行动。每一个 Head 都包含语义信息,例如延迟该行动的时间值、选择哪一个行动和其 X 与 Y 的坐标轴。
OpenAI Five 使用了观察空间和行动空间的交互性演示。它将世界表征为一个由 2 万个数值组成的列表,并通过发出一个包含 8 个枚举值的列表而采取行动。我们可以在 OpenAI 网站上选择不同的行动和目标以理解 OpenAI Five 是如何编码每一个行动,以及如何观察世界的。下图展示了人们可能会观察到的场景:
Necrophos
OpenAI Five 可以对其丢失的状态片段作出反应,这些状态片段可能与它所看到的相关。例如,直到最近 OpenAI Five 的观察还没有包含弹片落下的区域,而人类可以在屏幕上轻松观察到这些落弹区域。然而,我们观察到 OpenAI Five 可以学习走出活跃的落弹区域,因为在这样的区域中智能体会发现它们的生命值在下降。
探索
尽管构建的学习算法能处理较长的视野,但我们仍然需要探索环境。即使我们已经限制了复杂度,但游戏仍然有数百种物品、几十种建筑、法术、单位类型以及需要长时间慢慢学习的游戏机制,这些变量将组合成极其巨量的情况。因此,有效地探索这一巨大的组合空间是非常困难的。
OpenAI Five 通过自我对抗(self-play)从随机权重开始学习,这为探索环境提供了一个自然的 curriculum。为了避免「策略崩坏」,智能体在 80% 的游戏中通过自我对抗进行训练,而在 20% 的游戏中与过去的智能体进行对战。在第一场游戏中,英雄漫无目的地在地图上探索,而在几个小时的训练后,出现了规划、发育或中期战斗等概念。几天后,智能体能一致地采用基本的人类策略:试图从对手偷财富、推塔发育、在地图旋转控制英雄以获得线路优势。通过进一步的训练,它们变得精通 5 个英雄一起推塔这样的高级策略了。
在 2017 年,我们第一个智能体击败了机器人,但仍然不能战胜人类。为了强制在策略空间中进行探索,我们有且仅在训练期间对这些单位的属性(生命、速度和初始等级等)进行了随机化,然后它开始与人类对战。随后,当一名测试玩家不停地击败我们的 1V1 机器人时,我们增加了训练的随机性,然后测试玩家就开始输掉比赛了。此外,我们的机器人团队同时将类似的随机技术应用到物理机器人中,以便从模仿学习迁移知识到现实世界中。
OpenAI Five 使用我们为 1V1 机器人编写的随机化,它还使用一个新的「lane assignment」。在每次训练游戏开始时,我们随机「分配」每一个英雄到线路的一些子集,并在智能体发生偏离时对其进行惩罚,直到游戏中的随机选择时间才结束惩罚。
这样的探索得到了很好的奖励。我们的奖励主要由衡量人类如何在游戏中做决策的指标组成:净价值、杀敌数、死亡数、助攻数、最后人头等。我们通过减去每一个团队的平均奖励以后处理每一个智能体的奖励,因此这能防止智能体找到正项和(positive-sum)的情况。
合作
OpenAI Five 没有在各个英雄的神经网络之间搭建显式的沟通渠道。团队合作由一个我们称之为「团队精神」的超参数控制。团队精神的取值范围为从 0 到 1,代表了 OpenAI Five 的每个英雄在多大程度上关注自己的个人奖励函数以及在多大程度上关注团队平均奖励函数。在训练中,我们将其值从 0 逐渐调整到 1。
Rapid
我们的系统是用通用的强化学习训练系统 Rapid 来实现的。Rapid 可以被应用到任何一个 Gym 环境。在 OpenAI,我们也用 Rapid 来解决其他问题,包括竞争性自我对抗训练(Competitive Self-Play)。
训练系统示意图
我们已经在 IBM Kubernetes,微软 Azure,谷歌 GCP 后端上实现了 Rapid。
游戏
到目前为止,我们与这些队伍进行了对战:
- 最强的 OpenAI 职员团队: 匹配分 2500
- 观看 OpenAI 职员比赛的观众玩家 (包括 Blitz 等):匹配分 4000-6000,他们此前从没有组队参赛过。
- Valve 公司团队: 匹配分 2500-4000
- 业余团队: 天梯 4200, 作为一支队伍来进行训练。
- 半职业团队: 天梯 5500, 作为一支队伍来进行训练。
在与前面三支队伍的比赛中,OpenAI 取得了胜利,输给了后面的两只队伍(只赢了开场前三局)。
我们观察到 OpenAI Five 具有以下几个特点:
经常来牺牲自己的优势路(夜魇军团的上路,天辉军团的下路),以压制敌人的优势路,迫使战斗转移到对手更难防御的一边。该策略在过去几年的专业领域出现过,现在已经成为了流行战术。Blitz 说他在打 DOTA 8 年后才学到了这个战术,当时是 Liquid(一支职业队伍)告诉了他。
比赛初期到中期的转换比对手更快。它是这样做到的:1)在人类玩家走位出问题时,进行多次成功 gank,2)在对方组织起反抗前,去组队推塔。
在一些领域机器有时也会偏离主流打法,例如在前期将钱和经验让给辅助英雄(这些英雄一般不优先获取资源)。OpenAI Five 的优先级使它获得的伤害更快达到顶峰,从而建立起更大的优势,赢得团战以及利用对方的错误来确保快速取胜。
和人类的差异
OpenAI Five 获得的信息和人类是一样的,但前者可以实时看到位置、生命值和装备清单等,而这些信息都需要人类选手去手动查看。我们的方法从根本上就没有依赖于(实时)观察状态,但从游戏中渲染像素就需要成千上万块 GPU。
OpenAI Five 平均每分钟可进行 150-170 次操作(APM=150-170,因为每四帧观察一次,所以理论峰值为 450)。熟练的玩家有可能掌握完美捕捉画面的时机,但这对机器来说轻而易举。OpenAI Five 的平均反应时间为 80 毫秒,比人类更快。
这些差异在 1V1 中影响最大(当时我们机器人的反应时间为 67 毫秒),但竞技是相对公平的,因为我们已经看到人类在学习和适应机器人的打法。在去年 TI 之后,很多专业选手使用我们的 1V1 机器人进行了为期数月的训练。William *"Blitz"* Lee(前 DOTA2 专业选手和教练)表示,1V1 机器人已经改变了我们对单挑的传统看法(机器人采取了快节奏的打法,现在每个人都已经试着去跟着这个节奏)。
令人惊讶的发现
二元奖励可以给予良好的表现。我们的 1v1 模型具有形状奖励,包括上次命中奖励,杀戮等。我们进行了一个实验,只奖励代理的获胜或失败,并且让它在中间训练了一个数量级较慢并且稍微平稳的阶段,与我们平常看到的平滑学习曲线形成对比。该实验在 4500 个核心和 16 个 k80 GPU 上进行训练,训练至半专业级(70 TrueSkill,而非我们最好的 1v1 机器人的 90 TrueSkill)。
我们可以从头开始学习卡兵。对 1v1 来说,我们使用传统的强化学习和一个卡兵奖励(a creep block award)来学习卡兵。我们的一个同事在去度假前(去和未婚妻求婚!)留下了 2v2 模型,打算看看需要多久的训练能才提高表现。令他惊讶的是,这个模型在没有任何指导或奖励的情况下学会了卡兵。
我们仍在修复系统漏洞。下图显示了击败业余玩家的训练代码,相比之下,我们只是修复了一些漏洞,比如训练期间的罕见崩溃,或者导致达到 25 级的巨大负面奖励的错误。事实证明我们可以在隐藏严重漏洞的情况下,依然击败优秀的人类玩家!
Open AI Dota 的一个子团队手托去年在 Dota 2 国际邀请赛 1v1 上击败世界顶级专业玩家的笔记本电脑。
下一步计划
Open AI 的团队专注于达成八月份制定的目标。我们不知道它是否可以实现,但是我们相信通过自身的努力(和运气),机会还是很大的。