Xiaohei's Blog
headpicBlur image

前言#

需要说明的是,这个系列的博客是由我的幕布笔记转化而来,如果你更喜欢图文并茂的阅读,你可以去我的幕布空间进行阅读,受限于篇幅的原因,第十二章幕布笔记在这。如果你发现有哪些地方由逻辑错误,可以通过评论告知我,十分感谢!

开始#

DQN 跑起来之后,你很快会遇到一种“很烦的稳定性”:

  • reward 上来一点又掉回去;
  • Q 值看起来越来越大,但表现没有变好;
  • 训练特别慢,像在原地打转。

这时你去翻论文和代码库,就会看到一堆 DQN 变形:DDQN、Dueling、PER、NoisyNet……

我强烈建议不要把它们当作“背名词”,而是像文档那样抓住它们要解决的问题:每一个技巧都对应一个具体痛点

1) Double DQN:解决 Q 值过估计#

文档直接点出第一个问题:Q 值总是被高估。

原因很直觉:你用同一个网络既选动作又估计价值,于是噪声会被 max 操作放大。

Double DQN 的做法:

  • 用 online network 选动作:a=argmaxaQθ(s,a)a^* = \arg\max_a Q_\theta(s',a)
  • 用 target network 估值:Qθ(s,a)Q_{\theta^-}(s', a^*)

这样“选”与“评”分开,过估计会明显缓解。

2) Dueling DQN:把表示能力花在刀刃上#

文档描述 Dueling 的结构:不直接输出 QQ,而是分两条路径:

  • V(s)V(s):状态本身值不值钱
  • A(s,a)A(s,a):在这个状态下某个动作相对好多少

再组合成 Q(s,a)Q(s,a)

直觉:在很多状态下,动作差异不大,但状态好坏差异很大;Dueling 能更高效地学到“状态价值”。

3) Prioritized Experience Replay(PER):把学习预算花在“最有用”的样本上#

普通 replay buffer 是均匀采样,但很多样本其实没信息量。

PER 的核心思想:

  • TD error 大的样本更值得学
  • 多学这些样本,收敛更快

当然它也引入偏差,通常会配重要性采样权重来修正。

4) NoisyNet:比 ε-greedy 更细腻的探索#

文档提到噪声网络:在参数空间上加噪声,以改进探索。

它的优点是:

  • 探索是状态相关的
  • 不需要手动设计 ε 衰减曲线

直觉:与其“偶尔随机一下动作”,不如让策略本身带一点随机性。

本章小结:技巧的顺序建议#

如果你在项目里想逐步把这些技巧加进去,我更推荐一种“先堵大洞,再追上限”的节奏:Double DQN 几乎是必选项,因为它对过估计的缓解往往是立刻可见的;Dueling 通常改动不大、收益还算稳定,可以作为第二步;PER 的收益可能很大,但它确实更敏感,最好在基础版本已经稳定后再引入;NoisyNet 则更像探索维度的升级,尤其在探索特别困难的任务里会更有价值。

下一章我们会面对一个更棘手的问题:动作是连续的。你会发现 DQN 的“max over actions”在连续动作下几乎不可用,于是要么用采样/优化近似,要么干脆换一条路线(Actor-Critic)。

RL 学习笔记(7):DQN 进阶
https://xiaohei-blog.vercel.app/blog/rl-learning-7
Author 红鼻子小黑
Published at May 8, 2025
Comment seems to stuck. Try to refresh?✨