深度强化学习课程文档

实践操作

Hugging Face's logo
加入 Hugging Face 社区

并获得增强的文档体验

开始使用

实践操作

Ask a Question Open In Colab

既然您已经学习了深度 Q-Learning 背后的理论,您现在可以训练您的深度 Q-Learning 智能体来玩 Atari 游戏了。我们将从太空侵略者开始,但您可以使用任何您想要的 Atari 游戏 🔥

Environments

我们正在使用 RL-Baselines-3 Zoo 集成,这是一个 vanilla 版本的深度 Q-Learning,没有 Double-DQN、Dueling-DQN 或 Prioritized Experience Replay 等扩展。

此外,如果您想在本次实践操作后学习自己实现深度 Q-Learning,您绝对应该查看 CleanRL 实现:https://github.com/vwxyzjn/cleanrl/blob/master/cleanrl/dqn_atari.py

为了验证本次实践操作是否符合认证流程,您需要将您训练的模型推送到 Hub 并获得 >= 200 的结果

要查找您的结果,请转到排行榜并找到您的模型,结果 = 平均奖励 - 奖励标准差

如果您找不到您的模型,请转到页面底部并单击刷新按钮。

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

您可以在此处查看您的进度 👉 https://huggingface.co/spaces/ThomasSimonini/Check-my-progress-Deep-RL-Course

要开始实践操作,请单击“在 Colab 中打开”按钮 👇

Open In Colab

单元 3:使用 Atari 游戏进行深度 Q-Learning 👾 使用 RL Baselines3 Zoo

Unit 3 Thumbnail

在本实践操作中,您将训练一个深度 Q-Learning 智能体,使用 RL Baselines3 Zoo 玩太空侵略者,这是一个基于 Stable-Baselines3 的训练框架,它提供用于训练、评估智能体、调整超参数、绘制结果和录制视频的脚本。

我们正在使用 RL-Baselines-3 Zoo 集成,一个 vanilla 版本的深度 Q-Learning,没有 Double-DQN、Dueling-DQN 和 Prioritized Experience Replay 等扩展。

🎮 环境:

您可以在此处查看太空侵略者版本之间的差异 👉 https://gymnasium.org.cn/environments/atari/space_invaders/#variants

📚 RL 库:

本次实践操作的目标 🏆

在本次实践操作结束时,您将

  • 能够更深入地了解 RL Baselines3 Zoo 的工作原理
  • 能够将您训练的智能体和代码推送到 Hub,并附带精彩的视频回放和评估分数 🔥。

前提条件 🏗️

在深入实践操作之前,您需要

🔲 📚 通过阅读单元 3 来学习深度 Q-Learning 🤗

我们一直在努力改进我们的教程,所以如果您在本次实践操作中发现任何问题,请在 Github Repo 上打开一个 issue

让我们训练一个玩 Atari 太空侵略者 👾 的深度 Q-Learning 智能体并将其上传到 Hub。

我们强烈建议学生使用 Google Colab 进行实践练习,而不是在他们的个人计算机上运行它们

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

为了验证本次实践操作是否符合认证流程,您需要将您训练的模型推送到 Hub 并获得 >= 200 的结果

要查找您的结果,请转到排行榜并找到您的模型,结果 = 平均奖励 - 奖励标准差

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

设置 GPU 💪

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

安装 RL-Baselines3 Zoo 及其依赖项 📚

如果您看到 ERROR: pip's dependency resolver does not currently take into account all the packages that are installed. 这是正常的,这不是一个严重错误,存在版本冲突。但我们需要的包已安装。

# For now we install this update of RL-Baselines3 Zoo
pip install git+https://github.com/DLR-RM/rl-baselines3-zoo
apt-get install swig cmake ffmpeg

为了能够在 Gymnasium 中使用 Atari 游戏,我们需要安装 atari 包。并接受 rom-license 下载 rom 文件(游戏文件)。

!pip install gymnasium[atari]
!pip install gymnasium[accept-rom-license]

创建虚拟显示器 🔽

在实践操作期间,我们需要生成一个回放视频。为此,如果您在无头机器上训练它,我们需要有一个虚拟屏幕才能渲染环境(从而记录帧)。

因此,以下单元格将安装库并创建和运行虚拟屏幕 🖥

apt install python-opengl
apt install ffmpeg
apt install xvfb
pip3 install pyvirtualdisplay
# Virtual display
from pyvirtualdisplay import Display

virtual_display = Display(visible=0, size=(1400, 900))
virtual_display.start()

训练我们的深度 Q-Learning 智能体来玩太空侵略者 👾

要使用 RL-Baselines3-Zoo 训练智能体,我们只需要做两件事

  1. 创建一个超参数配置文件,其中将包含我们的训练超参数,名为 dqn.yml

这是一个模板示例

SpaceInvadersNoFrameskip-v4:
  env_wrapper:
    - stable_baselines3.common.atari_wrappers.AtariWrapper
  frame_stack: 4
  policy: 'CnnPolicy'
  n_timesteps: !!float 1e7
  buffer_size: 100000
  learning_rate: !!float 1e-4
  batch_size: 32
  learning_starts: 100000
  target_update_interval: 1000
  train_freq: 4
  gradient_steps: 1
  exploration_fraction: 0.1
  exploration_final_eps: 0.01
  # If True, you need to deactivate handle_timeout_termination
  # in the replay_buffer_kwargs
  optimize_memory_usage: False

在这里我们看到

  • 我们使用 Atari Wrapper 来预处理输入(帧缩减、灰度、堆叠 4 帧)
  • 我们使用 CnnPolicy,因为我们使用卷积层来处理帧
  • 我们训练它 1000 万 n_timesteps
  • 内存(经验回放)大小为 100000,也就是您保存的经验步骤量,用于再次训练您的智能体。

💡 我的建议是将训练时间步长减少到 1M, 这在 P100 上大约需要 90 分钟。 !nvidia-smi 将告诉您您正在使用的 GPU。 1000 万步大约需要 9 个小时。我建议在您的本地计算机(或其他地方)上运行此操作。只需单击:文件>下载

在超参数优化方面,我的建议是关注以下 3 个超参数

  • learning_rate
  • buffer_size(经验内存大小)
  • batch_size

作为一种良好实践,您需要查看文档以了解每个超参数的作用https://stable-baselines3.readthedocs.io/en/master/modules/dqn.html#parameters

  1. 我们开始训练并将模型保存在 logs 文件夹 📁 中
  • --algo 后定义算法,在 -f 后定义保存模型的位置,在 -c 后定义超参数配置的位置。
python -m rl_zoo3.train --algo ________ --env SpaceInvadersNoFrameskip-v4  -f _________  -c _________

解决方案

python -m rl_zoo3.train --algo dqn  --env SpaceInvadersNoFrameskip-v4 -f logs/ -c dqn.yml

让我们评估我们的智能体 👀

  • RL-Baselines3-Zoo 提供了 enjoy.py,这是一个用于评估我们智能体的 python 脚本。在大多数 RL 库中,我们将评估脚本称为 enjoy.py
  • 让我们评估它 5000 个时间步 🔥
python -m rl_zoo3.enjoy  --algo dqn  --env SpaceInvadersNoFrameskip-v4  --no-render  --n-timesteps _________  --folder logs/

解决方案

python -m rl_zoo3.enjoy  --algo dqn  --env SpaceInvadersNoFrameskip-v4  --no-render  --n-timesteps 5000  --folder logs/

在 Hub 上发布我们训练的模型 🚀

现在我们看到训练后获得了良好的结果,我们可以通过一行代码将我们训练的模型发布到 hub 🤗。

Space Invaders model

通过使用 rl_zoo3.push_to_hub 您可以评估、录制回放、生成智能体的模型卡片并将其推送到 hub

这样

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

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

2️⃣ 登录,然后您需要存储来自 Hugging Face 网站的身份验证令牌。

Create HF Token
  • 复制令牌
  • 运行下面的单元格并粘贴令牌
from huggingface_hub import notebook_login # To log to our Hugging Face account to be able to upload models to the Hub.
notebook_login()
!git config --global credential.helper store

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

3️⃣ 我们现在准备好将我们训练的智能体推送到 🤗 Hub 🔥

让我们运行 push_to_hub.py 文件,将我们训练的智能体上传到 Hub。

--repo-name :仓库的名称

-orga:您的 Hugging Face 用户名

-f:训练模型文件夹的位置(在我们的例子中为 logs

Select Id
python -m rl_zoo3.push_to_hub  --algo dqn  --env SpaceInvadersNoFrameskip-v4  --repo-name _____________________ -orga _____________________ -f logs/

解决方案

python -m rl_zoo3.push_to_hub  --algo dqn  --env SpaceInvadersNoFrameskip-v4  --repo-name dqn-SpaceInvadersNoFrameskip-v4  -orga ThomasSimonini  -f logs/

###.

恭喜 🥳 您刚刚使用 RL-Baselines-3 Zoo 训练并上传了您的第一个深度 Q-Learning 智能体。上面的脚本应该显示了一个模型存储库的链接,例如 https://huggingface.co/ThomasSimonini/dqn-SpaceInvadersNoFrameskip-v4。当您转到此链接时,您可以

  • 在右侧查看您的智能体的视频预览
  • 单击“文件和版本”以查看存储库中的所有文件。
  • 单击“在 stable-baselines3 中使用”以获取代码片段,该代码片段显示如何加载模型。
  • 模型卡片(README.md 文件),其中提供了模型和您使用的超参数的描述。

在幕后,Hub 使用基于 git 的存储库(如果您不知道 git 是什么,请不要担心),这意味着您可以随着实验和改进您的智能体,使用新版本更新模型。

使用 排行榜 🏆将您的智能体的结果与您的同学进行比较

加载强大的训练模型 🔥

  • Stable-Baselines3 团队在 Hub 上上传了超过 150 个训练有素的深度强化学习智能体

您可以在这里找到它们:👉 https://huggingface.co/sb3

一些例子

让我们加载一个玩光束骑手的智能体:https://huggingface.co/sb3/dqn-BeamRiderNoFrameskip-v4

  1. 我们使用 rl_zoo3.load_from_hub 下载模型,并将其放置在一个我们可以称为 rl_trained 的新文件夹中
# Download model and save it into the logs/ folder
python -m rl_zoo3.load_from_hub --algo dqn --env BeamRiderNoFrameskip-v4 -orga sb3 -f rl_trained/
  1. 让我们评估它 5000 个时间步
python -m rl_zoo3.enjoy --algo dqn --env BeamRiderNoFrameskip-v4 -n 5000  -f rl_trained/ --no-render

为什么不尝试训练您自己的 Deep Q-Learning 智能体来玩 BeamRiderNoFrameskip-v4? 🏆。

如果您想尝试,请查看 https://huggingface.co/sb3/dqn-BeamRiderNoFrameskip-v4#hyperparameters 在模型卡片中,您有训练有素的智能体的超参数。

但找到超参数可能是一项艰巨的任务。幸运的是,在下一个单元中,我们将看到如何使用 Optuna 来优化超参数 🔥。

一些额外的挑战 🏆

学习的最佳方式是尝试自己动手做

排行榜 中,您会找到您的智能体。您能登上榜首吗?

以下是您可以尝试训练智能体的一些环境列表

  • BeamRiderNoFrameskip-v4
  • BreakoutNoFrameskip-v4
  • EnduroNoFrameskip-v4
  • PongNoFrameskip-v4

此外,如果您想学习自己实现深度 Q-Learning,您绝对应该查看 CleanRL 实现:https://github.com/vwxyzjn/cleanrl/blob/master/cleanrl/dqn_atari.py

Environments

恭喜您完成本章!

如果您仍然对所有这些元素感到困惑……这完全正常!我和所有学习 RL 的人都是如此。

花时间真正掌握材料,然后再继续,并尝试额外的挑战。掌握这些要素并拥有坚实的基础非常重要。

在下一个单元中,我们将学习 Optuna。深度强化学习中最关键的任务之一是找到一组好的训练超参数。Optuna 是一个可以帮助您自动化搜索的库。

这是一门与您共建的课程 👷🏿‍♀️

最后,我们希望通过您的反馈迭代地改进和更新课程。如果您有任何反馈,请填写此表格 👉 https://forms.gle/3HgA7bEHwAmmLfwh9

我们一直在努力改进我们的教程,所以如果您在本笔记本中发现任何问题,请在 Github Repo 上打开一个 issue

Bonus unit 2 再见! 🔥

保持学习,保持优秀 🤗

< > 在 GitHub 上更新