首页
学习
活动
专区
工具
TVP
发布

Unity ML-Agents模仿学习示例解析

作为机器学习领域非常引人关注的一种学习方式,模仿学习的出现也是受到了如强化学习相同的热捧。在

ML-Agents v0.3版本中

,Unity加入了模仿学习的训练方式,为广大开发者提供很大的便利。

我们已经为大家分享过关于Unity ML-Agents强化学习的内容,今天本文将由Unity技术经理鲍健运重温Unity机器学习代理工具ML-Agents模仿学习的直播内容。

下面《使用Unity ML-Agents快速掌握模仿学习》的直播视频。

什么是模拟学习

有很多开发者都咨询过这个问题,甚至还会追问“模仿学习与强化学习的区别是什么?”

Alexandre Attia和Sharone Dayan在今年1月发表的《模仿学习全面概述》中,做出了定义:模仿学习是学习者尝试模仿专家行为,从而获取最佳性能的一系列任务。这里的“学习者”相应在Unity ML-Agents中就是Agent(代理)。这篇论文中,对于现今比较流行的一些模仿学习算法进行了回顾,展示主要特征,并针对性能和缺点做出对比。

如果你像全面了解模仿学习的概况,可以访问这片论文:

https://arxiv.org/abs/1801.06503

下图很清楚地解释模仿学习的工作原理。

下图列举出了强化学习与模仿学习的主要区别,归根结底就是:强化学习是通过“奖励”来驱动的;模仿学习是通过“示范”来驱动。

如何创建模仿学习训练与实现环境

构建一个模仿学习的其实并不复杂,主要分成下面的步骤:

创建Teacher和Student二个Brain

确认Teacher的Brain设置为 Player模式,确定 “Broadcast” 广播功能为启用状态

设置Student的Brain为External模式

对应设置Teacher和Student的Agent

在python/trainer_config.yaml中设置Student的Brain

· trainer 参数为 imitation

· brain_to_imitate设置为Teacher的Brain名字

· batches_per_epoch设置每个时刻进行多少次训练

· 调高max_steps,可使得在较长时间内进行训练

训练准备

· (v0.3)通过Build Settings生成APP用于训练

· (v0.4)直接编辑器内训练

通过命令行工具输入进行训练

· (v0.3)通过python3 python/learn.py --train –slow 启动APP进行训练

· (v0.4)通过python3 python/learn.py --train –slow在编辑器内训练

操作Teacher观察输出

观察Student查看模仿情况

一旦Student有比较好的模仿,Ctrl+C结束训练

将生成的二进制文件(.bytes)放回Unity工程,将Student的Brain Type改为Internal,重新运行查看其模仿学习训练结果

Unity ML-Agents 模仿学习示例项目

在Unity ML-Agents项目中,打开ML-Agents Examples BananaCollectors Scenes BananaIL场景,我们会发现如下图中的游戏视图布局。

在Hierarchy中,Academy下面有二个Brain:TeacherBrain和StudentBrain,分别对应了“示范”作用的代理和处理“学习”的代理。

玩家可以通过WASD键,操作戴帽子的Teacher在香蕉地图中移动收集香蕉。收集到黄色的好香蕉会加分,收集到紫色的烂香蕉会减分。还能按空格键攻击其它的代理,冻结它的行动。

在下图中展示的是模仿学习训练的一个片段:当操作Teacher顺时针或逆时针旋转时,从右边的俯视角度可以发现,其它的“学习者”会跟着旋转。

Hover Racer模仿学习示例项目

简单的操作、循环的赛道、固定的奖惩等游戏设计,说明Hover Racer项目非常适合作为模仿学习训练和应用。

注意:由于Hover Racer项目中涉及到第三方提供的资源,并未授权允许分发,所以项目不能提供给到大家,只能以图文解释的形式给各位参考。

1

Camera与Cinemachine

从Hierarchy中可以发现,项目中有二个Cinemachine的Virtual Camera作为跟随相机,分别对应到场景中的二个摄像机。

摄像机都是通过调整Viewport Rect参数的方式进行显示的分割。

我们可以看见在Game View呈现出如下图的效果。左边是玩家操作的飞船,右边是AI操作的飞船。AI的既是通过机器学习训练载体,又是最后用于呈现模仿学习训练结果。

2

Ship Player与Ship ML

这是二艘飞船在Hierarchy中的结构,对于飞船控制的脚本Vehicle Movement和机器学习代理的脚本Racing Agent都在Ship Player或Ship ML上面。用于进行射线检测的相关采集对象则包含在其子节点Rays中。

下面4张图片分别展示了飞船左边4个用于进行射线检测的发射点,而右边的部分,即Ray 1到Ray 4与左边的是完全对称的。

在Ray上面主要使用的是ShipRaycaster组件,通过Raycast方法获取从飞船到赛道的距离,在Agent类中会收集这个参数结果,作为重要的观察量。

3

RacingAgent 组件

作为ML-Agents的Agent类的派生类,RacingAgent主要用于实现机器学习代理的主要行为。

将Agent进行基本的初始化,设置飞船的起始位置,设置飞船移动操作、射线检测、UI(显示分数)和刚体(速度的管理与控制)的引用。

AgentAction方法,用于控制飞船的移动操作,可以看到只要是飞船的操作都可以产生0.1分的奖励,即在强化学习环境下是“鼓励”机器对飞船进行操作。

操作从下图的Player模式设置可以发现,主要就是A和D两个操作,即向左和向右移动。

CollectObservations就是收集观察值的操作。收集的观察值主要是:

每个射线检测器(Ray)获得飞船到赛道的距离,正常距离情况记录下,具体长度和1f(表示正常距离情况);偏离赛道方向(无法获得正常距离情况),记录1f和0f(表示非正常距离情况)

通过刚体获得当前飞船的速度和角速度,分别记录速度的x、y和z值以及角速度的y值(只有y方向角度旋转相关度高)

AgentReset重设方法,因为飞船偏离正常行径路线时,其实已经是需要进行代理状态的重设,所以在这个方法中主要是将预设好的路径点作为恢复点,当手动重设(manualReset)时,则恢复到赛道出发位置。

怎么判断失误呢?即通过碰撞检测判断飞船是否撞到了赛道上(偏离了正常的行径路线),直接给予-1的“惩罚值”。

因为ML-Agents中Reward的值域一般是在-1到1之间,所以说给定一个-1的“惩罚值”已经是非常大了,会对强化学习的结果产生比较大的影响。通过Done方法调用AgentReset操作,进而产生代理的重设。

在模仿学习的训练过程中,虽然Reward的结果不会产生实质的训练影响,但是以上的AgentAction、CollectObservations和AgentReset的操作是正常进行的。

4

Academy Brain

Academy作为机器学习的统筹管理器,需要管理ML-Agents项目中的Brain,而项目中所需要的Brain一定要作为子节点放在Academy下。因为ML-Agents v0.4可以进行编辑器内训练,所以Academy上的Training Configuration和Inference Configuration中除了Time Scale编辑器内训练一样,其它的参数都仅仅在生成APP模式下有用。

ExpertRaceBrain就是左边玩家操作的代理的大脑,模式为Player,并设置了具体输入操作。

StudentRaceBrain顾名思义就是学习者的大脑,即右边机器学习者的大脑,模式为External,准备通过TensorFlow进行机器学习的训练。

5

trainer_config.yaml

与强化学习不同的是,模仿学习一定需要进行外部Python参数设置,参数文件是python目录下的trainer_config.yaml文件,具体如下图所示:

Brain的名字必须与项目中学习者的名字一致,主要的是trainer为imitation,brain_to_imitate为示范的Brain名称,即ExpertRacerBrain。

以上的设置确认完毕后就可以开始训练了。

6

编辑器内模仿学习训练

通过机器学习相关的命令行工具(Win 10:Anaconda Prompt / macOS:Terminal),cd进入python目录。然后输入“python learn.py --train –slow”。当然,我们也可以输入“python learn.py –run-id==HoverRacer --train –slow”,指定运行ID为HoverRacer。

注意:模仿学习必须使用“--slow”,不然就是执行强化学习的超高速模式,训练的结果会不理想。

训练到一定程度之后,比如1分钟、3分钟或者更久,可以点击运行按钮或者命令行中Ctrl + C中止训练保存训练文件(python/models/ppo/editor_Academy_ppo.bytes)。

如果run-id为HoverRacer的话,会生成python/models/HoverRacer/editor_Academy_ HoverRacer.bytes。也可以根据实际情况重命名这个二进制文件,例如:1分钟的训练结果可以命名1 Minute.bytes。

7

Unity编辑器检测训练结果

这部分就和上篇强化学习文章想近了,将生成的二进制文件放到Unity工程中。

StudentRacerBrain设置为Internal模式,将Graph Model设置为1 Minute,即1分钟左右的训练结果应用到AI展示。

下面视频中展示的就是1分钟模仿学习训练的结果。

小结

Unity ML-Agents模仿学习分享到这里,希望大家学以致用,掌握运用ML-Agents在项目中。更多Unity官方技术直播课程尽在Unity Connect平台,更多Unity技术内容尽在Unity官方技术论坛(Unitychina.cn) !

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180804A0SH3M00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券