网易伏羲GDC分享:模仿学习在游戏AI的运用经验/语音驱动表情动

您所在的位置:网站首页 网易游戏AI动漫人物 网易伏羲GDC分享:模仿学习在游戏AI的运用经验/语音驱动表情动

网易伏羲GDC分享:模仿学习在游戏AI的运用经验/语音驱动表情动

2024-05-29 00:49| 来源: 网络整理| 查看: 265

0 分享至

用微信扫码二维码

分享至好友和朋友圈

7月19日,游戏开发者大会(GDC)正式开幕,这是一场全球游戏开发者的盛会。开幕当天,网易伏羲实验室的研究员王蒙博士分享了AI竞技机器人在游戏中的运用经验。网易伏羲AI实验室人工智能专家, 虚拟人团队负责人丁彧分享了网易伏羲在游戏场景中动画合成方面的AI算法。

据了解,网易伏羲实验室在人工智能领域积极探索,推出了游戏行业人工智能解决方案,横跨AI反外挂、AI竞技机器人、AI 对战匹配以及 AI 剧情动画制作四大AI能力,实现了AI 技术在游戏行业的新突破。

以下内容分为两部分:

王蒙:模仿学习在游戏人工智能的运用经验

网易伏羲实验室的研究员王蒙博士于2018年正式加入网易,目前主要负责模仿学习在游戏中的研究和应用落地工作,在AAAI、IJCAI、COG等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 仍然保持了这种行为模式。

以上就是我这次分享的全部内容,在我们的工作过程中,越来越发现模仿学习和强化学习是可以互补的,模仿学习除了为强化学习提供预训练模型之外,还有更多非常有潜力的应用场景,当然,也存在着很多困难和挑战等待着我们去解决。在后续的工作中,我们会尝试在更复杂(大型多人战场)、更多样(体育游戏、动作游戏)的游戏场景中验证模仿学习的效果。

丁彧:语音驱动表情动画合成

网易伏羲AI实验室人工智能专家, 虚拟人团队负责人丁彧专注于智能虚拟人研究及落地工作10余年,发表论文40余篇(包括中国计算机学会A类会议CHI、CVPR、AAAI、IJCAI、ACMMM)。获ICCV2021人脸表情国际挑战赛(ABAW)“人脸表情动作单元检测”冠军、“情绪识别”冠军、和“愉悦度-唤醒度评估”亚军。负责研发了领先业界的游戏虚拟人物剧情动画合成技术,并载入《(2020)中国虚拟数字人白皮书》;参与起草行业标准《(中国)虚拟数字人指标要求和评估方法》。

本次GDC大会上,他就网易伏羲在游戏场景中动画合成方面的AI算法进行了分享。

以下为分享实录:

大家好,我是丁彧,来自网易伏羲人工智能实验室,非常高兴有机会介绍我们在游戏场景中动画合成方面的工作,更具体来说,我们的动画合成聚焦在虚拟角色在说话表达时的面部表情动画参数合成算法。

现在,让我们一起来分析下问题的背景和解决问题的思路。

首先,我们一起来观察游戏应用中,已存在的动画参数制作方法和限制。传统方法中,动画参数依赖于经验丰富的动画师手动制作完成。一般来说,一段时长10秒的动画通常需要两天甚至一周的时间才能够完成,更为精细的动画,需要更长的手动制作时间。近些年来,随着动作捕捉技术的发展,制作一条10秒的动画依然需要半天时间,包括数据捕捉和手动矫正。总体来说,手动制作和动画捕捉都非常耗时。聘用经验丰富的动画师和建立动作捕捉系统经济成本都非常高。更为值得关注的是,手动或动捕制作的动画数据仅仅能应用于特定的剧情,复用性差。这些原因就导致了玩家经常看到的动画片段重复使用,损失了动画数据对剧情的匹配性,同时又缺乏了动画的多样性。

此外,使用手动和动捕动画数据过程中,如何拼接两段动画数据一直是一个难题。通常情况下,动画工程师们选择一个插值函数去完成拼接的功能。本质来说,一个插值函数总是能够在部分动画数据拼接上表现很好,但又同时在其他的数据拼接上失败,性能欠佳。这主要是因为插值函数定义了一种固定的模式去补全需要插值的信息,如果待拼接的数据正好符合插值函数定义的模式,那么效果就会很好,另一方面,还存在大量待拼接的数据是不符合插值函数定义的模式,这种情况下,插值函数就无法补全有效的信息,插值后动画数据缺乏自然性和真实性,特别是高频细节信息。

观察以上提到的动画参数制作方法和它们的限制,我们AI从业人员提出一个问题,是否有可能自动生成动画参数。具体而言,我们今天汇报的工作聚焦在说话状态下虚拟角色表情动画参数的合成算法。针对这个课题,我们的目标是降低动画参数合成的时间成本,同时我们也致力于生成高质量的动画参数。何为高质量的动画参数呢?高质量的动画参数应该是自然的、生动的,类人的。生成的动画参数能够传递恰当的情绪和意图,同时它们也应该是多样化的,而不应该是重复性的。

在我们当前的工作中,一段15秒的表情动画自动合成少于60毫秒,一段20秒的肢体动画生成时间低于600毫秒。我们的工作已经应用于网易开发的多款游戏和在线教育产品。

现在让我们一起来思考下,当我们说话的时候,针对我们的行为,究竟发生了什么?事实上,大量的科研学者已经报道了我们的行为能够强调我们表达的想法,也反映了说话的韵律节奏,补充了语义信息,同步也传递了表达意图和交流意图。也就说,说话的过程中,人的表情行为是与同步说话的语音和说话内容紧密相关。正是这一点,启发我们思考,基于语音和行为的时序关系,如何根据同步的说话语音数据,生成动画参数。

为了完成以上的目标,我们的解决思路是采用深度神经网络来实现语音到动画参数的映射,采用神经网络学习和捕捉人类行为和语言之间的时序相关性。在动画参数合成阶段,神经网络使用语音作为输入,生成动画时序参数。在该阶段,神经网络能够把其学习到的时序关系注入到生成的动画数据中,这样生成的动画数据就能够反映出同步语音的韵律节奏,甚至是语义信息。

众所周知,神经网络训练需要大量的数据。为了获得充足的数据,我们使用了vicon光学动画捕捉系统用于捕捉身体动画,使用dynamixyz用于捕捉面部表情。在我们的工作中,嘴唇和下颚(嘴唇区域)每帧的动作由28维向量表征,眼皮和眉毛由22维向量表征,身体由76维身体向量表征。动作捕捉方式确保了较高质量的原始数据。为了获得更高质量的数据,我们手动完成面部和身体的重定向,以便降低录制数据演员和目标虚拟角色之间的骨骼和面部差异带来的误差。

训练数据由大量配对同步的语音、表情和肢体动画组成。每一个配对都对应一个句子。方便起见,我们用T表示语音长度(帧数)。下半面部表情由持续T帧的28维动画序列表示;上半面部表情由持续T帧的23维动画序列表示;身体动画则由持续T帧的76维动画序列表示。由于下半面部、上半面部和身体与语音有着不同的时序关系,因此,我们的算法分为独立的三个神经网络,分别完成下半面部、上半面部和身体部分的动画参数合成。

现在,我们一起来聊聊下半面部表情参数动画合成算法,涉及到嘴唇和下颚的动画。应该不少听众可能都会比较熟悉这个课题。观察大多数已发表的论文,语音特征经常被用作输入,输出嘴唇区域的动画参数。当然,语音特征确实包括了全部的语音信息。但是,另一方面,语音特征保留了一些与动画不相关的信息。比如,特定于说话人的音色信息就包括在语音中,可是,音色信息并不能包含任何与动画参数相关的信息。如果语音特征受到特定说话人音色的干扰,那么这些语音特征也一定会损害生成动画的质量。当然,我们也可以试问我们是否能够使用已剔除或与音色无关的语音特征呢?非常不幸,绝对与音色无关的语音特征提取非常困难。其实,我们也一直在努力获得与音色解耦合的语音特征。

为了规避音色等不必要因素的影响,我们没有采用语音特征,转而使用其他有效的特征。我们提出采用文本特征用于嘴唇动画合成,具体来说,就是发音的内容,音素。音素就是绝对意义上与说话人无关的信息。它也非常容易获得。对于真实语音,使用语音识别工具即可获得;对于合成语音,音素可以从语音合成器中直接获得。

这里,我再着重强调一个细节。一旦我们从语音中提取到音素序列,根据音素持续的时间,我们可以获得时序对齐的音素。操作层面上,根据音素持续的时间,我们重复音素标签,如图所示,我们就能够得到时序对齐的音素序列。为了方便计算,我们将这个音素序列的频率设置为与动画序列的频率一致。这张幻灯片展示了一个例子“oh yeah, you don’t want to tell me where she is”。根据语音信号,语音识别工具可以输出时序对齐的音素序列。就像幻灯片中观察到的一样,音素按照它们持续的时间重复对齐排列。

之前也提到过,神经网络用来提取音素和动画参数的时序关系。一般来说,我们会考虑使用LSTM,长短记忆网络。它是一种典型用来模拟时序关系的神经网络。事实上,大量的学者都已经尝试使用过LSTM处理时序关系,并且有着大量成功的实验结果。另一方面,值得注意的是,LSTM是一个递归神经网络,它逐帧输出时间序列。下一帧的输出依赖于前些帧的输出。这样一个递归的计算模式导致计算过程非常耗时。因此,我们尝试使用另一个神经网络结构,卷积神经网络,CNN。CNN通过并行计算完成时间序列的输出。在我们的实验中,对于一段15秒的序列来说,LSTM花费500至800毫秒,然而,CNN只需花费20至60毫秒。

这张幻灯片展示了具体的神经网络结构,输入是一段时序对齐的音素序列。我们方法采用了12层神经网络,每一层都是一残差层。它的输出是持续T帧的28维动画参数序列。在我们的实验中,T取30。训练数据包含865句样本,每一句都持续5至15秒。

这张幻灯片显示了四组对照的视频,每组视频由一对虚拟角色视频组成,它们展示同一个角色说同样的话,但是驱动它们的动画参数不一样,左边视频中的虚拟角色由神经网络算法合成的动画参数驱动,右边视频中的虚拟人角色由动捕数据驱动。可以观察到每组视频中左右虚拟角色展示的表情动画参数都非常接近,这就意味着神经网络算法有能力合成高质量的表情动画参数。

进一步,我们也尝试将嘴唇区域动画合成算法扩展到没有预定义三维角色模型的二维像素级说话人脸视频合成中,该工作也发表在AAAI2021,题目为write-a-speaker: text-basedemotional and rhythmic talking-head generation。这段视频依然展示了一组视频,左边人物展示了由以上介绍算法合成的效果,右边是由相机录制的真实说话人视频。我们可以观察到算法在二维视频效果中,依然展示了高质量的效果。

接下来,我们谈谈上半部脸表情合成的工作,具体是涉及了眉毛和眼皮的动作。类似于嘴唇区域的动画生成,我在这里重复两个应该注意的问题,一个是使用时序对齐的说话文本信息,而不是语音信号。这里,我们也强调有别于下半脸部使用时序对齐的音素,上半部脸表情动画合成使用时序对齐的文字(说话内容)信号。

这张幻灯片显示了上半部脸面部表情的神经网络结构。输入是时序对齐的文本序列,输出是持续时间T帧的23维动画序列。这个神经网络是一个典型的编码-解码网络结构。在图中,编码器由黄色标记,解码器由绿色标记。编码器从文本信号中提取有意义的信息,并由一隐层编码表示,然后再由解码器将隐层编码转换/解码成输出的动画参数序列。训练集由50分钟有效数据构成。

现在,我重复四组对照视频,这次让我们关注眉眼区域,可以观察到左右视频展示的动画参数非常接近。这就意味着我们的算法是有效的,能够生成合理的、自然的动画参数。

这里,我展示一段来自网易出品游戏《逆水寒》中的片段,其中表情就是由以上介绍的算法生成得到。

再展示一段来自网易出品的另一款游戏《天谕》中的片段,其中表情也是由以上介绍的算法生成得到。、

可以看到,我们的工作展示了AI能够帮助动画参数合成。一段10秒的动画序列能够自动在60毫秒内生成,而不再需要花费数天的手动制作。

总体来说,我们的工作说明了以下几个方面:1)说话状态下,同步的动画和语音之间存在着相关性,表情行为同步与说话内容和语音韵律节奏;2)深度学习技术能够建立人类表情行为和同步语音之间的相关性,并能够根据语音信号,自动生成表情行为动画参数;3)依赖于深度学习技术,针对一句话,表情行为动画参数生成可以低于60毫秒。

当然,我们的工作也存在一些缺陷和不足:1)生成更富有表达能力的动画还需要同行从业者们很多的努力;2)重定向问题依然没有得到高质量的解决,依然困扰着动画输出质量;3)训练有效的神经网络依赖于高质量的动捕数据,如何降低数据采集的经济和时间成本依然是值得研究的问题;4)动画风格仅取决于录制的数据,如何提高风格的泛化性,减少数据采集量,依然具有现实意义。

在将来的工作中,我们会关注如何同时使用文本和语音信号,从而生成更富有表达能力的动画参数,另一个问题,我们至今还未解决的是,如何在一个神经网络框架下同步处理多模态动画,同时,一个可能长期存在,非常值得我们努力的方向是,如何生成更富有语义信息的面部表情和肢体动画参数。

GDC演讲地址:

https://schedule.gdconf.com/session/ai-summit-beyond-pre-training-experiences-of-applying-imitation-learning-in-game-ai/879551

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

/阅读下一篇/ 返回网易首页 下载网易新闻客户端


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3