Week 10 - 学生练习

深度 Q 网络 (DQN)

练习目标

  • 巩固对 DQN 核心思想(神经网络近似 Q 函数)的理解。
  • 掌握经验回放 (Experience Replay) 和目标网络 (Target Network) 的原理和作用。
  • 理解 DQN 算法的基本流程。
  • 练习使用 Stable Baselines3 (SB3) 运行 DQN 算法。
  • 练习调整 DQN 的关键超参数并观察其对训练过程和结果的影响。
  • 练习使用 TensorBoard 监控训练过程。

练习内容

练习 1: DQN 概念回顾

  1. 核心思想: DQN 使用什么来近似 Q 函数?相比于表格 Q-Learning,这样做主要解决了什么问题?
  2. 不稳定性: 为什么将 Q-Learning 直接与神经网络结合会导致训练不稳定?请解释两个主要原因。
  3. 经验回放:
    • 经验回放机制是如何工作的?(简述存储和采样过程)
    • 它主要解决了 Q-Learning + NN 不稳定性中的哪个问题?如何解决的?它还有什么额外的好处?
  4. 目标网络:
    • 目标网络机制是如何工作的?(简述双网络和参数更新方式)
    • 它主要解决了 Q-Learning + NN 不稳定性中的哪个问题?如何解决的?
  5. DQN 更新: 在 DQN 的更新步骤中,计算 TD 目标 \(Target = R + \gamma * \max_{a'} \hat{Q}(S', a'; w^{-})\) 时,使用的是哪个网络的参数(\(w\) 还是 \(w^{-}\))?计算损失 \(Loss = (Target - \hat{Q}(S, A; w))^2\) 时,计算 \(\hat{Q}(S, A; w)\) 使用的是哪个网络的参数?

练习 2: SB3 DQN 代码理解 (基于 Lab 6)

本练习基于讲义/Lab 6 中提供的 CartPole 环境和 SB3 DQN 实现代码。

  1. 关键组件参数: 请在 Lab 6 的 SB3 DQN 代码中,找出与以下 DQN 关键组件对应的超参数名称,并简述其含义:
    • 经验回放缓冲区的大小。
    • 开始学习前需要收集的最小经验数量。
    • 每次从缓冲区采样用于训练的小批量大小。
    • 目标网络的更新方式/频率(是硬更新还是软更新?对应的参数是什么?)。
    • 探索率 ε 从初始值衰减到最终值所用的步数比例。
    • 最终的探索率 ε 是多少?
  2. TensorBoard 监控: 代码中通过哪个参数指定了 TensorBoard 日志的保存目录?在 TensorBoard 中,我们主要关注哪个指标来判断模型的训练效果(平均回合奖励)?

练习 3: DQN 超参数实验 (基于 Lab 6)

请务必先确保你能够成功运行 Lab 6 的基础代码,并能使用 TensorBoard 查看结果。

选择至少两组超参数进行修改实验(每次只修改一个或一组相关参数,保持其他参数与 Lab 6 基础代码一致),重新训练模型,并记录评估结果。

实验建议(选择至少两项):

  • 实验 A: 改变学习率 (Learning Rate)
    • 尝试一个较大的学习率,例如 learning_rate=1e-3
    • 尝试一个较小的学习率,例如 learning_rate=1e-5
  • 实验 B: 改变经验回放缓冲区大小 (Buffer Size)
    • 尝试一个较小的缓冲区,例如 buffer_size=10000
    • 尝试一个更大的缓冲区,例如 buffer_size=500000 (如果内存允许)。
  • 实验 C: 改变探索策略 (Exploration)
    • 尝试更快的探索衰减,例如 exploration_fraction=0.05
    • 尝试更高的最终探索率,例如 exploration_final_eps=0.2
  • 实验 D: 改变目标网络更新频率 (Target Network Update)
    • SB3 DQN 默认 tau=1.0 是硬更新。尝试更频繁的硬更新,例如 target_update_interval=1000
    • 尝试软更新,例如设置 tau=0.005 (此时 target_update_interval 参数通常会被忽略)。

记录与分析:

  1. 对于你进行的每一组实验:
    • 记录你修改的超参数及其值。
    • 记录使用 evaluate_policy 函数评估模型得到的最终性能指标(包括平均奖励 mean_reward 和奖励标准差 std_reward)。
    • (可选但推荐) 使用截图工具截取 TensorBoard 中 rollout/ep_rew_mean 曲线图,该曲线反映了训练过程中平均回合奖励的变化趋势。
  2. 对比分析: 对比不同超参数设置下的训练曲线和评估结果,与基础代码的结果进行比较。
    • 你观察到了哪些显著的差异?(例如,收敛速度变快/变慢?最终性能变好/变差?训练过程更稳定/更震荡?)
    • 尝试解释为什么修改这些超参数会导致观察到的结果变化?(结合这些超参数在 DQN 算法中的作用来分析)。

提交要求

  • 请将你的答案整理成一个文档(如 Word, PDF, 或 Markdown 文件)。
  • 对于练习 1 和 2,请清晰地回答问题。
  • 对于练习 3:
    • 清晰地记录你进行的至少两组超参数实验的设置。
    • 记录每组实验的评估结果。
    • 粘贴对应的 TensorBoard 曲线图(可选但推荐)。
    • 进行详细的对比分析,解释超参数变化对结果的影响。
  • 文件命名格式:姓名_学号_Week10_Exercise.xxx
  • 通过教学平台提交。