【星际争霸2】南大AI单机训练一天,击败最高难度内置 Bot

【新智元导读】南京大学团队使用分层强化学习,结合宏动作学习、课程学习等方法,仅使用12个物理CPU核和48个线程,单机训练一天时间内,击败了《星际争霸2》内置AI。

9月19日,腾讯AI Lab团队号称“首次在《星际争霸2》完整的虫族VS虫族比赛中击败了游戏的内置AI Bot”,这是首个能在正式比赛中击败内置机器人的AI系统,堪称研究道路上的一大突破。

根据发表在arXiv上的预印版论文,腾讯AI Lab团队使用的方法是人工定义大量的宏动作(macro-action)、人工编码科技树建造建筑,用虫族(擅长快推)在3000多个CPU上取得了这一成果。

实际上,在更早的4月份,来自南京大学的俞扬团队也深入研究了《星际争霸2》的分层强化学习方法。与腾讯AI Lab不同的是,南京大学团队不依赖人工定义的宏动作,而是从人类的演示数据中自动学习宏动作。再依靠强化学习自动学习基地运营和战斗调度,并仅在12个物理CPU核、48个线程、智能体设定为神族、对手设定为人族的情况下,取得了突破性的成果。

在“《星际争霸2》学习环境”SC2LE上的实验结果表明,南大团队通过分层强化学习和课程学的方法,在最困难的非作弊内置AI(level-7)中获胜的概率超过了93%,是当前最佳成绩。

负责这项研究的南京大学计算机系副教授俞扬博士表示:

《星际争霸》这一款超大规模游戏是强化学习的一大挑战。击败内置AI只是小小的并不值得宣扬的第一步,其实我们的研究目标在于探索适用于大规模问题而又不失通用性的强化学习方法,因此我们必须找到在尽可能避免手工设定、使用少量计算资源的条件下仍能高效学习的方法。在这一篇工作中,我们结合分层强化学习、宏动作学习、课程学习、奖赏设计等多种不同的强化学习技巧,达到了只使用单机计算资源在一天时间单机训练可达到击败《星际争霸2》内置AI的水平,为未来大规模强化学习方法提供参考

【星际争霸2】南大AI单机训练一天,击败最高难度内置 Bot

现在,这篇论文的预印版已经可以在arXiv上公开访问,地址如下:

https://arxiv.org/abs/1809.09095

《星际争霸2》为何如此难以攻克?

【星际争霸2】南大AI单机训练一天,击败最高难度内置 Bot

资源的角度来看,在刚刚进入游戏界面时,每方都拥有晶体矿(左上角水晶)和气矿(顶部绿色气体弥漫的矿山)两种资源。

人口单位来看,截图中的兵种包括农民和狂热者,都属于最初级人口单位。

截图中的建筑包括主控基地(生产农民、母舰,可解锁其它建筑)、采气厂(用于采集气矿)、水晶塔(提高人口单位上线)、传送门(可生产狂热者、追踪者以及其它高级兵种)。

在开局一段时间后,单从人口单位上来看,需要操纵的智能体数量已然远远超过类似Dota2仅需操纵5个智能体的游戏。而在后期阶段,随着基地的不断发展与扩大,人口会随之大幅度增加,需操纵的人口单位也随之上升。

在战略层面上,由于人口单位种类、功能的不同,也会大幅提高策略的难度。

其次,建筑物之间存在解锁新功能的关系,所以建筑物的生成顺序也是需要考虑的策略之一。

最后,游戏中的视野是有限制的,派遣兵种开拓视野也要考虑在决策范畴之内。

总而言之,观察空间巨大、动作空间连续、无穷,并且视野受限等诸多原因促使《星际争霸2》成为史上最难攻克的游戏

并且在以往的研究中,重点往往放在对游戏局部信息的处理上,主要分为微操和宏操。例如在游戏开局前,预先设定好双方兵力的数量,只需对这些兵力进行把控,便可取得游戏胜利;或者对建筑序列做预测,在游戏进程当中,判断当前战局下应该建造什么样的建筑。

而南大团队此次不仅在《星际争霸2》游戏本身的难度基础上对大规模强化学习技术做研究,更是将重点着眼于完整的游戏,全面且综合的考虑到了一局完整游戏过程中涉及到的所有局部信息以及相应的技术处理问题。并且以高胜率打败了Level7(非作弊最高级别)的内置AI。

用分层强化学习,一天时间单机训练击败《星际争霸2》内置AI

为了提高强化学习的能力,像星际争霸这样的复杂战略游戏已经成为许多机构的完美模拟环境。

《星际争霸2》为强化学习提出了巨大的挑战。而《星际争霸2》之所以如此困难,是因为它的观察空间巨大、动作空间连续、无穷,并且视野受限。

《星际争霸2》包含10个难度较高的内置AI,它们都是由规则和脚本编写的。从1级到10级,内置AI的能力不断提高:

【星际争霸2】南大AI单机训练一天,击败最高难度内置 Bot

南大团队研究了《星际争霸2》的分层强化学习方法。层次结构涉及两个抽象层次。

一个是从专家的游戏录像中自动提取宏动作,将原始复杂的动作空间拆分整合成一个新的动作空间。

另一种是两层的分层结构,由上层的控制器(controller) 来选择下层不同的子策略(sub-policies)。

除此之外,论文中还提供了该结构的分层强化学习的训练算法。在64×64的地图上,使用有限的人口和建筑单位,在挑战难度级别为2的内置AI中的胜率超过了90%。

之后再通过课程学习的方法,在最困难的非作弊内置AI(level-7)中获胜的概率超过了93%。

在SC2LE上的实验结果表明,该方法达到了目前为止最好的结果。

具体研究方法:分层强化学习,自动生成宏动作,课程学习

南大团队使用了两层的分层框架,如下图所示。每隔一个较长的时间间隔,控制器根据当前的全局信息,选择一种子策略。之后,子策略会每隔一个较短的时间间隔来选择一个宏动作。

【星际争霸2】南大AI单机训练一天,击败最高难度内置 Bot

图1 总体架构

分层结构的优点在于:

该分层结构可以让底层的每个子策略和高层的控制器拥有不同的状态和动作空间,能够将原来巨大的状态空间进行简化。

这其实也不难理解,对于高层的控制器来说,它只需要关注少量的全局信息就可以做出选择。而对于一个负责战斗的底层子网络来说,它只需要战场上的相关信息即可。

宏动作的生成

在星际争霸中,原始动作空间是巨大且零碎的,人类玩家总是需要连续做好几个原始动作才能达到一个简单的目的。

例如,如果想要在游戏中建造一个建筑物,必须先选择一个农民,然后命令它在特定位置建造建筑物,在完成后让它回来继续采矿。这些原始动作的序列往往是我们人类玩家进行游戏时的一些固定序列。

因此,通过对专家的游戏录像数据进行挖掘,生成一些宏动作, 以此生成的宏动作空间来取代原始动作空间。 这将极大地提高学习效率和运行速度。

训练算法

算法1给出了该结构的训练过程:

算法1 强化学习训练算法

【星际争霸2】南大AI单机训练一天,击败最高难度内置 Bot

课程学习

课程学习是一种有效的强化学习方法。它的思路是将一个复杂的任务分解成若干个难度递增的子任务。智能体先从最简单的任务开始学习,随着它的能力不断提高,再切换到较为困难的任务,最终能够解决原始的复杂任务。

星际争霸2一共有十个难度,包括非作弊和作弊的。不难想象,若直接让智能体在较高难度上开始学习,那么它只能得到较少的积极反馈,使其学习过程变得十分困难。因此,我们需要设计了一个合适的学习序列:首先让智能体在低难度中进行训练,然后再使用这个预训练的模型在高难度上继续训练。

使用混合作战模型与规则,在1~7难度下均取得最佳结果

设置

结构设置如下:控制器每8秒选择一个子策略,子策略每1秒执行宏动作。子策略池中有两个子策略。 一个子策略控制着基地的建筑物和人口单位的生产,称为基地网络(base network)。另一个子策略负责控制战斗,称之为战斗网络(battle network)。

1v1模式下SC2的一局完整的游戏过程如下:首先,两个玩家在地图不同的随机点上“诞生”,并开始积攒资源。而后开始建造一些必要的建筑。接着,开始生产作战部队。最后,攻击并摧毁对手的所有建筑,如图2所示。

【星际争霸2】南大AI单机训练一天,击败最高难度内置 Bot

图2 《星际争霸2》截图

为了简单起见,智能体的种族设置为神族,并将对手AI的种族设置为人族。

使用的地图是SC2LE上的64x64地图simple64。将每场比赛的最长时间设置为不超过15分钟。智能体不开分矿,只使用了神族中的狂热者和跟踪者这两个初级兵种。

战斗网络可以有三种不同的策略模型

作战规则(combat rule)。该规则是最简单的战斗策略,其中敌人的位置由先验知识自动选择。

作战规则的动作只有一个:就是攻击。由于攻击的结果完全取决于基地的建设和人口单位的生产。这种设置就促进了在基地建设和人口单位生产方面的训练。

如下GIF,演示了采用作战规则策略模型的效果:

【星际争霸2】南大AI单机训练一天,击败最高难度内置 Bot

作战网络(combat network)。虽然作战规则简单有效,但是在更大、更复杂的地图上可能会失败。因此采用更为智能的方法,就是作战网络。作战网络被构造为卷积神经网络,接收小地图和屏幕中的“特征地图”(feature-map)。如图3所示。作战网络的输出包括3个动作和1个位置矢量。3个动作分别是:全体进攻某个位置、全军撤退或者不做任何动作。

【星际争霸2】南大AI单机训练一天,击败最高难度内置 Bot

图3 作战网络结构

混合模型(mixture module)。研究者发现,当把作战规则和作战网络进行结合以后,会获得比两者更好的结果。当在作战网络的位置向量中预测到某一值时,军队的攻击位置将变为由先验知识计算出来的位置。这就是混合模型策略。

训练方法比较

在训练初期,智能体会构建许多冗余的建筑物,而在训练后,智能体将更有效地利用建筑资源,并且控制每种人口单位的生产数量比例。

南大的研究团队还研究了各种的训练方法对学习效果的影响性。

图a到图d分别演示了课程学习的有效性(图a),模块化训练的作用(图b),以及使用战斗规则(图c)和战斗网络(图d)时同时更新(simultaneous)与交替更新(alternative)的区别。

【星际争霸2】南大AI单机训练一天,击败最高难度内置 Bot

图4 训练过程中的胜率曲线

作战模型比较

在难度级别1-10的条件下做了评估测试。在每个难度条件下进行了100场比赛。从表1中可以看到,在难度1-7的条件下,智能体的表现非常良好。在难度8、难度9和难度10条件下,由于智能体没有在这些难度下进行训练,并且内置bot具有不同的作弊技巧,所以它们对智能体的泛化性要求很高。然而,可以看出智能体在与他们的战斗中仍然有很好的表现。

表1 评估结果

【星际争霸2】南大AI单机训练一天,击败最高难度内置 Bot

作战网络的表现似乎并不如作战规则,这是由于作战网络在对局中产生了过多的平局。如果把平局的表现也考虑进去的话,那么作战网络的性能也具备可比性。

值得一提的是,通过表1,可以发现作战网络和作战规则的混合模型在1-7难度级别中取得了最佳的结果。

为了验证训练出的智能体的泛化性,研究团队还测试了智能体对抗其他两个种族的胜率表现。如表2所示:

表2 与其他两个种族对抗的测试结果

【星际争霸2】南大AI单机训练一天,击败最高难度内置 Bot

设置比较

研究团队还实验了各种不同的设置对于训练结果的影响。

结果如图5所示,显示出了分层结构、奖励设置以及超参数对结果的重要影响。

【星际争霸2】南大AI单机训练一天,击败最高难度内置 Bot

图5 设置的比较

为大规模强化学习现实应用提供启示

在这篇论文中,南京大学团队研究了用于完整长度《星际争霸2》游戏的分层强化学习方法。

该结构采用两级抽象层次结构。 经过适当的训练,本文的结构在当前具有挑战性的平台SC2LE上取得了最佳的结果。

不过,虽然实验结果非常理想,但这项工作仍然存在一些不足。 例如,目前测试的64x64地图很小,只使用初级的两个兵种。南大团队表示,他们将来会在更大的地图上探索、学习,并尝试使用更多的武器和兵种来组织战术。

希望这个框架可以为今后强化学习在现实世界问题上的研究提供一些启示。