ML-Agents:入门指南

注:本文章为官方文档翻译,如有侵权行为请联系作者删除
入门指南–原文链接

本指南介绍了在 Unity 中打开我们的一个ML-Agent示例学习环境、在其中训练Agent以及将训练好的模型嵌入到 Unity 环境中的端到端流程 。阅读本教程后,您应该能够训练任何示例环境。如果您不熟悉 Unity 引擎,请查看我们的 背景:Unity页面以获取有用的提示。此外,如果您不熟悉机器学习,请查看我们的 背景:机器学习页面以获取简要概述和有用的提示。

3D平衡球

在本指南中,我们将使用3D 平衡球环境,其中包含许多立方体和球(它们都是彼此的副本)。每个立方体都试图通过水平或垂直旋转来防止其球掉落。在此环境中,立方体是一个 Agent(智能体),它会在平衡球的每一步中获得奖励。Agent也会因掉球而受到惩罚。训练过程的目标是让Agent学会将球在头上保持平衡。

让我们开始吧!

安装

如果尚未安装,请按照安装说明进行操作。然后,打开包含所有示例环境的 Unity 项目:

  1. 通过菜单导航到“包管理器”窗口Window -> Package Manager
  2. 导航到 ML-Agents 包并单击它。
  3. 找到3D Ball示例并单击Import
  4. Project(项目) 窗口中,转到 Assets/ML-Agents/Examples/3DBall/Scenes文件夹并打开3DBall场景文件。

理解 Unity 环境

Agent是一个自主的实体,它观察并与环境交互。在 Unity 上下文中,环境是包含一个或多个Agent对象的场景,当然还有Agent与之交互的其他实体。

Unity 编辑器

注意: 在 Unity 中,场景中所有内容的基础对象都是 GameObject GameObject 本质上是其他所有内容的容器,包括行为、图形、物理等。要查看组成 GameObject 的组件,请在场景窗口中选择 GameObject,然后打开 Inspector(检测器) 窗口。Inspector 会显示 GameObject 上的每个组件。

打开 3D Balance Ball 场景后,您可能首先注意到的是,它包含的Agent立方体不止一个,而是多个。场景中的每个Agent立方体都是一个独立的Agent,但它们都具有相同的行为。3D Balance Ball 这样做是为了加快训练速度,因为所有 12 个Agent都会并行参与训练。

Agent

Agent 是观察环境并在环境中采取行动的参与者。在 3D Balance Ball 环境中,Agent 组件放置在 12 个“Agent”游戏对象上。基本 Agent 对象具有一些影响其行为的属性:

  • 行为参数— 每个Agent必须有一个行为。行为决定了Agent如何做出决策。
  • 最大步数— 定义 Agent 的 一次迭代(episode) 结束前可以进行多少模拟步数。在 3D Balance Ball 中,Agent 会在 5000 步后重新启动。
行为参数:矢量观察空间(Vector Observation Space)

在做出决策之前,Agent会收集关于其所在世界的状态的观察信息。矢量观察是一个浮点数向量,其中包含Agent做出决策的相关信息。

3D平衡球示例的行为参数使用了一个 值为8的Space Size (即一个8维的向量)。这意味着包含Agent观察结果的特征向量包含八个元素:Agent立方体的旋转的 xz 分量以及球相对位置xyz 和速度的 xyz 分量。

行为参数:动作

Agent以动作的形式获得指令。ML-Agents Toolkit 将动作分为两种类型:连续动作和离散动作。3D 平衡球示例被编程为使用连续动作,这些动作是一组浮点数,可以连续变化。更具体地说,它使用二维向量来控制施加于自身的xz旋转量,以使球在头上保持平衡。

运行预先训练好的模型

我们为Agent 提供了预先训练好的模型(.onnx文件 ) ,并使用 Sentis在 Unity 中运行这些模型。在本节中,我们将使用预先训练的模型进行演示。

  1. Project窗口中,转到 Assets/ML-Agents/Examples/3DBall/Prefabs文件夹。展开3DBall并单击Agent预制件。您应该在Inspector窗口中看到Agent预制件 。

注意3DBall 场景中的平台是使用 3DBall 预制件创建的。您可以通过更新3DBall 预制件而快速更新12个场景。

平台预制件

  1. Project窗口中,将位于 Assets/ML-Agents/Examples/3DBall/TFModels文件夹中的 3DBall 模型拖动到 Agent GameObject 组件 Inspector 窗口中的 Model 属性下。

3dball 学习大脑

  1. 你应该注意到在 层次结构窗口中,每个3DBall预制件的 Agent 节点下的Behavior Parameters脚本现在都包含一个 标记为3DBallModel 对象。 注意:您可以使用场景层次结构中的搜索栏一次选择场景中的多个游戏对象来修改它们。
  2. 将用于该模型的Inference Device设置为CPU
  3. 单击Unity 编辑器中的Play按钮,您将看到平台使用预先训练的模型平衡球体。

使用强化学习训练一个新模型

虽然我们为该环境中的Agent提供了预先训练的模型,但您自己创建的任何环境都需要从头开始训练Agent以生成新的模型文件。在本节中,我们将演示如何使用 ML-Agents Python 包中的强化学习算法来实现这一点。我们提供了一个方便的命令mlagents-learn,它接受用于配置训练和推理阶段的参数。

训练环境

  1. 打开命令行或终端窗口。
  2. 导航到您克隆ml-agents存储库的文件夹。注意:如果您遵循默认安装,那么您应该能够从任何目录运行mlagents-learn命令。
  3. 运行
mlagents-learn config/ppo/3DBall.yaml --run-id=first3DBallRun
  1. config/ppo/3DBall.yaml是我们提供的默认训练配置文件的路径。该config/ppo文件夹包含我们所有示例环境(包括 3DBall)的训练配置文件。
  2. run-id是训练的唯一名称。
  3. 当屏幕上显示 “Start training by pressing the Play button in the Unity Editor” 消息时,您可以按下 Unity编辑器中的 “Play” 按钮开始训练。

如果正常运行并开始训练,您应该会看到类似以下的内容:

INFO:mlagents_envs:
'Ball3DAcademy' started successfully!
Unity Academy name: Ball3DAcademy

INFO:mlagents_envs:Connected new brain:
Unity brain name: 3DBallLearning
        Number of Visual Observations (per agent): 0
        Vector Observation space size (per agent): 8
        Number of stacked Vector Observation: 1
INFO:mlagents_envs:Hyperparameters for the PPO Trainer of brain 3DBallLearning:
        batch_size:          64
        beta:                0.001
        buffer_size:         12000
        epsilon:             0.2
        gamma:               0.995
        hidden_units:        128
        lambd:               0.99
        learning_rate:       0.0003
        max_steps:           5.0e4
        normalize:           True
        num_epoch:           3
        num_layers:          2
        time_horizon:        1000
        sequence_length:     64
        summary_freq:        1000
        use_recurrent:       False
        memory_size:         256
        use_curiosity:       False
        curiosity_strength:  0.01
        curiosity_enc_size:  128
        output_path: ./results/first3DBallRun/3DBallLearning
INFO:mlagents.trainers: first3DBallRun: 3DBallLearning: Step: 1000. Mean Reward: 1.242. Std of Reward: 0.746. Training.
INFO:mlagents.trainers: first3DBallRun: 3DBallLearning: Step: 2000. Mean Reward: 1.319. Std of Reward: 0.693. Training.
INFO:mlagents.trainers: first3DBallRun: 3DBallLearning: Step: 3000. Mean Reward: 1.804. Std of Reward: 1.056. Training.
INFO:mlagents.trainers: first3DBallRun: 3DBallLearning: Step: 4000. Mean Reward: 2.151. Std of Reward: 1.432. Training.
INFO:mlagents.trainers: first3DBallRun: 3DBallLearning: Step: 5000. Mean Reward: 3.175. Std of Reward: 2.250. Training.
INFO:mlagents.trainers: first3DBallRun: 3DBallLearning: Step: 6000. Mean Reward: 4.898. Std of Reward: 4.019. Training.
INFO:mlagents.trainers: first3DBallRun: 3DBallLearning: Step: 7000. Mean Reward: 6.716. Std of Reward: 5.125. Training.
INFO:mlagents.trainers: first3DBallRun: 3DBallLearning: Step: 8000. Mean Reward: 12.124. Std of Reward: 11.929. Training.
INFO:mlagents.trainers: first3DBallRun: 3DBallLearning: Step: 9000. Mean Reward: 18.151. Std of Reward: 16.871. Training.
INFO:mlagents.trainers: first3DBallRun: 3DBallLearning: Step: 10000. Mean Reward: 27.284. Std of Reward: 28.667. Training.

请注意,屏幕上打印Mean Reward值会随着训练的进行而增加。这是成功训练的积极信号。

注意:您可以使用可执行文件而不是编辑器进行训练。为此,请按照 使用可执行文件中的说明进行操作。

观察训练进度

一旦您按照上一节中描述的方式开始训练,results目录中就会生成日志文件。为了更详细地观察训练过程,您可以使用 TensorBoard。从命令行运行:

tensorboard --logdir results

然后在浏览器中导航至localhost:6006端口,查看 TensorBoard中汇总统计的数据,如下所示。就本节而言,最重要的统计数据是Environment/Cumulative Reward,该值应在训练过程中不断增加,最终收敛接近到100,这是Agent可以累积的最大奖励。

TensorBoard 运行示例

将模型嵌入到 Unity 环境中

一旦训练过程完成,并且训练过程保存了模型(由Saved Model消息表示),您就可以将其添加到 Unity 项目中,并将其与兼容的Agent(生成模型的Agent)一起使用。注意: 不要在Saved Model消息出现后立即关闭Unity窗口。请等待训练程序关闭窗口,或者终端中按下Ctrl+C。如果您手动关闭窗口,则包含训练模型的.onnx文件不会导出到 ml-agents 文件夹中。

如果您使用Ctrl+C提前退出训练并想要恢复训练,请再次运行相同的命令,并附加--resume标志:

mlagents-learn config/ppo/3DBall.yaml --run-id=first3DBallRun --resume

您训练好的模型位于 results/<run-identifier>/<behavior_name>.onnx。其中 <behavior_name>是与模型对应的Agent的名称。该文件对应于您的模型的最新检查点(即训练的最新结果)。您现在可以按照以下步骤将此训练好的模型嵌入到您的Agent中,这些步骤与上面“运行预先训练好的模型”描述的步骤类似。

  1. 将您的模型文件移入 Project/Assets/ML-Agents/Examples/3DBall/TFModels/
  2. 打开 Unity 编辑器,然后选择3DBall场景。
  3. 选择3DBall预制件的 Agent 对象。
  4. <behavior_name>.onnx文件从编辑器的项目窗口拖到检查器Ball3DAgent窗口中的model处。
  5. 按下编辑器顶部的 “Play” 按钮。

下一步

  • 有关 ML-Agents Toolkit 的更多信息以及有用的背景知识,请查看ML-Agents Toolkit 概述 页面。
  • 有关创建您自己的学习环境的“Hello World”介绍,请查看 创建新的学习环境页面。
  • 要了解此工具包中提供的更复杂的示例环境,请查看 示例环境页面。
  • 有关各种可用训练选项的更多信息,请查看 训练 ML-Agents页面。

鉴于作者水平有限,本文可能存在不足之处,欢迎各位读者提出指导和建议,共同探讨、共同进步。

<think>好的,我现在需要帮助用户了解如何使用mlagents-learn工具进行训练和配置。首先,我得回忆一下ML-Agents的基本信息。ML-Agents是Unity的一个工具包,允许开发者使用机器学习训练智能体。用户的问题主要集中在mlagents-learn的使用教程和配置方法上,所以我要围绕这两点展开。 首先,我得检查用户提供的引用内容。引用[2]提到了安装教程,可能需要先安装ML-Agents,然后运行mlagents-learn --help检查缺少的依赖。引用[4]提到将三个文件夹导入Unity项目,这可能涉及到项目配置。引用[3]则关于训练后的结果和TensorBoard的使用。引用[1]虽然标题提到机器学习AI,但内容可能和实际配置关系不大。 接下来,我应该整理步骤。首先是环境配置,包括Python、Unity项目设置和安装ML-Agents包。然后,训练流程可能涉及配置YAML文件、启动训练、监控进度。测试和优化部分需要加载模型和使用TensorBoard分析结果。 用户可能需要详细的步骤,比如如何创建训练配置文件,具体的命令行指令,以及如何处理可能出现的错误,比如protobuf版本问题。此外,引用[2]提到protobuf降级,如果用户遇到相关错误,可能需要调整版本。 还要考虑常见问题,比如环境依赖、Unity与Python的通信端口是否开放,以及训练中断的处理方法。引用[3]中的TensorBoard使用方法也需要解释清楚,让用户知道如何可视化训练过程。 最后,生成相关问题时要覆盖安装、配置、优化和应用场景,这样用户能全面了解ML-Agents的使用。需要确保回答结构清晰,分步骤说明,并引用提供的资料来支持内容,比如导入文件夹到Unity项目,使用TensorBoard的指令等。</think>### ML-Agents 工具使用指南 以下是使用 `mlagents-learn` 进行训练的核心步骤和配置方法: --- #### 一、环境配置 1. **Python环境** - 需安装 Python 3.6-3.9,推荐使用 Anaconda 管理环境 - 安装依赖库: ```bash pip install mlagents==0.30.0 # 版本需与Unity项目匹配[^4] ``` 2. **Unity项目设置** - 导入 ML-Agents 官方包的 `Editor`、`Plugins`、`Runtime` 文件夹到 Unity 项目[^4] - 在场景中添加 Academy 和 Agent 组件,配置行为参数(Behavior Parameters) 3. **验证安装** ```bash mlagents-learn --help # 检查依赖完整性,若提示protobuf错误需降级[^2] ``` --- #### 二、训练流程 1. **配置文件** 创建 YAML 格式的训练配置文件(如 `ppo_config.yaml`),示例内容: ```yaml behaviors: MyBehavior: trainer_type: ppo hyperparameters: batch_size: 1024 buffer_size: 10240 ``` 2. **启动训练** ```bash mlagents-learn ppo_config.yaml --run-id=exp01 ``` - `--run-id` 指定实验标识符 - Unity Editor需处于运行状态,端口5004需开放[^3] 3. **实时监控** 通过 TensorBoard 查看训练曲线: ```bash tensorboard --logdir results/exp01 # 路径与run-id对应[^3] ``` --- #### 三、测试与优化 1. **模型加载** 训练完成后,模型文件(`.nn`)会自动保存至 `results/exp01` 在 Unity Inspector 中将模型拖拽至 Agent 的 `Model` 字段 2. **参数调优** - 调整 `hyperparameters` 中的学习率、批大小等 - 复杂任务建议使用 SAC 算法代替 PPO --- #### 常见问题 1. **通信失败** 检查 Unity Editor 控制台是否显示 `Connected to new training session` 防火墙需允许端口 5004-5009 2. **版本冲突** 若出现 `protobuf` 错误,执行: ```bash pip install protobuf==3.20.* # 版本降级 ``` 3. **训练中断恢复** 使用 `--resume` 参数继续训练: ```bash mlagents-learn --resume --run-id=exp01 ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wangyh02

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值