DQN 进阶Advanced DQN
第 6 章的 DQN 会训练,但还不够好——过估计、低效采样、状态价值共享。本步骤把 Double / Dueling / Prioritized Replay 三个经典改进一次讲透,并在 CartPole 上同场对比。
DQN 进阶 · 交互演示
当前观看:基线 DQN 的 CartPole
四个算法(基线 / +Double / +优先回放 / +Dueling)同时训练、独立探索。下方按钮切换观看对象,学习曲线图始终展示四条曲线。
7.1 DQN 的三大痛点
DQN 能打游戏了,但离「稳定」还很远:Q 值系统性偏高(过估计)、有的经验反复学而重要的经验学不到(采样不均)、状态价值和动作好坏混在一起(学得慢)。三件套改进各治一病:Double 解耦选与评、Dueling 拆开 V 与 A、Prioritized 让重要的经验多学几遍 —— 在 CartPole 上同场对比,各自贡献一目了然。
下一步预告:值方法再强也要靠 argmax 间接出策略;下一章我们绕开 Q 值,用策略梯度直接学策略,并进入现代 RL 的 Actor-Critic / PPO。
📌 发生了什么
- Double DQN 用「主网络选动作、目标网络估值」打破过估计
- Prioritized Replay 按 |TD 误差| 加权采样,高误差经验被优先学习
- Dueling 把 Q 拆成 V(s) + A(s,a),状态价值跨动作共享
- 三者在学习曲线上各自带来可观测的独立贡献
⚠️ 常见陷阱
- 把 Double DQN 当成"两个独立网络"——其实主/目标网络是同一个网络的快慢两份
- 优先回放不重算优先级 → 采样偏置逐渐失真,需定期用新 |δ| 刷新
- 误以为改进越多越好——三者可叠加(Rainbow),但单看一条曲线分不清谁贡献了什么
✅ 本章小结
- 过估计源于 max 对噪声的乐观偏差,Double DQN 用解耦估值消除它
- 优先回放把算力花在"最值得学"的经验上
- Dueling 让价值估计更准、动作优势更聚焦
7.2 过估计从哪来:max 放大噪声
过估计的根源:max 是对含噪声估计的乐观偏差。若 Q 的估计带噪声 ε,则 E[max_a Q(s,a)] ≥ max_a E[Q(s,a)]。
原始 DQN 用目标网络同时完成"选动作"与"估值":max 会放大噪声中的正向误差,Q 值系统性虚高。
7.3 Double DQN:选动作和打分分开
Double DQN 把两步解耦:主网络 θ 决定哪个动作最优,目标网络 θ⁻ 只负责给这个动作估值——动作选择与价值评估互不污染,过估计大幅下降。
7.4 Dueling 与 Prioritized:各补一刀
Dueling:Q(s,a) = V(s) + A(s,a) − mean_a' A(s,a')。共享 V 让不同动作的价值估计相互受益;Prioritized Replay:采样概率 p_i ∝ |δ_i|^α,把梯度步集中在 TD 误差大的经验上。
7.5 三件套超参对比
每个改进各有一个关键旋钮,调错方向反而比基线更差。
| 超参 | 表现 | 结果 |
|---|---|---|
| Double DQN 目标网络同步间隔过短 | 目标随主网络漂移,去耦失效 | 过估计反弹 |
| 优先回放 α = 0 | 退化为均匀采样 | 无增益 |
| 优先回放 α ≈ 0.6 | 高误差经验占比适中 | 推荐 |
| Dueling 去掉 mean 项 | Q = V + A 有可辨识性退化 | 不稳定 |
💡 三者可叠加(Rainbow 同时使用),但单独看时,每个改进都应带来可归因的收益。
7.6 Double DQN 核心代码走读
与 DQN 的唯一区别在目标值:用主网络选动作,用目标网络估值(Python)。
# 主网络 Q(s,a;θ) 与目标网络 Q(s,a;θ⁻)
def train_step(batch):
for s, a, r, s2, done in batch:
if done: y = r; continue
# Double:主网络选最优动作
best_a = argmax(predict(main_net, s2))
# 目标网络只负责估值
y = r + gamma * predict(target_net, s2)[best_a]
# 掩码 MSE:仅更新被选动作
pred = predict(main_net, s)
loss += (y - pred[a]) ** 2 # 只回传动作 a 的梯度
sgd_step(loss, main_net) # 每 C 步同步 θ⁻ ← θ
📚 参考文献与延伸阅读
- van Hasselt, H. et al. (2016), Deep Reinforcement Learning with Double Q-learning, AAAI — Double DQN 原始论文
- Wang, Z. et al. (2016), Dueling Network Architectures for Deep Reinforcement Learning, ICML — Dueling 架构原始论文
- Schaul, T. et al. (2016), Prioritized Experience Replay, ICLR — 优先回放原始论文
- Wikipedia: Double Q-learning — 算法与变体总览
📝 课后练习
检验你的理解——答对为止