ML-Agents 2017-2019 技术汇总(含详细环境搭建流程)

机器学习(ML,让人砰然的两个字母~),从ML-Agents入手,第一次实际深入了解机器学习流程,因每次版本更新变更较大,所以花费了挺长时间翻阅杂乱的文章及官方文档最终整理了这篇文章,肯定不能知其然知其所以然,但是勉强有了个概念和轮廓。推荐阅读方式:

  • 快速上手:正序阅读,读到附录1就可以了。
  • 深入了解:倒序阅读,需要花费不少时间,能够了解MLA历史阶段发生了什么。

快速参考教程

Unity ML-Agents 环境搭建指南[文章] v0.12.1-2019-12-13
Unity ML-Agents 0.7 机器学习环境搭建指南[视频]  v0.7-2019-04-1
Unity机器学习代理ML-Agents强化学习示例解析[视频]  v0.4-2018-07-26
Unity3D Ml-Agent 系列教程[文章] v0.8.1-2019-05-19


环境搭建前言

现在ML-Agents最新版本是v0.11.0,官方推出过三种环境搭建方式:原生命令行、DockerAnaconda
        1.原生命令行:就是不借助工具,直接在当前系统搭建环境,劣势是面临多个开发方向时环境版本只能存在一个。 
        2.Docker方式:在ML-agents v0.3版本时推出,需要Unity切换发布平台到Linux才可使用。
        3.Anaconda方式:是现在Github论坛推荐的方式,即使在其他操作系统也可以使用,便于统一管理和撰写文档,显然Anaconda方式更成熟稳定,可查询资料也更多。

在Unity中使用ML-Agents框架需要准备如下软件和库(仅供了解,先不要急着下载,详情会单独介绍用法):
1.Anaconda是一个开源的Python发行版本,主要是让你的训练环境与其它python运行环境隔开,互不干扰。
2.TensorFlow谷歌基于DistBelief进行研发的第二代人工智能学习系统。
3.ML-Agents框架提供的pyhton包,包中含有mlagents-learn程序,mlagents-learn控制游戏,游戏对控制进行评分,反馈到mlagents-learn,mlagents-learn进行相应的处理,而mlagents-learn使用了tensorflow框架,实际的训练过程是由tensorflow完成的,mlagents-learn起到的是一个输入输出的作用。
4.CUDAcuDNN ,是可选的,如果显卡是Nvidia的,电脑可能支持显卡加速。如果不支持那就跳过这个吧。

注1:TensorFlow有两个版本,cpu版和gpu版,如果显卡支持,就用gpu版的,训练的时候会快上很多。
注2:对于小型模型,CPU选项的运行速度更快,因为CPU上会保留数据,而GPU选项常用于大型模型,如视觉类。

详细环境搭建流程:

【环境搭建流程:Anaconda版MLA_v0.11】
0.安装Unity2018+和VS2017+ 并正常配置
1.安装CUDAcuDNN并配置环境变量:(仅针对英伟达显卡),可选,但是推荐安装。【安装配置参考】

【查看本机显卡对应CUDA版本】
1.显卡型号决定了你能安装的cuda的版本,
2.进入NVIDIA控制面板(安装显卡驱动才会有),点击页面左下角“系统信息”,
3.在新出现的页面选择“组件”标签。注意找到“NVCUDA.DLL”,
4.可以看到CUDA的版本号。这就是你应该安装的版本

2.安装Anaconda,配置环境变量,管理员身份打开Anaconda Prompt,后续的命令行执行命令都在这个程序内【安装配置参考】
3.国外资源包太慢,切换国内镜像【清华大学源】【中科大源】二选一
   复制后在Anaconda Prompt命令行工具内粘贴( ctrl + v )即可,会默认执行。

conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge 
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/msys2
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
conda config --set show_channel_urls yes
conda config --add channels https://mirrors.ustc.edu.cn/anaconda/pkgs/main/
conda config --add channels https://mirrors.ustc.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.ustc.edu.cn/anaconda/cloud/conda-forge/
conda config --add channels https://mirrors.ustc.edu.cn/anaconda/cloud/msys2/
conda config --add channels https://mirrors.ustc.edu.cn/anaconda/cloud/bioconda/
conda config --add channels https://mirrors.ustc.edu.cn/anaconda/cloud/menpo/
conda config --set show_channel_urls yes

4.创建Ml-Agent的虚拟环境

conda create -n ml-agents python=3.7

过程中若提示:Proceed ([y]/n)? y,键盘点击“y”键即可。另,ml-agents这个环境名称可以换成别的(第6步名称和该名称要一致)
5.环境创建后,查看环境是否创建完成

conda env list

6.激活环境,激活后会进入这个环境里,安装的包都会在此环境里,跟其他环境是隔离的,左侧会显示激活后的环境名称。

conda activate ml-agents

7.下载并解压ML-Agents框架,最好解压在C盘(经尝试,若其他盘符,第8步方式二,cd进不去),记住解压位置,后面有用。
此处有大坑,大坑,解压到的目录一定不要含有中文,否则会报异常。这个问题追了很久,翻阅大量资料再三再十确认了搭建流程没问题后,才想到是不是中文路径的问题(我默认解压在了C盘下载目录,但是公司电脑用户名为中文,疏忽了)。异常:

"The Unity environment took too long to respond. Make sure that :\n"
mlagents.envs.exception.UnityTimeOutException: The Unity environment took too long to respond. Make sure that :
The environment does not need user interaction to launch
The Academy's Broadcast Hub is configured correctly
The Agents are linked to the appropriate Brains
The environment and the Python interface have compatible versions.

8.安装ML-Agents包及依赖包,以下两种方式二选一{推荐方式二}(确保在指定激活的环境下执行如下命令,会安装在该环境下)
方式一:PyPi源安装:{release 版}

pip install mlagents

注:过程中若提示:Proceed ([y]/n)? y,键盘点击“y”键即可。
方式二:repo克隆安装{develop版}
             如果你想对ml-agents 或 ml-agents-envs做修改,使用本方式进行安装 [如下命令,分别逐条执行]

cd C:\ml-agents\ml-agents-0.11.0\  切换到解压后的实际目录(参考第7步){路径中不要出现中文}
cd ml-agents-envs
pip install -e .
cd ..
cd ml-agents
pip install -e .

9.安装好后可以在命令行尝试下面代码

mlagents-learn --help

有相应反馈且无错误报告就说明装好了。


基本概念

在任何学习环境下都有的三种主要对象是:

代理(Agent)

每个代理都可以拥有一组独有的状态和观察,在环境中采取独有的行为,并在环境中获得独有的奖励。一个代理的动作由与之相联的大脑决定。

大脑(Brain)

每个大脑都定义了一个特定的状态和动作空间,并负责决定每个关联的代理将采取哪些行动。例如,可将大脑设定为以下四种模式之一:

  • 外部-动作决策由TensorFlow(或你选择的ML库)决定,我们的Python API负责打开套接字进行通信。

  • 内部(实验性)-动作决策由一个已训练模型决定,该模型使用TensorFlowSharp嵌入项目。

  • 玩家-动作决策由玩家输入决定。

  • 启发式-动作决策由手工编码的行为决定。

学院(Academy)

一个场景中的学院对象也包含了在环境中所有作为子对象的大脑。每个环境都包含单个学院对象,该对象从以下这些方面定义了环境的范围:

  • 引擎配置-在训练和推理模式下,游戏引擎的速度和渲染质量。

  • 跳帧-在每个代理做出一个新的决定之间要跳过多少引擎步骤。

  • 全局迭代长度-单次迭代的持续时间。到时间后,所有代理都将被设置为完成。

所有连接着设置为外部模式大脑的代理,它们的状态和观察都会被外部通信器(External Communicator)收集,并通过我们的Python API与你选择的ML库进行通信。将多个代理设置到单个大脑,可以以批处理方式进行动作决策,从而在系统支持的情况下获得并行计算的优势。


为了更好理解概念,这里以多人战争游戏中的军医AI为例介绍:

Agent(智能体)

它可以被附加到一个 Unity 游戏对象上(场景中的 任何角色),负责生成它的观测结果、执行它接收的动作并适时分配奖励。在例子里,它应该附加到军医游戏对象上。

  • 观测 : 军医对环境的感知。观测可以是数字和/或视觉形式。数字观测会从 Agent 的角度测量环境的属性。对于军医来说,这将是军医可以看到的战场属性。根据游戏和 agent 的不同,数字观测的数据可以是__离散__的或__连续__的形式。对于大多数有趣的环境,Agent 将需要若干连续的数字观测,而对于具有少量独特配置的简单环境,离散观测就足够了。另一方面,视觉观测是附加到 agent 的摄像头所生成的图像,代表着 agent 在该时间点看到的内容。

    • 我们通常会将 agent 的观测与环境状态混淆。环境状态表示包含所有游戏角色的整个场景的信息。但是,agent 观测仅包含它自己所了解的信息,通常是环境状态的一个子集。例如,军医观测不能包含隐身敌人的信息。
  • 动作 : 军医可采取的动作。动作可以是连续的或离散的。就军医而言,如果环境是一个只是简单的网格世界, 那么采用四个方向的离散动作就足够了(即上下左右)。但是,如果环境更加复杂并且军医可以自由移动,那么使用两个连续动作(一个对应于方向, 另一个对应于速度)更合适。

    • 除了上述的移动动作外,军医还应有救治动作等。
  • 奖励信号 : 一个表示军医行为的标量。例如,军医在死亡时会得到很大的负奖励,每当恢复受伤的队员时会得到适度的正奖励,而在受伤队员因缺乏救助而死亡时会得到适度的负奖励。

    • 奖励信号表示如何将任务的目标传达给 agent,所以采用的设置方式需要确保当获得的奖励达到最大值时,agent能够产生我们最期望的行为。
    • 注意,不需要在每个时刻都提供奖励信号,只有在军医执行好的或坏的动作时才提供。

Brain(决策体)

它封装了 Agent 的决策逻辑。实质上,Brain 中保存着每个 Agent 的 policy,决定了 Agent 在每种情况下应采取的动作。更具体地说,Agent 给其绑定的 Brain 发送 Agent的观测结果和奖励 ,然后 Brain 返回下一步的动作。

Academy(学院,更确切是指学习环境的管理设置)

每个它是负责指挥场景内所有 Agent 的观测和决策过程的整体训练环境。它可以指定若干环境参数,例如渲染质量和环境运行速度参数。


附录

附录1:ML-Agents 版本迭代(2019.11.20),参靠github及其他论坛文章整理了每个大版本新功能,并不完全精准,仅供参考。

附录2:【Unity Connect中文论坛:机器学习及AI汇总】
Unity ML-Agents 环境搭建指南——2019-12-13
ML-Agents:让机器学习训练加快7倍[精读]——2019-11-19
GameTune:机器学习让游戏测试更加简便——2019-11-18
Unity ML-Agents Toolkit v0.8: Faster training on real games——2019-04-15
Unity ML-Agents 0.7 机器学习环境搭建指南[视频]——2019-04-14
Unity ML-Agents Toolkit v0.7:跨平台推理功能——2019-03-08
Unity 人工智能挑战赛 全面启动,打破人工智能研究瓶颈——2019-01-30
AAAI-19:Unity助力人工智能研究——2019-01-30
ML-Agents Toolkit v0.6:改进大脑可用性和模仿学习——2019-01-03
使用Unity SimViz解决方案模板进行自主模拟开发——2018-12-19
AirSim on Unity:自动驾驶汽车模拟器——2018-11-21
使用Unity训练AI玩《Flappy Bird》——2018-11-07
使用Unity ML-Agents Toolkit训练的可爱柯基犬Puppo——2018-10-12
Unity与DeepMind合作推动人工智能研究——2018-10-11
Unity机器学习代理ML-Agents Toolkit v0.5发布——2018-09-21
Unity ML-Agents模仿学习示例解析[视频]——2018-08-06
Unity机器学习代理ML-Agents强化学习示例解析[视频]——2018-07-26
Unity机器学习代理工具ML-Agents v0.4版本功能介绍——2018-07-09
使用Unity机器学习代理工具ML-Agents进行自动驾驶训练——2018-07-09
今晚8点直播 | 掌握Unity机器学习代理工具ML-Agents——2018-06-27
直播预告 | 使用ML-Agents快速掌握模仿学习——2018-06-22
Unity机器学习代理ML-Agents v0.3 Beta版发布——2018-05-10
今晚8点直播 | 使用Unity机器学习代理工具快速掌握强化学习——2018-04-25
采访 | Unity AI与机器学习副总裁Danny Lange,探究AI的真正潜能——2018-04-17
使用Docker实现ML-Agents功能——2018-03-30
首届Unity机器学习社区挑战赛获奖名单——2018-03-12
IBM与Unity携手推出IBM Watson Unity SDK,用AI为开发人员助力——2018-03-05
案例分享|机器学习与模拟仿真打造安全城市——2018-02-23
Unity机器学习代理ML-Agents v0.2版本发布——2017-12-22

附录3:【Unity官方公众号早期文章】
怎样理解Unity的ml-agent——2018-05-11
Unity机器学习 | 编写代理及创建游戏AI——2018-01-08
在真实游戏中使用机器学习代理—— 2017-12-18
Unity机器学习项目实战:3D平衡小球——2017-11-27
Mac下配置Unity机器学习代理工具——2017-11-20
配置Unity机器学习代理工具和TensorFlow环境(Windows 10)——2017-11-19
Unity射击游戏必备AI插件——2017-10-05
Unity的机器学习代理工具——2017-10-02
Unity推出机器学习代理工具,Unity引擎揭开人工智能新篇章——2017-09-26
Unity游戏开发中的AI(二):基于Q-Learning的强化学习——2017-08-30
游戏开发中的AI (入门篇)——2017-07-04

【完】

发布了26 篇原创文章 · 获赞 49 · 访问量 137万+

猜你喜欢

转载自blog.csdn.net/ldghd/article/details/103162124