ML-Agents学习笔记三:Pyramids demo 详解
ML-Agents 是一个开源项目,使游戏和模拟场景能够作为训练智能代理的环境。它提供最先进算法的实现(基于 PyTorch),使游戏开发者和爱好者能够轻松训练 2D、3D 和 VR/AR 游戏的智能代理。研究人员还可以使用提供的简单易用的 Python API 来使用强化学习、模仿学习、神经进化或任何其他方法来训练代理。
机器学习系列:
ML-Agents学习笔记一:环境搭建
ML-Agents学习笔记二:UNITY实例工程简介
ML-Agents学习笔记三:Pyramids demo 详解
ML-Agents学习笔记四:使用强化学习训练模型
ML-Agents学习笔记五:使用TensorBoard 观察训练
……
AI小白系列:
AI小白篇一:Anaconda+Pycharm搭建深度学习环境
AI小白篇二:使用anaconda搭建TensorFlow环境
AI小白篇三:Tensorflow首项
AI小白篇四:Tensorflow的开源案例实践1
AI小白篇五:Tensorflow的开源案例实践2
AI小白篇六:Tensorflow的开源案例实践3
……
上文以 pyramids为列,简单的介绍了一个ML-Agents的工程,并且查看了示例的成果:预先训练好的模型会根据实际场景进行推理,让代理者神奇在迷宫中躲避各种障碍,不走弯路顺利找到目标。
在本节中,将对 Pyramids demo 进行详细讲解, 学习如何构建一个使用ML-Agents进行训练的项目 。
1、训练场景组成
Demo启动后,会发现它到包含以下几个GameObject
- Agent: 训练与推理的智能体,核心中核心,下文详细介绍;
- BrickPyramid: 宝藏金字塔,位置随机生成(隐藏),Agent寻找的目标就在此金字塔顶部,打散金字塔,让目标掉落并触碰到,即完成并进入下一个回合;
- Switch: BrickPyramid 显示的开关,位置随机生成,Agent需要触碰到Switch,BrickPyramid才会显示
- StonePyramid: 普通的金字塔,充当障碍物,位置随机生成。
- 其它,都是一些普通的场景对象,构成可视化的训练场景,无需关注。
![](https://img.haomeiwen.com/i12972541/1abcbcf7588b62d4.png)
2、Agent配置详解
Agent 是观察环境并采取行动的参与者。在 Pyramid 环境中,代理组件放置在十六个“代理”游戏对象上。
影响基础Agent对象的行为的几个属性:
![](https://img.haomeiwen.com/i12972541/cab6353acc5edbeb.png)
下面详细介绍Behavior Parameters的配置项
1、Behavior Parameters : Vector Observation
用于配置智能体的矢量观测空间。这些配置项定义了智能体在每个步骤中从环境中接收的信息量和类型。
配置项包括:
-
Space Size:
定义单次观测的矢量维度数。即每个时间步智能体从环境中接收的观测信息的维度。
根据智能体需要感知的环境状态信息设置合适的维度数。
例如,如果智能体需要感知自身位置(x, y, z)和速度(vx, vy, vz),则空间大小应设置为 6。 -
**Stacked Vectors:
定义每个时间步堆叠的观测数量。通过堆叠观测,智能体可以感知到历史信息,这对于处理时间相关的任务(如平滑移动)非常有用。
对于需要历史观测数据的任务非常有用。例如,设置为 3 表示智能体在每个时间步将接收当前和之前两个时间步的观测信息。
pyramids示例配置如下。
配置项 | 值 | 描述 |
---|---|---|
Space Size | 4 | 四个观测量分别是 智能体是否找到钥匙(即碰到Switch),智能体刚体的速度矢量Vector3 |
Stacked Vectors | 1 | 只观测当前信息 |
Vector Observation 允许你配置智能体的矢量观测空间。通过正确配置 Space Size 和 Stacked Vectors,可以确保智能体从环境中接收到足够且合适的信息,从而更好地完成任务。Space Size 定义了每次观测的矢量维度数,而 Stacked Vectors 允许你堆叠历史观测,增加智能体对时间相关信息的感知能力。根据具体任务需求设置合适的配置,可以显著提升智能体的表现。
2、Behavior Parameters : Actions
Actions
定义了智能体如何与环境进行交互, ML-Agents Toolkit 将Actions
分为两种类型: 连续 和 离散
-
Continuous Actions:
定义连续动作空间的维度数,即智能体在每个步骤中能够输出的连续动作数。
适用于需要平滑控制的任务,如转向角度、速度控制等。 -
Discrete Branches:
定义离散动作空间的分支数,即智能体在每个步骤中可以选择的不同离散动作类别数。
适用于动作数量有限的任务,如选择离散的移动方向或动作类型。 -
Branch X Size:
定义第X(从0开始)个离散动作分支中的动作数量,即智能体在第X个离散动作分支中可以选择的动作数。
用于详细定义离散动作分支中的具体动作数量。
pyramids示例的配置如下,在C#程序中,它被设计为使用离散动作,这些动作是离散的整型数。
配置项 | 值 | 描述 |
---|---|---|
Continuous Actions | 0 | 0 表示没有连续动作 |
Discrete Branches | 1 | 一个离散动作分支 |
Branch 0 Size | 5 | 0-4的5个整型数,模仿人的行为:0-在程序中没看到用途,1-4表示前进-后退-左转-右转四个离散行为 |
在配置 Actions 部分时,需要根据智能体的需求选择合适的动作空间类型(离散或连续)并设置相应的参数。这样可以确保智能体能够正确地与环境进行交互,执行期望的动作。通过正确配置动作空间,可以实现复杂的行为和控制逻辑,提升智能体在训练和推理过程中的表现。
4、Model : Inference Device
Inference Device 指的是用于进行推理(Inference)的设备。推理是指在训练完成后,使用训练好的模型在游戏中运行智能体的过程。推理设备决定了模型在游戏中实际运行时使用的硬件资源。
ML-Agents 支持在不同的硬件设备上进行推理,以满足不同的性能需求和硬件环境。
旧版本中的推理设备
-
CPU:
适用于大多数通用计算任务,几乎所有的计算设备都有 CPU。
适用于开发和调试阶段,或者在没有专用硬件加速的环境中运行。
优点:普遍存在,兼容性好。
缺点:推理速度相对较慢,尤其是在处理复杂的深度学习模型时。 -
GPU:
适用于并行计算任务,尤其是矩阵运算和其他与深度学习相关的操作。
适用于需要高性能推理的场景,比如实时游戏环境中运行复杂的模型。
优点:推理速度快,能够显著提高复杂模型的推理性能。
缺点:需要支持 CUDA 的 NVIDIA GPU,可能不适用于所有开发和运行环境。
1.0版本之后的推理设备
![](https://img.haomeiwen.com/i12972541/b73f12bdf400ad65.png)
-
Default:
使用默认的推理设备,一般来说这是 CPU,但具体取决于 Unity ML-Agents 的实现和环境配置。
一般用于不特别需要优化的环境下,适合开发和调试阶段。 -
Burst:
利用 Unity 的 Burst 编译器进行推理。Burst 编译器可以大幅度优化性能,通过向量化和其他低级优化来加速代码执行。
当你需要在 CPU 上进行高效的推理,而不使用 GPU 时,这是一个很好的选择。 -
Compute Shader:
使用计算着色器(Compute Shader)在 GPU 上进行推理。计算着色器能够高效地进行并行计算,适合大规模矩阵运算和深度学习模型的推理。
需要在 GPU 上进行高效推理的场景,适合复杂的模型和高实时性要求的应用。 -
Pixel Shader:
使用像素着色器(Pixel Shader)在 GPU 上进行推理。虽然不像计算着色器那么通用,但在一些特定的图像处理任务上可能有优化。
通常不如 Compute Shader 通用,但在某些图像相关的推理任务中可以使用。
如何选择合适的 Inference Device
选择合适的推理设备取决于你的具体需求和应用场景:
- Default:如果你不确定使用哪种推理设备,可以先使用默认选项,这样可以确保兼容性和稳定性。
- Burst:如果你的应用在 CPU 上运行,并且你希望通过编译器优化来提高性能,使用 Burst 是一个好的选择。
- Compute Shader:如果你的应用可以在 GPU 上运行,并且需要高性能的推理,使用 Compute Shader 可以显著提高性能。
- Pixel Shader:除非你有特定的需求,否则一般推荐使用 Compute Shader 而不是 Pixel Shader。
其它配置
-
Behavior Name:
智能体行为的名称。用于在训练和推理过程中区分不同的智能体行为。
为每种行为定义一个独特的名称,有助于在训练和推理日志中识别和分析不同的行为。 -
Behavior Parameters : Model:
配置用于推理的机器学习模型文件(.onnx 文件),经训练后,可以切换自己训练出来的模型,对比看看推理效果如何。 -
Behavior Type:
指定智能体的行为类型。选项包括 :- Default: 在训练模式下使用训练过程,在推理模式下使用模型推理。
- Heuristic Only: 始终使用启发式方法进行决策,不使用模型。
- Inference Only: 始终使用模型进行推理,不进行训练。
-
Max Step
最大步骤-定义代理在训练回合结束前可以发生多少模拟步骤。在 pyramids 中,一个代理在5000步后重启。