ml-agents
Unity 官方深度强化学习工具包,用游戏引擎构建高保真训练环境,PPO/SAC 算法驱动 AI 智
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
Unity 官方深度强化学习工具包,用游戏引擎构建高保真训练环境,PPO/SAC 算法驱动 AI 智
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。

Unity ML-Agents(Machine Learning Agents Toolkit)是 Unity Technologies 官方维护的开源项目,通过将 Unity 游戏引擎的 3D 物理模拟能力与深度强化学习算法结合,让开发者和研究人员能够在高保真虚拟环境中训练 AI 智能体。项目诞生于 2017 年,至今已积累超过 19,000 颗 GitHub Stars,是强化学习领域最具影响力的工业级工具包之一。
想象你正在开发一款 3D 平台跳跃游戏。游戏中的小机器人需要学会在复杂地形上行走、跳跃、躲避障碍——如果用传统方式,你需要为每种场景手动编写大量 if-else 规则,工作量巨大,而且角色行为永远只能「照本宣科」,遇到规则外的突发状况就会「死机」。
Unity ML-Agents 的出现彻底改变了这一局面。你只需要做三件事:
在 Unity 引擎中搭建训练环境:利用 Unity 内置的物理引擎(PhysX)和 3D 渲染系统,构建一个与真实世界高度一致的虚拟场景——可以是足球场、迷宫、工厂流水线,甚至是火星地表。
为 AI Agent 定义「感知-决策-奖励」闭环:让 Agent 通过传感器(摄像头、射线投射、关节角度等)感知环境状态;定义奖励函数,告诉 Agent 哪些行为是正确的(比如成功跳跃得 +1 分、摔倒得 -1 分);设置决策频率和记忆机制。
启动 Python 训练脚本,观看 Agent 自学成才:在命令行运行 mlagents-learn 启动训练,通过 TensorBoard 实时观察 Agent 的学习曲线。几个小时后,原本笨拙的机器人在奖励函数的引导下,逐渐学会了行走、奔跑、协作和对抗——这个过程与人类通过试错学习技能的方式惊人相似。
这个「用游戏引擎训练 AI」的思路,由 Unity Labs 的研究团队在 2018 年的论文 《Unity: A General Platform for Intelligent Agents》 中首次系统阐述,至今已被超过 3000 篇学术论文引用。

图1:ML-Agents 提供的部分示例环境,涵盖平衡控制、多智能体足球、3D 推箱子等经典场景
Unity ML-Agents 的设计目标从一开始就不局限于「游戏 AI」这一单一场景,而是构建一个通用的智能体训练平台。其核心能力可以分为以下几个维度:
ML-Agents 内置了当前强化学习领域最成熟的几类算法:
PPO(Proximal Policy Optimization):目前工业界最广泛使用的策略梯度算法,适合大多数连续控制任务(如机械臂运动、机器人行走)。PPO 通过限制策略更新幅度保证训练稳定性,是 ML-Agents 默认推荐的算法。
SAC(Soft Actor-Critic):最大熵强化学习算法,在最大化累积奖励的同时鼓励探索,在稀疏奖励场景下表现优异,尤其适合需要 Agent 自主探索未知环境的任务。
MA-POCA(Multi-Agent POsthumous Credit Assignment):Unity 自研的多智能体协同算法,专门解决多个 Agent 协作完成任务时,如何公平分配功劳的问题。在多智能体足球、守门员扑救等场景中效果显著。
Self-Play(自我对弈):通过让 Agent 与自己的历史版本对战实现能力迭代,是 AlphaGo 系列的核心技术。在 ML-Agents 中可用于训练对抗性游戏 AI(如拳击、FPS 中的 Bot)。
纯强化学习的一个显著缺点是「冷启动」问题:Agent 从零开始探索,在稀疏奖励环境下可能耗费数十万步才学会基本操作。ML-Agents 通过两类模仿学习算法解决了这一痛点:
Behavioral Cloning(BC,行为克隆):直接让 Agent 模仿人类提供的演示轨迹,最小化 Agent 决策与专家决策之间的差异。适合教会 Agent 基础动作(如「如何拿起杯子」)。
GAIL(Generative Adversarial Imitation Learning):借助 GAN 思想,通过判别器区分专家行为和 Agent 行为,引导 Agent 在模仿中超越专家。GAIL 特别适合复杂时序任务(如自动驾驶、足球带球)。

图2:模仿学习与强化学习结合的训练流程——先用人类演示数据快速建立基础行为,再通过 RL 精细调优
现代 AI 应用大量涉及多智能体场景——无人车编队、机器人仓储协作、AI 游戏对战等。ML-Agents 提供了完整的多智能体支持:
Team(团队)机制:将 Agent 分配到不同团队(如红队/蓝队),实现对抗性训练(如足球、守门员)。
跨团队通信:通过 AgentParameters 的 team_id 区分阵营,通过 Shared Memory 或 gRPC 实现 Agent 间通信。
MA-POCA 信用分配:解决多 Agent 协作时的功劳归属难题,是该领域少有的工业级解决方案。

图3:多智能体足球场景——需要同时控制多个球员完成进攻、防守、传球配合,是 MA-POCA 的经典应用案例
ML-Agents 的技术架构是其最具特色的设计之一——它不是一个简单的 Python 库,而是一个真正连接**游戏引擎(Unity C#)与深度学习框架(PyTorch)**的双向通信系统。
Unity 侧的核心实体有三个层级:
Academy(学院):管理整个模拟环境的全局状态,包括场景中所有 Agent 的同步、环境步进(step)控制、模拟速度调节等。可以理解为一个「总指挥」,负责协调所有 Agent 的行为节拍。
Brain(大脑):定义 Agent 的决策逻辑。每个 Brain 关联一个推理模型(由 PyTorch 训练得到),控制一组 Agent 的行为决策。多个 Agent 可以共享同一个 Brain(行为一致),也可以每个 Agent 独立 Brain(行为多样化)。
Agent(智能体):环境中的具体行动主体。每个 Agent 有自己的观察空间(Observation)、动作空间(Action)和奖励函数。Agent 与自己的 Brain 绑定,通过 Brain 获取决策结果。
Academy 与 Brain 之间通过 gRPC 协议通信,Python 训练进程与 Unity 进程可以部署在不同机器上,实现了「Unity 做模拟,GPU 服务器做训练」的分布式架构。
Python 侧运行完整的深度强化学习训练循环:
mlagents-learn config/ppo/3DBall.yaml --env=./envs/3DBall
训练配置通过 YAML 文件管理,定义了超参数(学习率、batch size、discount factor 等)、网络架构(是否使用 LSTM/注意力机制)、环境参数等。训练过程中通过 TensorBoard 可视化奖励曲线、损失函数、Agent 行为统计等关键指标。

图4:TensorBoard 中的训练曲线——实时监控 reward 变化、损失函数、熵(探索率)等关键指标
对于复杂任务,ML-Agents 支持「由易到难」的课程学习策略:定义多个难度递增的子任务(如先教 Agent 在平地上行走,再教它跨越障碍,再教它完成完整关卡)。Agent 完成简单任务后自动进入下一阶段,实现渐进式能力构建。

图5:课程学习流程——环境参数(如障碍物高度)随训练进度逐步增加难度
ML-Agents 提供了环境随机化(Environment Randomization)功能,在每次训练 episode 开始时随机改变环境参数(如光照强度、物体颜色、摩擦系数等)。这迫使 Agent 学会「抽象到本质」而非「死记硬背」,训练出的 Agent 在面对真实物理世界的各种变化时更加鲁棒。这一技术被特斯拉等公司用于自动驾驶仿真训练。
Unity ML-Agents 的应用范围远超「游戏 AI」这一单一领域,以下是几个最具代表性的方向:
NPC 行为智能化:取代手写状态机,让游戏中的敌人、野生动物、居民等 NPC 通过训练学会更真实、更多样化的行为模式。
游戏平衡性测试:用 AI Agent 代替 QA 人员进行大规模自动化游戏测试,快速发现数值设定中的失衡问题(某些武器/技能过强或过弱)。
程序化内容生成(PCG):训练 AI Agent 评估关卡难度和可玩性,辅助程序化生成高质量关卡。
四足/双足机器人运动控制:在虚拟环境中训练机器人控制器,训练完成后部署到真实机器人(Sim2Real)。ML-Agents 与 NVIDIA Isaac Gym、MuJoCo 等仿真平台形成互补生态。
工业装配线仿真:在虚拟工厂中训练机械臂完成零件装配、物料搬运等任务,降低真实工厂的试错成本。
1. 安装 Unity ML-Agents Python 包:
pip install mlagents
pip install mlagents-envs
2. 克隆示例项目或创建自己的训练场景:
git clone https://github.com/Unity-Technologies/ml-agents
3. 启动训练(以 3D Balance Ball 为例):
cd ml-agents
mlagents-learn config/ppo/3DBall.yaml --run-id=first_run
# 在另一个终端启动 Unity Editor 并打开 Project/Assets/ML-Agents/Examples/3DBall/ 场景
# 点击 Play 按钮,Unity 会自动连接 Python 训练进程
4. 监控训练:
tensorboard --logdir results --port 6006
# 浏览器打开 http://localhost:6006 查看训练曲线
ML-Agents 提供官方 Dockerfile,基于 CUDA 10.2 镜像,内置 Python 3 和 PyTorch。适合在 GPU 服务器上批量运行训练实验:
docker build -t mlagents .
docker run --gpus all -v $(pwd):/workspace mlagents mlagents-learn ...
尽管 ML-Agents 已成为强化学习领域的标杆工具,它也有不可回避的局限性:
与 Gym、Gymnasium 等纯 Python 强化学习环境相比,ML-Agents 要求使用者至少具备 Unity 引擎的基础操作能力。对于纯算法研究背景的研究者,Unity Editor 的学习曲线是额外的认知负担。
尽管 Unity 的物理引擎(PhysX)已经相当成熟,但虚拟环境与真实物理世界之间的差异(摩擦系数、光照变化、传感器噪声等)仍然不可忽视。虽然环境随机化能部分缓解这一问题,但完全消除 Sim2Real 差距仍是开放研究问题。
当前 Dockerfile 基于 CUDA 10.2(2019年发布),对于使用 RTX 30/40 系列或 H100 等新 GPU 的用户,需要手动升级 CUDA 版本才能发挥硬件最佳性能。
2024 年后,ML-Agents 团队将主要文档从 GitHub Pages 迁移到 Unity 官方 Package 文档,部分旧教程和社区资源可能出现链接失效,对新用户不太友好。

图6:3D Balance Ball 是 ML-Agents 最经典的入门示例——通过控制平台倾斜角度,让小球保持平衡
Unity ML-Agents 的真正贡献,在于它打破了「游戏引擎」与「AI 研究」之间的壁垒。传统上,游戏引擎是美术和策划的工具,AI 研究依赖 Python 和 TensorFlow——两者几乎是完全独立的技术栈。ML-Agents 让 Unity 引擎摇身一变成为 AI 研究者的沙盒实验室,让强化学习算法可以接触高保真 3D 物理模拟环境。
从影响力看:
未来,随着具身智能(Embodied AI)成为 AI 领域的核心方向,Unity ML-Agents 的价值将持续放大——在虚拟世界中训练、在真实世界中执行,这一范式正在成为机器人学、自动驾驶、工业自动化的主流路径。