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

我们使用的是 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 中打开”按钮 👇
单元 3:使用 RL Baselines3 Zoo 在雅达利游戏中进行深度 Q-学习 👾

在本次实战中,你将**训练一个深度 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

安装 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 训练智能体,我们只需要做两件事
- 创建一个名为
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
- 我们开始训练并将模型保存到
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-学习智能体。上面的脚本应该显示了一个指向模型仓库的链接,例如 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
让我们加载一个玩 Beam Rider 的智能体: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
为什么不尝试训练你自己的玩 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

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