ML-Agents Toolkit 从入门到实战:基于 3D Balance Ball 示例完成 Agent 训练与模型部署

发布时间:2026/9/21 2:33:49
ML-Agents Toolkit 从入门到实战:基于 3D Balance Ball 示例完成 Agent 训练与模型部署 人工智能强化学习深度学习机器学习游戏开发AI 应用【免费下载链接】ml-agentsThe Unity Machine Learning Agents Toolkit (ML-Agents) is an open-source project that enables games and simulations to serve as environments for training intelligent agents using deep reinforcement learning and imitation learning.项目地址https://gitcode.com/gh_mirrors/ml/ml-agents点击查看免费下载本篇技术指南以 ML-Agents 官方示例场景3D Balance Ball为主线完整演示了安装环境 → 理解 Agent 与环境 → 运行预训练模型 → 使用mlagents-learn强化学习训练 → TensorBoard 观测 → 模型回注 Unity 场景的全流程。读完本文你将掌握 ML-Agents Toolkit 中最核心的一组实操技能在 Unity 中配置 Agent 的 Behavior Parameters、读懂向量观察与连续动作空间、执行并分析一次 PPO 训练、以及将产出的模型文件部署回场景中的任意 Agent。说明本仓库为 ML-Agents Toolkit 的镜像仓库包含 Unity C# SDK 包com.unity.ml-agents、Python 训练包mlagents与环境交互包mlagents_envs以及 Project 示例工程。示例场景源码位于 Project/Assets/ML-Agents/Examples/3DBall训练配置位于 config/ppo/3DBall.yaml。安装与示例工程准备ML-Agents Toolkit 由多个组件组成安装前需要明确它们各自的职责Unity 包com.unity.ml-agents提供 Unity C# SDK负责把场景改造为可交互的机器学习环境Python 包mlagents内含强化学习等训练算法是mlagents-learn命令的来源大多数用户只需安装这一个包Python 包mlagents_envs提供与 Unity 场景通信的 Python API负责在 Unity 场景与 Python 算法之间传输数据mlagents依赖它Unity 工程Project包含全部示例场景用于直观展示 ML-Agents 的各种能力。基础环境要求为 Unity 2022.3 及以上、Python 3.10.12 及以上。推荐通过 Unity Hub 管理 Unity 版本Python 侧建议使用虚拟环境Virtual Environment隔离依赖。安装mlagentsPython 包只需pip3 install mlagents安装成功后即可执行mlagents-learn --help查看全部可用命令。若你计划修改包源码例如二次开发训练算法则需从仓库根目录按顺序以可编辑模式安装pip3 install -e ./ml-agents-envs pip3 install -e ./ml-agents必须严格按照上述顺序因为mlagents依赖mlagents_envs顺序颠倒会导致mlagents_envs被从 PyPI 重新拉取覆盖本地修改。克隆仓库后按以下步骤打开 3D Balance Ball 示例启动 Unity Hub在Projects窗口点击右上角Add浏览到仓库目录选择Project文件夹并点击Open在 Unity 的Project窗口中进入Assets/ML-Agents/Examples/3DBall/Scenes打开场景文件3DBall。理解环境与 Agent场景中的角色划分在 ML-Agents 的术语体系中Agent 是环境中自主行动的行为主体actor它通过观察observation感知环境状态并据此做出动作action。在 Unity 中环境就是场景本身——场景里可以有一个或多个 Agent 对象以及 Agent 与之交互的其他对象。3D Balance Ball 场景由 12 个蓝色立方体平台组成每个平台头顶顶着一个球。这些平台彼此完全相同每个平台都是一个独立 Agent但共享同一个Behavior行为。这种多实例共享行为的设计是为了加速训练——12 个 Agent 同时收集经验同一时刻为训练贡献 12 份样本。Unity 中每个对象都是GameObject它本质上是物理、图形、行为等**组件Component**的容器。在 Scene 窗口选中某个 GameObject 后Inspector 窗口会列出其全部组件。如果你想批量修改所有平台可以直接修改生成它们的预置体3DBall位于Assets/ML-Agents/Examples/3DBall/Prefabs而不是逐个修改场景实例。Agent 的两个关键属性Behavior Parameters行为参数每个 Agent 都必须挂载 Behavior它决定了 Agent 如何做决策Max Step最大步数单个回合episode允许执行的最大步数达到该值即强制结束本回合。3D Balance Ball 中 Agent 每 5000 步重置一次即每个回合是平台在最多 5000 步内尝试顶住球的完整模拟。从源码看Behavior Parameters 组件定义于 com.unity.ml-agents/Runtime/Policies/BehaviorParameters.cs它运行时根据配置生成对应的策略Policy对象当场景与训练器通信开启时生成RemotePolicy训练模式当指定了模型时生成SentisPolicy推理模式否则回退到HeuristicPolicy启发式/人工控制模式。这正是后续训练 → 推理两种用法切换的底层机制。向量观察空间Agent 的感官在决策前Agent 需要收集环境状态的观察值。向量观察空间是一个由 float 值组成的向量例如 3.14代表世界状态中与决策相关的信息。3D Balance Ball 使用维度为 8 的向量观察包含Agent 自身旋转的x、z分量2 个小球相对平台的x、y、z位置3 个小球速度的x、y、z三个分量3 个。这一实现与示例脚本完全对应。在 Project/Assets/ML-Agents/Examples/3DBall/Scripts/Ball3DAgent.cs 的CollectObservations方法中通过VectorSensor.AddObservation依次写入rotation.z、rotation.x、ball.position - agent.position和m_BallRb.linearVelocity恰好是 2 3 3 8 个值。向量动作空间Agent 的输出Agent 的动作以 float 数组形式给出。ML-Agents 将动作分为离散discrete与连续continuous两类离散动作是有限个可选分支类似枚举连续动作则是可任意微调的数值。3D Balance Ball 使用连续动作空间维度为 2分别控制平台绕z轴左右摆动与绕x轴前后点头的旋转以维持小球平衡。连续性的直观理解动作改变量可以取 0.1、0.11、0.1000001……任意精度。就像测量身高用更精确的尺子会得到 180.01 cm、180.012345 cm——尺子精度趋向无穷测量值也随之无限细分。对应到代码中OnActionReceived读取actionBuffers.ContinuousActions[0]与[1]经Mathf.Clamp(..., -1f, 1f)限幅后乘以 2驱动平台旋转。值得说明的是动作空间的内部表示已从旧版空间类型演进为 com.unity.ml-agents/Runtime/Policies/BrainParameters.cs 中的ActionSpec连续动作个数与离散分支大小可同时存在、统一描述旧的VectorActionSpaceType字段已被标记为[Obsolete]仅用于序列化兼容。运行预训练模型推理模式示例工程为每个示例都内置了预训练模型。仓库中 3DBall 的模型文件为 Project/Assets/ML-Agents/Examples/3DBall/TFModels/3DBall.onnx.onnx格式由 Unity 的 Sentis 推理引擎加载。运行步骤如下在Project窗口进入Assets/ML-Agents/Examples/3DBall/Prefabs展开3DBall并点击Agent预置体在Inspector中查看其组件将Assets/ML-Agents/Examples/3DBall/TFModels下的3DBall模型拖拽到 Inspector 中Behavior Parameters (Script)组件的Model属性上确认 Hierarchy 中每个3DBall平台上的Agent都引用了该模型可通过 Hierarchy 搜索框多选批量检查将该模型的Inference Device设为CPUSentis 推理设备视平台可用性可选 GPU点击 Unity 的Play按钮平台将利用预训练模型自主保持小球平衡。提示场景中的 12 个平台由3DBall预置体生成因此只需修改预置体本身即可让所有实例同步生效。使用强化学习训练新模型任何自建场景中的 Agent 都需要从零训练才能产生可用的模型文件。训练由 Python 包mlagents提供的mlagents-learn命令驱动它既是训练入口也是模型导出入口。启动一次训练打开终端进入克隆的仓库目录默认安装方式下mlagents-learn可在任意目录执行执行mlagents-learn config/ppo/3DBall.yaml --run-idfirst3DBallRunconfig/ppo/3DBall.yaml仓库预置的训练配置文件。config/ppo目录下包含所有示例含 3DBall的 PPO 配置如 config/ppo/3DBallHard.yaml、config/ppo/WallJump.yaml 等--run-id本次训练会话的唯一标识训练产物将归档到以它命名的目录下。当终端出现Start training by pressing the Play button in the Unity Editor提示时点击 Unity 的Play按钮开始训练。训练正常启动后终端会输出环境连接信息与 PPO 超参数摘要例如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 Vector Action space type: continuous Vector Action space size (per agent): [2] Vector Action descriptions: , 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平均奖励随训练步数逐步上升这是训练正在收敛的正常信号。训练配置解析config/ppo/3DBall.yaml仓库中 3DBall 的实际配置为 config/ppo/3DBall.yaml完整内容如下behaviors: 3DBall: trainer_type: ppo hyperparameters: batch_size: 64 buffer_size: 12000 learning_rate: 0.0003 beta: 0.001 epsilon: 0.2 lambd: 0.99 num_epoch: 3 learning_rate_schedule: linear network_settings: normalize: true hidden_units: 128 num_layers: 2 vis_encode_type: simple reward_signals: extrinsic: gamma: 0.99 strength: 1.0 keep_checkpoints: 5 max_steps: 500000 time_horizon: 1000 summary_freq: 12000各核心参数的作用含义依据仓库文档 com.unity.ml-agents/Documentation~/Training-Configuration-File.md 与源码整理参数本示例取值含义与调参方向trainer_typeppo使用的训练算法。仓库同时提供 PPO、SAC 与 MA-POCA 等对应实现位于 ml-agents/mlagents/trainers如 PPO Trainerbatch_size64每次梯度下降更新使用的经验样本数buffer_size12000更新前需收集的经验步数总量存入经验缓冲区learning_rate0.0003神经网络权重更新的步长beta0.001熵正则化强度控制策略的随机性保证探索。典型范围1e-4~1e-2熵降得过快就调大epsilon0.2PPO 新旧策略差异的可接受阈值clip 范围越小更新越稳定但越慢。典型范围0.1~0.3lambd0.99广义优势估计GAE中的 λ权衡偏差与方差。典型范围0.9~0.95num_epoch3每轮梯度下降遍历经验缓冲区的次数典型范围3~10learning_rate_schedulelinear学习率随训练线性衰减至 0constant则全程恒定normalizetrue是否对观察输入做归一化可提升训练稳定性hidden_units/num_layers128 / 2网络隐藏层单元数与层数gammareward_signals 下0.99折扣因子衡量未来奖励的重要性strength1.0外在奖励信号的权重max_steps500000训练总步数上限若环境中同一行为有多个 Agent则所有 Agent 的步数共同累计。典型范围5e5~1e7time_horizon1000每个 Agent 收集多少步经验后加入缓冲区达阈值时用价值估计预测期望奖励。典型范围32~2048summary_freq12000每隔多少步生成并输出一次训练统计决定 TensorBoard 曲线粒度keep_checkpoints5最多保留的模型检查点数量超出后删除最旧者注意上方训练日志中的max_steps: 5.0e4等数值来自训练输出快照而仓库当前配置文件的max_steps为 500000、summary_freq为 12000。实际训练时以你所使用的配置文件为准。奖励函数与回合逻辑源码级理解环境如何驱动学习需要看 Agent 的奖励逻辑。在 Ball3DAgent.cs 的OnActionReceived中当小球与平台的水平距离超过 3或垂直落差超过 2 时判定为球掉落调用SetReward(-1f)惩罚并EndEpisode()结束回合其余每个决策时刻SetReward(0.1f)给予持续保持奖励——这鼓励 Agent 尽可能长时间顶住球OnEpisodeBegin中平台与小球的初始位置/旋转会加入随机扰动旋转 ±10°、球位置 ±1.5保证每个回合起始状态不同防止过拟合单一初始条件。Reward 与max_steps共同决定了单回合的奖励上界理论最高奖励趋近 100每步 0.1 分、回合最多 5000 步的近似结果这正是下文 TensorBoard 中Cumulative Reward的参考目标。可选训练方式使用可执行文件训练可以不用 Unity Editor而是连接打包好的环境可执行文件进行训练并行训练可通过--num-envsn指定并行 Unity 实例数并可配--base-port设置起始端口利用多环境实例加速数据收集课程学习与参数随机化仓库在 config/ppo 中提供了WallJump_curriculum.yaml、3DBall_randomize.yaml等配置分别演示基于课程的渐进式难度与域随机化训练。用 TensorBoard 观测训练过程训练启动后仓库根目录下会出现results文件夹其中存放本次训练的统计与产物。使用 TensorBoard 查看训练细节tensorboard --logdir results然后在浏览器访问localhost:6006。对本次示例最关键的指标是Environment/Cumulative Reward回合累计奖励——它应随训练进行持续上升并逐渐逼近 1003D Balance Ball 单回合可达的最大奖励值。将训练好的模型部署回 Unity训练完成并出现Saved Model通知后模型即已导出。注意出现该通知后不要立即手动关闭 Unity 窗口应等待导出自动完成或在终端按CtrlC结束训练进程否则.nn模型文件不会被正确写出。中断后的恢复训练如果通过CtrlC中断了训练并希望继续在原命令后追加--resume并复用同一--run-idmlagents-learn config/ppo/3DBall.yaml --run-idfirst3DBallRun --resume模型文件位置与回注场景训练产出的模型位于results/run-identifier/behavior_name.nn其中behavior_name是 Agent 的 Behavior Name本示例为3DBall。该文件包含最近一次生成的模型版本。将模型应用回 Agent 的步骤与运行预训练模型时完全一致将模型文件复制到Project/Assets/ML-Agents/Examples/3DBall/TFModels/在 Unity Editor 中打开 3DBall 场景方法见上文选中3DBall预置体中的Agent对象在 Inspector 中把behavior_name.nn拖入Ball3DAgent的Model属性点击 Editor 顶部的Play按钮。此时平台便会使用你亲自训练的模型自主平衡小球。关于模型推理的更多细节如 Sentis 推理引擎、Inference Device 选择可参阅仓库文档 com.unity.ml-agents/Documentation~/Inference-Engine.md。后续深入方向系统了解 ML-Agents 各模块见 ML-Agents-Overview从零设计自己的训练场景与 Agent见 Learning-Environment-Create-New浏览仓库内置的更多示例环境GridWorld、Hallway、FoodCollector、Soccer 等及其说明 Learning-Environment-Examples深入训练配置与各类算法的超参数调优见 Training-Configuration-File 与 Training-ML-Agents。赞分享人工智能强化学习深度学习机器学习游戏开发AI 应用【免费下载链接】ml-agentsThe Unity Machine Learning Agents Toolkit (ML-Agents) is an open-source project that enables games and simulations to serve as environments for training intelligent agents using deep reinforcement learning and imitation learning.项目地址https://gitcode.com/gh_mirrors/ml/ml-agents点击查看免费下载相关推荐Unity ML-Agents 3D Ball 示例端到端实战从环境配置、PPO 训练到模型嵌入Unity ML Agents 3D Ball 示例端到端实战从环境配置、PPO 训练到模型嵌入 3D Balance Ball3D Ball是 Unit人工智能强化学习深度学习机器学习游戏开发AI 应用Jupyter NodeJS魔法命令全攻略解锁Babel与ClojureScript高级功能Jupyter NodeJS魔法命令全攻略解锁Babel与ClojureScript高级功能 Jupyter NodeJS是一款强大的Node.js内核为JGitHub_Trending/ml/ml-course模型部署从训练到生产环境实战GitHub_Trending/ml/ml course模型部署从训练到生产环境实战 引言为什么模型部署如此重要 你花费数周时间精心训练的机器学习模型在示例工程教程机器学习深度学习创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询