深度强化学习课程文档

让我们和Huggy 🐶一起训练和玩耍吧

Hugging Face's logo
加入 Hugging Face 社区

并获得增强的文档体验

开始使用

让我们和Huggy 🐶一起训练和玩耍吧

Ask a Question Open In Colab

我们强烈**建议学生使用 Google Colab 进行实践练习**,而不是在个人电脑上运行。

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

让我们训练Huggy 🐶

要开始训练Huggy,请点击“在Colab中打开”按钮 👇

Open In Colab

Bonus Unit 1Thumbnail

在此笔记本中,我们将通过教导狗狗Huggy捡回棍子,然后在浏览器中直接与它玩耍来巩固在第一单元中学到的知识

Huggy

环境 🎮

使用的库 📚

我们一直在努力改进我们的教程,因此,如果你在此笔记本中发现任何问题,请在 Github Repo 上提交问题

本笔记本的目标 🏆

在本笔记本结束时,您将:

  • 理解用于训练Huggy的状态空间、动作空间和奖励函数
  • 训练你自己的Huggy去捡回棍子。
  • 能够在你的浏览器中直接玩耍你训练好的Huggy

先决条件 🏗️

在深入学习本笔记本之前,您需要:

🔲 📚 通过学习单元1,理解强化学习的基础知识(MC、TD、奖励假设等)

🔲 📚 通过学习奖励单元1,阅读Huggy的介绍

设置GPU 💪

  • 为了加速智能体的训练,我们将使用 GPU。为此,请转到 Runtime > Change Runtime type
GPU Step 1
  • 硬件加速器 > GPU
GPU Step 2

克隆仓库 🔽

  • 我们需要克隆包含 ML-Agents 的仓库。
# Clone the repository (can take 3min)
git clone --depth 1 https://github.com/Unity-Technologies/ml-agents

设置虚拟环境 🔽

  • 为了让 ML-Agents 在 Colab 中成功运行,Colab 的 Python 版本必须满足该库的 Python 要求。

  • 我们可以在 setup.py 文件中的 python_requires 参数下查看支持的 Python 版本。这些文件是设置 ML-Agents 库以供使用所必需的,可以在以下位置找到:

    • /content/ml-agents/ml-agents/setup.py
    • /content/ml-agents/ml-agents-envs/setup.py
  • Colab 当前的 Python 版本(可以使用 !python --version 检查)与库的 python_requires 参数不匹配,因此安装可能会静默失败,并在稍后执行相同的命令时导致以下错误:

    • /bin/bash: line 1: mlagents-learn: 命令未找到
    • /bin/bash: line 1: mlagents-push-to-hf: 命令未找到
  • 为了解决这个问题,我们将创建一个与 ML-Agents 库兼容的 Python 版本的虚拟环境。

注意: 为了未来的兼容性,如果 Colab 的 Python 版本不兼容,请始终检查安装文件中的 python_requires 参数,并将您的虚拟环境设置为以下脚本中支持的最高 Python 版本。

# Colab's Current Python Version (Incompatible with ML-Agents)
!python --version
# Install virtualenv and create a virtual environment
!pip install virtualenv
!virtualenv myenv

# Download and install Miniconda
!wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
!chmod +x Miniconda3-latest-Linux-x86_64.sh
!./Miniconda3-latest-Linux-x86_64.sh -b -f -p /usr/local

# Activate Miniconda and install Python ver 3.10.12
!source /usr/local/bin/activate
!conda install -q -y --prefix /usr/local python=3.10.12 ujson  # Specify the version here

# Set environment variables for Python and conda paths
!export PYTHONPATH=/usr/local/lib/python3.10/site-packages/
!export CONDA_PREFIX=/usr/local/envs/myenv
# Python Version in New Virtual Environment (Compatible with ML-Agents)
!python --version

安装依赖项 🔽

# Go inside the repository and install the package (can take 3min)
%cd ml-agents
pip3 install -e ./ml-agents-envs
pip3 install -e ./ml-agents

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

  • 我们的环境可执行文件是一个zip文件。
  • 我们需要下载它并将其放到 ./trained-envs-executables/linux/
mkdir ./trained-envs-executables
mkdir ./trained-envs-executables/linux

我们使用 wgethttps://github.com/huggingface/Huggy 下载了 Huggy.zip 文件

wget "https://github.com/huggingface/Huggy/raw/main/Huggy.zip" -O ./trained-envs-executables/linux/Huggy.zip
%%capture
unzip -d ./trained-envs-executables/linux/ ./trained-envs-executables/linux/Huggy.zip

确保您的文件可访问

chmod -R 755 ./trained-envs-executables/linux/Huggy

让我们回顾一下这个环境是如何工作的

状态空间:Huggy感知到的信息。

Huggy并不能“看见”它的环境。相反,我们向它提供有关环境的信息:

  • 目标(棍子)的位置
  • 它自身与目标之间的相对位置
  • 它腿部的方向。

有了所有这些信息,Huggy就可以决定下一步采取什么行动来完成它的目标

Huggy

动作空间:Huggy可以做的动作

Huggy action

关节马达驱动Huggy的腿部。这意味着为了拿到目标,Huggy需要学会正确地旋转每条腿的关节马达,以便它能够移动

奖励函数

奖励函数的设计旨在让Huggy完成它的目标:捡回棍子。

请记住,强化学习的基础之一是奖励假设:一个目标可以被描述为最大化预期累积奖励

在这里,我们的目标是让Huggy走向棍子,但不要转动太多。因此,我们的奖励函数必须实现这个目标。

我们的奖励函数:

Huggy reward function
  • 方向奖励:我们奖励它接近目标
  • 时间惩罚:每次行动都会给予固定的时间惩罚,以促使它尽快拿到棍子
  • 旋转惩罚:如果Huggy转动太多或转得太快,我们就会惩罚它。
  • 到达目标奖励:我们奖励Huggy到达目标

检查Huggy配置文件

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

  • 对于本笔记本的范围,我们不打算修改超参数,但如果您想尝试作为实验,Unity提供了非常好的文档,解释了每个超参数

  • 我们需要为Huggy创建一个配置文件。

  • 转到 /content/ml-agents/config/ppo

  • 创建一个名为 Huggy.yaml 的新文件

  • 复制并粘贴以下内容 🔽

behaviors:
  Huggy:
    trainer_type: ppo
    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: linear
    network_settings:
      normalize: true
      hidden_units: 512
      num_layers: 3
      vis_encode_type: simple
    reward_signals:
      extrinsic:
        gamma: 0.995
        strength: 1.0
    checkpoint_interval: 200000
    keep_checkpoints: 15
    max_steps: 2e6
    time_horizon: 1000
    summary_freq: 50000
  • 别忘了保存文件!

  • 如果您想修改超参数,在Google Colab笔记本中,您可以点击此处打开config.yaml:/content/ml-agents/config/ppo/Huggy.yaml

我们现在准备训练我们的代理 🔥。

训练我们的智能体

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

ml learn function

使用ML Agents,我们运行一个训练脚本。我们定义四个参数:

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

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

首次使用 --resume 时会失败,请再次运行该块以绕过错误。

训练将需要30到45分钟,具体取决于您的机器(别忘了设置GPU),去喝杯咖啡吧 ☕️ 你值得拥有 🤗。

mlagents-learn ./config/ppo/Huggy.yaml --env=./trained-envs-executables/linux/Huggy/Huggy --run-id="Huggy" --no-graphics

将智能体推送到 🤗 Hub

  • 现在我们已经训练好了智能体,我们可以将其推送到Hub,以便在您的浏览器上与Huggy玩耍🔥。

为了能够与社区分享你的模型,还需要完成三个步骤

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

ml learn function

我们定义四个参数:

  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="HuggyTraining" --local-dir="./results/Huggy" --repo-id="ThomasSimonini/ppo-Huggy" --commit-message="Huggy"

如果一切顺利,您应该在过程结束时看到此内容(但网址会不同😆)

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

这是您模型仓库的链接。该仓库包含一个模型卡,解释了如何使用模型、您的Tensorboard日志和您的配置文件。最棒的是,它是一个Git仓库,这意味着您可以有不同的提交、用新的推送更新您的仓库、打开拉取请求等等。

ml learn function

但现在最精彩的部分来了:能够在线玩Huggy 👀。

和你的Huggy玩耍 🐕

这一步是最简单的

load-huggy
  1. 在步骤1中,输入您的用户名(您的用户名区分大小写:例如,我的用户名是ThomasSimonini,而不是thomassimonini或ThOmasImoNInI),然后点击搜索按钮。

  2. 在步骤2中,选择您的模型仓库。

  3. 在步骤3中,选择您想要重放的模型

  • 我有很多模型,因为我们每 500000 步保存一个模型。
  • 但由于我想要最新的一个,所以我选择 Huggy.onnx

👉 尝试使用不同的模型步骤来查看智能体的改进会很有帮助。

恭喜你完成这个奖励单元!

现在你可以坐下来享受和你的Huggy 🐶玩耍的乐趣了。别忘了将Huggy分享给你的朋友,传播爱心 🤗。如果你在社交媒体上分享,请@huggingface和@simoninithomas标记我们

Huggy cover

继续学习,保持出色 🤗

< > 在 GitHub 上更新