深度强化学习课程文档

实战

Hugging Face's logo
加入 Hugging Face 社区

并获得增强的文档体验

开始入门

实战

既然您已经学习了多智能体的基础知识,现在您就可以在一个多智能体系统中训练您的首批智能体了:一个 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 是三个工具

除了这三个工具之外,您的同学 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 比赛是一项实验:目标是在未来通过您的反馈改进该工具。因此在挑战赛期间可能会发生一些中断。但请不要担心,所有结果都保存在数据集中,因此我们可以始终正确地重新开始计算,而不会丢失信息

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

  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

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 团队制作。您可以在 此处 找到其文档

此环境中的目标是将球踢入对方球门,同时阻止球进入您自己的球门。

SoccerTwos
此环境由 Unity MLAgents 团队 制作

奖励函数

奖励函数是

SoccerTwos Reward

观察空间

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

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

动作空间

动作空间是三个离散分支

SoccerTwos Action

步骤 2:了解 MA-POCA

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

但在我们的案例中,我们是 2v2,并且每个团队都有 2 个智能体。那么我们如何训练智能体组的合作行为呢?

正如 Unity 博客 中解释的那样,当团队进球时,智能体通常会获得小组奖励 (+1 - 惩罚)。这意味着团队中的每个智能体都会获得奖励,即使每个智能体对胜利的贡献不尽相同,这使得很难独立学习该怎么做。

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

这个想法很简单但很强大:一个集中的评论家处理团队中所有智能体的状态,以评估每个智能体的表现如何。将此评论家视为教练。

这允许每个智能体仅根据其本地感知做出决策,并同时评估其行为在整个群体环境中的表现如何

MA POCA
这说明了 MA-POCA 的集中学习和分散执行。来源:MLAgents Plays Dodgeball

那么解决方案是使用带有 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:在训练期间不启动可视化。

根据您的硬件,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) 具有写入角色

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 仓库的名称。它始终是 <您的 huggingface 用户名>/<仓库名称> 如果仓库不存在,它将自动创建
  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 vs AI 挑战赛

现在您的模型已推送到 Hub,它将自动添加到 AI vs AI 挑战赛模型池中。 考虑到我们每 4 小时运行一次比赛,您的模型可能需要一段时间才能添加到排行榜中。

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

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

如果不是这种情况,您只需要修改 readme 并添加它

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

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

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

现在您的模型是 AI vs AI 挑战赛的一部分,您可以可视化它与其他模型相比有多好https://huggingface.co/spaces/unity/ML-Agents-SoccerTwos

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

  • 选择您的模型作为蓝色团队(或者如果您愿意,也可以选择紫色团队),并选择另一个模型进行竞争。比较您的模型的最佳对手是排行榜榜首的人,或者是 基线模型

您实时看到的比赛不用于计算您的结果,但它们是可视化您的智能体有多好的好方法

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

< > 更新 在 GitHub 上