转载

OpenAI研究 开放人工智能五

我们的五个神经网络团队 OpenAI Five 已经开始 在Dota 2中击败 业余人类团队 。虽然今天我们的比赛受到 限制,但我们的目标是在 8 月份的国际邀请赛上击败一支顶级专业队伍,  但只需要少数英雄。 我们可能不会成功:Dota 2 是世界上 最受欢迎和最 复杂的电子竞技游戏之一,拥有富有创造力和积极性的专业人士,他们 全年 接受培训,以赚取 Dota 每年 4000 万美元奖池 (所有电子竞技游戏中最大的奖池)的一部分。

OpenAI Five 每天都在与自己进行 180 年的比赛,通过自我对弈来学习。它使用在 256 个 GPU 和 128,000 个 CPU 内核上运行的放大版本的 近端策略优化进行训练——这是我们 去年 为玩更简单的 单人游戏版本而构建的系统的更大规模版本。它为每个英雄使用一个单独的 LSTM 并且没有人类数据,它学习可识别的策略。这表明 强化学习 可以产生规模大但可实现的长期规划——没有根本性的进步,这与我们开始项目时的预期相反。

为了衡量我们的进步,我们将在 8 月 5 日举办一场与顶级玩家的比赛。 在 Twitch 上关注 我们以观看直播,或 请求 邀请亲自参加!

Dota 角色站在一起,头顶上方有名称标签和健康栏

问题

人工智能的一个里程碑是在星际争霸或 Dota等复杂视频游戏中超越人类的能力  。相对于之前的国际 象棋 或 围棋等人工智能里程碑,复杂的视频游戏开始捕捉现实世界的混乱和连续性。希望解决复杂视频游戏的系统具有高度通用性,并在游戏之外有应用。

Dota 2 是一款即时战略游戏,由两队五人玩家组成,每队玩家控制一个名为“英雄”的角色。玩 Dota 的 AI 必须掌握以下内容:

  • 长期视野。 Dota 游戏以每秒 30 帧的速度运行,平均持续 45 分钟,每场比赛产生 80,000 个滴答。大多数动作(比如命令英雄 移动 到某个位置)单独影响很小,但一些单独的动作比如 城镇传送门的 使用可以从战略上影响游戏;有些 策略 可以在整个游戏中发挥作用。OpenAI Five 每四帧观察一次,产生 20,000 次移动。 国际象棋 通常在 40 步前结束, 围棋 在 150 步之前结束,几乎每一步都具有战略意义。
  • 部分观察状态。 单位和建筑物只能看到他们周围的区域。地图的其余部分被迷雾所覆盖,隐藏着敌人和他们的策略。强大的游戏需要根据不完整的数据进行推断,以及模拟对手可能会做什么。国际象棋和围棋都是全信息游戏。
  • 高维、连续的动作空间。 在 Dota 中,每个英雄都可以执行数十个动作,并且许多动作都针对另一个单位或地面上的一个位置。我们将空间离散化为每个英雄 170,000 个可能的动作(并非每个 tick 都有效,例如在 冷却时使用法术);不计算连续部分,每个 tick 平均有大约 1,000 个有效动作。 国际象棋的平均 动作数是 35;在围棋中,250。
  • 高维、连续的观察空间。 Dota 是在一张包含十位英雄、数十座建筑、数十个 NPC单位以及长长的符文、树木和守卫等游戏功能的 连续大 地图上进行的 。我们的模型通过 Valve 的Bot API将 Dota 游戏的状态观察  为 20,000 个(主要是浮点数)数字,代表允许人类访问的所有信息。一个棋盘自然地表示为大约 70 个枚举值(一个 8x8 棋盘,有 6 种棋子类型和少量 历史信息);围棋棋盘大约有 400 个枚举值(2 种类型的 19x19 棋盘加上 Ko )。

Dota 规则也非常复杂——游戏已经积极开发了十多年,游戏逻辑在数十万行代码中实现。此逻辑每滴答需要几毫秒才能执行,而国际象棋或围棋引擎则需要几纳秒。该游戏还大约每两周更新一次,不断改变环境语义。

我们的方法

我们的系统使用大规模版本的 近端策略优化进行学习。OpenAI Five 和我们早期的 1v1 机器人都 完全从自我对弈中学习。它们从随机参数开始,不使用 搜索 或从人工重播中引导。

OpenAI 1v1 机器人开放人工智能五
处理器Azure 上的 60,000 个 CPU 内核GCP 上有128,000 个可抢占的CPU 内核
显卡Azure 上的 256 个 K80 GPUGCP 上有 256 个 P100 GPU
经验收集每天约 300 年每天约 180 年(每天约 900 年,分别计算每个英雄)
观察规模~3.3 KB~36.8 KB
每秒对游戏的观察107.5
批量大小8,388,608 次观察1,048,576 次观察
每分钟批次~20~60

RL 研究人员(包括我们自己)普遍 认为 ,长期视野需要从根本上取得新进展,例如 分层 强化 学习。我们的结果表明,我们没有给予今天的算法足够的信任——至少当它们以足够的规模运行并以合理的方式探索时是 这样

我们的智能体经过训练以最大化未来奖励的指数衰减总和,由称为 的指数衰减因子加权 γ。在 OpenAI Five 的最新训练运行中,我们 γ 从 0.998 (评估未来奖励的半衰期为 46 秒)退火到 0.9997 (评估未来奖励的半衰期为 5 分钟)。作为对比, PPO论文中最长的半衰期  为 0.5 秒,  Rainbow 论文中最长的半衰期为 4.4 秒,  Observe and Look Further 论文中使用的半衰期为 46 秒。

虽然当前版本的 OpenAI Five 在最后一击方面较弱  (观察我们的测试比赛,专业的 Dota 评论员 Blitz 估计它在 Dota 玩家的中间值左右),但其 客观优先级 与常见的职业策略相匹配。获得战略地图控制等长期奖励通常需要牺牲短期奖励,例如从 耕种中获得的黄金,因为分组攻击塔需要时间。这一观察强化了我们的信念,即该系统在长期内真正优化。

带有文字解说的 Dota 实况游戏

模型结构

OpenAI Five 的每个 网络 都包含一个单层、1024 单元的 LSTM  ,它可以查看当前游戏状态(从 Valve 的 Bot API中提取)并通过多个可能的动作头发出动作。每个头部都有语义,例如,延迟此动作的滴答数、选择哪个动作、此动作在单元周围网格中的 X 或 Y 坐标等。动作头部是独立计算的。

OpenAI Five 使用的观察空间和动作空间的交互演示。OpenAI Five 将世界视为一个包含 20,000 个数字的列表,并通过发出一个包含 8 个枚举值的列表来采取行动。选择不同的动作和目标,了解 OpenAI Five 如何编码每个动作,以及它如何观察世界。该图像显示了人类所看到的场景。

场景 4:团队分区中推
动作
观察
动作:弹片
目标狙击手
偏移 X
-400
-300
-200
-100
0
100
200
300
400
偏移 Y
-400
-300
-200
-100
0
100
200
300
400
动作延迟
狙击手
OpenAI Five 可以对与其所见内容相关的缺失状态片段做出反应。例如,直到最近,OpenAI Five 的观察结果才包括 人类在屏幕上看到的弹片 区(射弹落在敌人身上的区域)。然而,我们观察到 OpenAI Five 学会了走出(虽然不会避免进入)活跃的弹片区域,因为它可以看到自己的健康状况正在下降。

勘探
给定一个能够处理长视野的学习算法,我们仍然需要探索环境。即使有我们的 限制,仍有数百种物品、数十种建筑、法术和单位类型,以及大量的游戏机制需要学习——其中许多会产生强大的组合。有效地探索这个组合广阔的空间并不容易。OpenAI Five 从自我博弈中学习(从随机权重开始),这为探索环境提供了自然课程。为了避免“策略崩溃”,智能体训练 80% 的游戏是针对自己,另外 20% 是针对过去的自己。在第一场比赛中,英雄们在地图上漫无目的地走来走去。经过几个小时的训练,诸如 对线、 刷钱或争夺 中路等概念 浮出水面。 几天后,他们始终采用基本的人类策略:尝试从对手那里 窃取 赏金符文,步行到他们的第一层 塔进行耕种,并在地图上轮换英雄以获得线上优势。通过进一步的培训,他们会精通高级策略,例如 5 英雄推送。

 

2017 年 3 月,我们的第一个 智能体 打败了机器人,但对人类却感到困惑。为了强制探索策略空间,在训练期间(并且仅在训练期间)我们随机分配了单位的属性(健康、速度、起始级别等),它开始打败人类。后来,当测试玩家不断击败我们的 1v1 机器人时,我们增加了训练随机化,测试玩家开始输了。(我们的机器人团队同时将类似的随机化技术应用于 物理机器人 ,以从模拟转移到现实世界。)OpenAI Five 使用我们为 1v1 机器人编写的随机化。它还使用了一种新的“车道分配”。在每个训练游戏开始时,我们将每个英雄随机“分配”到某些 车道子集 ,并在游戏中随机选择时间之前对偏离这些车道的英雄进行惩罚。良好的奖励也有助于探索。 我们的奖励 主要由人类追踪的指标组成,以决定他们在游戏中的表现:净值、杀戮、死亡、助攻、最后一击等。我们通过减去其他团队的平均奖励来对每个代理的奖励进行后处理,以防止代理发现正和情况。我们对项目和技能构建进行硬编码(最初是为我们的 脚本 基线编写的),并随机选择要使用的构建。 快递 管理也从脚本化基线导入。

协调
OpenAI Five 不包含英雄神经网络之间的显式通信通道。团队合作由我们称为“团队精神”的超参数控制。团队精神的范围从 0 到 1,衡量每个 OpenAI Five 的英雄应该在多大程度上关心其个人奖励函数与团队奖励函数的平均值。我们在训练过程中将其值从 0 退火到 1。

迅速的
我们的系统实现为称为 Rapid 的通用 RL 训练系统,可应用于任何 Gym 环境。我们已经使用 Rapid 解决了 OpenAI 的其他问题,包括 Competitive Self-Play。
快速架构
训练系统分为 rollout workers 和优化器 节点 ,前者运行游戏副本和代理收集经验 ,后者在一组 GPU 上执行同步梯度下降。部署人员通过 Redis 将他们的经验同步到优化器。每个实验还包含评估受过训练的代理与参考代理的工作人员,以及 TensorBoard、  Sentry和 Grafana等监控软件。

 

在同步梯度下降过程中,每个 GPU 在其批次部分计算梯度,然后对梯度进行全局平均。我们最初使用 MPI 的allreduce 进行平均,但现在使用我们自己的 NCCL2 包装器来并行化 GPU 计算和网络数据传输。
右侧显示了跨不同数量的 GPU 同步 58MB 数据(OpenAI Five 参数的大小)的延迟。延迟足够低,可以在很大程度上被与其并行运行的 GPU 计算所掩盖。我们已经为 Rapid 实施了 Kubernetes、Azure 和 GCP 后端。

游戏
到目前为止,OpenAI Five 已经(在我们的 限制下)与这些团队中的每一个进行了比赛:
  1. 最佳 OpenAI 员工团队:2.5k  MMR  (第 46 个百分位数)
  2. 观看 OpenAI 员工比赛的最佳观众玩家(包括评论第一场 OpenAI 员工比赛的 Blitz):4-6k MMR(第 90-99 个百分位),尽管他们从未作为一个团队参加过比赛。
  3. Valve 员工团队:2.5–4k MMR(第 46-90 个百分位数)。
  4. 业余团队:4.2k MMR(第 93 个百分位数),作为一个团队进行训练。
  5. 半职业团队:5.5k MMR(第 99 个百分位数),作为一个团队进行训练。4 月 23 日版本的 OpenAI Five 是第一个超过我们脚本基线的版本。5 月 15 日版本的 OpenAI Five 与 team 1 势均力敌,一胜一负。6 月 6 日版本的 OpenAI Five 决定性地赢得了与 1-3 队的所有比赛。我们与第 4 队和第 5 队进行了非正式的 训练赛 ,预计会输得很惨,但 OpenAI Five 在前三场比赛中赢了两场。
    两名戴着耳机的竞技游戏玩家互相交谈,而现场观众则在他们面前观看
    该机器人的团队合作方面令人难以抗拒。感觉就像五个无私的玩家,知道一个好的总体策略。
    闪电战
    我们观察到 OpenAI Five:
    • 反复牺牲自己的 安全路 (恐怖上路;天辉下路)来换取对敌人安全路的控制,迫使战斗转向对手更难防御的一侧。这种策略是近几年出现在职业舞台上的,现在被认为是主流策略。Blitz 评论说,当Team Liquid告诉他这件事时,他在玩了八年之后才知道这一点  。
    •  比对手更快地推动 从游戏早期到中期的过渡。它通过以下方式做到这一点:(1) 当玩家在他们的车道上过度扩张时,设置成功的 ganks  (当玩家在地图上四处移动以伏击敌方英雄时 - 参见动画),以及(2)在对手组织之前分组占领塔楼反击。
    • 在一些方面偏离了当前的 游戏风格 ,例如给予 辅助 英雄(通常不优先获得资源)大量的早期经验和金币。OpenAI Five 的优先次序允许它的伤害更快地达到顶峰并进一步扩大其优势,赢得团队战斗并利用错误来确保快速获胜。
      在明亮的房间里在观众面前举起奖杯的人
      OpenAI 最佳玩家与我们的机器人团队比赛后颁发的奖杯。一个人类奖杯,一个机器人奖杯(由我们团队的 Susan Zhang 代表!)

      与人类的差异
      OpenAI Five 可以访问与人类相同的信息,但可以立即看到人类必须手动检查的位置、健康状况和物品库存等数据。我们的方法从根本上与观察状态无关,但仅从游戏中渲染像素就需要数千个 GPU。OpenAI Five 平均每分钟大约 150-170 个动作(由于每 4 帧观察一次,理论上最大值为 450)。帧完美计时虽然 对于熟练的玩家来说是可能的 ,但对于 OpenAI Five 来说却微不足道。OpenAI Five 的平均反应时间为 80 毫秒,比人类快。

       

      这些差异在 1v1 中最为重要(我们的机器人的反应时间为 67 毫秒),但竞争环境相对公平,因为我们已经看到人类向机器人学习并适应它。 在去年 TI之后的几个月里,数十名 专业人士使用 我们的 1v1 机器人进行 培训。根据 Blitz 的说法,1v1 机器人改变了人们对 1v1 的看法(机器人采用快节奏的游戏风格,现在每个人都适应了跟上)。

      惊人的发现
      • 二进制奖励可以提供良好的性能。 我们的 1v1 模型有固定的奖励,包括对最后一击、击杀等的奖励。我们进行了一项实验,我们只奖励智能体输赢,它的训练速度慢了一个数量级,并且在中间有些平稳,这与我们通常看到的平滑学习曲线形成鲜明对比。该实验在 4,500 个内核和 16 个 k80 GPU 上运行,训练到半专业水平(70  TrueSkill)而不是我们最好的 1v1 机器人的 90 TrueSkill)。
      • 蠕变阻塞可以从头开始学习。 对于 1v1,我们使用传统的 RL 学习了 creep blocking 和“creep block”奖励。我们的一位团队成员在休假时留下了 2v2 模型训练(向他现在的妻子求婚!),打算看看训练多长时间可以提高性能。令他惊讶的是,该模型  在没有任何特殊指导或奖励的情况下学会了爬行阻挡。
      • 我们仍在修复错误。 该图表显示了击败业余玩家的代码训练运行,与我们只是修复了一些错误的版本相比,例如训练期间罕见的崩溃,或者导致达到 25 级的大量负奖励的错误。它事实证明,在打败好人的同时仍然隐藏着严重的错误是可能的!
        Dota 团队围成一圈,围着一台笔记本电脑,每人一只手放在笔记本电脑上。
        OpenAI Dota 团队的一个子集,持有去年在国际邀请赛 Dota 1v1 中击败 世界顶级职业选手的笔记本电脑 。*

        下一步是什么
        我们的团队专注于实现 8 月的目标。我们不知道它是否可以实现,但我们相信通过努力(和一些运气)我们有机会实现。这篇文章描述了截至 6 月 6 日我们系统的快照。我们将在超越人类表现的过程中发布更新,并在完成项目后就我们的最终系统编写报告。请在 8 月 5 日以虚拟方式 或 亲自加入我们 ,届时我们将与顶级球员进行比赛!我们的潜在动机超越了 Dota。现实世界的 AI 部署将需要应对 Dota 提出的挑战 ,这些挑战并未反映在国际象棋、围棋、Atari 游戏或 Mujoco 基准测试任务中。最终,我们将衡量我们的 Dota 系统在实际任务中的应用是否成功。