原文链接:https://blogs.unity3d.com/cn/2017/09/19/introducing-unity-machine-learning-agents/
原翻译链接:http://mp.weixin.qq.com/s?__biz=MjM5NjE1MTkwMg==&mid=2651044120&idx=1&sn=3563c7aecfff3ee459a7c478705c1fa9&chksm=bd1a8e298a6d073f8baa0fa8f9b024e431997e938ac29d6358c78023c989ede0b69d962e9f75&scene=0#rd
SDK下载链接:http://download.csdn.net/download/ilypl/9996634
(官网也可以下载)
机器学习正在改变从自主代理获得我们所期望的智能行为的方式。在过去,行为靠手工编码而来,而现在则是以在训练环境中不断交互的方式教给代理(机器人或虚拟化身)。从工业机器人、无人机和无人驾驶汽车到游戏角色和敌人,都在使用这种方式来进行行为学习。训练环境的质量对于可以学习的行为种类是至关重要的,而且通常需要做出一定的权衡。在虚拟环境中训练代理的典型场景需要一个单个的环境,以及一个与该环境紧密耦合的代理。代理的行为改变环境状态,并为代理提供奖励。
在Unity中,我们希望为那些不断增长的,对运用机器学习开发智能代理感兴趣的群体,设计一个更具灵活性和易用性的系统。此外,我们希望在此同时能充分利用Unity引擎和编辑器的高质量物理和图形,以及简单却强大的开发者控制特性。我们认为这样的组合可以使下列群体获得其他的解决方案可能无法提供的优势:
对研究现实竞争和合作场景中复杂多主体行为感兴趣的学术研究者。
对机器人、无人驾驶汽车和其他工业应用领域的大规模并行训练方案感兴趣的行业研究者。
对在虚拟世界创造各种具有非特定精妙行为的智能代理感兴趣的游戏开发者。
我们提供的解决方案称为机器学习代理(简称ML - Agents),并且已经发布了对应SDK的开放测试版,您可以访问Github下载使用。研究者和开发者可使用ML - Agents SDK将由Unity编辑器创建的游戏和模拟程序转换成可训练智能代理的环境。在这个环境中,只需一个简单的Python API即可使用深度增强学习、演化策略或其他机器学习方法对智能代理进行训练。测试版的Unity ML – Agents已作为开源软件发布,其中包含了一套示例项目和基线算法用作新手入门。由于这是首个测试版本,我们正积极收集反馈,并鼓励任何感兴趣的人在GitHub做出贡献。有关机器学习代理工具的更多信息, 请访问:https://github.com/Unity-Technologies/ml-agents。
在任何学习环境下都有的三种主要对象是:
代理
每个代理都可以拥有一组独有的状态和观察,在环境中采取独有的行为,并在环境中获得独有的奖励。一个代理的动作由与之相联的大脑决定。
大脑
每个大脑都定义了一个特定的状态和动作空间,并负责决定每个关联的代理将采取哪些行动。当前版本支持将大脑设定为以下四种模式之一:
外部-动作决策由TensorFlow(或你选择的ML库)决定,我们的Python API负责打开套接字进行通信。
内部(实验性)-动作决策由一个已训练模型决定,该模型使用TensorFlowSharp嵌入项目。
玩家-动作决策由玩家输入决定。
启发式-动作决策由手工编码的行为决定。
acadmy
一个场景中的学院对象也包含了在环境中所有作为子对象的大脑。每个环境都包含单个学院对象,该对象从以下这些方面定义了环境的范围:
引擎配置-在训练和推理模式下,游戏引擎的速度和渲染质量。
跳帧-在每个代理做出一个新的决定之间要跳过多少引擎步骤。
全局迭代长度-单次迭代的持续时间。到时间后,所有代理都将被设置为完成。
所有连接着设置为外部模式大脑的代理,它们的状态和观察都会被外部通信器(External Communicator)收集,并通过我们的Python API与你选择的ML库进行通信。将多个代理设置到单个大脑,可以以批处理方式进行动作决策,从而在系统支持的情况下获得并行计算的优势。
有了Unity 的机器学习代理工具,各种各样的训练场景都是可能的,这取决于代理、大脑和奖励的连接方式。我们很期待开发者社区会创造出各种新奇和有趣的环境。对于那些训练智能代理的新手来说,下面这些例子可以用来启发灵感。每个都是一个环境配置原型,包含如何使用ML - Agents SDK进行创建的描述。
单个代理:连接单个大脑的单个代理。传统的代理训练方式。可以以任何单人游戏为例,比如Chicken。
同时单个代理:连接到单个大脑的多个具有独立奖赏函数的独立代理。一种传统训练场景的并行版本,可以加速和稳定训练过程。例如,训练12个机器人手臂同时打开一扇门。
对抗性自我博弈:与单个大脑相连,具有反奖励函数的两个相互作用的代理。在双人游戏中,对抗性自我博弈可以让一个代理变得越来越熟练的同时,总能拥有与之完美匹配的对手:它自己。这是在训练AlphaGo时使用的策略,而最近被OpenAI用于训练打败人类的1v1 Dota 2代理。
合作性多代理:与单个或多个不同大脑相连,共享同一个奖励函数的多个相互作用的代理。在这种情况下,所有的代理都必须共同完成一个无法独立完成的任务。例如,在一个单个代理只能访问部分信息的环境中,代理间需要进行共享才能完成任务或协作解决一个问题。
竞争性多代理:与单个或多个不同大脑相连,具有反奖励函数的多个相互作用的代理。在这种情况下,代理必须相互竞争以赢得竞争,或者获得一些有限的资源。所有的团队运动都属于这种情况。
生态系统:与单个或多个不同大脑相连,具有独立奖励函数的多个相互作用的代理。这种情况可以想象为一个小世界,在这个世界里,拥有不同目标的动物相互作用,例如一个可能有斑马、大象、长颈鹿的热带草原,或者是一个都市环境中的无人驾驶模拟。
结语:
我们很高兴能发布开放测试版的Unity机器学习代理工具,这个版本仅仅是一个开始,对于那些对有兴趣将Unity作为机器学习平台的人,以及那些专注于游戏开发中机器学习潜力的人,我们计划快速迭代并为之提供额外的功能。虽然这个测试版更倾向于前者,但我们将逐渐为后者提供更多支持。如上所述,我们特别希望听到对于未来发布的Unity机器学习代理工具中想要包含哪些用例和特性的声音,我们欢迎大家对GitHub仓库发起Pull请求。请通过 ml-agents@unity3d.com与我们联系