Xiaohei's Blog
headpicBlur image

前言#

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

开始#

表格型 Q-learning 很美,但它有一个致命前提:Q(s,a)Q(s,a) 能用表存下来。

一旦状态是图像、连续向量,或者组合爆炸,表格法就直接破产。DQN 的思路很简单:

用神经网络来近似 Q(s,a)Q(s,a)

但你真写起来会发现:把监督学习那套直接套过来,会非常不稳定。文档提到 DQN 的两大关键工程件:

  • 目标网络(target network)
  • 经验回放(experience replay)

这俩几乎就是 DQN 能跑起来的原因。

DQN 是什么:深度版 Q-learning#

文档里给的定义很标准:DQN 是基于深度学习的 Q-learning,结合价值函数近似与神经网络技术。

我们仍然在学 Q(s,a)Q(s,a),仍然会用贪心或 ε-greedy 选动作:

at=argmaxaQθ(st,a)a_t = \arg\max_a Q_\theta(s_t, a)

差别是 QQ 现在不再是表格,而是网络 QθQ_\theta

为什么会不稳定:自举 + 非独立样本 + 移动目标#

DQN 的训练目标通常是 TD target:

yt=rt+1+γmaxaQθ(st+1,a)y_t = r_{t+1} + \gamma \max_{a'} Q_{\theta^-}(s_{t+1}, a')

如果你用同一个网络同时:

  • 预测 QθQ_\theta
  • 产生 target yty_t

那 target 会跟着你训练一起跑(移动目标),很容易发散。

目标网络(Target Network)#

文档提到用目标网络训练,这是第一个稳定性补丁:

  • online network:QθQ_\theta
  • target network:QθQ_{\theta^-}(参数延迟拷贝)

常见做法:

  • 每隔 N 步把 θ\theta 复制给 θ\theta^-
  • 或者做 soft update(更平滑)

经验回放(Replay Buffer)#

文档说“经历回放”,它解决的是:样本是序列相关的,直接在线更新会让梯度很偏。

Replay Buffer 的作用:

一方面,它通过随机采样 mini-batch 打破序列相关性,让梯度更像在做“近似 i.i.d.”的监督学习;另一方面,它可以反复使用同一条经验,提高样本利用率——这在环境交互昂贵的时候尤其关键。

工程经验:

  • buffer 太小会过拟合最近经验
  • buffer 太大又会“太离线”,学习变慢

DQN 的训练循环(伪代码)#

你可以把它当成三件事的循环:采样、存、学。

  1. 用 ε-greedy 从 QθQ_\theta 选动作
  2. 与环境交互得 (s,a,r,s,done)(s,a,r,s',done)
  3. 存入 replay buffer
  4. 从 buffer 采样 batch,构造 TD target,用 MSE 回归 Qθ(s,a)Q_\theta(s,a)

本章小结:DQN 是“稳定性工程”的开端#

从这一章开始你会发现:深度 RL 的很多算法创新,本质都是在处理同一个难题——训练不稳定

下一章我们继续沿着 DQN 往前走:Double / Dueling / PER / NoisyNet……这些“变形”每一个都在对着一个具体痛点开刀。

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