请选择 进入手机版 | 继续访问电脑版

查看: 1543|回复: 0

[原创] Unity机器学习代理ML-Agents v0.2版本发布

[复制链接]

1142

主题

1838

帖子

2万

贡献

管理员

Rank: 9Rank: 9Rank: 9

积分
24030
QQ
发表于 2017-12-16 04:09:52 | 显示全部楼层 |阅读模式

Unity 机器学习代理最新版ML-Agents v0.2现已发布!在本版本里,我们作了以下改进:

为Unity SDK和Python API增加了新特性
更多新示例环境;
改进了默认的增强学习算法(PPO)
修复Bug及小功能改进


在这篇文章中,我们将重点介绍一些主要的新增功能。

下载ML-Agents v0.2

下载地址: https://github.com/Unity-Technologies/ml-agents
发行说明:https://github.com/Unity-Technol ... /releases/tag/0.2.0

新的连续控制和平台环境

很多开发者反馈给我们希望有更多的示例环境。所以在ML-Agents v0.2版本中包含了四个新的环境。其中二个是新的连续控制环境,另外二个展示新的课程学习特性的平台环境。

ML-Agents v0.2新特性

课程学习
先简单介绍下课程学习,课程学习是一种训练机器学习模型的方法,它会对同一个问题逐渐增加难度,来让模型每次都接受最适合的挑战。

https://v.qq.com/x/page/e05190ajm0j.html


这种方法由来已久,因为这是人类的典型学习方法。如果你能回想我们的小学教育,所学习的课程和知识点都是有一定次序。例如:我们先学算数再学代数。学习代数后,学习的微积分。我们在早期课程中所学到的技能和知识都为以后的课程提供了学习基础。同样的原理可以应用到机器学习中,在简单的任务上进行训练,是为后续更困难的任务提供基础。


课程学习中的数学课程示例:课程中的题目从简单到复杂,每个题目都基于前一个题目演变



当我们思考强化学习是如何运作的时候,在训练过程中代理偶尔会得到的奖励,这会作为主要学习信号。在更复杂或困难的任务中,这种奖励往往是稀少的,而且很少得到。


例如:在任务中代理需要将方块推起来测量墙的高度。训练代理将以一个随机策略作为完成此任务的起点。这个开始策略由于是随机的,很可能会让代理在场景中瞎转,也可能永远无法准确地测量墙的高度来获得奖励。但如果我们让代理从一个简单的任务开始,比如朝着没有障碍的目标前进,那么代理就可以很容易地学会完成这个任务。从这里开始,我们可以通过逐渐增加墙的大小来慢慢提高任务的难度,直到代理能够完成一开始不可能完成的任务,测出墙的高度。在我们的ML-Agents 0.2中就包含这样的一个环境,叫Wall Area。


课程训练场景的演示 : 场景中逐渐增高的墙阻碍了通往目标的道路


要想在实际操作里看到效果,观察下面这二条学习曲线。它们都显示了对使用PPO训练的大脑得到的奖励,这组训练使用了相同的训练超参数和来自32个同时运行的代理提供的数据。

橙色线是大脑直接使用完整高度的墙来进行训练的,而蓝色线是大脑通过课程学习任务一点点增加墙的高度来训练的。如你所见,没有使用课程学习,代理要获得奖励很困难,即使在300万步之后仍然没有完成任务。我们认为,通过精心设计的课程,使用增强学习训练的代理将能在较短的时间里顺利完成任务,否则就会困难得多。


蓝线对应使用课程学习训练的大脑 ,橙色线对应没有使用课程学习训练的大脑
垂直的蓝色点线对应于在课程训练期间的课程变化



那么它是如何工作的?为了定义一个课程,第一步就是决定环境中的哪些参数会改变。在Wall Area环境中,墙的高度是会改变的。我们可以将它定义为我们场景中的学院对象的重置参数,并通过Python API来进行调整。然后我们创建一个简单的JSON文件来描述课程的结构。

在训练过程中,我们可以通过这个JSON文件来确定墙的高度在哪个点将会发生什么变化,可以根据已经发生的训练步骤的百分比决定,也可以根据代理最近获得的平均奖励决定。这些完成后,我们只要通过使用课程文件标记(–curriculum-file)指向JSON文件来打开ppo.py即可,我们将使用课程学习来进行训练。当然,我们可以通过TensorBoard来跟踪当前的课程和进展。


下面是一个JSON文件的示例:定义了Wall Area环境的课程。

{

    "measure" : "reward",

    "thresholds" : [0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5],

    "min_lesson_length" : 2,

    "signal_smoothing" : true,

    "parameters" :

    {

        "min_wall_height" : [0.0, 0.5, 1.0, 1.5, 2.0, 2.5, 3.0, 3.5, 4.0, 4.5],

        "max_wall_height" : [1.5, 2.0, 2.5, 3.0, 3.5, 4.0, 4.5, 5.0, 5.5, 6.0]

    }

}

如果你成功创建了机器学习环境,却很难让自己的代理解决问题,我们鼓励你尝试使用课程学习,我们很乐意听取你们从中发现了什么。


广播
– 如今三种大脑类型,也就是内部(internal)、启发式(heuristic)和玩家(player)大脑,都加入了“广播”功能,默认情况下这个功能是激活的。在活动状态下,所有与该大脑相连的代理的状态、操作和奖励都可通过Python API来获得。这与v0.1版本不同,在之前的版本中,只有外部大脑可以向Python API发送信息。该功能可用于记录、分析或存储来自Python的这些大脑类型的信息。具体来说,这个功能使模仿学习变得可能,来自玩家、启发式、或者内部大脑的数据能被作为监督信号来训练一个独立的网络,而不需要定义一个奖励功能,或者额外增加一个奖励功能来增强训练信号。我们认为这能给游戏开发者在思考如何让游戏更智能时提供一个新思路。


检视窗口中的 Brain组件加入了“Broadcas(广播)


灵活的监控器
我们重写了代理监控(Agent Monitor),让它的可用性更强。原来的监控器只能显示代理的固定的一组统计数据,新的监控器现在可以显示与代理相关的任何所需信息。而你只需要调用Monitor.Log()来把信息显示在屏幕上,或是场景中的代理上。


3D平衡小球环境中使用监控器来显示各种训练信息


小结
文章的最后,我们很高兴宣布,Unity将会举办一个Unity机器学习社区挑战赛。无论你是机器学习专家,或是对如何将ML-Agents应用到游戏感兴趣,这个挑战赛都是你学习、探索和获取灵感的最佳机会。我们会在明天公布Unity机器学习挑战赛的信息,尽情关注Unity官方社区(unitychina.cn) 及Unity Connect平台!


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表