[王者荣耀]王者荣耀:绝悟AI的原理浅析

[王者荣耀]王者荣耀:绝悟AI的原理浅析
文章图片

文章图片

相信大家这几年或多或少都听过深度学习这个概念 。绝悟AI正是深度学习的产物 , 更确切说绝悟AI的核心是深度强化学习(Deep Reinforcement Learning) 。本人粗略阅读腾讯AI lab 叶德珩博士一作的论文[1](链接在文末参考文献中) , 此文发表的人工智能的顶会2020 AAAI上面(虽然这个会议的水平个人感觉最近有些下降) 。下面本人结合论文和一些资料 , 对绝悟的内部原理细节做进行阐述 。
首先是背景 , 相信大家应该都听过围棋AI-AlphaGo 。之前的阿尔法狗一战成名让强化学习名声大噪 。之后便有各种游戏AI , 例如DeepMind的星际争霸的AI与OpenAI的Dota2的AI , 这两个比较早 , 因该是两三年之前 。之前便取得不错的成绩 , 因为本人是刀塔玩家 , 所以当时TI比赛期间见过AI 5v5 明星挑战赛 。下面将绝悟与go做个对比:
[王者荣耀]王者荣耀:绝悟AI的原理浅析
文章图片

文章图片

上面主要介绍绝悟AI在1v1的环境下 , 相比于Go的计算复杂度上面 , 以Action space(直译动作空间)为例王者荣耀的每一帧的操作可以分解为100+个离散的动作(比如位移 , 点击技能 , 点击攻击按键等) , 这里的9000帧每局游戏应该是考虑到人类的反应时间而设置的帧数 。所以我们可以看到 , 游戏AI的复杂度是很高的 。
下面还需要提出两个概念 , 智能体(agent)和游戏单元(game unit) , 智能体可以简单理解为英雄 , 游戏单元包括小兵 , 野怪 , 防御塔之类 。由于1v1难以获取高效的数据(叶博士说1v1练英雄比较多) , 所以采用无监督学习的方式 , 采用自对弈的方式(即我训练我自己) 。下面正式进入绝悟的细节:首先是系统架构方面 , 也是就是绝悟AI的整体到底是个什么东东 。
[王者荣耀]王者荣耀:绝悟AI的原理浅析
文章图片

文章图片

首先要说明的是 , 上述各个模块是独立的 , 下面我将逐一介绍 。
1)AI server with Game Env部分:这就是AI打AI(我打我自己)的地方 , 并且与游戏环境做交互 , 这里设计到游戏的内核部分 。
2)Dispatch部分:这个部分主要就是收集游戏数据 , 传输给下一个部分
3)Memory Pool部分:其中进行存储前一部分传输过来的数据 , 并且对数据进行处理 , 以方便喂给我们的学习器 。
4)RL learner部分:顾名思义 , 就是训练强化学习的模型的地方 , 并且将输出的数据再传输给我们的第1)部分(这里的输出简单理解应该就是我们英雄所执行的各种动作) , 这样AI就可以与AI博弈 。(腾讯果然财大气粗 , 这里光显卡用了1000+ , 应该是英伟达专业级的神经网络显卡)
看完上述的描述 , 大家应该发现 , RL learner才是AI的核心 , 没错下面我将详细介绍RL learner部分 , 照例我们先看框图:
[王者荣耀]王者荣耀:绝悟AI的原理浅析
文章图片

文章图片

看不懂没关系 , 因为这个东西确实不是专业的确实很难看懂 , 我会尽量用浅显的语言对其进行解读 。因为内部机制过于复杂 , 我会尽量用浅显的语言进行描述 。下面从左往右进行分析:
1)Encoded observations部分:这个部分有三个输入 , 首先Unit输入部分 , 这里包括我方英雄 , 地方英雄 , 英雄的移动 , 防御塔等 。其次Image部分 , 我个人理解应该是 , 自身英雄周围的一个区域的图像 。最后Game state Info部分 ,包括比如经济 , 人头 , 血量之类的数据 。图像经过卷积网络得到一个向量(大家就简单理解为图像识别就可以) , Unit的数据和Game state Info的数据则经过FC(全连接网络)得到不同的向量(这里大家理解为 , 就是把这些游戏里的数据 , 转换成为另外一种形式 , 牺牲点严谨性来说 , 就是转换成一串数字) 。之后把这三部分转后的数字 , 我们拼接起来 , 变成更大的一长串数字 , 这就是我们从当前环境中提取的信息 。


推荐阅读