深度强化学习课程文档

动手实践

Hugging Face's logo
加入 Hugging Face 社区

并获得增强文档体验的访问权限

开始使用

动手实践

Ask a Question Open In Colab

我们了解了 ML-Agents 是什么以及它是如何工作的。我们还研究了将要使用的两个环境。现在我们准备好训练我们的智能体了!

Environments

为了验证此动手实践以用于认证流程,您**只需要将训练好的模型推送到 Hub**。为了验证此动手实践,**没有最低结果要求**。但是,如果您想获得良好的结果,可以尝试达到以下目标

  • 对于 金字塔:平均奖励 = 1.75
  • 对于 SnowballTarget:平均奖励 = 15 或在一集中射击 30 个目标。

有关认证流程的更多信息,请查看此部分 👉 https://huggingface.co/deep-rl-course/en/unit0/introduction#certification-process

要开始动手实践,请点击“在 Colab 中打开”按钮 👇

Open In Colab

我们强烈**建议学生在动手练习中使用 Google Colab**,而不是在他们的个人电脑上运行它们。

通过使用 Google Colab,**您可以专注于学习和实验,而无需担心**设置环境的技术方面。

单元 5:ML-Agents 简介

Thumbnail

在本笔记本中,您将了解 ML-Agents 并训练两个智能体。

  • 第一个智能体将学习**向生成的靶子上投掷雪球**。
  • 第二个智能体需要按下按钮生成一个金字塔,然后导航到金字塔,将其击倒,**并移动到顶部的金色砖块**。为此,它需要探索其环境,我们将使用一种称为好奇心的技术。

之后,您将能够**直接在浏览器中观看您的智能体玩游戏**。

有关认证流程的更多信息,请查看此部分 👉 https://huggingface.co/deep-rl-course/en/unit0/introduction#certification-process

⬇️ 以下是**在本单元结束时您将获得的结果示例**。⬇️

Pyramids SnowballTarget

🎮 环境:

📚 RL 库:

我们一直在努力改进我们的教程,因此**如果您在本笔记本中发现任何问题**,请在 GitHub 仓库上打开一个 issue

本笔记本的目标 🏆

在本笔记本结束时,您将

  • 了解**ML-Agents**的工作原理和环境库。
  • 能够**在 Unity 环境中训练智能体**。

先决条件 🏗️

在深入研究笔记本之前,您需要

🔲 📚 **学习什么是 ML-Agents 以及它是如何工作的,请阅读单元 5** 🤗

让我们训练我们的智能体 🚀

设置GPU 💪

  • 为了**加速智能体的训练,我们将使用GPU**。为此,请转到运行时 > 更改运行时类型
GPU Step 1
  • 硬件加速器 > GPU
GPU Step 2

克隆仓库并安装依赖项 🔽

  • 我们需要克隆包含**允许您将训练好的智能体推送到Hub的库的实验版本**的仓库。
# Clone the repository
git clone --depth 1 https://github.com/Unity-Technologies/ml-agents
# Go inside the repository and install the package
cd ml-agents
pip install -e ./ml-agents-envs
pip install -e ./ml-agents

雪球目标 ⛄

如果您需要复习此环境的工作原理,请查看此部分 👉 https://huggingface.co/deep-rl-course/unit5/snowball-target

将环境zip文件下载并移动到./training-envs-executables/linux/

  • 我们的环境可执行文件位于zip文件中。
  • 我们需要下载它并将其放置到./training-envs-executables/linux/
  • 我们使用linux可执行文件,因为我们使用colab,并且colab机器的操作系统是Ubuntu(linux)
# Here, we create training-envs-executables and linux
mkdir ./training-envs-executables
mkdir ./training-envs-executables/linux

我们使用wgethttps://github.com/huggingface/Snowball-Target下载了SnowballTarget.zip文件。

wget "https://github.com/huggingface/Snowball-Target/raw/main/SnowballTarget.zip" -O ./training-envs-executables/linux/SnowballTarget.zip

我们解压缩executable.zip文件。

unzip -d ./training-envs-executables/linux/ ./training-envs-executables/linux/SnowballTarget.zip

确保您的文件可访问。

chmod -R 755 ./training-envs-executables/linux/SnowballTarget

定义SnowballTarget配置文件

  • 在ML-Agents中,您在**config.yaml文件中定义训练超参数**。

有多个超参数。为了更好地理解它们,您应该阅读文档中每个超参数的说明。

您需要在./content/ml-agents/config/ppo/中创建一个SnowballTarget.yaml配置文件。

我们将为您提供此配置的初步版本(复制并粘贴到您的SnowballTarget.yaml文件中),但**您应该对其进行修改**。

behaviors:
  SnowballTarget:
    trainer_type: ppo
    summary_freq: 10000
    keep_checkpoints: 10
    checkpoint_interval: 50000
    max_steps: 200000
    time_horizon: 64
    threaded: true
    hyperparameters:
      learning_rate: 0.0003
      learning_rate_schedule: linear
      batch_size: 128
      buffer_size: 2048
      beta: 0.005
      epsilon: 0.2
      lambd: 0.95
      num_epoch: 3
    network_settings:
      normalize: false
      hidden_units: 256
      num_layers: 2
      vis_encode_type: simple
    reward_signals:
      extrinsic:
        gamma: 0.99
        strength: 1.0
Config SnowballTarget Config SnowballTarget

作为一个实验,尝试修改一些其他的超参数。Unity提供了非常好的文档,在这里解释了每个超参数

现在您已经创建了配置文件并了解了大多数超参数的作用,我们准备训练我们的智能体 🔥。

训练智能体

要训练我们的智能体,我们需要**启动mlagents-learn并选择包含环境的可执行文件**。

我们定义四个参数

  1. mlagents-learn <config>:超参数配置文件所在的路径。
  2. --env:环境可执行文件所在的路径。
  3. --run_id:您要赋予训练运行ID的名称。
  4. --no-graphics:在训练期间不启动可视化。
MlAgents learn

训练模型并使用--resume标志在训练中断时继续训练。

如果您使用--resume,则第一次运行时可能会失败。尝试重新运行代码块以绕过错误。

训练将需要10到35分钟,具体取决于您的配置。去喝杯☕️,您值得拥有 🤗。

mlagents-learn ./config/ppo/SnowballTarget.yaml --env=./training-envs-executables/linux/SnowballTarget/SnowballTarget --run-id="SnowballTarget1" --no-graphics

将智能体推送到Hugging Face Hub

  • 现在我们已经训练了我们的智能体,我们**准备将其推送到Hub并在您的浏览器中可视化它玩耍🔥**。

为了能够与社区共享您的模型,您需要遵循以下三个步骤

1️⃣ (如果尚未完成)在HF上创建一个帐户 ➡ https://huggingface.co/join

2️⃣ 登录并从Hugging Face网站存储您的身份验证令牌。

Create HF Token
  • 复制令牌
  • 运行下面的单元格并粘贴令牌
from huggingface_hub import notebook_login

notebook_login()

如果您不想使用Google Colab或Jupyter Notebook,则需要使用此命令代替:huggingface-cli login

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

我们定义四个参数

  1. --run-id:训练运行ID的名称。
  2. --local-dir:保存智能体的位置,它是results/<run_id名称>,在我的例子中是results/First Training。
  3. --repo-id:您想要创建或更新的Hugging Face仓库的名称。它始终是<您的Hugging Face用户名>/<仓库名称> 如果仓库不存在,**它将自动创建**
  4. --commit-message:由于HF仓库是git仓库,因此您需要提供提交信息。
Push to Hub

例如

mlagents-push-to-hf --run-id="SnowballTarget1" --local-dir="./results/SnowballTarget1" --repo-id="ThomasSimonini/ppo-SnowballTarget" --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= # Your commit message

如果一切正常,您应该在流程结束时看到以下内容(但URL会有所不同😆)

Your model is pushed to the hub. You can view your model here: https://huggingface.co/ThomasSimonini/ppo-SnowballTarget

这是您模型的链接。它包含一个模型卡片,解释了如何使用它,您的Tensorboard和您的配置文件。**最棒的是,它是一个git仓库,这意味着您可以拥有不同的提交,使用新的推送更新您的仓库等。**

但现在最棒的是:**能够在线可视化您的智能体 👀。**

观看您的智能体玩耍 👀

这一步很简单

  1. 转到此处:https://huggingface.co/spaces/ThomasSimonini/ML-Agents-SnowballTarget

  2. 启动游戏,然后点击右下角的按钮将其置于全屏状态

Snowballtarget load
  1. 第一步,输入你的用户名(用户名区分大小写:例如,我的用户名是 ThomasSimonini,而不是 thomassimonini 或 ThOmasImoNInI),然后点击搜索按钮。

  2. 第二步,选择你的模型仓库。

  3. 第三步,**选择你想回放的模型**

  • 我有多个模型,因为我们每 500000 个时间步保存一次模型。
  • 但因为我想要最新的那个,所以我选择 SnowballTarget.onnx

👉 尝试使用不同的模型步骤来观察智能体的改进效果,这是一个好方法。

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

现在让我们尝试一个更具挑战性的环境,叫做 Pyramids(金字塔)。

Pyramids 🏆

将环境zip文件下载并移动到./training-envs-executables/linux/

  • 我们的环境可执行文件位于zip文件中。
  • 我们需要下载它并将其放置到 ./training-envs-executables/linux/ 目录下。
  • 我们使用 Linux 可执行文件,因为我们使用的是 colab,而 colab 机器的操作系统是 Ubuntu(Linux)。

我们使用 wgethttps://huggingface.co/spaces/unity/ML-Agents-Pyramids/resolve/main/Pyramids.zip 下载了 Pyramids.zip 文件。

wget "https://huggingface.co/spaces/unity/ML-Agents-Pyramids/resolve/main/Pyramids.zip" -O ./training-envs-executables/linux/Pyramids.zip

解压它。

unzip -d ./training-envs-executables/linux/ ./training-envs-executables/linux/Pyramids.zip

确保您的文件可访问。

chmod -R 755 ./training-envs-executables/linux/Pyramids/Pyramids

修改 PyramidsRND 配置文件

对于本次训练,我们将修改一项内容。

  • 总训练步数超参数过高,因为我们只需要 100 万训练步数就能达到基准(平均奖励 = 1.75)。👉 为此,我们转到 config/ppo/PyramidsRND.yaml,**并将 max_steps 更改为 1000000。**
Pyramids config

作为实验,你也可以尝试修改其他一些超参数。Unity 提供了非常好的文档,在这里解释了每个超参数

现在我们准备训练我们的智能体 🔥。

训练智能体

训练过程将花费 30 到 45 分钟,具体取决于你的机器,去喝杯 ☕️ 吧,你值得拥有 🤗。

mlagents-learn ./config/ppo/PyramidsRND.yaml --env=./training-envs-executables/linux/Pyramids/Pyramids --run-id="Pyramids Training" --no-graphics

将智能体推送到Hugging Face Hub

  • 现在我们已经训练了我们的智能体,**准备将其推送到 Hub,以便能够在浏览器中可视化它玩游戏🔥。**
mlagents-push-to-hf  --run-id= # Add your run id  --local-dir= # Your local dir  --repo-id= # Your repo id  --commit-message= # Your commit message

观看您的智能体玩耍 👀

👉 https://huggingface.co/spaces/unity/ML-Agents-Pyramids

🎁 额外:为什么不尝试在其他环境中训练呢?

既然你已经知道如何使用 MLAgents 训练智能体,**为什么不尝试其他环境呢?**

MLAgents 提供了 17 个不同的环境,我们还在构建一些自定义环境。最好的学习方式是自己尝试,享受乐趣。

cover

你可以在 Hugging Face 上找到当前可用环境的完整列表 👉 https://github.com/huggingface/ml-agents#the-environments

要查看智能体的演示,请访问 👉 https://huggingface.co/unity

目前,我们已经集成了

  • Worm 演示,你可以在其中教一条**蠕虫爬行**。
  • Walker 演示,你可以在其中教一个智能体**朝着目标行走**。

今天就到这里。恭喜你完成了本教程!

最好的学习方式是练习和尝试。为什么不尝试其他环境呢?ML-Agents 有 18 个不同的环境,但你也可以创建自己的环境。查看文档并享受乐趣!

第六单元见 🔥,

持续学习,保持出色 🤗

< > 在 GitHub 上更新