用深度强化学习玩MOBA游戏-滕达博士

2021-04-08

摘要:

多人在线竞技游戏( Multi-player Online Battle Aren,MOBA),是一个控制操作非常复杂的强化学习问题。在MOBA游戏1 v 1场景下涉及的状态和动作空间,要远比传统的1 v 1游戏,例如棋类游戏,复杂的多。所以,这也导致在这个问题中很难搜索到达到人类水平的控制策略。本文将介绍MOBA游戏的一些背景知识,从计算复杂度、系统设计、算法设计、训练方法、评价标准和优化方法上比较OpenAI和腾讯AI实验室在制作DotA2和王者荣耀人机AI中的异同点。

多人在线竞技游戏( Multi-player Online Battle Arena,MOBA),是一个控制操作非常复杂的问题。在 MOBA 游戏中,玩家通常被分为对称数量的两队,在一个 RTS 风格的界面里控制自己所选的角色。随着比赛推进,玩家需要通过角色升级、技能升级或购买并升级装备强化自己操控的角色,以此击杀对方并最终推倒对方的阵容总基地来获取比赛胜利。MOBA 游戏近年来发展迅速,已成为网络游戏的重要组成部分,并成为一种流行文化现象。作为策划,只有在对游戏类型有深刻了解的基础上,才能设计出让玩家喜欢的游戏。在MOBA游戏1v1场景下涉及的状态和动作空间,要远比传统的1v1游戏复杂的多,而5v5的复杂度更是要高得多,所以,这也导致在这个问题中很难搜索到达到人类水平的控制策略。本文将从OpenAI针对DotA2的5v5场景、腾讯AI实验室针对王者荣耀的1v1场景和腾讯AI实验室针对王者荣耀的5v5场景设计的深度强化学习系统着手,从计算复杂度、系统设计、算法设计、训练方法、评价标准和优化方法上进行对比,并总结其异同点。

背景知识

1.1 MOBA核心要素

1.1.1多人联网

多人联网(Multi-player)指的就是有超过一个玩家在同时进行游戏,通常情况下不同玩家会被分成对立队伍进行对抗。需要注意的是,根据定义一个玩家只能控制一个数量的英雄在一个队伍里面。

1.1.2 策略

策略(Strategy)是MOBA游戏的精髓,通常是指一个队伍为了目标所采取的游戏策略。注意这里策略指的是一个相对复杂的概念,并不单单是指通过不同属性的角色互补来完成对抗,其还包含了在“资源利用”上的策略:资源在RTS游戏中,这是一个非常重要的概念。在比较硬核的RTS游戏中,比如“星际争霸”,其资源往往包括最基本的水晶,瓦斯,人口,然后到单位,建筑群等等。这些资源通常是玩家需要关注的,并且是整局游戏战略的重要部分。但是在MOBA游戏中,比如DotA2、LOL、王者荣耀中,为了让玩家更专注于对英雄的控制,凸显英雄的作用,因而简化了操作,将资源变为周期性产生、由计算机自动控制,沿着特定路线前进的单位(即常说的兵线)。因此,资源在MOBA游戏中是玩家需要重点关注的策略之一。

1.1.3英雄

MOBA游戏通常是多人组队,以两个独立队伍为基本单位进行对抗。因此,每个人都会拥有自己独立的英雄。此时,MOBA的另一个因素便显现了出来:不同玩家根据不同的分工,挑选具有不同功能的英雄组队进行对抗。其一般模式则是按照`3C(corridors)`,分为AD,AP,辅助,打野,上单进行游戏。理论上来说游戏规则并不限定玩家选择什么英雄,但是“策略”决定了玩家需要进行相应地英雄组合,实现技能的互补,最大化英雄的作用来完成目标,取得游戏胜利。

1.1.4 战争迷雾

战争迷雾通常表现战场上的未知信息和过期信息,例如:关于地形的未知信息,敌人基地的原先位置信息。玩家单位和建筑会提供视野,移除战争迷雾,展示关于地形的信息、当前位置和敌人的状态。游戏中每方都只能看见自己的单位和建筑附近的区域状态(战争迷雾),属于博弈论中的不完全信息动态博弈。在不完全信息动态博弈一开始,某一参与人根据其他参与人的不同类型及其所属类型的概率分布,建立自己的初步判断。当博弈开始后,该参与人就可以根据他所观察到的其他参与人的实际行动,来修正自己的初步判断。并根据这种不断变化的判断,选择自己的策略。

 image.png

图1 Dota2游戏画面

 image.png

图2 王者荣耀游戏画面

2 计算复杂度

Dota 2的帧率是30帧/秒,一局游戏的平均时长是45分钟,OpenAI Five的设定是每4帧(一个timestep)做一个动作,所以总的决策数(动作数)= 30 * 60 * 45 / 4 = 20250,也就是一局可能要做2万次以上的动作。Dota 2的游戏环境较为复杂,双方共十个英雄,数十个建筑,小兵等,大概可以相当于每步可以观测到16000个不同的变量(包括连续和离散两种类型)来描述环境;同样的,在对动作空间进行离散化之后,在每步可供选择的动作在8000到80000不等(视英雄而定)。

王者荣耀的正常游戏长度约为20分钟,即游戏总帧数约为20,000帧,在每个框架中,玩家通过数十个选项做出决定,包括具有24个方向的移动按钮,以及具有相应释放位置/方向的一些技能按钮。 即使有显着的离散化和简化,以及反应时间增加到200ms,动作空间也达到101500。至于状态空间,王者荣耀地图的分辨率是130,000乘130,000像素,每个英雄的直径是1,000。 在每一帧中每个英雄可能有不同的状态,如生命值,等级,金币,这都会导致计算复杂度的增加。

 image.png

表1:围棋和MOBA之间的计算复杂性比较

3 系统设计

训练系统的构成是MOBA游戏AI中最为复杂也是最为关键部分,由于深度强化学习的训练涉及游戏环境与模型训练模块的交互,也涉及到CPU和GPU两种不同计算设备间的交互,如何实现一套高并发训练系统,是用DRL处理类似复杂游戏的关键。 

image.png

图3 OpenAI解决方案简化版

3.1 OpenAI在DotA2的5v5场景中的设计思路

如图3所示,首先将复杂的观察空间处理为单个向量,然后将向量输入进LSTM(单层4096个单元),输出actions和Value,团队中的五个英雄使用相同的网络结构进行控制(由同一个网络复制而来,如上图中LSTM这部分复制了五份,并且连结权重),它们具有几乎相同的输入,不同的是,observation中包含了很少量的衍生信息,如游戏中每个单元“与我的距离”。各个网络依据上图中的“Hero Embedding”来识别不同的英雄,从而输出不同的动作,所以上图中“Hero Embedding”这部分复制了五份。LSTM构成了模型总参数的84%。

其中,连结权重可以理解为参数共享,这样在网络学习的过程中只需要学习一组权重,好处有两点,一是减少了参数的数量,加速训练过程,二是tied weights可以被看做是一种正则化形式,在实践中能获得更好的性能。

3.2 腾讯AI实验室在王者荣耀5v5场景中的设计思路

王者荣耀的AI宏观策略模型的动机源于人类玩家如何做出策略决策。 在MOBA游戏期间,经验丰富的人类玩家完全了解游戏阶段,例如开放阶段,游戏阶段,游戏中期和游戏后期阶段。在每个阶段,玩家都会关注游戏地图,并对发送英雄的位置做出相应的决定。例如,在比赛阶段,玩家倾向于更多地关注自己的球道,而不是支持盟友,而在中后期阶段,玩家更多地关注团队战斗点并推动敌人的基地。因此腾讯AI实验室将宏观策略运作过程表述为“阶段识别 - >关注预测 - >执行”。 为了模拟这个过程,提出了一个两层宏策略架构,即阶段和关注:

阶段层Phase layer旨在识别当前的游戏阶段,以便关注层可以更好地了解在哪里注意。

注意层Attention layer旨在预测游戏地图上的最佳区域以派遣英雄。

阶段和注意层统称为宏观层,用来充当微级执行的高级指导。微观模型的网络结构几乎与OpenAI Five中使用的网络结构相同,但是采用监督学习方式,除此之外会删除传送等王者荣耀不存在的要素。

 image.png

图4 腾讯AI实验室的5v5解决方案

3.3 腾讯AI实验室在王者荣耀1v1场景中的设计思路

  image.png

图5 腾讯AI实验室的1v1解决方案

复杂的智能体控制问题会产生方差较大的随机梯度,因此需要用较大的batch size,因此提出了包括四个组件的架构:Reinforcement Learning (RL) Learner, Artificial Intelligence (AI) Server, Dispatch Module and Memory Pool。这是一个改动的强化学习同步并行架构,OpenAI baseline等的A2C、PPO、ACER都是类似的结构。下面还需要提出两个概念,智能体(agent)和游戏单元(game unit),智能体可以简单理解为英雄,游戏单元包括小兵,野怪,防御塔之类。由于1v1难以获取高效的数据,所以采用无监督学习的方式,采用自对弈的方式(即自己训练自己)。

AI Server:智能体与环境交互的部分,用于产生数据,这里涉及到游戏的内核部分,此模块用当前的agent与游戏环境进行交互来收集数据,一个AI Server绑定一个CPU,agent会拷贝到CPU中,为了加快模型的运算,模型会被转为FeatherCNN的模型(;

Dispatch:从多个AI Server 搜集数据并压缩,并传输到下一部分,此模块在一台机器上绑定多个AI Server,并行地去收集数据,来加快数据收集的速度。收集的数据会进行打包与压缩,然后送到Memory Pool中保存。Memory Pool也是个服务器,可以高效存取数据;

Memory Pool:数据池,支持不同长度采样,存储上一部分传输过来的数据,并且对数据进行预处理,方便后面的学习器使用;

RL Learner:分布式训练,并行从pool采样得到梯度,同步全部梯度取均值,更新策略后将策略传给AI Server,是一个分布式的模型训练环境,用来加速agent的训练跟更新。Memory Pool的数据会分发到多个RL Learner到,每个RL Learner会计算梯度,最后在reduce起来更新agent。

就深度强化学习算法来说,RL Learn是系统的核心。

由于篇幅原因,下一部分来讨论各个场景的算法设计、优化设计以及实验设计部分。