编辑 | 青暮
视频回放链接:https://live.yanxishe.com/room/972
人工智能技术已经进入从感知智能到决策智能演变的关键节点,决策ai技术的前沿进展和突破也到了在实际场景部署和应用的阶段。决策ai技术应用的成功与否直接决定了这一技术在产业界的认可程度和决策ai技术的发展方向,应用领域的难题也可以反过来指导决策ai理论的发展和创新。另一方面,建立成熟的,有一定规模的应用生态成为了决策ai技术应用的另一个重要议题,生态构建的成功与否体现了决策ai技术的应用门槛、其通用能力和泛化能力以及对不同任务的适应能力。应用生态也可以更加广泛地拓展决策ai的应用领域,打通不同应用领域所面临的问题和挑战。
此外随着人工智能技术的发展,从atari到go再到星际争霸2,结合深度学习、强化学习以及大规模分布式平台训练出来的ai已经在各个竞技项目的水平已经比肩甚至超越了人类,但在复杂场景下ai仍然面临着巨大挑战,游戏ai落地还需解决训练成本,模型的泛化性和鲁棒性等多个难题。
决策ai是一类不同于感知性ai的人工智能方法,它更侧重的是在动态环境中进行决策和交互的策略网络。
决策ai的难点与挑战
决策ai主要包括以模仿学习、强化学习为主的策略搜索方法的技术。目前,它主要应用于自动驾驶、城市交通控制、游戏ai、和推荐系统等领域。
决策ai在学术和应用层面面临着三个主要的难点和挑战:
a) 环境侧的多模态输入
在环境中,模型的输入通常是多模态的。比如右上角的图片所示的典型样例:自动驾驶场景。与学术界的前提不同,实际应用中的自动驾驶模型自身无法仅仅通过一张图来获取所有的复杂环境信息输入。在当前的技术中,如果想在自动驾驶领域对周围环境进行完整的表征,则需要若干中传感器的输入,如图像、雷达等。
多模态输入的问题对于有监督学习可能相对容易,但是对于强化学习来说是一个难点。
b) 环境的动态特性和不确定性
学术界中常用的强化学习方法中,其底层模型和引擎相对简单,但对于自动驾驶或巨大的城市流模型来说,其中的动态性和不确定性是非常多的。这便会对模型的泛化和策略训练时的鲁棒性提出巨大的挑战。
c) 环境中的信息密度低问题
低密度信息是所有强化学习方法都会遇到的通用问题。与监督学习相比,强化学习需要和环境进行交互来指导网络的优化方向,因此其所能提供的信息密度相对较低。在实际的应用中这种问题会被放大。因为,在一般的情况下,对于应用环境的交互是无法做到和学术界中一样敏捷与快速的。比如在学术界的场景中,我们可以同时启动几百个进程采集数据供给一个网络训练。但是应用级别的环境,我们无法做到如此恐怖的并发量。
此外,从策略的角度出发,决策ai也存在着三大问题:
a) 仿真器和实际中的差异距离
我们知道,仿真环境无法做到与实际情况完全相同的结果。我们如果将仅仅使用仿真器所训练出来的结果不加修饰的生搬硬套于实际,可能会产生性能上的巨大偏差。
b) 安全性提升问题
在现实环境中,不论在训练还是测试的场景中,都有一些无法接受的失败场景,这些场景一旦发生,则会产生巨大的损失。比如自动驾驶或者线上部署运行的推荐服务等等。在这些场景中,除了需要考虑模型的性能外,还需要保证算法的稳定性。但是对于策略模型,其本身可是做一个黑箱,因此我们无法保证和证明其安全性。
c) 模仿机器学习中的数据位移问题
数据位移是指,人们所设计的策略网络(通常是从专家策略或从数据中学习到的策略),与实际应用中的输出无法做到完全一致,加之模型在环境中的运行具有持续性的特点,因此它们通常会产生累计误差。而累计误差在数据集中通常难以体现,因此会导致累计误差的总体偏移量逐渐加大,最终会达到模型无法学习或容忍的程度。这个问题可能会导致策略网络输出一些原数据集中不存在的、危险的结果动作。
在此处,我们以自动驾驶为例,介绍决策ai在其中所面临的一些问题。
a) 模仿学习
首先我们介绍一个模仿学习的例子:条件模仿学习conditional imitation learning.
条件模仿学习的目标是实现端到端的模仿机器学习模型。其输入端所接入的输入数据是例如图像等观察数据observation data,其输出是驾驶的动作action,即控制信号。
条件模仿学习提出,模型应该在输入传感器信号的同时,输出一个离散的驾驶的控制信号command,这个控制信号可以用于控制车辆的动作。
据此,网络可以分成两个部分。
第一个部分为主干部分,此处所使用的是一个resnet网络,当然也可以是cnn、transformer等其他结构。
第二个部分则需根据command的不同分成不同的分支,每个分支负责对command产生不同的实际操控动作。
因此,模型可以实现对当前环境的解读工作,也可以将驾驶所需要的部分放在模型前面,并且共享参数。最后,随着操控指令command的不同,驾驶车辆可以做出不同的动作。
条件模仿学习是一个具有代表性的模仿机器学习工作。很多后续工作借鉴该方法的设计语言和模型结构。
上图的第二张是条件模仿学习的一个变种形式,cirls。它在原始结构的基础上,使用了更深的resnet,并且在输入端考虑了车辆的速度。此外,它的输出端也有一个branch分支,来负责速度的输出。网络中还有速度输出的loss函数。这样做是为了让模型能够在输入观测数据的同时,考虑车辆的速度因素。
b) learning by cheating
第二个例子,learning by cheating,欺骗式学习。它要求在原始的基础上进一步强化模仿学习的性能。它提出,如果我们希望模型根据输入的rgb图像直接学习出一个动作,其难度较高,但是如果能够得到一些具有privileged特权特点的信息,这些信息是从输入中无法得到的,那么在训练中,算法就可以将这些privileged特权模型当做欺骗模型,并且在训练中使用在线的目标模型,从而避免模仿学习的偏移问题。
它的具体做法是,首先训练欺骗模型,然后在线地训练目标模型。也就是说目标模型在训练的过程中,算法可以直接将其输入分给另外的模型,从而得到两个模型的动作结果。如此一来,即使目标模型在运行中出现一些偏移,算法也可以直接反映到目标模型应该如何改进的方向上从而取得更好的效果。
它的另一个提升在于,模型不会直接输出动作信号,而是将其输出分拆。模型首先输出一条预测的行进轨迹,具体来说,此轨迹是5个预测的驾驶点。有了驾驶点后,模型便可以通过一些传统的控制方法,如pid控制器来得到最终的在汽车上执行的控制信号。因此,即使我们的预测轨迹有一些偏差和误差,算法也可以对其加以限制。如此一来,我们的pid控制器得到的驾驶信号的安全性就能得到提升,pid控制器对噪声输入也就更加鲁棒了。
lbc相对于前文的cil方法,具有大幅的性能提升。在最高版本的仿真器上,lbc在有行人和无行人的场景中都能获得更高的仿真成功率。
在这里,他们做了一些错误分析。
从图中我们看到,在各种场景中,lbc犯错的次数比cil方法低的多。其中我们主要看一下交通灯场景,如果模型的输入只有图像信息,那么它的交通灯信息只能占到很少的部分,因此学习困难较大。但如果我们有了特权模型,其中交通灯信号就能通过较容易的方式交给策略网络,也就能实现十分明显的性能的提升了了。
c) affordance learning
对于强化学习方法,文章也进行了若干尝试。对于强化学习,如果算法直接使用强化学习训练具有大量参数的模型时,如resnet,那么模型可能会无法收敛。因为其输入信息源的信息密度较低。因此我们需要通过一些手段来降低最终收敛所需的数据量和抽象难度,以此来满足强化学习的数据需要。其中第一解决方法是启示学习affordance learning。
启示学习(affordance learning)方法假设学习空间中存在一种表示,它能够从输入的数据中得到一个包含所有驾驶信息的全量表达信息latent representation,我们只需要将全量信息作为强化学习的输入,就可以降低表达的维度、降低强化学习所需的复杂度和收敛所需的数据量和计算次数。
此时的输入仍然是传感信息,它首先通过有监督的方式预测此时交通灯的状态以及距离等标签信息。然后算法将head去掉,将骨干冻结,再将前面的输出作为强化学习环境的输入,从而观察数据,并进行强化学习。通过这样的方式,算法就能在计算复杂度可以允许的情况下获得较好的收敛效果。
d) latent reinforcement learning 潜在强化学习
第二个思路与第一个思路类似,但是它不再需要感知的标签。它只需要一个变分编码器vae来重构模型的输入观察信息本身。
如图所示,在输入了rgb图像后,模型能够通过训练变分编码器,输出与输入相同的rgb图像。那么此时,我们可以通过网络中的编码器encoder得到低维度的驾驶相关信息。然后模型可以再使用编码器的输出作为强化学习的观测输入,从而训练强化学习相关的部分。这种方法也取得了不错的效果。
e) transformer
最新的方法则是借鉴了transformer的设计思想。transformer的强大需要庞大数量的带标签数据集合。因此,对于transformer的成功应用,也能直接将其作为网络的直连部分使用。
比如在这篇论文的工作中,它将transformer用作多模态融合信息。从图中我们可以看到模型由两个模块组成,它们的输入分别是rgb的图像以及雷达二值图。这两类输入信息的处理流结构互相独立,并分别得到输出。在模型的中间部分,算法使用了transformer结构来融合两者的特征图feature map。在融合层的选择上,该模型使用了attention注意力机制,并在融合后,将特征图送回网络,得到下一层的结果。
该文章认为,如果只使用rgb的原始输入,则算法对于“其他车辆突然出现在摄像头范围内”的行为事件的感知能力差,因此需要雷达数据的多模态辅助。但是雷达信号仅在距离较近的时候具有较强的信息密度;当距离较远时,其感知能力和感知效果较差。值得注意的是,雷达对于交通红绿灯信号是没有感知能力的。因此,作者通过多模态输入以及基于transoformer的融合结果,实现对这两者输入处理能力的加和。
此外,该工作也没有直接输出控制信号,而是借鉴了之前的工作,输出预测的预测轨迹。具体来说,它没有输出具体的预测点,而是通过一个循环网络(门控循环单元gru)结构来迭代地输出若干个坐标点,再通过将这些坐标映射到频率坐标系中,然后将频率坐标系中的结果输入给pid控制器,并最终得到最终的输出给汽车的动作控制信号。因此我们看到,这种方法融合了模仿学习的优点,还加上了transformer的交互能力,实现了目前模仿学习领域中最好的效果。
在这里他们进行了效果对比。但是其公平性有待商榷,因为其中所应用的专家策略本身,就已经在借鉴了前述方法进行了部分更新。但我们目前仍旧认为,该方法的是有效的。只不过其实际的提升不会像表中结果所示一样夸张。
此外,他们分析了错误类型。从表格中我们可以看到,模型算法的主要提升点是“它车出现collision vehicles”和“其他物品出现collision layout”场景的规避。对于交通灯场景的表现上,它也有一定的提升,但是并未从本质上解决交通灯的问题,也就是交通灯的信息在rgb图像上本身的学习难度仍旧很大。
transformer还提供了关于attention的可视化解读。该工作将中间层所属楚的特征图feature map进行了可视化处理,并发现transformer可以学习到对当前驾驶最关键的决定性信息。比如,他们发现rgb图像中,它车和交通灯模块的关注度提高,这符合我们的预期与人类社会的基本交通经验。该发现证明了其提出方法的有效性。
以上便是自动驾驶和决策ai的发展历程。
我们基于决策ai构建了一项自动驾驶的决策ai平台,名叫 di - drive。它的功能主要是将模仿学习、强化学习为代表的决策ai方法融合到一起,并且,将同步融合各种不同的模拟数据的输入输出。同时,它还能定义自动驾驶中的策略和环境接口。图中展示了上述决策过程。
它的主要优点如图所示。在这里我们主要讲其中的第四点。驾驶场景和案例。
当前学术界对于自动驾驶的评价指标,需要算法首先给定驾驶的起点以及终点,并给出它车的数量和行人的情况,然后直接测试模型在该场景下的成功率。然而他车和行人的轨迹和行为都是随机的。
在该种前提下,它可以较为全面的评估驾驶策略的有效性和成功率,但是它无法具体评估某项驾驶策略在具体场合中的表现。例如,某项策略在红绿灯场景的表现很好,但是对于跟车和超车的表现则未能尽如人意。
因此,为了能够分场景和案例的对驾驶策略进行评估,我们在ai-drive的强化学习模型中提出了casezoo技术。
casezoo的主要特点是,它首先使用了很多实际采集的真实数据,即将超车和跟车等场景的数据在仿真器中进行了构建。第二点,它的每个场景都包含一个行为树(behaviors tree)和驾驶标准(criterion)。
行为树是指:那些必须按照具体的步骤和场景完成特定的行为。比如上面的第三个图中所示的场景中,若黄车想进行超车行为,则蓝车也要跟随其完成超车。那么此时需要满足基本的驾驶规范,即没有逆行和超速等违规行为。
因此,它需要从公共的逻辑出发,但是此时的场景中会有一些噪声影响。例如,车间距离可能有所差异。但是不论当前场景如何,它的目标都是明确的,即完成后车跟随前车进行超车的任务,也就是以相同轨迹完成超越前车。但如果后车并没有按照前车轨迹行进,不触发行为树的完整路径,而是以其他方式完成该任务(比如用另一条车道完成超车),则此场景不会触发。
通过这样的方式,我们能够对各个场景的驾驶行为进行细分和归类。
决策ai包括很多方面。人工智能现在已经广泛的应用在人脸识别等感知优化的场景,但是想让模型具有真正的智能,则需要将其落实到一些需要进行决策的场景。游戏ai便是其中的一部分。
在具体介绍之前,我们首先要对其提出一个问题——我们为什么要研究游戏ai?我们在其中投入了大量精力和计算资源,其目的如何?
agi
首先我们介绍一个基础名词,artificial general intelligence,agi,即通用人工智能。
相信我们每位人工智能的从业者都是想造出具有通用能力的人工智能模型,并且幻想着有朝一日它能像真人一样成为我们的朋友,和我们自然的交流、工作和生活。但是我们如实现和何达到通用人工智能的程度呢?
其实现在人工智能已经应用于诸多领域中了。比如在人脸识别领域,我们每天手机的解锁或支付工作都会用到人脸识别技术;在自然语言处理领域,我们在进行自动机器翻译、语音转文字的识别、呼叫siri、和小爱同学交流的过程中都用到了自然语言处理技术进行文本语言处理;在推荐系统领域,我们在每天打开购物网站挑产品,或者看新闻网站的时候,应用都会给我们推荐很多可能感兴趣的类似的内容——它掌握了我们的喜好,并且总能给我们推荐一些欲罢不能、流连忘返的商品和内容。
人工智能已经深入到生活的方方面面。但是上述的应用其实都没有达到通用人工智能的程度。我们通过这些例子,说明ai仅能在某些领域中完成对应任务,但是无法达到通用人工智能的高度。
我们在研究通用人工智能效果或者能力程度的时候,通常需要对其进行评估,或者进行直观的比较。但是目前,这些评估都是单方面针对ai程度的,我们并没有直接将人类和机器进行直观对比。
实际上,评估人工智能效果的最直观和有效的方式,是人机比较。也就是,对于同样的任务,人类是如何进行处理的,而机器又是怎样做的。例如,我们同时要求人工智能程序和人执行相同的任务,并直观地比较两者的输出结果和实现效果。
那么对于一个复杂的任务来说,通过如此的比较,若机器能够达到和人类相同的反应,我们就可以说机器学习模型实现了与人类相当程度的智能。
如果要进行人机比较,最好的方法就是进行“人机对抗”。
人机对抗
人机对抗的概念大家都不陌生。从很久之前的格斗游戏中,比如街霸,我们就是要去挑战人工智能对手。相信大家在小的时候都曾经被机器人虐的体无完肤。
时间来到2016年,alphago的出现可以说是人工智能领域的一个里程碑。它第一次让世人了解到人工智能的强大和潜力。alphago当年在围棋游戏上战胜了最强人类选手之一的李世石。
到了2019年,也有两个让人印象深刻的人工智能工作alphastar和openai的游戏人工智能。alphastar是deepmind的一项工作,他们在星际争霸2这款游戏上进行了挑战;同时期,openai也在dota2上进行了人工智能的研究。openai的工作更具有代表性,因为它不再是1v1的游戏,而是5v5的复杂扩展场景。它涉及到了队友间的配合。这又是一项技术的突破,实现了更加复杂场景的研究。
相信大家在刚开始玩类似游戏的时候都有点“手足无措”的感觉,或者脑子跟不上手速的情况。这是因为这些游戏本身的难度就很高。那么如果在这些难度天花板级别的游戏上,ai都能达到媲美人类的效果,那就可以证明游戏人工智能的智慧水平已经到了较高水准。
到最后,我们相信人工智能能实现“终结者”的程度。在电影里,终结者是穿越到未来的2029年,并在人类世界中掀起了腥风血雨。虽然我们不想发生这样的事情,但是在看电影的时候我们还是津津乐道乐此不疲。
那么对于人机对抗,其本身就能够体现ai通用智慧的水平,也是衡量人工智能程度的一种方式和呈现。因此,很多研究人员都想在较为复杂的游戏中进行人机对抗,并在这些场景中实现技术的应用和效果的突破。如果当前的游戏任务比较难,我们希望ai能够像人一样很好的分析问题、驾驭并解决该问题和关卡。这也就可以从一些方面体现模型人工智能的发展水平和智慧程度。
alphastar都做了什么
下面我用一个例子介绍游戏ai的设计流程,即如何打造一个游戏ai模型。这里我们介绍alphastar的星际争霸2的人工智能模型。之所以选择星际争霸2,是因为它本身操作和控制难度较高,同时它也有一款相当经典的游戏,玩家群体数量较大,热度高。dota2本身是“技术战略”类的游戏,玩家有时需要同步操控上百个多种职业的士兵对象,所以其游戏难度呈现指数级上升。
因此,deepmind在围棋问题攻克之后,便以dota2为目标设计工作布局。在deepmind的心里,他们也认为dota2比围棋在难度上高一个级别。
如何设计星际争霸2的ai
我们首先介绍如何设计一个星际争霸2的游戏人工智能模型的程序。这是一张游戏截图。ai在和人类竞争的时候,一个前提是公平(拒绝开挂人人有责)。如果ai在某些方面是不公平的,这样的对抗比较是没有意义的。例如,当我们在实际生活中,让人工智能机器人和人类进行赛跑或拳击的比较对抗,这样是没有意义的,两者没有站在同一个起跑线上,具体可参考《终结者12345》。
但是在dota和星际争霸2这样的游戏中,人工智能和人类玩家是公平的。例如,人类能够从屏幕中看到图像,这个图像也可以以rgb图像的格式输入给人工智能程序。人工智能程序可以处理的信息(输入)一共有三种:
空间信息:左下角的小地图(图中给出了游戏地图的地形,以及敌方单位和主要目标位置等宏观信息)。这些信息我们可以称作空间信息(spatial info)。
实体信息:另一方面是画面中的操控单位,比如主基地采矿建筑物,还有采矿工等对象。我们可以将所有操控单位信息整合为实体信息(entity info)。因此,如果敌方对象出现在我们的视野范围内,便会在entity info实体信息列表中的得到体现。
标量信息:第三部分是游戏画面右上角的资源、水晶、矿石、人口、种族、地图名等信息,叫做scalar info(标量信息)。除了scalar info外,其它两种输入是向量信息vector info。
在这种设定下,人工智能程序和人类的地位相对公平。只不过ai接收的是数字和量化的值,而人类看到的是图像,听到的是声音。
这是我们整合游戏输入信息的部分。
alphastar的模型结构
1) 当前帧数据的利用
alphastar的工作中另一个突破则是网络结构的设计。由于星际争霸2的游戏操控难度较高,玩家所需处理的信息很多、所需之行的动作相对复杂,因此,算法需要对数据也进行十分繁复和具体的处理。
因此,算法网络的结构设计难度相应增加。alphastar设计了如图所示的结构,该结构融合了各种顶尖、有效的网络结构。算法的输入可以分成三类,这三类输入信息首先需要进行整合。具体来说:
对于标量信息scalar info,模型直接将其输入到全连接网络中进行处理,并得到scalar embedding的表示向量。
而实体/对象信息entity info也是一项很重要的信息,因为算法能够操控的己方兵力,以及需要考虑的敌军对象的数量通常较多,那么此类输入的数量和复杂度则会十分庞大。因此模型使用了transformer的结构对其进行处理,从而获得战局的整体把握:例如,对方有多少兵力,我们能操控的兵力如何。通过transformer结构,模型进而可以进行兵力的部署和战局的洞悉,从而得到entity embedding。
此外,二维的空间信息spatial info,由于在当前的研究中,对于空间类数据的处理已经相对成熟,因此模型采用了resnet网络结构将其处理成spatial embedding。
值的注意的是,当我们得到了三类embedding的处理结果后,会对他们进行离散连接scatter connection操作。其背后的考虑是,游戏中,我们通常会在小地图中看到对方的大致布局(例如一个红点可以代表一个兵,或者多个兵,它是一个较为抽象和省略的呈现)。虽然我们无法光从小地图中看出兵力的具体数量,但是当我们将视野大图转移到该部分,并将大小地图信息综合考虑之后,是够推断出其中的具体的兵力部署和敌阵形态的。
除了当前帧的信息外,我们还要考虑时序上的信息,比如战略部署(俗话说就是连招):对手的之前操作组合历史会影响当前和之后的战局发展,因此我们需要整理历史时序信息。为提取时许特征,算法使用了lstm网络结构。这也是自然语言处理和时序信号处理的经典结构,它能够整合开局以来的所有信息。这是我们对当前帧,以及历史信息的利用算法的思路。有了这些信息之后,模型便可以操控己方兵力实施建设、攻击、防御和变阵等操作。
为实现操控,算法需要进行一系列多类型的决策。因此,模型需要首先在action动作模块中给出action type的动作类型,并在delay延迟模块中给出命令的执行时间。当有多个指令头head等待执行的时候,模型使用了auto regressive embedding自回归嵌入的结构进行处理。当我们在第一个head中决定了要做什么操作动作后,其结果输出需加入lstm输出的output embedding向量中,并将其作为后续head的输入。
这样的处理方式的优点是,模型在得到指令内容的时候,也可以同时获得之前动作的所有信息。因此,整个动作的连贯性会增强(一顿操作猛如虎,不会各个操作如梦游)。例如,选兵、选择攻击方式、点击攻击目标等操作会很连贯,从而更好的控制。因此通过上述的模型结构,游戏模型动作输出序列的合理性便可以得到保障,从而进行完整的训练。
模型的工程细节
值得注意的是,上述结构也被应用到了openai5的工作中:他们的模型也拥有三类输入,并通过类似的方式进行整合。我们发现,在类似的复杂游戏场景中,各大公司的亚博电竞网的解决方案都很类似,他们都使用了类似的结构和方式求解。受此启发,这个结构可以作为一个“模板”,在以后遇到类似的游戏问题和场景时,我们也可以对其进行借鉴甚至是套用,然后根据当时模型的需求对网络结构、损失和参数进行适当调整,便可以完美适配和应用在市面上的很多种游戏之中。
当我们完成了网络结构的设计,接下来去看一下打造ai的具体过程,也就是训练部分。模型可以根据训练操作分为两个部分,监督学习和强化学习。
a)监督学习
对于监督学习,在动作空间中,我们需要决定哪个节点、在哪、执行什么动作——其搜索货泛化的函数空间范围较大。表格中是统计的不同游戏的状态空间。从中可以看到,由于星际争霸2的游戏难度很大、自由度高、操作的可选择性和策略的种类多样,所以其动作空间范围庞大,与其他游戏不处于一个量级。
那么在如此大的状态空间中,如果我们使用强化学习进行探索,那么如果想搜索到胜利的结局,其探索所需的计算和存储消耗将会惊人的庞大。因此我们最好对模型进行初步的初始化,让其具有初步的能力,也就是利用有监督学习训练出一个“凑合能用的”模子,然后再基于这个人类经验起点利用强化学习进行搜索。因此有监督的学习是个必要的前置操作。
在星际争霸2中,监督学习的过程是暴雪的研发团队和deepmind研发团队联合完成的。在这个过程中,他们录制了来自人类玩家几百万、上千万的优质游戏录像。然后让模型利用其进行监督学习,从而初始化模型的基础参数。在实际的工程实现中,deepmind筛选出来了97万的训练数据。这些入选的训练数据代表了当前最强的战斗力(利用评分机制,寻找高于3500分的录像,也就是前20%人类玩家的数据)。
b)强化学习
在强化学习的数学本质上,它已经日益成熟和完善(其所基于的数学理论已经完善、自洽,并且得到广泛的认可和应用),因此最近的若干项突破大多是集中在其在大规模工程应用上的研究之中。例如,alphastar用到的active greative策略,openai 5利用的ppu方法都是如此。
强化学习的成功关键在于其所使用的训练规模——他们有一套训练系统环境,能够让ai人工智能模型在其中进行次数庞大的模拟并发对局(类似于漩涡鸣人的影分身仙人模式训练)。
在这里,算法将模型分成了个部分,actor和learner。一个actor所对应的模型需要进行16000场对局,每个actor可以使用128张gpu计算卡执行推断。同样的,learner节点也使用128张gpu计算卡进行训练(太壕横了,这就是所谓的大力出奇迹吗)。
在实际的训练过程中,actor learner的结构形成一个agent,模型一共包含了12个agent,并将其复制16次,也就是进行了几百万次对局。在该工作中,训练共用时44天。
当模型在如此规模的计算量上进行充分的训练后,所输出的最优模型便具有了处理如此复杂游戏情况的能力。因此我们看到,在当前的游戏ai领域,工程实现也是一个重要的课题。
强化学习怎么用的呢
再来说一下强化学习的优化。在模型中,为了实现优化,算法应用了比较原始和经典的actor greative的结构。但是对它进行了一些改进和当前场景的适配。
首先在策略损失函数上,他们应用了vtrace损失。vtrace损失的核心是解决多个actor和learner之间gap的学习过程。此外,他们提出了upgo的策略更新方式。upgo能够让我们的模型避免一些“坏action”的事件。他们在实践中使用这两种策略更新参数并训练出良好的结果。
此外,对于value的更新方面,算法提出使用td(λ)更新方式迭代。同时,算法还加入了kl散度损失值。这是由于模型训练的目的是获得游戏的胜利,那么它可能在训练之初陷入到一些局部最优陷阱中无法自拔,也就是学习到一些很极端的情况。比如在刚刚开局时只去制造低级的兵力攻击其他玩家,并陷入到这条不归路上跳不出来。那么此时,应用了kl损失后,算法就能够限制强化学习所训练出来的模型,与有监督模型之间相差不要太离谱,也就是别太“奇怪和极端”。此外熵损失entropy loss也能加大模型的探索空间和可能搜索到的行为范围。
因此,在这样大规模的训练上,该方法的论文表示,模型能够在天梯得分上得到top 99.93%的结果。这样的模型执行效果虽然不能像alphago在围棋游戏中一样击败人类中最强的大脑之一,并且“降维打击”般的拉开绝对差距,但是它也能得到很好的执行效果。这也能说明了ai设计的成功性。
游戏ai的挑战
在alphastar的案例后,我们发现游戏人工智能模型仍然存在一些挑战需要克服。具体来说,包括三个方面:
1) 游戏的训练效率efficiency
首先是efficiency效率。效率问题是当前游戏人工智能模型设计中比较常见的一个问题。整体模型的训练过程需要占用较多的计算、存储和缓存资源。然而,通过估计,我们发现这已经是大规模训练的临界点。那么为了降低成本,在程序设计之初,我们是否能够通过一些策略货方法降低其训练成本?毕竟,我们在训练游戏ai的时候,希望它实现成本的最低化,不要占据我们过多的计算和存储资源。
2) 游戏的进化evolution
另一个是游戏的进化evolution。我们知道alphastar只在当时固定的一个天梯中进行了比较,没有开放给公众进行挑战和熟悉,当时的它仅仅通过离线的方式完成训练和评估。而且,这个人工智能模型在制造出来后就没有再与时俱进的实时更新和进化,这就导致了之后的玩家会熟悉程序的套路和习惯,并想出办法将其反杀的结果。此问题是其他所有游戏人工智能模型的大问题——它们总是被人类找到漏洞并成功超越。
3) 游戏的完整性entirety
第三个问题是游戏的完整性entirety。虽然我们的目标是通用人工智能,但是现在的游戏ai只能解决一个特定的游戏学习,无法实现多种游戏学习间的迁移。所以它们其实只是适应了目标游戏的数据映射,并没有对“玩游戏”事件的整体进行充分认知。因此如何设计人工智能模型对游戏的完整性进行认知和学习,是一个比较大的问题。毕竟,我们最终是想做一个通用人工智能程序,使得它能像人类一样对所有游戏进行学习,而不是仅是成为某个/某方面游戏的专家。
上述就是我们的在游戏ai开发中遇到的难题。alphastar相关的前置工作也已经开源,大家如果感兴趣的话,可以通过这些开源项目软件参与模型的设计,或者体验一下效果。我们希望大家能够多多参与并给出自己的宝贵贡献。后续我们也会开源训练部分的相关内容,让大家也能在星际争霸2中训练属于自己的ai。如果大家有兴趣的话,可以扫描二维码获取。
本次分享主要会对如何提高ai通用决策能力,泛化能力,适应能力以及复杂场景下ai鲁棒性进行介绍。
陈若冰,商汤科技决策ai研究应用组研究员。主要从事决策ai算法在应用场景的研发创新优化,负责opendilab中基于di-engine的决策ai应用平台开发,包括自动驾驶训练平台di-drive,交通信号控制任务,生物蛋白质、rna序列搜索等任务。
周航,商汤科技决策智能游戏ai组高级研究员。主要负责游戏ai中的技术和落地研究,他的主要的研究方向是大规模强化学习训练系统、复杂场景游戏ai设计,和通用游戏ai设计。
点击链接,观看直播回放:
雷锋网雷锋网