动手实践
现在您已经学习了多智能体的基础知识,您已准备好训练您的第一个多智能体系统中的智能体:**一个需要击败对方队伍的 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 是三个工具
- 一个匹配流程,定义匹配(哪个模型对抗哪个模型)并在空间中使用后台任务运行模型对抗。
- 一个排行榜,获取匹配历史结果并显示模型的 ELO 评分:https://huggingface.co/spaces/huggingface-projects/AIvsAI-SoccerTwos
- 一个空间演示,用于可视化您的智能体与其他智能体对抗: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 仓库中打开一个 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
使用苹果硅芯片的 Mac 用户可能会遇到安装问题(例如,ONNX 轮子构建失败),您应该首先尝试安装 grpcio
conda install grpcio
此 Github 问题 在官方 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
我们知道如何训练智能体与其他人对战:**我们可以使用自我博弈。**这对于 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
:在训练期间不启动可视化。
根据您的硬件,500 万次训练步长(推荐值,但您也可以尝试 1000 万)大约需要 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 的副本。
⚠️ 在 200 万次训练步长之前,如果您没有看到 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 仓库的名称。它始终为 <您的 Hugging Face 用户名>/<仓库名称> 如果仓库不存在,**它将自动创建**--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 对抗 AI 挑战
现在您的模型已推送到 Hub,**它将自动添加到 AI 对抗 AI 挑战模型池中。**由于我们每 4 小时运行一次比赛,因此您的模型可能需要一段时间才能添加到排行榜中。
但为了确保一切正常,您需要检查
- 您的模型中是否有此标签:ML-Agents-SoccerTwos。这是我们用来选择要添加到挑战池中的模型的标签。为此,请转到您的模型并检查标签
如果不是这种情况,您只需要修改自述文件并添加它
- 您是否有
SoccerTwos.onnx
文件
如果您想再次训练它或训练新版本,我们强烈建议您在推送到 Hub 时创建一个新模型。
步骤 7:在我们演示中可视化一些比赛
现在您的模型已成为 AI 对抗 AI 挑战的一部分,**您可以可视化它与其他模型相比的表现如何**:https://huggingface.co/spaces/unity/ML-Agents-SoccerTwos
为此,您只需要转到此演示
- 选择您的模型作为蓝队(或您喜欢的紫色队)以及另一个模型作为对手。与您的模型进行比较的最佳对手是排行榜上的任何一个或基准模型
您实时看到的比赛不会用于计算您的结果,**但它们是可视化您的智能体表现如何的好方法**。
并且不要犹豫,在 Discord 的 #rl-i-made-this 频道中分享您的智能体获得的最佳分数🔥
< > GitHub 更新