Unity机器学习代理ML-Agents v0.2版本

时间:2022-01-29 03:05:38

下载ML-Agents v0.2

下载地址:

 https://github.com/Unity-Technologies/ml-agents


发行说明:

https://github.com/Unity-Technologies/ml-agents/releases/tag/0.2.0

ML-Agents v0.2新特性

课程学习 

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


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

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


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

Unity机器学习代理ML-Agents v0.2版本

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


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

Unity机器学习代理ML-Agents v0.2版本

那么它是如何工作的?为了定义一个课程,第一步就是决定环境中的哪些参数会改变。在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的这些大脑类型的信息。具体来说,这个功能使模仿学习变得可能,来自玩家、启发式、或者内部大脑的数据能被作为监督信号来训练一个独立的网络,而不需要定义一个奖励功能,或者额外增加一个奖励功能来增强训练信号。我们认为这能给游戏开发者在思考如何让游戏更智能时提供一个新思路。

Unity机器学习代理ML-Agents v0.2版本

灵活的监控器 

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

Unity机器学习代理ML-Agents v0.2版本