深度强化学习课程文档
实践操作
并获得增强的文档体验
开始使用
实践操作
既然您已经学习了深度 Q-Learning 背后的理论,您现在可以训练您的深度 Q-Learning 智能体来玩 Atari 游戏了。我们将从太空侵略者开始,但您可以使用任何您想要的 Atari 游戏 🔥

我们正在使用 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 中打开”按钮 👇
单元 3:使用 Atari 游戏进行深度 Q-Learning 👾 使用 RL Baselines3 Zoo

在本实践操作中,您将训练一个深度 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

安装 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 训练智能体,我们只需要做两件事
- 创建一个超参数配置文件,其中将包含我们的训练超参数,名为
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
- 我们开始训练并将模型保存在
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 🤗。

通过使用 rl_zoo3.push_to_hub
您可以评估、录制回放、生成智能体的模型卡片并将其推送到 hub。
这样
- 您可以展示我们的工作 🔥
- 您可以可视化您的智能体玩游戏 👀
- 您可以与社区分享其他人可以使用的智能体 💾
- 您可以访问排行榜 🏆 以查看您的智能体与同学相比表现如何 👉 https://huggingface.co/spaces/huggingface-projects/Deep-Reinforcement-Learning-Leaderboard
为了能够与社区分享您的模型,还需要遵循三个步骤
1️⃣(如果尚未完成)创建一个 HF 帐户 ➡ https://huggingface.co/join
2️⃣ 登录,然后您需要存储来自 Hugging Face 网站的身份验证令牌。
- 创建一个新令牌 (https://huggingface.co/settings/tokens) 具有写入角色

- 复制令牌
- 运行下面的单元格并粘贴令牌
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
)

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-AsteroidsNoFrameskip-v4
- 光束骑手:https://huggingface.co/sb3/dqn-BeamRiderNoFrameskip-v4
- 打砖块:https://huggingface.co/sb3/dqn-BreakoutNoFrameskip-v4
- 公路赛车手:https://huggingface.co/sb3/dqn-RoadRunnerNoFrameskip-v4
让我们加载一个玩光束骑手的智能体:https://huggingface.co/sb3/dqn-BeamRiderNoFrameskip-v4
- 我们使用
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/
- 让我们评估它 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

恭喜您完成本章!
如果您仍然对所有这些元素感到困惑……这完全正常!我和所有学习 RL 的人都是如此。
花时间真正掌握材料,然后再继续,并尝试额外的挑战。掌握这些要素并拥有坚实的基础非常重要。
在下一个单元中,我们将学习 Optuna。深度强化学习中最关键的任务之一是找到一组好的训练超参数。Optuna 是一个可以帮助您自动化搜索的库。
这是一门与您共建的课程 👷🏿♀️
最后,我们希望通过您的反馈迭代地改进和更新课程。如果您有任何反馈,请填写此表格 👉 https://forms.gle/3HgA7bEHwAmmLfwh9
我们一直在努力改进我们的教程,所以如果您在本笔记本中发现任何问题,请在 Github Repo 上打开一个 issue。
Bonus unit 2 再见! 🔥