网易庖羲GDC分享——模仿进修在游戏人工智能的运用经验_玩家_数据
网易伏羲实验室关注人工智能领域,曾推出游戏行业人工智能办理方案,拥有AI反外挂、AI竞技机器人、AI 对战匹配以及 AI 剧情动画制作四项AI能力。本次分享的内容便是源于AI竞技机器人在游戏中的利用履历。
以下是分享实录:
王蒙(怀沙):大家好,我是来自网易伏羲实验室强化学习组的研究员王蒙,很高兴能够有机会参加本次GDC AI峰会,本日我分享的主题是“Beyond Pre-training: Experiences of Applied Imitation Learning in Game AI”,亦即我们将模拟学习运用在游戏场景下的一些履历和体会
近年来,强化学习在游戏领域得到了快速的发展,在围棋、Atari、Dota、星级争霸等一系列繁芜的游戏中都达到了人类顶尖选手的水平。强化学习紧张通过智能体与游戏环境不断交互得到大量样本,并根据这些样本来优化自身总褒奖回报的办法去优化自身的策略。模拟学习是另一种办理序列决策问题的思路,与强化学习不同,模拟学习一样平常都是从事先网络的人类数据中去模拟人类办理问题的过程,来优化自身的策略。下图给出了模拟学习和强化学习的一些异同。
游戏天然就会有大量的人类玩家参与,因此也是一个运用模拟学习的空想场景,在AlphaGo,AlphaStar等顶尖强化学习AI的开拓过程中,都有模拟学习的影子。在这些事情中,模拟学习一样平常会用来预演习一个根本的AI,以便于减小智能体演习过程中的探索空间,即先通过学习人类专家的数据(棋谱,游戏replay数据)等,得到一个具有一定水平的预备AI,然后再在此AI的根本上,引入强化学习演习来连续提升该AI的水平。除了这种常规的模拟学习运用办法以外,我们还进行了更多的探索,考试测验将模拟学习和强化学习结合起来去办理一些更繁芜的问题,得到了一些有趣的结果。我分享的紧张内容可以分为以下四个方面:直接应用模拟学习及厥后果、模拟学习预演习对强化学习的加速浸染、基于模拟学习进行不同风格AI的演习、模拟学习和强化学习相结合来得到更像人的AI。
为了运用模拟学习,我们网络了逆水寒游戏流派竞武玩法中的玩家操作数据,后续的算法演习场景也紧张是在该玩法中进行的。
首先来先容下我们单独运用模拟学习算法进行AI演习的情形,由于网络到的全部玩家的数据量相对是比较大的,并且玩家的水平也不尽相同,我们首先须要从中筛选出一些高质量的数据。在这一部分,我们的规则相比拟较大略,紧张可以分为两部分:一部分是担保一场战斗数据的完全性(如:打消非正常结束的战斗),另一部分是担保较高的战斗水平(如:低rank玩家击败高rank玩家)。在得到数据后,我们还须要对数据进行解析,得到可以用于智能体的(state, action)数据对。对付state部分,首先我们会以与仇敌的间隔和角度以及与舆图中央的间隔和角度的形式记录玩家的相对位置。对付技能干系信息,我们将记录每个技能的可用情形;末了,对付每个玩家,还有一些与玩家状态干系的属性信息,例如血量、邪术值、buffers 和 debuffers等,我们将所有这些信息都记录在名为 status 的部分中。action可以分为两部分,第一部分包括移动、跳跃和躲避干系的动作。对付移动和跳跃,我们为每一个设置了八个离散的方向,包括向上、向后、向左、向右以及向左、向左、向左、向后、向后,对付躲避,我们只利用上,后,左,右四个紧张方向。action的第二部分是技能,我们为每个技能设置一个动作,并为须要目标的技能手动设置目标。我们要办理的下一个问题是每个玩家的数据有限,而不同的玩家可能会有相互抵牾的行为模式,如果我们将所有数据稠浊在一起演习一个模型,这些相互抵牾的数据很可能会影响演习效果。为理解决这个问题,我们引入了特色增强并添加了一些主要的信息来帮助模型区分来自不同玩家的数据。经由多次实验,我们创造每场战斗花费的韶光和每场战斗如何结束是两个主要的成分,因此我们为每个state添加了两个维度,分别代表了战斗韶光和战斗结果。此外,由于我们没有利用 LSTM 或 GRU 等序列模型,我们添加了玩家或智能体在上一步实行的动作来捕获序列信息。
将玩家的日志解析为(state, action)数据对后,我们创造数据中不同动作的频率差异很大。下图中的左上分布图显示了原始数据中每个动作的原始频率。我们可以看到,除了几个技能外,移动动作在这个分布中占主导地位。我们利用以下两个规则对数据进行预处理,以使动作的分布更加平衡。
• 首先,如果玩家连续向一个方向行走超过10帧,我们将只保留第一帧和末了一帧。这将大大减少移动动作的数量。
• 接下来,如果技能帧前后5帧都是移动帧,我们会将这些移动帧都改成技能帧,由于我们假设对付人类玩家来说,如果在这一帧施放技能是得当的,那么前五帧和后五帧也可能适宜这个技能,由于人类的反应韶光可能已经超过五帧所对应的韶光了。经由这些预处理,虽然还有很多移动动作,但是动作的分布更加均衡,如下图的左下分布图所示。
终极,在仅利用模拟学习的情形下,我们得到了一个相称于中级强化学习AI的模型,其对我们的中级强化学习 AI 的胜率约为 47.3%,该中级强化学习AI 在线上超过了90% 的人类玩家。
在考试测验了纯模拟学习之后,我们想看看模拟学习是否可以加速强化学习的演习过程。由于模拟学习模型类似于强化学习中的actor,以是我们引入了基于Actor-Critic的IMPALA作为我们的强化学习算法。一开始,我们只是将预先演习好的模拟学习模型加载到actor中,然后连续用强化学习算法进行演习。但是演习总是在强化学习阶段的早期就崩溃了。在对代码和模型进行剖析之后,创造演习崩溃的紧张缘故原由是在模拟学习转向强化学习的初始阶段,actor和critic的能力并不匹配。详细来说,当actor加载我们的模拟学习模型时,已经具有了较强的能力了,但是由于critic网络在模拟学习阶段并没有被演习过,仍旧在利用随机权重参数,导致了critic无法精确评估actor决策的利害,从而导致演习过程崩溃。为理解决这个问题,我们在强化学习演习的初始阶段增加了一个额外的critic演习阶段。在这个阶段中,虽然预演习的模拟学习模型被加载到了actor中,但它的权重会被冻结,只有critic网络的参数会被更新。这个阶段会持续一段韶光,直到我们创造critic稳定下来之后,才会切换到actor和critic同步演习的模式。
在终极结果上,我们比较了两种不同的情形:
• 首先,我们比较了引入reward shaping的情形下模拟学习的加速效果,结果如下图左表所示,与从头开始演习比较,预演习的模拟学习模型可以节省约50%的迭代次数。
• 其次,我们移除了强化学习中reward shaping,验证在这种更难的情形下模拟学习的加速效果,结果如下图右表所示,与从头开始演习比较,预演习的模拟学习模型可以节省80%的迭代次数。
接下来,我们考试测验通过模拟学习来演习具有不同行为模式的AI。办理方案的整体流程如下图所示。
在网络了玩家数据后,我们会为每场战斗设计一些特色,然后利用聚类算法以无监督的办法将数据分成几类。末了,我们可以对这些种别中的每一个运用模拟学习,产生一个对应模型,每个模型代表相应类别的战斗风格。在这个过程中,首先要做的是设计聚类所需的特色。我们将特色分为三个部分。
• 第一个是战斗信息,包括战斗韶光和战斗结果,如前所述。
• 第二部分是玩家书息,包括玩家造成的侵害、玩家的动作分布以及玩家的等级和装备评分。这些信息描述了玩家的属性和技能偏好。
• 末了一部分是序列信息,包括两个玩家之间的间隔序列、玩家到舆图中央的间隔序列、玩家血量序列和玩家buffer序列。由于我们要聚类的工具是一场战斗,亦即一系列(state, action)数据对组成的序列,这部分数据供应了聚类算法所需的序列信息。
利用这些特色,我们考试测验了不同的聚类参数,并通过将聚类结果压缩到3 维来进行可视化,创造将数据聚成 5 个种别对付我们的数据来说已经足够了。我们通过模拟学习基于每个类别的数据演习了一个模型。通过不雅观察这些模型与强化学习模型对战的过程,我们创造在不同类别的数据上演习出来的模型确实会有不同的战斗模式,例如有的会更喜好用轻功,而有的则更善于利用闪避类技能。详细战斗过程可以拜会我们报告中的***。
末了,我们考试测验将模拟学习和强化学习结合起来,来修复强化学习AI中的一些不像人的行为。下图展示了一个这样的例子。
在一场战斗开始时,强化学习AI 更喜好呆在原地等待对手靠近自己,而不是像人类一样逐渐靠近对手。须要把稳的是,虽然这种行为模式不像人类,但实际上AI学习到这样的策略是合理的。由于如果仇敌离强化学习AI很远,仇敌也不会侵害到他,从reward的角度来看,留在原地等待仇敌靠近是合理的。但是如果仇敌被人类玩家掌握,看到一个每次开场都一动不动的对手肯定会觉得到比较奇怪。目前处理这种问题的方法一样平常是引入一条额外的规则来约束强化学习AI,例如“在一场战斗开始时向仇敌移动”,这将迫使强化学习AI 与仇敌保持适当的间隔。但在实践中,这样的规则很随意马虎被玩家利用,从而以一些意想不到的办法击败强化学习AI(另一种可能的办法是通过reward shaping重新演习一个AI,本钱会更高并且结果也存在着很高的不愿定性)。针对这种情形,我们考试测验将模拟学习和强化学习结合在一起来办理这个问题。规则仍旧是必要的,我们将规则和强化学习AI结合在一起,然后让其进行多场对战来网络数据。然后,我们会加载强化学习AI并利用模拟学习基于上述数据对其进行微调演习,这一步的目的是教会模型学习该规则。接下来,我们将加载微调模型并利用原始褒奖实行额外的强化学习演习过程,这一步的目的是确保规则不会被人类玩家利用。通过这种方法,我们可以修复强化学习 AI 不像人的一些行为,同时尽可能降落其被人类玩家利用的风险。演习结果可以参照我们报告中的***。
在这个过程中,我们还创造了一些意想不到的有趣结果。下表显示了 AI 在额外强化学习过程之前和之后的规则知足率。从表的第二行可以看出,通过模拟学习微调的模型的规则知足率都非常高。但是在第三行,我们可以看到规则1的知足率大幅低落。规则1的意思是,当对手浮空时,玩家该当施放技能A。我们的专家供应了这个规则,由于技能A会延长对手的浮空韶光。但是在强化学习演习之后,我们的 AI 在这种情形下彷佛更喜好技能 B。通过进一步的技能剖析,我们创造技能A的施法韶光是技能B的两倍。虽然技能A会延长对手的掌握韶光,但技能B会产生更多的侵害。因此在这种情形下利用技能B有可能是精确的,我们的AI考试测验着自行去纠正这个规则。
对付第三条规则,我们的专家认为,当对手被冻结时,玩家该当施放技能C,由于技能C会对被冻结的物体造成双倍侵害。在强化学习演习之后,我们的 AI 仍旧保持了这种行为模式。
以上便是我这次分享的全部内容,在我们的事情过程中,越来加倍现模拟学习和强化学习是可以互补的,模拟学习除了为强化学习供应预演习模型之外,还有更多非常有潜力的运用处景,当然,也存在着很多困难和寻衅等待着我们去办理。在后续的事情中,我们会考试测验在更繁芜(大型多人沙场)、更多样(体育游戏、动作游戏)的游戏场景中验证模拟学习的效果。
本文系作者个人观点,不代表本站立场,转载请注明出处!