深度强化学习课程文档

动手实践

Hugging Face's logo
加入 Hugging Face 社区

并获得增强型文档体验

开始使用

动手实践

现在您已经学习了多智能体的基础知识,您已准备好训练您的第一个多智能体系统中的智能体:**一个需要击败对方队伍的 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 是三个工具

除了这三个工具之外,您的同学 cyllum 创建了一个 🤗 SoccerTwos 挑战分析,您可以在其中查看模型的详细匹配结果:https://huggingface.co/spaces/cyllum/soccertwos-analytics

我们撰写了一篇博文详细解释了此 AI 对抗 AI 工具,但总的来说,它的工作原理如下

  • 每四个小时,我们的算法会**获取给定环境(在本例中为 ML-Agents-SoccerTwos)中所有可用的模型**。
  • 它使用匹配算法创建一个**匹配队列**。
  • 我们在 Unity 无头进程中模拟匹配并**收集匹配结果**(如果第一个模型获胜则为 1,如果平局则为 0.5,如果第二个模型获胜则为 0)到数据集中。
  • 然后,当匹配队列中的所有匹配完成时,**我们会更新每个模型的 ELO 分数并更新排行榜**。

竞赛规则

这场首届 AI 对抗 AI 竞赛**是一个实验**:目标是根据您的反馈在未来改进该工具。因此,**在挑战期间可能会发生一些故障**。但请放心,**所有结果都保存在数据集中,因此我们始终可以正确地重新启动计算,而不会丢失信息**。

为了使您的模型能够正确地针对其他模型进行评估,您需要遵循以下规则

  1. **您不能更改智能体的观察空间或动作空间**。这样做会导致您的模型在评估期间无法工作。
  2. 您**目前不能使用自定义训练器**,您需要使用 Unity MLAgents 的训练器。
  3. 我们提供了可执行文件来训练您的智能体。如果您愿意,也可以使用 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 团队创建了它。您可以在 此处 找到其文档

此环境的目标 **是将球射入对方球门,同时防止球进入自己的球门。**

SoccerTwos
此环境由 Unity MLAgents 团队 创建

奖励函数

奖励函数是

SoccerTwos Reward

观察空间

观察空间由大小为 336 的向量组成

  • 11 个向前分布在 120 度范围内的射线投射(264 个状态维度)
  • 3 个向后分布在 90 度范围内的射线投射(72 个状态维度)
  • 这两组射线投射都可以检测 6 个物体
    • 蓝色球门
    • 紫色球门
    • 墙壁
    • 蓝色智能体
    • 紫色智能体

动作空间

动作空间由三个离散分支组成

SoccerTwos Action

步骤 2:了解 MA-POCA

我们知道如何训练智能体与其他人对战:**我们可以使用自我博弈。**这对于 1 对 1 来说是一种完美的技术。

但在我们的例子中,我们是 2 对 2,每个团队有 2 个智能体。那么我们如何 **训练团队智能体的协作行为呢?**

正如 Unity 博客 中所解释的,当团队得分时,智能体通常会作为一个团队获得奖励(+1 - 惩罚)。这意味着 **即使每个智能体对胜利的贡献不同,团队中的每个智能体都会获得奖励**,这使得难以独立学习该做什么。

Unity MLAgents 团队在一个名为 *MA-POCA(多智能体事后信用分配)* 的新的多智能体训练器中开发了解决方案。

这个想法很简单但很强大:一个集中的评价器 **处理团队中所有智能体状态以评估每个智能体的表现如何**。可以把这个评价器想象成一个教练。

这使得每个智能体 **可以仅根据其本地感知做出决策**,并 **同时评估其行为在整个团队环境中的好坏**。

MA POCA
这说明了 MA-POCA 的集中学习和分散执行。来源:MLAgents 玩躲避球

因此,解决方案是使用带有 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 并选择包含环境的可执行文件。**

我们定义四个参数

  1. mlagents-learn <config>:超参数配置文件所在的路径。
  2. -env:环境可执行文件所在的路径。
  3. -run_id:您要为训练运行 ID 指定的名称。
  4. -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)并**赋予其写入权限**。

Create HF Token

复制令牌,运行此命令,并粘贴令牌

huggingface-cli login

然后,我们需要运行 mlagents-push-to-hf

并且我们需要定义四个参数

  1. -run-id:训练运行 ID 的名称。
  2. -local-dir:智能体保存的位置,它是 results/<run_id name>,在我的例子中是 results/First Training。
  3. -repo-id:您想要创建或更新的 Hugging Face 仓库的名称。它始终为 <您的 Hugging Face 用户名>/<仓库名称> 如果仓库不存在,**它将自动创建**
  4. --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 小时运行一次比赛,因此您的模型可能需要一段时间才能添加到排行榜中。

但为了确保一切正常,您需要检查

  1. 您的模型中是否有此标签:ML-Agents-SoccerTwos。这是我们用来选择要添加到挑战池中的模型的标签。为此,请转到您的模型并检查标签
Verify

如果不是这种情况,您只需要修改自述文件并添加它

Verify
  1. 您是否有 SoccerTwos.onnx 文件
Verify

如果您想再次训练它或训练新版本,我们强烈建议您在推送到 Hub 时创建一个新模型。

步骤 7:在我们演示中可视化一些比赛

现在您的模型已成为 AI 对抗 AI 挑战的一部分,**您可以可视化它与其他模型相比的表现如何**:https://huggingface.co/spaces/unity/ML-Agents-SoccerTwos

为此,您只需要转到此演示

  • 选择您的模型作为蓝队(或您喜欢的紫色队)以及另一个模型作为对手。与您的模型进行比较的最佳对手是排行榜上的任何一个或基准模型

您实时看到的比赛不会用于计算您的结果,**但它们是可视化您的智能体表现如何的好方法**。

并且不要犹豫,在 Discord 的 #rl-i-made-this 频道中分享您的智能体获得的最佳分数🔥

< > GitHub 更新