深度强化学习课程文档
实战
并获得增强的文档体验
开始入门
实战
既然您已经学习了多智能体的基础知识,现在您就可以在一个多智能体系统中训练您的首批智能体了:一个 2v2 的足球队,需要击败对方球队。
您将参加 AI vs. AI 挑战赛,您训练的智能体将每天与同学的其他智能体竞争,并在新的排行榜上排名。
为了验证此实战操作以获得认证,您只需推送一个训练好的模型。没有最低结果要求即可验证它。
有关认证过程的更多信息,请查看此部分 👉 https://huggingface.co/deep-rl-course/en/unit0/introduction#certification-process
此实战操作将有所不同,因为要获得正确的结果,您需要训练您的智能体 4 到 8 小时。考虑到 Colab 中超时的风险,我们建议您在自己的计算机上进行训练。您不需要超级计算机:一台简单的笔记本电脑就足以完成此练习。
让我们开始吧!🔥
什么是 AI vs. AI?
AI vs. AI 是我们在 Hugging Face 开发的一个开源工具,用于在 Hub 上多智能体环境中让智能体相互竞争。这些模型随后会在排行榜中排名。
此工具的想法是拥有一个强大的评估工具:通过用许多其他智能体评估您的智能体,您将对您的策略的质量有一个很好的了解。
更准确地说,AI vs. AI 是三个工具
- 一个匹配过程,定义匹配(哪个模型对抗哪个模型),并在 Space 中使用后台任务运行模型战斗。
- 一个排行榜,获取比赛历史结果并显示模型的 ELO 评分:https://huggingface.co/spaces/huggingface-projects/AIvsAI-SoccerTwos
- 一个 Space 演示,可视化您的智能体与其他智能体对战:https://huggingface.co/spaces/unity/ML-Agents-SoccerTwos
除了这三个工具之外,您的同学 cyllum 还创建了一个 🤗 SoccerTwos Challenge Analytics,您可以在其中查看模型的详细比赛结果:https://huggingface.co/spaces/cyllum/soccertwos-analytics
我们 撰写了一篇博客文章详细解释了这个 AI vs. AI 工具,但为了给您一个大致的了解,它的工作方式如下
- 每四个小时,我们的算法获取给定环境的所有可用模型(在我们的例子中是 ML-Agents-SoccerTwos)。
- 它使用匹配算法创建一个比赛队列。
- 我们在 Unity 无头进程中模拟比赛,并在数据集中收集比赛结果(如果第一个模型获胜则为 1,如果是平局则为 0.5,如果第二个模型获胜则为 0)。
- 然后,当比赛队列中的所有比赛完成后,我们更新每个模型的 ELO 分数并更新排行榜。
比赛规则
首次 AI vs. AI 比赛是一项实验:目标是在未来通过您的反馈改进该工具。因此在挑战赛期间可能会发生一些中断。但请不要担心,所有结果都保存在数据集中,因此我们可以始终正确地重新开始计算,而不会丢失信息。
为了使您的模型能够针对其他模型进行正确评估,您需要遵守以下规则
- 您不能更改智能体的观察空间或动作空间。 这样做会导致您的模型在评估期间无法工作。
- 您目前不能使用自定义训练器, 您需要使用 Unity MLAgents 训练器。
- 我们提供可执行文件来训练您的智能体。如果您愿意,您也可以使用 Unity 编辑器,但为了避免错误,我们建议您使用我们的可执行文件。
在此挑战赛中,您选择的超参数将发挥关键作用。
我们一直在努力改进我们的教程,因此,如果您在本笔记本中发现任何问题,请 在 GitHub 仓库上打开一个 issue。
在 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 wheel 构建失败),您应该首先尝试安装 grpcio
conda install grpcio
此 github issue 在官方 ml-agent 仓库中也可能对您有所帮助。
最后,您需要安装 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
我们知道如何训练智能体与其他智能体对战:我们可以使用自博弈。 这对于 1v1 来说是一种完美的技术。
但在我们的案例中,我们是 2v2,并且每个团队都有 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 vs. 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 上