优步发布VINE,一个用于神经进化的开源交互式数据可视化工具
2018年03月20日 由 yuxiangyu 发表
999168
0
对于优步的规模来说,机器学习的进步可以显著提高更运输方案的技术,使之更为
安全可靠。最近优步人工智能实验室发布了一个可以做到这点的进化算法:深度神经进化(deep neuroevolution),与进化策略(ES)和遗传算法(GA)一样,他可以帮助训练深度神经网络去解决困难的强化学习(RL)问题。 最近深度神经进化的越来越得到重视,其中主要贡献来自 OpenAI,DeepMind,Google Brain和Sentient,这增加了对帮助该领域研究人员的工具的需求。
特别是,在神经进化和神经网络优化中,通常很难观察到学习过程的潜在动力。为了解决这一问题,实现观察步骤,我们推出了神经进化视觉检查器(VINE),这是一款开源的交互式数据可视化工具,旨在帮助那些对神经进化感兴趣的人更好地理解和探索这种算法。我们希望这项技术能够激发神经进化的新发明和新应用。
VINE可以同时说明ES和GA设计的方法。在本文中,我们将应用ES的Mujoco类人运动任务的任务结果作为示例。
在ES的常规应用(由OpenAI普及)中,一组被称为伪子代云(pseudo-offspring cloud)的神经网络对目标进行几代的优化。通过随机扰动单个“父”神经网络的参数来生成云中每个单独神经网络的参数。然后根据目标对每个伪子代神经网络进行评估:在类人运动任务中,每个伪子代神经网络控制机器人的运动,并根据它的行走状况获得一个分数,在这里我们称之为它的适应度(fitness)。ES通过基于这些适应性评分来聚合伪子代的参数(就像复杂的多亲交叉形式,并且还使人想起随机有限差分)来构建下一个父代。循环然后重复。
图1:用遗传算法(左)和进化策略(右)训练步行的模拟机器人。
使用VINE
为了利用VINE,在评估期间记录每个父代和所有假子孙的行为特征(BC)。在此,BC可以是智能体在与其环境交互时的行为的任何指标。例如,在Mujoco中,我们简单地使用智能体的最终{x,y}坐标作为BC,因为它能表示智能体离开原点有多远。
然后可视化工具会根据父神经网络和伪子代的BC将其映射到2维平面上。为此,它调用一个图形用户界面(GUI),其主要由两种相互关联的平面图组成:一个或多个伪子代云图(各自在单独的平面图)和一个适应度图。如下面的图2所示,伪子代云图显示了的父网络和云中每个伪子代的BC,而适应度图显示了从父代开始的适应度得分曲线作为每代进步的关键指标。
图2:伪子代云图和适应度图的例子。
然后,用户与这些图进行交互,以探索伪子代云的整体趋势以及任何父代或伪子代在进化过程中的个体行为:(1)用户可以可视化父代,出色的子代和整个伪子代云,并探索的在BC平面图有不同适应度评分的伪子代的数量和空间分布;(2)用户可以在不同世代之间进行比较,浏览代数,可视化父代和伪子代云在BC平面上的变化,并思考这些变化与适应度评分曲线的关系(如图3所示,可以自动生成变化云的完整视频);(3)点击云图上的任意一点,可以看到相应的伪子代的行为信息和适应度得分。
图3:可视化的每一代的行为演变。每过一代的颜色都会改变。在一代人中,每个假子孙的颜色强度是基于该代中适应度得分的百分位数(聚合成5bins)。
其他用例
除了默认功能,该工具还支持的高级选项和自定义可视化。例如,可以不只有一个最终的{x,y}点,BC可以代替每个智能体的完整轨迹(例如,concatenated {x,y}为1,000个时间步长)。在这种情况下,当BC的维度高于2时,需要降维技术(例如PCA或t-SNE)将BC数据的维度降至2维。我们的工具自动执行这一步。
GUI能够加载多组二维BC图(可能通过不同的降维技术生成),并在同步连接的云图中显示,如图4所示。此功能为用户提供了一种便捷方式来探索不同的BC选择和降维方法。此外,用户还可以自定义函数扩展基本的可视化。图4展示了一个这样的自定义云图,可以显示某种类型特定领域的高维BC(在这种情况下,智能体的完整轨迹)以及相应的减少的2维BC。另一个自定义云图的例子,如图5,允许用户重放智能体在与环境交互时产生的确定和随机行为。
图4:多个2维BC、一个高维BC和适应度图的可视化。
图5:VINE允许用户查看任何智能体确定和随机行为的视频。
除运动任务外,这个工具还有其他的地方可用。比如,下面的图6展示了,对使用ES训练智能体玩Frostbite(Atari 2600的游戏之一)可视化的云计算图,我们使用最终的模拟器的RAM状态(捕获游戏中的所有状态变量,在这里为长度为128的整数值向量)作为BC并应用PCA将BC映射到平面上。
图6:可视化智能体学习玩Frostbite。
从图中,我们可以观察到,随着进化的进行,伪子代云向左移动并聚集在那里。通过查看每个智能体玩这个游戏的视频,可以让我们推断结束状态与每个集群的对应语义上有意义的不同。
VINE还可以与其他神经进化算法(如GA)无缝协作,后者可以保持子代的人口数量。事实上,该工具独立于任何特定的神经元演算算法。用户只需稍微修改其神经元进化代码即可保存他们为特定问题选择的BC。在发布的代码中,我们提供了对ES和GA实现修改的示例。
后续计划
由于演化方法在一组点上操作,它们为新型可视化提供了机会。实现了一个提供可视化的工具,我们发现它很有用,我们希望与机器学习社区分享,这样所有人都可以受益。随着神经元进化到具有数百万甚至更多连接的神经网络,通过像VINE这样的工具获得额外的洞察力对进一步的发展越来越有价值。
代码:https://github.com/uber-common/deep-neuroevolution/tree/master/visual_inspector