Notifications
Article
从0到1学习Unity开发AI应用
Published a year ago
149
0
本文翻译自:https://github.com/Unity-Technologies/ml-agents/blob/master/docs/ML-Agents-Overview.md,用以提供中文版本。
目录
1.综述 3
2.Unity ML Agents介绍 3
3.Demo:Training NPC Behavior-训练NPC的行为 3
4.Key Components(核心组件) 4
5.Training Modes — 训练模型 6
6.Flexible Training Scenarios – 灵活训练场景 8
7.其他特性 8
8.总结 9

1.综述
ML Agent的目标就是通过将机器学习工具与Unity平台结合,带动技术创新,同时为研究人员和开发人员将机器学习的变革性影响最大化。
“在新一代机器人技术、游戏行业以及更多领域中,Unity机器学习代理(Unity ML-Agents)为快速、高效地开发和测试新的AI算法提供了一种灵活的方式。”
Unity Technologies AI和机器人学习副总裁,前Uber和Amazon机器学习负责人Dr. Danny Lange。
Unity机器学习代理(Unity Machine Learning Agents)是Unity推出的第一款机器学习类产品。这款代理通过简单的Python API,使用强化学习和演化法训练智能代理,其主要用途如下:
 学术研究人员可将其用于研究视觉内容和现实物理的复杂行为
 工业和企业研究人员可将其用于为机器人技术、自动驾驶技术和其他工业应用实施大规模的平行训练制度
 游戏开发者可将其用于应对一些挑战性任务,如使用代理动态地调节游戏难度等级
2.Unity ML Agents介绍
Git hub地址:https://github.com/Unity-Technologies/ml-agents。
官方开源ML-agents,是为让更多开发者能够一起研究进步,争取把这个插件做到更强更好,同时ML-Agents也是AI研究者与Unity开发者的桥梁,一方面让Unity开发者接触到AI技术,另一方面让AI研究成果可以在Unity这个富媒体平台上做出更优秀的作品。
ML Agent的学习需要三方面知识:Unity, Machine Learning 和TensorFlow,Unity开发者往往缺少机器学习的背景知识,在《Machine Learning普及课》文章中,我将给大家普及机器学习的背景知识,读者们有必要看一下再继续本文学习。
3.Demo:Training NPC Behavior-训练NPC的行为
NPC一般是多人游戏中的预设角色,没有玩家操作,但游戏中NPC往往承载一些重要功能,例如商人,治疗医生,兵器店老板等。Demo中,假设有2支队伍对战,每支队伍有5个士兵和一个医生NPC,医生NPC负责发现并治疗受伤士兵。
医生NPC行为明显很复杂,首先要避免自己受伤,要求医生在危险的时候迅速逃到安全区;其次,需要知道队伍中哪个成员受伤并需要治疗;最后,一名优秀的NPC医生应该能迅速找到队伍中受伤士兵,并迅速给予治疗。医生NPC需要把所有因素考虑进来去决定如何行动,如果手动编写一个NPC需要很大工作量,而且容易出bug。
如果使用Unity ML-Agents的话,制作一个NPC的方法就很多了,这里首先在游戏中设置3个entity(实体),称作环境因素(environment)。
Observations(观察者)—agents对环境的认知、理解。
Observations可以是数字化或可视化对象。数字化对象通过agents的视点收集环境数据,针对demo中的医生NPC,环境数据是战斗场景中可以看到的环境数据,根据游戏的复杂度,observations可以是连续或离散的,对于复杂环境,需要几个连续的observations;对于简单环境,也许只需要一个离散的observations足矣。另一方面,可视化observations是一系列图像,这些图像由挂在agents上的camera产生,代表了当时agents所看到的图像。这里说一下observations和environment的区别,以防混淆,observations是agents看到的属性或图像,environment是整个游戏的环境属性,observations算是environment的子集,例如游戏中,医生NPC不能发现隐藏的敌军士兵,而敌军士兵和己方士兵都包含在游戏的environment属性中。
Actions(行为)--agents能做什么。
类似于observations , Actions也可分为连续和离散两种,对于简单的游戏,场景中只有网格地图,仅仅包含玩家位置,那么一个离散的Actions够用了;而对复杂的游戏,医生NPC可以自由移动的话,就需要2个连续的Actions:方向和速度。
Reward Signals(奖励信号)—一个标量值(枚举值),代表agents的行为评判标准。
Reward Signal在医生NPC做出了某个Actions产生了好或坏的结果的时候执行,例如:如果医生NPC死亡,reward signal会减掉一个大数值;如果医生NPC救了一个受伤的士兵,reward signal会增加一个数值;如果由于医生NPC没有及时救治导致全队死亡,医生NPC的reward signal会减掉最大值。值得注意的是,任务是如何传递给NPC的,或者说NPC的什么Action导致了Reward signal值得增减,这需要建立一种机制,在这种机制中用最大的reward signal去鼓励最好的Action,让NPC自己建立最优化的Actions目标。
通过建立加强学习模型(reinforcement learning task),我们可以训练我们的NPC如何去做了,这种模型的建立需要通过模拟很多环境,环境中医生NPC总是去学习最优化的行为去执行,以使最终得到的结果最好,也就是自己的行为最优化,总结起来,医生不断学习最优化的行为,让自己成为一个好的医生。在enforcement learning 术语中,医生学习到的行为成为policy(策略),policy是observations到actions的一个最优化映射;在模拟场景中医生学习一个policy的过程称为训练阶段,在玩游戏过程中,医生使用policy的过程称为推断阶段。
Unity ML Agents提供了很多工具,在Unity模拟引擎环境中,各种物体可以学习各种策略,接下来,我们来看看ML Agents如何实现这些?
4.Key Components(核心组件)
ML Agents作为Unity的一款插件,主要包含3个Components:
Learning Environment--包含Unity场景和所有游戏人物。
Python API –包含所有用以学习policy(或学习行为)的算法。注意,不想学习environment, Python API不是unity的组成部分,他们之间的链接需要另外的连接器。
External Communicator—把Learning Environment和 Python API连接起来,它包含在Learning Environment里面。
Learning Environment包含三个额外的components,用以组织Unity Scene:
Agents—也就是机器人。挂在Game Object上的脚本,生成Agents的observations,执行它接收到的行为,得到一个reward.每一个agents有且仅有一个brain相连接。
Brains—Agent执行Actions的决定者,首先接收Agents的observations和reward的数据,然后输出Action用于Agent的执行。
Academy—把observations和决策过程有机地结合起来。在academy中,虚拟模拟环境的一些参数可以设置,如rendering,quality和环境运行速度。External Communicator就在这里设置。
每一个学习环境里总是有一个全局的Academy和一个Agents。尽管每个Agent必须链接到一个Brain,Agent还是可能有多个相似的Observations和Actions链接到这个Brains的。在demo中,我们有2支队伍对战,每个队伍有一个医生NPC,我们就有2个NPC医生在场景中,但是这2个NPC医生可以连接到一个相同的Brain,之所以如此,是因为2个NPC医生的Observations和Actions的环境是相似的。这并不意味在每一种情况下他们的observations和actions是完全相同的。换句话说,Brain大脑定义了Observations和Actions的所有可能空间,如果我们扩展我们的游戏,增加一个开坦克的NPC,那么医生NPC和坦克驾驶员NPC就不能共享一个Brains,因为他们的Actions不一样。
我们仍要继续讨论ML Agents 如何训练行为,Python API 和 External Communicator所扮演的角色。在我们深入讨论细节之间,先总结一下,每个角色可以是一个agent,每个agent链接一个brain, Brain 接收来自每个Agent的observations和rewards的数据,并返回Actions。Academy确保Agents和Brains同步,通过控制environment--wide设置。所以到底大脑如何控制Agents行动呢?
实际上,我们有4种类型的Brains,这让训练和推断场景的范围更广泛。
External—利用Python API做决定。这里Brains收集的observations 和 rewards数据通过External Communicator被传送到Python API,然后Python API会回传相应的行为给Agent。
Internal- -使用TensorFlow Model来做决定。 内置的TensorFlow Model拥有一个学习过得策略,Brain直接使用这个model来决定Agent要执行的Action.
Player—玩家模式,决定由玩家通过键盘或控制器来做。这里一个玩家正在控制agent,所以Brains收集的observations和rewards数据没有被用去控制Agent.
Heuristic—启发式教育法,这里决定由硬编码行为来做。这类似于现在角色行为的定义方式,有利于调试,我们可以比较硬编码行为和经过训练的Agent的行为。Demo中,我们可以指定己方队伍的医生NPC为硬编码行为,敌方队伍的医生NPC使用Train Brain,进而得知哪一个NPC更好。
综上所述,看起来External Communicator和Python API是外部大脑的唯一杠杆。这不一定,我们还也可以使用Internal Player 和 Heuristic 大脑 去发送observations 和rewards数据到Python API通过External Communicator(类似广播机制)。这一切都增加了训练模式的灵活性,所以这里有一些方式可以训练和推断NPC行为。

5.Training Modes — 训练模型
 内置的训练和推断
上面提到了,ML Agents有若干种训练AI的算法。在本方法中,训练学习的过程中Brain的类型设置为External,推断实战过程中Brain类型设置为内置Internal.更特殊的是,在训练过程中,所有的医生NPC发送observations到Python API。The Python API处理observations并返回行为。训练中这些Actions可以帮助Python API学习最好的Policy用于Agent.一旦训练结束,学习好的Policy可以输出成为文件,在推断阶段,我们设置Brain Type为TensorFlow模式,此时医生NPC仍然发送observations,但是要发送到Internal Model去获取最优化的行为,这个过程实时进行。
总结起来:我们内置的实现方法是基于TensorFlow,因此在使用Python API训练期间,Python API学习并输出了TensorFlow模型。这个模型被放置到Internal Brain中,去为所有链接到这个Internal Brain的Agents提供最优化行为。注意我们的Internal Brain目前是实验性的,因为受限于TensorFlow模型和TensorFlow Sharp Library的杠杆作用。
3D平衡球教程涵盖了这种训练模式。
 用户训练和推断模式
在上一中模式中,外部大脑用来训练并输出TensorFlow模型用于内部大脑使用。然而,任何ML Agents都可以利用他们算法的杠杆作用来进行训练和推断实战。本小节介绍的模式里,不管是在训练或者实战阶段,大脑类型均被设置为外部类型,所有的Agents的行为都被Python控制。官方没有给出这种模式的教程,但是读者们仍要好好研究Python API和这种模式。
 Curriculum Learning--课程学习模式
这种模式是内置训练和实战大脑模式的扩展形式,尤其对于复杂游戏训练行为非常有帮助。课程学习模式是为了让Agents能够在游戏中复杂问题上不断的去挑战优化。这个概念需要很长的时间,类似于人类的学习模式。回想我们童年学习的时候,每一类科目的学习都是有顺序的,例如先学习算法在学习代数,同样先学习代数后学习微积分,打好基础才能学好更高阶的课程,简单问题的训练过程是为了以后能完成复杂的任务,解决复杂的问题。
数学课程案例
一个数学的案例,课程总是从简单到复杂,每一步都建立在上一步的基础上。
当我们思考reinforcement learning如何运行的时候,学习信号是来自训练的奖励机制。训练一个Agent的起点是随机的策略,这种随机的开始策略是类似于把一个agent放到了一个环形跑道上,看起来永远也不可能解决最复杂的环境。但是刚开始设置简单的环境,我们可以让agent随着环境的逐渐复杂化快速的更新自身的策略以适应新的环境。例如:Demo中,刚开始每支队伍先设置1个士兵,再慢慢增加数量,在Academy中用户可以设置动态的变量增加,关系到游戏复杂度的变量可以根据训练的过程动态的改变增加。
Curriculum Learning教程包含这种训练模式,后续文档会进行实践分析。
 Imitation Learning--模仿学习
实际上,我们直接告诉agent怎样做是对的更简单,而不是试图通过实验改错的方式让他们自己学习。例如,替代医生NPC奖励机制的训练模式,沃恩需要一个玩家真实的控制NPC,具体来说,在这种模式下,大脑类型是Player,玩家操作NPC,同时把Agent的observations和acti ons传给Python API ,让Python API利用observation—Action行为对去学习一种策略。
同样,Imitation Learning教程采用了此种模式,读者可以先行研究,后期老掌门会进行实践分享。
6.Flexible Training Scenarios – 灵活训练场景
通常我们经常讨论如何训练一个agent,但是现在我们在一些社区看到有很多人训练多个agents,下面是一些小例子,可以用来启发一下。
Single-Agent—agent连接到一个大脑,一般在单人游戏中,如:Chi Ken.
Simultaneous Single-Agent—联合单体agent:多个独立的拥有不同奖励机制的agent链接到一个大脑。如果你的单人游戏有多个游戏版本的话,这种模式很有帮助。如果有个例子的话:一打士兵一起推开一扇门。
Adversarial Self-Play:双手对打模型:2个对抗的机器人链接到同一个大脑。
单人对抗双打模式允许一个agent变得更加强大,当它的对手非常强大的时候。这种模式被用来训练Alpha Go,最近被经常用来训练1-vs-1Dota 2机器人。
Cooperative Multi-Agent—多人协同机器人:共享reward signal的多人链接到一个大脑或一人一个不同的大脑。在这个场景中,所有的agents必须合作才能完成任务。
Competitive Multi-Agent—竞争性多人机器人:有相反的reward signal的机器人连接到一个或多个不通的大脑。在这种场景下,每个人必须通过打败另一个人才能获取胜利,所有的团队运动都是这种场景。
Ecosystem —生态系统,这种模式听起来有些诡异,因为做unity第一干到了生态系统。拥有各自独立的reward signal的多个Agent链接到一个或者多个不通的大脑。这种模式类似于一个独立的生态环境,例如一个热带雨林,里面有斑马,大象,长颈鹿,或者一个被都市环境操控的自动运行的仿真模拟环境。
7.其他特性
除了灵活的训练场景外,ML Agent还包括一些特性,用来提高训练过程的灵活性和交互性。
On Demand Decision Making – 随机应变决定机制
这种模式要求,仅当游戏要求agents回应的时候才做决定,决定基于游戏的具体情况,游戏的每一步,agent都可能回应不通的决定,随机应变没有规律。
Memory-enhanced Agents -记忆加强代理
在某些场景中,agent必须要记住之前的观察数据和行为,因为现在有可能观察到的很片面很少,所以需要以前的记忆来辅助决策,我们设置了long-short memory mode用来实现agent的记忆加强功能。
Monitoring Agent’s Decision Making – 监督决策机制
由于ML Agent中的双向通道,我们提供了Monitor Class用于显示经过训练的Agent的行为数据,类似于Agent行为预测,数据估值。通过Unity实时显示输出这些结果,研究人员和开发人员可以容易的debug一个agent的行为。
Complex Visual Observations – 复杂可视化观察者
与其他平台不同的是,agent的观察数据不会是单个向量或图像,一个agent可以绑定多个摄像机用来提供多个图像或数据,这使得agents可以集成多通道可视化信息流,对有些场景作用很大。例如:自动驾驶汽车需要多个视点的数据,自动航空系统需要航空和第一人称视角信息。
Broadcasting –广播机制
之前讨论,External Brain可以发送observations数据到Python API,这对于训练和实践阶段很有用。广播机制是一个可以用到另外3种训练模型的特性,把observations—actions信息对发送到Python(尽管agent在这3种模式下不受Python API的控制)。广播机制是模仿学习的杠杆作用,玩家的observations-Actions信息对对agents的学习起到示范作用。然而,对于启发式和内置式Brain Training Model,尤其当debug Agent行为时,非常有用。
8.总结
总结一下,ML Agent 让Unity成为一个训练AI的平台,提供了大量的训练模式、场景及特性,研究人员和开发者用unity研究machine learning会有大大滴杠杆作用。为了帮助用户去使用ML Agent,官方团队提供了很多教程:安装教程,3D平衡球教程,如何设置自己的训练环境。
同时,老掌门会持续更新官方团队最新技术路线与Demo实践教程。
Jason
UnityLeader - Programmer
5
Comments