让我们训练和玩耍 Huggy 🐶
我们强烈建议学生使用 Google Colab 进行实践练习,而不是在他们的个人电脑上运行。
通过使用 Google Colab,您可以专注于学习和实验,而无需担心设置环境的技术方面。
让我们训练 Huggy 🐶
要开始训练 Huggy,请点击“在 Colab 中打开”按钮 👇
在本笔记本中,我们将通过教 Huggy 这只狗狗捡树枝,然后直接在您的浏览器中与它玩耍来强化我们在第一个单元中学到的内容。
环境 🎮
- Huggy 这只狗狗,一个由 Thomas Simonini 基于 Puppo The Corgi 创建的环境。
使用的库 📚
我们一直在努力改进我们的教程,因此,如果您在本笔记本中发现任何问题,请在 Github 仓库上提交问题。
本笔记本的目标 🏆
在本笔记本结束时,您将
- 了解用于训练 Huggy 的状态空间、动作空间和奖励函数。
- 训练您自己的 Huggy 去捡树枝。
- 能够直接在您的浏览器中与您训练过的 Huggy 玩耍。
先决条件 🏗️
在深入研究笔记本之前,您需要
🔲 📚 通过完成单元 1 来理解强化学习的基础知识(MC、TD、奖励假设……)
🔲 📚 通过完成额外单元 1 来阅读 Huggy 的简介
设置 GPU 💪
- 为了加速智能体的训练,我们将使用 GPU。为此,请转到
运行时 > 更改运行时类型
硬件加速器 > GPU
克隆存储库并安装依赖项 🔽
- 我们需要克隆包含 ML-Agents 的存储库。
# Clone the repository (can take 3min)
git clone --depth 1 https://github.com/Unity-Technologies/ml-agents
# 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
下载并移动环境压缩文件到 ./trained-envs-executables/linux/
- 我们的环境可执行文件位于一个压缩文件中。
- 我们需要下载它并将其放置到
./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 配置文件
在 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 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
将智能体推送到 🤗 Hub
- 现在我们已经训练了我们的智能体,**准备好将其推送到 Hub,以便能够在您的浏览器中与 Huggy 玩耍🔥。**
为了能够与社区分享您的模型,您需要遵循以下三个步骤
1️⃣ (如果尚未完成)在 HF 创建一个账号 ➡ https://huggingface.co/join
2️⃣ 登录,然后从 Hugging Face 网站获取您的令牌。
- 创建一个新的令牌(https://huggingface.co/settings/tokens)并赋予 **写入权限**
- 复制令牌
- 运行下面的代码块并粘贴令牌
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
:智能体保存到的目录,它是 results/<run_id name>,在我的例子中是 results/First Training。--repo-id
:您想要创建或更新的 Hugging Face 仓库的名称。它始终为 <您的 huggingface 用户名>/<仓库名称>。如果仓库不存在,**它将自动创建**--commit-message
:由于 HF 仓库是 Git 仓库,因此您需要提供一个提交信息。
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 仓库,这意味着您可以拥有不同的提交,使用新的推送更新您的仓库,打开 Pull 请求等等。**
但现在是最好的部分:**能够在线玩 Huggy 👀。**
与你的 Huggy 玩耍🐕
这一步最简单
在你的浏览器中打开 Huggy 游戏:https://huggingface.co/spaces/ThomasSimonini/Huggy
点击“与我的 Huggy 模型玩耍”
在步骤 1 中,输入你的用户名(你的用户名区分大小写:例如,我的用户名是 ThomasSimonini,而不是 thomassimonini 或 ThOmasImoNInI),然后点击搜索按钮。
在步骤 2 中,选择你的模型仓库。
在步骤 3 中,**选择你想要回放的模型**
- 我有多个模型,因为我们每 500000 个时间步保存一个模型。
- 但由于我想要最新的那个,我选择
Huggy.onnx
👉最好**尝试使用不同的模型步骤来查看智能体的改进。**
恭喜你完成了这个奖励单元!
你现在可以坐下来享受与你的 Huggy 玩耍🐶。并且不要**忘记通过与你的朋友分享 Huggy 来传播爱🤗**。如果你在社交媒体上分享它,**请标记我们 @huggingface 和我 @simoninithomas**