《星际2》最强AI复现计划:如何打造自己的AlphaStar(3)
时间:2019-02-14 13:47 来源:百度新闻 作者:巧天工 点击:次
一个自然的想法是:把策略多跑几遍,导数多求几次,求平均值。并行 AC 学习算法[6]就是对上述思路的直接实现—— 由于在 AC 架构中实际产生数据,探索环境的乃是“实干家”。我们在分配计算资源时偏向它,多雇佣实干家(多分配一些相应的策略执行进程),同时生成多条执行轨迹,并通过一个中心学习者从这些多线历史中估算策略参数的导数,结果会更准确,这些实干家相当于中心学习者的分身。IMPALA 框架则更进一步,所有分身实干家都只是“傀儡执行者”,既不需要优化策略参数,也不需要计算导数,只是负责执行生来所继承的策略,把经验数据忠实地记载下来,传回中心学习算法。 即便不考虑对稳定导数计算的作用,这种做法也极大缓解了高并行复杂模型学习中的节点通讯问题。“傀儡执行者”和学习核心的关系,见上图,它们之间的通信频率比起频繁传递网络参数要少得多(可以完成一个 episode 才更新一次策略参数)。而执行策略的历史数据往往比大型网络的导数(大小约为整个网络参数集)来得经济很多。 AlphaStar 还采用了几项对 AC算法的补充措施。其中重要的一项是,每个 AI 选手在训练期间,都会把自己的对战历史保存下来,供 AC 算法在估计参数导数时使用,即模仿自己的优秀历史。这种在学习者“脑海”里面重放历史经验(Experience Replay)的做法,之前在估值方法与深度神经网络结合的工作中采用过(Deep Q-Learning,DQN),并首次实现了AI在视频游戏上的突破。在直接学习策略参数的方案中,一般来说,这样做会导致估计偏差——因为 AC 算法“期望”它见到的数据是执行“本”策略得来。单采用参考历史数据的方案算出的模型改进方向,其出发点就有一点过时了。但由于从少量样本估计的模型参数的导数往往会有巨大波动。为更稳定地标定正确的学习方向,可以牺牲终点的最优特性。 还有一个措施,是把学习过的 AI 的策略精髓抽取出来,转移到正在学习的 AI 模型中(Policy Distillation)[7]。这个方法可以使用更紧凑的模型(参数小一个数量级)来逼近更大更复杂的模型的表现;可以合并多个策略来形成一个比其中每个个体都更可靠的策略——注意由于优秀策略的分布不是连续的,这不是一个简单平均的问题。比如考虑超级玛丽兄弟:策略A是跳起来踩扁蘑菇,策略B是发射火球然后直接前进,如何在A和B之间折衷相当困难;还可以在策略学习这个层面形成迭代:每一轮的学习都把上一轮学习到策略的精髓转移出来,在此基础上开始。由于Deepmind语焉不详,目前还不清楚这个方法是如何用于AlphaStar训练上的。 3. 神经网络模型和训练 强化学习AI算法。最终落实到具体的调整策略/模型的单个学习步骤上,也就是训练迭代的最内层循环中,还是要回归到监督学习范式,变成“针对这样的输入,鼓励(惩罚)模型产生如此的输出”的优化操作。在传统强化学习研究历史上,建立策略或者估值是理论重点。系统的状态往往被少数几个变量完美的描述,比如一个牛顿力学系统中各个刚体的位置和速度。但是在任何稍微复杂一点的问题中,数据表示问题仍然是一个挑战:即使强化学习算法非常有效,AI也必须知道当前观察到的状态与之前经历过的状态之间的联系。星际争霸游戏这类问题,其观测是十分复杂的对象(序列),于是我们也就要面对统计学习中的典型问题:通过分析数据,建立(输入,输出)之间的联系。 目前大家的共识是,这个问题的核心是把输入的数据转换成一种有效的表示,这个“有效”是从期望产生的输出结果的角度来评判的。具体一点说,如果我们的训练数据中有两个样本(输入A,输出A)和(输入B,输出B),后来又观测到了(输入C)。一个好的输入数据的表达应当能帮助我们估计想要的“输出C”。比如我们做完“输入A->表达A”,“输入B->表达B”和“输入C->表达C”,然后比一比相似度(表达C,表达A)和(表达C,表达B),然后从A和B当中挑选更相似的那个,用它的输出来预估C的输出。如果这种估计方式真的能得到对于C来说合适的输出,我们说这个表达方式对于这个数据分析任务来说是好的。如果能完美的完成这个相似度辨别的任务,那么很多问题就可以简化成“查询一下现在遇到的状况跟训练时碰到的哪个情况类似,照当初的经验办理”。从另一方面说,如果能将每一个原始数据样本变换到一个多维向量,这些向量之间可以用简单的做差算距离来衡量相似度,那么这个变换也算解决了衡量数据样本之间的相似度的问题。这个任务有个术语叫做“数据表示”。 注意从上面的讨论我们可以看出,没有绝对“好”的数据表示,我们根据对某个特定的任务是否有效来衡量一种表示方法的好坏。数据表达的质量可不仅仅取决于输入数据的形式,而是跟整个数据分析的任务密切相关。比方说输入的对象是自然人,人当然是个十分复杂的对象,如果要量化描述之,那么对于“预估此人能否成为优秀的篮球队员”这个任务,“身高、摸高、100米跑时间”这些量化的指标就比较合理;而对于“预估此人会不会去观看某部电影”的任务,“票价与此人月收入的对比、前一年上映的每部电影此人是否观看过……”这些量化指标就显得合适。 深度学习的兴起的最大功臣是在随这类模型而得到的有效数据表示:从输入到输出之间架构好深度神经网络之后,我们就自然而然地把输入数据的转换,预测输出的数据模型,模型产生的输出与真实样例之间的对比,这三者统一到了同一个训练过程中。神经网络的结构也就同时规定了“怎样整理转换输入数据”和“怎样用整理过的输入数据预测所需的输出”这两个在数据分析中的关键步骤。 ?序列转换模型 根据Deepmind的说法,AlphaStar 采用了基于注意力机制的序列转换的表示模型。这种数据表达方法的起源是在自然语言处理领域,我们能够想象,这种方法擅长于表示成序列出现的数据样本。具体地说,transformer模型来自于自然语言处理中的翻译任务,把一句话——即一串单词和标点(语言的基本单位,tokens)——转换成另一种语言的基本单位。Deepmind同样没有详述这个模型在 AlphaStar 中的具体使用方法。不过据上文提到的使用人类对战数据预训练作为“种子AI”的做法来看,有可能预训练的任务被制定成了学习从输入“游戏状态序列”到输出“操作指令序列”之间的联系。 ?策略模型 (责任编辑:波少) |