雷锋网 AI 科技评论按:算力的提升可能会为旧的算法注入活力。近两年来,神经演化(Neuroevolution)的方法逐渐再次受到关注,包括 OpenAI、DeepMind、Google Brain、Sentient、Uber等全球几大研究机构近期在这方面都有一些研究,而其中Uber似乎投入了更多的精力。
图1. Google Trend中「Neuroevolution」的变化
雷锋网前段时间曾对 Uber 数日连发的 5 篇关于神经演化的文章进行了深度的解读。这些文章介绍了他们在遗传算法(genetic algorithm)、突变方法(mutation)和演化策略(evolution strategies)等神经演化思路方面的研究成果,并通过使用神经演化的方法在深度强化学习的训练中胜过 SGD 和策略梯度。这项工作宣告了神经演化方法进入了一个新的时代。
基于 Uber 的这些工作,目前有许多研究人员已经开始将目光从 SGD 或策略梯度方法转移到神经演化。这在某种程度上也促进了对相关工具的需求,特别是在神经演化过程中如何动态、可视地观察演化过程。为了解决这些问题,Uber 开发了一款用于神经演化的交互式数据可视化工具——Visual Inspector for Neuroevolution(VINE),并于昨日开源。
图2. VINE可视化
为了介绍 VINE 如何进行可视化,这里我们需要简要介绍一下神经演化的基本思路。
神经演化(Neuroevolution)的概念最早于上世纪 80 年代被提出,其基本思路就是借鉴生物的演化过程:突变->选择->繁衍->突变->……。在机器学习领域,传统的方法是研究人员根据自己的经验去设计一个神经网络,然后通过实验验证它的效率;而神经演化的思路是,先初始化一群(例如 100 个)略有差异的网络,通过训练,筛选(也可以合成)出某些符合标准的个体,然后再复制出(例如)100 个副本,对这些副本网络添加一些随机扰动(类似生物进化中的突变),随后再训练和再筛选,如此往复,直至筛选出符合期望的网络为止。
从上面的说明也可以看出,无论是初始化,还是差异的选择或随机扰动的定义,或者筛选过程和标准的制定,都可以根据实验者的需求而定,因此演化的方法多种多样,例如前面提到有遗传算法(GA)、突变方法(M)和演化策略(ES)等。我们以 ES 为例,并选用 Uber 常用的 Mujoco 人形步态任务具体来说明 VINE 如何将神经演化过程可视化。
图3. 用遗传算法(左)和演化策略(右)训练模拟机器人走路
在传统的(如 OpenAI 所推广的)ES 应用中,通常采用一组被称为伪后代云(pseudo-offspring cloud,POC)的神经网络,针对这一代的特定目标进行优化。具体来说就是,首先通过随机扰动单个「父」神经网络的参数来生成 POC 中中每个单独的神经网络的参数,然后根据目标对每个伪后代神经网络进行训练和评估。在人形步态任务中,每个伪后代神经网络控制着一个 Mujoco 机器人的运动,基于机器人走路的好坏给每个网络的适应度进行打分(称之为 fitness)。ES 通过基于这些适应性评分来聚合伪后代的参数(这似乎有点儿像多(双)亲交叉融合一样),来构建下一个父亲。然后循环往复。
若想利用 VINE,就必须将演化过程中每个父亲以及所有的伪后代的行为特征记录下来。这里一个行为特征可以是一个 agent 与环境进行交互时的任何行为指标。例如在 Mujoco 中,我们可以简单地使用每个 agent 的终点位置 {x,y} 作为其行为特征,终点位置代表了这个 agent 从原点起所能移动的距离。
有了行为特征的信息,于是就可以借助可视化工具将父亲和伪后代映射到 2 维平面上。为此,VINE 调用了图形用户界面(GUI),其主要组件由两类相互关联的图组成:
一个或多个伪后代云图(在一个单独的 2 维平面上);
一个 fitness 图
如下图所示。伪后代云图显示了每代父亲和伪后代的行为特征,而 fitness 图则显示了每一代的父亲其 fitness 得分曲线如何变化。
图4. 伪后代云图和 fitness 图示例
除了将伪后代云以及父亲的 fitness 情况可视化外,在 VINE 中用户还可以与这些图进行交互,以探索伪后代云的整体趋势以及任何一起父亲或伪后代在进化过程中的个体行为:
用户可以选择可视化父亲、最佳表现者、任何一代的伪后代云,并探索不同 fitness 得分的伪后代云在二维行为特征平面上的数量以及空间分布;
用户还可以在不同代之间进行比较,通过可视化的方法来观察父亲或者伪后代云在 2 维行为特征平面上如何移动,以及它们与 fitness 得分曲线之间的关系。如图 5 所示,甚至可以自动生成移动云的完整影像剪辑。
点击云图上的任何一点,可以显示相应伪后代的行为特征和 fitness 得分。
图5. 可视化的世代行为演变。 每一代的颜色都会改变;在一代人中,每个伪后代的颜色强度基于该代中适应度得分的百分位数。
当然 VINE 工具还支持一些高级选项。举例来说,前面我们说到选择终点位置 {x,y} 作为行为特征,如果延伸一点的话,例如我们将每个 agent 从起点到终点分成 1000 个时间步长,并记录下每个时间节点的位置,那么我们就可以得出一个行为特征向量,这个向量记录了 agent 的轨迹。
当然在这种情况下,行为特征的维度已经不再是 2 维,这时候就需要降维技术将行为特征数据的维度降低到 2 维,例如 PCA 技术或者 t-SNE 技术。在 VINE 中,这个过程将自动完成。
当然 GUI 能够加载多组 2 维行为特征(通过不同的缩减技术生成),并将它们显示在同时且连接起来的云图中,如图 6 所示。这个功能为用户探索不同的行为特征和维度缩减方法提供了一种便捷的方式。
图6. 可视化多个2D BC和一个高维BC以及一个健身情节。
此外,用户还可以通过定制功能来扩展基本的可视化。在图 6 中就暂时了一个自定义的云图,在这个云图中可以显示某些类型特定领域的高维行为特征(例如 agent 的完整轨迹)以及相应的缩减 2 维行为特征。图 7 是另外一个自定义云图的例子,这个图中允许用户回放 agent 在与环境进行交互式产生的确定性/随机性行为。
图7. VINE允许用户查看任何agent产生的确定性/随机性行为的视频。
当然啦,如前面所说,VINE 并不仅仅只使用于 Mujoco 任务或者 ES 算法当中。
图 8 展示的是将 VINE 应用于 Atar 2600 游戏中的一个经典游戏 Frostbite,其中的行为特征为终态模拟器 RAM 状态(游戏中能够捕获所有状态变量的长度为 128 的整数值向量),并应用 PCA 技术将行为特征映射到 2 维平面上。
图8. 可视化agent学习Frostbite
从这个图中,我们可以观察到随着演化的推进,伪后代云在逐渐向左移动并出现聚集。通过查看这些 agent 玩这个游戏的视频,我们可以推断其实每个集群都对应一个语义上有意义的不同的结束状态。
此外,VINE 还可以与其他神经演化算法(例如前面提到的遗传算法等)进行无缝的协作。事实上,这个工具独立于任何特定的神经演化算法,用户所需要做的只是稍微修改一下他的神经演化代码保存它想要了解的行为特征。
开源地址:https://github.com/uber-common/deep-neuroevolution/tree/master/visual_inspector
via Uber Engineering Blog,雷锋网AI 科技评论编译。
相关文章: