深度强化学习课程文档

实战

Hugging Face's logo
加入 Hugging Face 社区

并获得增强的文档体验

开始使用

实战

Ask a Question Open In Colab

既然你已经学习了深度 Q-学习的理论,你已经准备好训练你的深度 Q-学习智能体来玩雅达利游戏了。我们将从《太空侵略者》开始,但你可以使用任何你想要的雅达利游戏 🔥

Environments

我们使用的是 RL-Baselines-3 Zoo 集成,这是一个 Deep Q-Learning 的原始版本,没有像 Double-DQN、Dueling-DQN 或优先经验回放等扩展。

此外,如果你想在此实战后自己学习如何实现深度 Q-学习,你绝对应该看看 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:使用 RL Baselines3 Zoo 在雅达利游戏中进行深度 Q-学习 👾

Unit 3 Thumbnail

在本次实战中,你将**训练一个深度 Q-学习智能体**来玩《太空侵略者》,使用 RL Baselines3 Zoo,这是一个基于 Stable-Baselines3 的训练框架,提供用于训练、评估智能体、调整超参数、绘制结果和录制视频的脚本。

我们使用的是 RL-Baselines-3 Zoo 集成,这是一个原始版本的深度 Q-学习,没有 Double-DQN、Dueling-DQN 和优先经验回放等扩展。

🎮 环境:

你可以在这里看到《太空侵略者》不同版本之间的区别 👉 https://gymnasium.org.cn/environments/atari/space_invaders/#variants

📚 RL 库:

本次实战的目标 🏆

在本次实战结束时,你将:

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

先决条件 🏗️

在深入实践之前,你需要

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

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

让我们训练一个玩雅达利《太空侵略者》的深度 Q-学习智能体 👾 并将其上传到 Hub。

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

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

为了验证本次实战并获得认证,你需要将训练好的模型上传到 Hub,并获得 >= 200 的结果

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

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

设置 GPU 💪

  • 为了加速智能体的训练,我们将使用 GPU。为此,请转到 Runtime > Change Runtime type
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-学习智能体来玩《太空侵略者》👾

要使用 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 小时。我建议在本地计算机(或其他地方)运行此操作。只需点击:文件 > 下载

在超参数优化方面,我的建议是关注这三个超参数:

  • 学习率
  • 缓冲区大小(经验记忆大小)
  • 批处理大小

作为一项好的实践,你需要查阅文档以了解每个超参数的作用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-学习智能体。上面的脚本应该显示了一个指向模型仓库的链接,例如 https://huggingface.co/ThomasSimonini/dqn-SpaceInvadersNoFrameskip-v4。当你访问此链接时,你可以

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

在底层,Hub 使用基于 Git 的仓库(如果你不了解 Git,别担心),这意味着你可以在实验并改进智能体时使用新版本更新模型。

使用排行榜🏆比较你的智能体和同学们的成绩

加载一个强大的预训练模型 🔥

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

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

一些例子

让我们加载一个玩 Beam Rider 的智能体: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

为什么不尝试训练你自己的玩 BeamRiderNoFrameskip-v4 的深度 Q-学习智能体? 🏆

如果你想尝试,请查看https://huggingface.co/sb3/dqn-BeamRiderNoFrameskip-v4#hyperparameters在模型卡中,你可以找到已训练智能体的超参数。

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

一些额外的挑战 🏆

学习的最好方式就是自己动手尝试

排行榜中你会找到你的智能体。你能名列前茅吗?

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

  • 光束骑手无跳帧-v4
  • 打砖块无跳帧-v4
  • 耐力赛无跳帧-v4
  • 乒乓球无跳帧-v4

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

Environments

恭喜你完成了本章!

如果你仍然对所有这些元素感到困惑……这完全正常!我和所有学习强化学习的人都经历过同样的情况。

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

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

这是一个与你一起构建的课程 👷🏿‍♀️

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

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

附加单元 2 再见!🔥

持续学习,保持出色 🤗

< > 在 GitHub 上更新