王者荣耀第一弹

2022/4/19 23:13:52

本文主要是介绍王者荣耀第一弹,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

     1 当前使用 AI 玩对抗性游戏的主要分两种:以星际为首的 RTS 游戏,和以 DOTA为 首的 MOBA 游戏。两种游戏侧重的学习难点不同:对于星际类的游戏来说,单个 unit 的行为较为简单,主要学习的是如何进行兵力组选择和进攻策略;而对于 DOTA 类的游戏来说,对于一个英雄的操作来说是相当复杂的(涉及到技能连招,攻击目标选择,走位等等),因此这类游戏主要学习的是单英雄的操控。

  

  (名词解释及感悟: RTS   即时战略游戏(Real-Time Strategy Game),简称RTS。游戏是策略游戏(Strategy Game)的一种。游戏是即时进行的,而不是策略游戏多见的回合制。另外玩家在游戏中经常会扮演将军,进行调兵遣将这种宏观操作。)

 

 

  背景知识

   2论文中介绍,训练 AI 的方法同样也是基于 actor-critc 的神经网络,但在此基础上针对性的做出了一些改进:

    1利用人类先验知识来减少动作探索空间。

    2. 将一个人为操作下的多个子操作独立开来。

    3. 设定攻击目标选定网络,用于选定攻击目标。

    4. 使用改进PPO算法,论文中称为dual-clip PPO。

    5. 使用LSTM来学习英雄技能连招的释放。

    6. 在系统设计方面,为了快速产生大规模的数据样本,使用多个不同游戏场景同时产生数据并存到 Memory Pool 中,并使用多个RL学习器并行学习。

在训练完成后,期望训练 AI 能够完成进攻、诱导、防御、欺骗和技能连招释放的能力。由于游戏中英雄之间技能相差非常大,因此对每个英雄来说都需要训练一个独立的控制AI。对于每一个英雄,AI Lab 使用 18,000 个 CPU 核以及 48 张 P40 显卡(¥14600一张)进行训练学习。每张 GPU 每秒可训练 80000 个样本数据,算下来每天训练的数据等于人类 500 年的学习量。

 

  (名词解释    PPO(Proximal Policy Optimization)近端策略优化算法   https://cloud.tencent.com/developer/article/1781590     

       长短期记忆(Long short-term memory,   LSTM)是一种特殊的RNN,主要是为了解决长序列训练过程中的梯度消失和梯度爆炸问题。简单来说,就是相比普通的RNN,LSTM能够在更长的序列中有更好的表现。通过门控状态来控制传输状态,记住需要长时间记忆的,忘记不重要的信息;而不像普通的RNN那样只能够“呆萌”地仅有一种记忆叠加方式。对很多需要“长期记忆”的任务来说,尤其好用。但也因为引入了很多内容,导致参数变多,也使得训练难度加大了很多。因此很多时候我们往往会使用效果和LSTM相当但参数更少的GRU来构建大训练量的模型。

       AL Lab : 这个有很多,会很多方面来讲。

 

    

  系统架构

  为了加快训练速度,这就需要加大batch size。针对这个问题,AI Lab设计了四个特别的模块,这些模块之间彼此独立:Reinforcement Learning Learner、AI Server、Dispatch tchsizeModule 和 Memory Pool。

  • AI Server 是为了获取样本数据而设计的模块,在Server中涵盖了AI与环境之间交互的所有逻辑。Server会产生多组episodes,在这些episodes中我方AI使用来自RL Learner的行为策略,而对手的行为则是使用Boltzman 探索算法(一种基于游戏状态特征提取的算法)进行预测。
  • Dispatch Module 的用于对Server 产生的sample数据(回报、特征、行为选择概率等)进行收集,将这些数据进行压缩后存储到Memory Pool中去。一个Dispatch Module可以连接多个AI Server以便于接收多个Server的输出数据以增加Dispatch Moudule的利用率(毕竟压缩加传输速度要远远快于Server生成一个episode的速度)。
  • Memory Pool 主要用于对训练数据的存储。它使用一个循环队列来存储数据,根据数据生成时间进行排序。由于是循环队列模式,因此支持变长样本。
  • RL learner 是一个分布式的训练环境,由于需要大规模的 batch size,多个 RL learners 分别去获取 Memory Pool 中的样本数据,并将这些Learners捆绑在一起(当成一个大的RL Learner)。那么每个 Learner 都会得到不同的梯度结果,如何去统一这些梯度结果呢?该论文使用 ring allreduce algorithm 对所有梯度值进行平均。将平均后的值当成每一个 Leaner 的梯度进行计算。

       (     batch size   :  https://www.cnblogs.com/alexanderkun/p/8099450.html   

         



这篇关于王者荣耀第一弹的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程