ML-Agents概述

原文链接:https://github.com/Unity-Technologies/ml-agents/blob/master/docs/ML-Agents-Overview.md

ML-Agents概述

Unity机器学习Agent(ML-Agents)是一款开源的Unity插件,可让游戏和模拟作为训练智能Agent的环境。通过简单易用的Python API,Agent可以使用强化学习,模仿学习,神经元演化或其他机器学习方法进行训练。
我们还提供最新算法的实现(基于TensorFlow),使游戏开发者和业余爱好者能够轻松地为2D,3D和VR / AR游戏训练智能Agent。这些受过训练的Agent可以用于多种目的,包括控制NPC行为(在多种Agent和敌对情况下的各种设置中),
游戏构建的自动化测试和评估不同游戏设计的预发布决策。 ML-Agents对于游戏开发者和AI研究人员来说都是互利的,因为它提供了一个中央平台,可以在Unity的丰富环境中评估AI的优势,然后得到更广泛的研究和游戏开发者社区的青睐。

根据您的背景(即研究人员,游戏开发人员,爱好者),目前您可能会有非常不同的问题。为了让您更轻松地转换到ML-Agents,我们提供了多个包含概述和有用的资源的背景页面,其中包括Unity引擎机器学习TensorFlow
如果您不熟悉Unity场景,基本的机器学习概念,或者以前没有听说过TensorFlow,我们强烈建议您浏览相关的背景页面。

本页面的其余部分深入介绍了ML-Agents,其关键组件,不同的训练模式和场景。到最后,对于能用ML-Agent做什么,你应该有一个很好的理解。随后的文档页面提供了如何使用ML-Agents的示例。

运行示例:训练NPC行为

为了帮助解释本页面中的材料和术语,我们将始终使用一个假设的运行示例。我们将探讨在游戏中训练非可玩角色(NPC)行为的问题。 (NPC是一个永远不受人类玩家控制的游戏角色,其行为由游戏开发者预先定义。)更具体地说,我们假设我们正在构建一个多玩家,以战争为主题的游戏,玩家可以控制战士。在这场比赛中,我们有一名NPC担任医护人员,寻找并救治受伤的球员。最后,让我们假设有两支队伍,每支队伍有五名队员和一名NPC医生。

军医的行为相当复杂。它首先需要避免受伤,这需要检测何时处于危险中并移动到安全位置。其次,它需要了解其团队成员中哪些人受伤并需要帮助。在多人受伤的情况下,
它需要评估受伤程度并决定首先帮助谁。最后,一名优秀的医生总能把自己置于一个可以快速帮助其团队成员的位置。考虑所有这些特征意味着医生需要在每种情况下测量环境的若干属性(例如团队成员的位置,
敌人的位置,其团队成员中的哪些人受到伤害并达到什么程度),然后决定采取行动(例如躲避敌人的射击,移动以帮助其成员之一)。鉴于环境的大量设置以及军医可采取的大量行动,
手动定义和实现这种复杂的行为是具有挑战性的,并且容易出错。

使用ML-Agents,可以使用各种方法来训练这些NPC(称为Agent)的行为。基本想法很简单。我们需要在游戏的每个时刻定义三个实体(称为环境):

  • 观察 - 医生对环境的看法。观测可以是数字化和/或可视的。从Agent的角度来看,数字化观察测量环境的属性。对于我们的医生来说,这将是战场上可见的属性。
    根据游戏和Agent的复杂性,观察可以是离散的或连续的。对于大多数有趣的环境,Agent将需要几次连续的数字观测,而对于具有少量独特配置的简单环境,离散观测就足够了。目测观察,
    另一方面,是从连接到Agent的摄像头生成的图像,代表该Agent在该时间点看到的内容。通常会将Agent的观察与环境(或游戏)状态混淆。环境状态表示关于包含所有游戏角色的整个场景的信息。
    但是,Agent观察仅包含Agent知道的信息,通常是环境状态的子集。例如,医生观察到的信息不能包括医生不知道的信息如隐藏的敌人。

  • 行动 - 医生可以采取什么行动。类似于观察,取决于环境和Agent的复杂性,动作可以是连续的或离散的。对医生来说,如果环境是一个只包含他们位置的简单网格世界,那么一个离散的行动采取四个值之一(北,南,东,
    西)就足够了。但是,如果环境更加复杂并且医护人员可以自由移动,那么使用两个连续的行动(一个用于方向,另一个用于速度)更合适。

  • 奖励信号 - 表示医生的行为如何的标量值。请注意,奖励信号不需要在每个时刻都提供,而是只有在医生执行好的或坏的行为时才会提供。例如,如果死亡可以获得大量的负面奖励,每当治疗受伤的团队成员时可获得适度的积极奖励,
    当受伤的团队成员因缺乏援助而死亡时,他们会得到适度的负面报酬。请注意,奖励信号关系到任务的目标如何传达给Agent,所以他们需要以最大化奖励产生期望的最佳行为的方式进行设置。

在定义这三个实体(强化学习任务的构建块)之后,我们现在可以训练医师的行为。这是通过模拟许多试验的环境来实现的,随着时间的推移,军医学习通过最大化未来奖励来衡量每次观察所采取的最佳行动。
关键是,通过学习最大化奖励的行动,军医正在学习能使其成为一名优秀军医的行为(即拯救最多的生命)。在强化学习术语中,所学习的行为称为策略,其实质上是从观察到行动的(最佳)映射。
请注意,通过运行模拟学习策略的过程称为训练阶段,而使用学习策略的NPC玩游戏称为推理阶段

ML-Agents提供了将Unity用作模拟引擎的所有必要工具,用于了解Unity环境中不同对象的策略。在接下来的几节中,我们将讨论如何实现ML-Agent以及它提供的功能。

 

关键部件

ML-Agents是一个Unity插件,它包含三个高级组件:

  • 学习环境 - 包含Unity场景和所有游戏角色。
  • Python API  - 其中包含用于训练的所有机器学习算法(学习行为或策略)。请注意,与学习环境不同,Python API不是Unity的一部分,但它位于外部并通过外部通信器与Unity通信。
  • 外部通讯器  - 将学习环境与Python API连接起来。它包含在学习环境中。

                                

ML-Agents的简化框图。

学习环境包含三个帮助组织Unity场景的附加组件:

  • Agent - 连接到Unity GameObject(场景中的任何角色)并处理其观察到的信息,执行它接收的操作并在适当时分配奖励(正/负)。每个Agent只与一个Brian相关联。
  • Brian - 它封装了为Agent制定决策的逻辑。实质上,Brian持有每个Agent的策略,并决定了Agent在每个实例应采取的行动。更具体地说,它是接收来自Agent的观察并返回行动的组件。
  • Academy - 协调观察和决策过程。在Academy内,可以指定几个环境参数,例如渲染质量和在运行环境中的速度。Academy包含了外部通讯器。

对于场景中的每个角色,每个学习环境总是会有一个全局Academy和一个Agent。虽然每个Agent必须与一个Brian相连,但具有相似观察和行为的Agent可能与同一Brian相关联。在我们的示例游戏中,我们有两个拥有各自医生的团队。
因此,在我们的学习环境中,我们将有两个Agent,每名军医都有一名Agent,但这两个Agent都可以连接到同一个Brian。请注意,这两个医生与同一个Brian相连,因为他们的观察和行动的空间是相似的。这并不意味着在每种情况下,他们都会有相同的观察和行动值。
换句话说,Brian定义了所有可能的观察和行动的空间,而与之相关的Agent(在这种情况下是医疗人员)可以各自拥有自己独特的观察和行动价值。如果我们将我们的游戏扩展到驾驶坦克的NPC,
那么附加到这些角色的Agent不能与链接到医疗人员的Agent(医疗和司机有不同的行动)共享一个Brian。

我们示例游戏的ML-Agents示例框图

我们尚未讨论ML-Agents如何训练行为,以及Python API和External Communicator分别扮演何种角色。在我们深入了解这些细节之前,让我们总结一下之前的组件。每个角色都绑定到一个Agent上,并且每个Agent都连接到一个Brian上。Brian从Agent处收到观察和并返回行动。
Academy确保除了控制整个环境的设置之外,所有Agent和Brian都处于同步状态。那么Brian如何控制Agent做什么呢?

实际上,我们有四种不同类型的Brian,它们可以实现广泛的训练和推理场景:

  • 外部 - 使用Python API进行决策。在这里,Brain收集的观察结果和奖励通过外部通讯器转发给Python API。 Python API然后返回Agent需要采取的相应操作。

  • 内部 - 使用嵌入式TensorFlow模型进行决策。嵌入式TensorFlow模型代表一种学习策略,Brain直接使用此模型确定每个Agent的操作。
  • 玩家 - 使用键盘或控制器的实际输入做出决定。在这里,一个人类玩家正在控制该Agent,并且Brian收集的观察和奖励不用于控制该Agent。

  • 启发式 - 使用硬编码行为进行决策。这类似于当前定义的大多数角色行为,并且可以有助于调试或比较具有硬编码规则的Agent与其行为已被训练的Agent。在我们的例子中,
    一旦我们为医疗人员训练了一个Brian,我们就可以将一名医生分配给训练有素的Brian,并在另一个团队中为医生分配一个具有硬编码行为的启发式Brian。然后我们可以评估哪种医疗更有效。

正如目前所描述的那样,外部通讯器和Python API似乎只能被外部Brian所利用。这不是真的。可以配置内部,玩家和启发式Brian,通过外部通讯器(一种称为广播的功能)将观察,奖励和行动发送到Python API。
我们很快会看到,这将使更多的训练模式成为可能。

一个配置有多个Agent和Brains的场景的例子

训练模式

考虑到ML-Agents的灵活性,可以通过几种方式进行训练和推理。

内置的训练和推理

如前所述,ML-Agents附带了多种用于训练智能Agent的最新算法的实现。在此模式下,Brain类型在训练期间设置为External,在推理期间设置为Internal。更具体地说,在训练期间,
场景中的所有医务人员通过外部通讯器将观察结果发送到Python API(这是外部Brian的行为)。 Python API处理这些观察结果并返回每个医生采取的行动。
在训练期间,这些操作大多是探索性的,以帮助Python API学习每位医生的最佳策略。一旦训练结束,每个军医的学习策略都可以导出。鉴于我们所有的实现都基于TensorFlow,所学的策略只是一个TensorFlow模型文件。然后在推理阶段,
我们将Brain类型切换为Internal,并包含从训练阶段生成的TensorFlow模型。现在,在推理阶段,医疗人员仍然继续生成他们的观察结果,但不是被发送到Python API,而是被输入到他们的(内部的,
嵌入式)模型,以便为每位医护人员在每个时间点采取最佳行动。

总结一下:我们的内置实现基于TensorFlow,因此,在训练期间,Python API使用收到的观察数据来学习TensorFlow模型。
然后在推理过程中将该模型嵌入内部Brian中,以便为与该Brian相关的所有Agent生成最佳动作。请注意,我们的内部Brian目前是实验性的,因为它仅限于TensorFlow模型并利用第三方TensorFlowSharp
3D平衡球示例教程入门介绍了3D平衡球示例环境的这种训练模式。

定制训练和推理

在之前的模式中,使用外部Brian类型进行训练以生成内部Brian类型可以理解和使用的TensorFlow模型。然而,ML-Agents的任何用户都可以利用自己的算法进行训练和推理。在这种情况下,
在训练和推理阶段,Brain类型将被设置为External,并且场景中所有Agent的行为都将在Python中进行控制。

我们目前没有教程突出展示此模式,但您可以在此处了解有关Python API的更多信息。

课程学习

此模式是内置训练和推理的扩展,在训练复杂环境中的复杂行为时特别有用。课程学习是一种训练机器学习模型的方式,在这个模型中, 问题的更困难的方面逐渐被引入, 从而使模型始终处于最优的挑战之中。
这个想法已经存在了很长一段时间,这是我们人类通常学习的方式。如果你想象任何儿童时期的小学教育,就有一个课程和主题的排序。例如,算术在代数之前被教导。同样,代数也是在微积分之前教授的。
早期课程中学到的技能和知识为后面的课程提供了一个脚手架。同样的原则可以应用于机器学习,在这种情况下,对较简单的任务进行训练可以为将来的较困难的任务提供一个脚手架。

数学课程的例子。从简单课程到更复杂课程的学习过程,每一个都是建立在之前之上。

当我们考虑强化学习的实际工作方式时,学习信号是在整个训练过程中偶尔收到的奖励。训练Agent完成此任务时的起点将是一个随机策略。该起始策略将使Agent以循环形式运行,并且可能永远不会,
或者很少获得复杂环境的回报。因此,通过在训练开始时简化环境,我们允许Agent人将随机策略快速更新为更有意义的策略,随着环境逐渐复杂化,策略也会不断改进。在我们的例子中,
我们可以想象,当每支球队只包含一名球员,然后反复增加球员人数(即环境复杂度)时,首先要对球员进行训练。 ML-Agents支持在Academy内设置自定义环境参数。
这允许根据训练进度动态调整与难度或复杂性相关的环境要素。

训练与课程学习教程将介绍Wall Area示例环境的训练模式。

模仿学习

简单地展示我们希望Agent执行的行为通常更直观,而不是尝试通过试错法来学习。例如,这种模式不是通过设置奖励功能来训练医生,而是通过游戏控制器提供医生应该如何表现的实例。
更具体地说,在这种模式下,训练期间的Brian类型被设置为玩家,并且使用控制器执行的所有动作(除了Agent观察)将被记录并发送到Python API。模仿学习算法将使用这些来自人类玩家的观察和行动来学习策略。
带模仿学习的训练教程将介绍Banana Collector示例环境的训练模式。

 

灵活的训练方案

目前为止的讨论主要集中在使用ML-Agents对单个Agent进行训练,有几种训练方案是可能的。我们很期待看到社区创造了什么样的新奇和有趣的环境。对于那些训练智能Agent的人来说,下面是一些可以作为启发的例子:

  • 单个Agent。与单个Brian相连的单个Agent人,拥有自己的奖励信号。传统的训练Agent方式。例子是任何一个单人游戏,比如Chicken。视频链接
  • 同时单个Agent。具有独立奖励信号的多个独立Agent人与单个Brian相关联。传统训练场景的并行版本,可以加速和稳定训练过程。当你在一个应该学习类似行为的环境中拥有多个相同角色的版本时,这很有用。
    一个例子比如训练一打机器人手臂同时打开一扇门。视频链接

  • 对抗自我。两个敌对的Agent与反向奖励信号链接到一个单一的Brian。在双人游戏中,对抗自我玩法可以让Agent变得越来越熟练,同时始终拥有完美匹配的对手:本身。这是训练AlphaGo时采用的策略,
    并且最近被OpenAI用于训练一个击败人类的1对1 Dota 2Agent。

  • 合作多Agent。具有共享奖励信号的多个交互Agent链接到单个或多个不同的Brian。在这种情况下,所有Agent必须共同完成一项不能单独完成的任务。示例包括每个Agent只能访问部分信息的环境,
    需要共享才能完成任务或协作解决难题。

  • 竞争多Agent。具有反向奖励信号的多个交互Agent链接到单个或多个不同的Brian。在这种情况下,Agent必须相互竞争才能赢得比赛,或获得一些有限的资源。所有团队运动都属于这种情况。
  • 生态系统。具有独立奖励信号的多个交互Agent链接到单个或多个不同的Brian。这种情景可以被认为是创建一个小世界,其中动物有不同目标且相互作用,比如可能有斑马,大象和长颈鹿的稀树草原,
    或城市环境中的自主驾驶模拟。

附加功能

除了提供灵活的训练方案外,ML-Agents还包含其他功能,可提高训练过程的灵活性和可解释性。

  • 按需决策 - 使用ML-Agents,只有在需要时,Agent才能请求决策,而不是在环境的每个步骤请求决策。这可以适用于训练回合制游戏、Agent必须对事件作出反应的游戏或Agent可以采取持续变化的行动的游戏。
    在每一步决策和按需决定之间切换只需点击一下按钮。您可以在这里了解更多关于按需决定功能的信息。

  • 记忆增强型Agent - 在某些情况下,Agent必须学会记忆过去,才能做出最佳决策。当Agent只能部分观察环境时,跟踪过去的观察可以帮助Agent学习。我们提供了一个Long Short-
    LSTM),使Agent商能够在未来的步骤中使用存储器。您可以在此处了解有关启用LSTM的更多信息。

  • 监控Agent的决策 - 由于ML-Agents中的通信是双向的,因此我们在Unity中提供一个Agent监控类,它可以显示受过训练的Agent的各个方面,例如Agent对其在Unity环境中执行效果的看法(称为价值估计)。
    通过利用Unity作为可视化工具并实时提供这些输出,研究人员和开发人员可以更轻松地调试Agent的行为。你可以在这里了解更多关于使用Monitor类的信息。

  • 复杂的视觉观测 - 与其他平台不同,其中Agent的观测可能仅限于单个矢量或图像,ML-Agents允许多个摄像机用于每个Agent的观测。这使Agent可以学习整合来自多个视觉流的信息。
    这可以在几个场景中有所帮助,例如训练需要具有不同视角的多个摄像头的自驾车或可能需要整合空中和第一人称视觉的导航Agent。您可以在此处了解更多关于向Agent添加视觉观察的信息。

  • 广播 - 如前所述,默认情况下,外部Brian将所有Agent的观察结果发送给Python API。这对训练或推断有帮助。广播是可以为其他三种模式启用的功能(播放器,内部,
    启发式),其中Agent观察和操作也被发送到Python API(尽管Agent不受Python API控制)。模仿学习利用了这一特征,其中玩家Brian的观察和行动被用于通过示范学习Agent人的政策。然而,
    这对启发式和内部Brian也有帮助,尤其是在调试Agent行为时。您可以在这里了解更多关于使用广播功能的信息。

  • Docker设置(实验) - 为了便于在不直接安装Python或TensorFlow的情况下设置ML-Agent,我们提供了关于如何创建和运行Docker容器的指南
  • AWS上的云训练 - 为了促进在亚马逊网络服务(AWS)机器上使用ML-Agent,我们提供了有关如何设置除公共预配置的亚马逊机器映像(AMI)之外的EC2实例的指南

总结和后续步骤

简要总结一下:ML-Agents使得Unity中建立的游戏和模拟可以作为训练智能Agent的平台。它旨在实现多种训练模式和场景,并且提供了多种功能,使研究人员和开发人员能够在Unity中利用(并增强)机器学习。
为了帮助您使用ML-Agents,我们为安装ML-Agents创建了几个深入的教程,开始使用3D Balance Ball环境(我们众多示例环境之一)并创建您自己的环境

posted on 2018-04-26 14:08  豆耳朵  阅读(3316)  评论(1编辑  收藏  举报

导航