深度强化学习课程文档
实战
并获得增强的文档体验
开始使用
动手实践
既然你已经了解了多智能体的基础知识,那么你就可以在多智能体系统中训练你的第一个智能体了:一个 2 对 2 的足球队,需要击败对手。
你将参加 AI 对 AI 的挑战,你训练的智能体将每天与同学的智能体竞争,并在新的排行榜上排名。
要通过认证流程验证此动手实践,你只需推送一个训练好的模型。没有最低成绩要求。
有关认证流程的更多信息,请查看此部分 👉 https://huggingface.co/deep-rl-course/en/unit0/introduction#certification-process
这次动手实践将有所不同,因为要获得正确的结果,你需要训练你的智能体 4 到 8 小时。鉴于 Colab 中存在超时风险,我们建议你在自己的电脑上进行训练。你不需要超级计算机:一台简单的笔记本电脑足以完成此练习。
开始吧!🔥
什么是 AI 对 AI?
AI 对 AI 是我们 Hugging Face 开发的一款开源工具,用于在多智能体环境中让 Hub 上的智能体相互竞争。这些模型随后会在排行榜上排名。
这个工具的理念是拥有一款可靠的评估工具:通过与许多其他智能体一起评估你的智能体,你将很好地了解你的策略的质量。
更确切地说,AI 对 AI 是三个工具
- 一个匹配过程,定义比赛(哪个模型对哪个模型)并使用 Space 中的后台任务运行模型战斗。
- 一个排行榜,获取比赛历史结果并显示模型的 ELO 评级:https://huggingface.co/spaces/huggingface-projects/AIvsAI-SoccerTwos
- 一个Space 演示,用于可视化你的智能体与其他智能体对战:https://huggingface.co/spaces/unity/ML-Agents-SoccerTwos
除了这三个工具,你的同学 cyllum 还创建了一个 🤗 SoccerTwos 挑战分析工具,你可以在其中查看模型的详细比赛结果:https://huggingface.co/spaces/cyllum/soccertwos-analytics
我们写了一篇博客文章来详细解释这个 AI 对 AI 工具,但总的来说它的工作方式是这样的
- 每隔四小时,我们的算法会获取给定环境(在本例中为 ML-Agents-SoccerTwos)的所有可用模型。
- 它会使用匹配算法创建比赛队列。
- 我们在 Unity 无头进程中模拟比赛并收集比赛结果(如果第一个模型获胜为 1,平局为 0.5,第二个模型获胜为 0)并将其存储在数据集中。
- 然后,当比赛队列中的所有比赛都完成后,我们会更新每个模型的 ELO 分数并更新排行榜。
比赛规则
第一次 AI 对 AI 比赛是一次实验:目标是根据你的反馈在未来改进工具。因此在挑战过程中可能会出现一些中断。但别担心,所有结果都保存在数据集中,所以我们可以始终正确地重新开始计算而不会丢失信息。
为了使你的模型能够正确地与其他模型进行评估,你需要遵守以下规则
- 你不能改变智能体的观察空间或行动空间。 这样做会导致你的模型在评估期间无法工作。
- 你目前不能使用自定义训练器, 你需要使用 Unity MLAgents 的训练器。
- 我们提供可执行文件来训练你的智能体。如果你愿意,也可以使用 Unity 编辑器,但为了避免错误,我们建议你使用我们的可执行文件。
本次挑战中,决定胜负的关键是你选择的超参数。
我们一直在努力改进我们的教程,因此,如果您在本笔记本中发现任何问题,请在 GitHub 仓库中提出问题。
在 Discord 上与同学聊天、分享建议和提问
- 我们创建了一个名为
ai-vs-ai-challenge
的新频道,用于交流建议和提问。 - 如果你还没有加入 Discord 服务器,你可以在这里加入。
步骤 0:安装 MLAgents 并下载正确的可执行文件
我们建议您使用conda作为包管理器并创建一个新环境。
使用 conda,我们创建了一个名为 rl 的新环境,使用 Python 3.10.12
conda create --name rl python=3.10.12 conda activate rl
为了正确训练我们的智能体并推送到 Hub,我们需要安装 ML-Agents
git clone https://github.com/Unity-Technologies/ml-agents
克隆完成后(占用 2.63 GB),我们进入仓库并安装包
cd ml-agents
pip install -e ./ml-agents-envs
pip install -e ./ml-agents
使用 Apple Silicon 的 Mac 用户在安装时可能会遇到问题(例如 ONNX 轮子构建失败),您应该首先尝试安装 grpcio
conda install grpcio
官方 ml-agent 仓库中的此 GitHub 问题也可能对您有所帮助。
最后,你需要安装 git-lfs:https://git-lfs.com/
现在已经安装好了,我们需要添加环境训练可执行文件。根据你的操作系统,你需要下载其中一个,解压缩并将其放在 `ml-agents` 内部的一个新文件夹中,你可以称之为 `training-envs-executables`
最终,你的可执行文件应该在 ml-agents/training-envs-executables/SoccerTwos
中
Windows:下载此可执行文件
Linux (Ubuntu):下载此可执行文件
Mac:下载此可执行文件 ⚠ 对于 Mac,您还需要调用 xattr -cr training-envs-executables/SoccerTwos/SoccerTwos.app
才能运行 SoccerTwos
步骤 1:了解环境
该环境名为 SoccerTwos
。它由 Unity MLAgents 团队创建。你可以在此处找到其文档。
此环境的目标是将球射入对手的球门,同时阻止球进入自己的球门。

奖励函数
奖励函数为

观察空间
观察空间由大小为 336 的向量组成
- 11 条向前射线,分布在 120 度(264 状态维度)
- 3 条向后射线,分布在 90 度(72 状态维度)
- 这些射线都可以检测到 6 个物体
- 球
- 蓝方球门
- 紫方球门
- 墙壁
- 蓝方智能体
- 紫方智能体
行动空间
行动空间分为三个离散分支

步骤 2:了解 MA-POCA
我们知道如何训练智能体相互对战:我们可以使用自博弈。 这对于 1 对 1 的情况非常完美。
但在我们的例子中,是 2 对 2,每个团队有 2 个智能体。那么我们如何训练智能体群体的协作行为呢?
正如Unity 博客中所解释的,当团队进球时,智能体通常会作为整体获得奖励(+1 - 惩罚)。这意味着团队中的每个智能体都会获得奖励,即使每个智能体对胜利的贡献不同,这使得很难独立学习该做什么。
Unity MLAgents 团队在一种名为MA-POCA(多智能体追溯信用分配)的新型多智能体训练器中开发了解决方案。
这个想法很简单但很强大:一个集中的评论家处理团队中所有智能体的状态,以估计每个智能体的表现如何。可以把这个评论家想象成一个教练。
这使得每个智能体都能够仅根据其局部感知进行决策,同时评估其行为在整个团队环境中的好坏。

那么解决方案就是使用自博弈配合 MA-POCA 训练器(称为 poca)。poca 训练器将帮助我们训练协作行为和自博弈,以赢得对抗对手团队的胜利。
如果你想深入了解 MA-POCA 算法,你需要阅读他们此处发表的论文以及我们在补充阅读部分提供的资源。
步骤 3:定义配置文件
我们已经在第 5 单元中了解到,在 ML-Agents 中,您在config.yaml
文件中定义训练超参数。
有多个超参数。要更好地理解它们,您应该阅读文档中每个超参数的解释。
我们将要使用的配置文件位于 ./config/poca/SoccerTwos.yaml
。它看起来像这样
behaviors:
SoccerTwos:
trainer_type: poca
hyperparameters:
batch_size: 2048
buffer_size: 20480
learning_rate: 0.0003
beta: 0.005
epsilon: 0.2
lambd: 0.95
num_epoch: 3
learning_rate_schedule: constant
network_settings:
normalize: false
hidden_units: 512
num_layers: 2
vis_encode_type: simple
reward_signals:
extrinsic:
gamma: 0.99
strength: 1.0
keep_checkpoints: 5
max_steps: 5000000
time_horizon: 1000
summary_freq: 10000
self_play:
save_steps: 50000
team_change: 200000
swap_steps: 2000
window: 10
play_against_latest_model_ratio: 0.5
initial_elo: 1200.0
与 Pyramids 或 SnowballTarget 相比,我们有了新的超参数,并加入了自博弈部分。你如何修改它们对于获得好结果至关重要。
我在这里给你的建议是,对照文档,检查每个参数(特别是自博弈参数)的解释和推荐值。
现在你已经修改了我们的配置文件,你已经准备好训练你的智能体了。
步骤 4:开始训练
要训练智能体,我们需要启动 mlagents-learn 并选择包含环境的可执行文件。
我们定义四个参数
mlagents-learn <config>
:超参数配置文件的路径。-env
:环境可执行文件所在位置。-run_id
:你希望给你的训练运行 ID 起的名称。-no-graphics
:训练期间不启动可视化。
根据你的硬件,5M 时间步(推荐值,但你也可以尝试 10M)将需要 5 到 8 小时的训练。在此期间你可以继续使用你的电脑,但我建议关闭电脑待机模式以防止训练中断。
根据你使用的可执行文件(windows、ubuntu、mac),训练命令会像这样(你的可执行文件路径可能不同,所以运行前请务必检查)。
对于 Windows,它可能看起来像这样
mlagents-learn ./config/poca/SoccerTwos.yaml --env=./training-envs-executables/SoccerTwos.exe --run-id="SoccerTwos" --no-graphics
对于 Mac,它可能看起来像这样
mlagents-learn ./config/poca/SoccerTwos.yaml --env=./training-envs-executables/SoccerTwos/SoccerTwos.app --run-id="SoccerTwos" --no-graphics
可执行文件包含 8 份 SoccerTwos 副本。
⚠️ 在达到 2M 步之前,如果 ELO 分数没有显著增加(甚至降至 1200 以下),这是正常的,因为你的智能体在能够进球之前大部分时间都会在场上随机移动。
⚠️ 你可以使用 Ctrl + C 停止训练,但请注意只输入一次此命令来停止训练,因为 MLAgents 需要在关闭运行之前生成一个最终的 .onnx 文件。
步骤 5:将智能体推送到 Hugging Face Hub
现在我们已经训练了我们的智能体,我们已经准备好将它们推送到 Hub,以便参与 AI 对 AI 挑战并在浏览器中可视化它们的运行情况🔥。
为了能够与社区分享你的模型,还有三个步骤需要遵循
1️⃣(如果尚未完成)创建 HF 账户 ➡ https://huggingface.co/join
2️⃣ 登录并从 Hugging Face 网站存储你的身份验证令牌。
创建一个新令牌(https://huggingface.co/settings/tokens)具有写入权限

复制令牌,运行此命令,然后粘贴令牌
huggingface-cli login
然后,我们需要运行 mlagents-push-to-hf
。
我们定义了四个参数
-run-id
:训练运行 ID 的名称。-local-dir
:智能体保存的位置,是 results/<run_id name>,所以我的情况是 results/First Training。-repo-id
:您要创建或更新的 Hugging Face 仓库的名称。它总是 <您的 huggingface 用户名>/<仓库名称> 如果仓库不存在,它将自动创建--commit-message
:由于 HF 仓库是 git 仓库,您需要提供一个提交消息。
在我的例子中
mlagents-push-to-hf --run-id="SoccerTwos" --local-dir="./results/SoccerTwos" --repo-id="ThomasSimonini/poca-SoccerTwos" --commit-message="First Push"`
mlagents-push-to-hf --run-id= # Add your run id --local-dir= # Your local dir --repo-id= # Your repo id --commit-message="First Push"
如果一切顺利,过程结束时您应该会看到这个(但 URL 不同😆)
您的模型已推送到 Hub。您可以在此处查看您的模型:https://huggingface.co/ThomasSimonini/poca-SoccerTwos
这是您的模型链接。它包含一个模型卡,解释了如何使用它,您的 Tensorboard 和您的配置文件。最棒的是它是一个 git 仓库,这意味着您可以有不同的提交,通过新的推送更新您的仓库等。
步骤 6:验证您的模型是否已准备好参加 AI vs AI 挑战
现在你的模型已推送到 Hub,它将自动添加到 AI vs AI 挑战的模型池中。 鉴于我们每 4 小时进行一次比赛,你的模型可能需要一些时间才能添加到排行榜。
但为了确保一切正常,你需要检查
- 你的模型中是否有这个标签:ML-Agents-SoccerTwos。这是我们用来选择添加到挑战池中的模型的标签。要做到这一点,请访问你的模型并检查标签

如果不是,你只需要修改 README 并添加它

- 你有一个
SoccerTwos.onnx
文件

我们强烈建议您在推送到 Hub 时创建一个新模型,如果您想再次训练它或训练一个新版本。
步骤 7:在我们的演示中可视化一些比赛
现在你的模型已成为 AI vs AI 挑战的一部分,你可以可视化它与其他模型的表现:https://huggingface.co/spaces/unity/ML-Agents-SoccerTwos
为此,你只需前往此演示
- 选择您的模型作为蓝队(或者如果您更喜欢紫队),然后选择另一个模型进行比赛。与您的模型进行比较的最佳对手是排行榜上排名靠前的模型或基线模型。
您实时看到的比赛不用于计算您的结果,但它们是可视化您的智能体表现好坏的好方法。
别忘了在 Discord 的 #rl-i-made-this 频道分享你的智能体获得的最高分哦!🔥
< > 在 GitHub 上更新