深度强化学习课程文档
让我们训练 Huggy 🐶 并与它玩耍
并获得增强的文档体验
开始入门
让我们训练 Huggy 🐶 并与它玩耍
我们强烈建议学生使用 Google Colab 进行实践练习,而不是在他们的个人电脑上运行。
通过使用 Google Colab,您可以专注于学习和实验,而无需担心设置环境的技术方面。
让我们训练 Huggy 🐶
要开始训练 Huggy,请点击 “在 Colab 中打开” 按钮 👇

在本 notebook 中,我们将通过教 Huggy 小狗去捡棍子,然后在您的浏览器中直接与它玩耍,来巩固我们在第一个单元中学到的知识

环境 🎮
- Huggy 小狗,是由 Thomas Simonini 基于 Puppo The Corgi 创建的环境
使用的库 📚
我们一直在努力改进我们的教程,所以如果您在本 notebook 中发现任何问题,请在 Github 仓库中开启 issue。
本 notebook 的目标 🏆
在本 notebook 结束时,您将
- 了解用于训练 Huggy 的状态空间、动作空间和奖励函数。
- 训练您自己的 Huggy 来捡棍子。
- 能够直接在浏览器中与您训练的 Huggy 玩耍。
先决条件 🏗️
在深入 notebook 之前,您需要
🔲 📚 通过完成单元 1,来培养对强化学习基础知识的理解(MC、TD、奖励假设...)。
🔲 📚 通过完成奖励单元 1,阅读 Huggy 的介绍。
设置 GPU 💪
- 为了加速 agent 的训练,我们将使用 GPU。为此,请转到
运行时 > 更改运行时类型

硬件加速器 > GPU

克隆仓库 🔽
- 我们需要克隆包含 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: command not found
/bin/bash: line 1: mlagents-push-to-hf: command not found
为了解决这个问题,我们将创建一个虚拟环境,其中 Python 版本与 ML-Agents 库兼容。
注意:
为了未来的兼容性,请始终检查安装文件中的 python_requires
参数,如果 Colab 的 Python 版本不兼容,请在下面给出的脚本中将您的虚拟环境设置为最大支持的 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
我们使用 wget
从 https://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 需要学习正确旋转他每条腿的关节马达,以便他可以移动。
奖励函数
奖励函数的设计是为了让 Huggy 完成他的目标:捡起棍子。
请记住,强化学习的基础之一是奖励假设:一个目标可以被描述为预期累积奖励的最大化。
在这里,我们的目标是让 Huggy 走向棍子,但不要旋转太多。因此,我们的奖励函数必须体现这一目标。
我们的奖励函数

- 方向奖励:我们奖励他靠近目标。
- 时间惩罚:在每个动作时给予固定的时间惩罚,以迫使他尽可能快地到达棍子。
- 旋转惩罚:如果 Huggy 旋转太多并且转弯太快,我们会惩罚他。
- 到达目标奖励:我们奖励 Huggy 到达目标。
检查 Huggy 配置文件
在 ML-Agents 中,您在 config.yaml 文件中定义训练超参数。
在本 notebook 的范围内,我们不会修改超参数,但如果您想作为实验尝试,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 notebook 中,您可以点击此处打开 config.yaml:
/content/ml-agents/config/ppo/Huggy.yaml
我们现在准备好训练我们的 agent 了 🔥。
训练我们的 agent
要训练我们的 agent,我们只需要启动 mlagents-learn 并选择包含环境的可执行文件。

使用 ML Agents,我们运行一个训练脚本。我们定义了四个参数
mlagents-learn <config>
:超参数配置文件所在的路径。--env
:环境可执行文件所在的位置。--run-id
:您要为训练运行 ID 命名的名称。--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
将 agent 推送到 🤗 Hub
- 现在我们已经训练了 agent,我们准备将其推送到 Hub,以便能够在您的浏览器上与 Huggy 玩耍🔥。
为了能够与社区分享您的模型,还需要遵循三个步骤
1️⃣(如果尚未完成)创建 HF 帐户 ➡ https://huggingface.co/join
2️⃣ 登录,然后从 Hugging Face 网站获取您的 token。
- 创建一个新 token (https://huggingface.co/settings/tokens) 并赋予写入权限

- 复制 token
- 运行下面的单元格并粘贴 token
from huggingface_hub import notebook_login
notebook_login()
如果您不想使用 Google Colab 或 Jupyter Notebook,则需要改用此命令:huggingface-cli login
然后,我们只需要运行 mlagents-push-to-hf
。

我们定义了 4 个参数
--run-id
:训练运行 ID 的名称。--local-dir
:agent 的保存位置,它是 results/<run_id name>,在我的例子中是 results/First Training。--repo-id
:您要创建或更新的 Hugging Face 仓库的名称。它始终是 <您的 huggingface 用户名>/<仓库名称> 如果仓库不存在,它将自动创建--commit-message
:由于 HF 仓库是 git 仓库,因此您需要提供 commit 消息。
mlagents-push-to-hf --run-id="HuggyTraining" --local-dir="./results/Huggy" --repo-id="ThomasSimonini/ppo-Huggy" --commit-message="Huggy"
如果一切正常,您应该在流程结束时看到这个(但 URL 会有所不同 😆)
Your model is pushed to the hub. You can view your model here: https://huggingface.co/ThomasSimonini/ppo-Huggy
这是指向您的模型仓库的链接。该仓库包含一个模型卡片,其中解释了如何使用该模型、您的 Tensorboard 日志和您的配置文件。最棒的是它是一个 git 仓库,这意味着您可以有不同的 commit,通过新的推送更新您的仓库,打开 Pull Requests 等。

但现在到了最好的部分:能够在线与 Huggy 玩耍 👀。
与您的 Huggy 🐕 玩耍
这一步最简单
在您的浏览器中打开 Huggy 游戏:https://huggingface.co/spaces/ThomasSimonini/Huggy
点击 “Play with my Huggy model”(与我的 Huggy 模型一起玩)

在步骤 1 中,输入您的用户名(您的用户名区分大小写:例如,我的用户名是 ThomasSimonini,而不是 thomassimonini 或 ThOmasImoNInI),然后点击搜索按钮。
在步骤 2 中,选择您的模型仓库。
在步骤 3 中,选择您要回放的模型
- 我有多个模型,因为我们每 500000 个时间步保存一个模型。
- 但由于我想要最新的模型,所以我选择
Huggy.onnx
👉 最好尝试使用不同的模型步骤来查看 agent 的改进。
恭喜您完成这个奖励单元!
您现在可以坐下来,享受与您的 Huggy 🐶 玩耍的乐趣。并且不要忘记通过与您的朋友分享 Huggy 来传播爱意 🤗。如果您在社交媒体上分享了它,请标记我们 @huggingface 和我 @simoninithomas
