

前言#
需要说明的是,这个系列的博客是由我的幕布笔记转化而来,如果你更喜欢图文并茂的阅读,你可以去我的幕布空间进行阅读,受限于篇幅的原因,第十二章幕布笔记在这。如果你发现有哪些地方由逻辑错误,可以通过评论告知我,十分感谢!
开始#
DQN 跑起来之后,你很快会遇到一种“很烦的稳定性”:
- reward 上来一点又掉回去;
- Q 值看起来越来越大,但表现没有变好;
- 训练特别慢,像在原地打转。
这时你去翻论文和代码库,就会看到一堆 DQN 变形:DDQN、Dueling、PER、NoisyNet……
我强烈建议不要把它们当作“背名词”,而是像文档那样抓住它们要解决的问题:每一个技巧都对应一个具体痛点。
1) Double DQN:解决 Q 值过估计#
文档直接点出第一个问题:Q 值总是被高估。
原因很直觉:你用同一个网络既选动作又估计价值,于是噪声会被 max 操作放大。
Double DQN 的做法:
- 用 online network 选动作:
- 用 target network 估值:
这样“选”与“评”分开,过估计会明显缓解。
2) Dueling DQN:把表示能力花在刀刃上#
文档描述 Dueling 的结构:不直接输出 ,而是分两条路径:
- :状态本身值不值钱
- :在这个状态下某个动作相对好多少
再组合成 。
直觉:在很多状态下,动作差异不大,但状态好坏差异很大;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)。