RL-03-06-算法-DQN

← 上级:RL-03.算法分类与选型 · 前置:RL-03-02-算法-Q-Learning · 数据结构:RL-05.专属数据结构

当状态空间高维(如 Atari 像素)时,表格 Q 无法扩展。深度 Q 网络(Deep Q-Network,DQN)用神经网络 $Q_\phi(s,a)$ 逼近动作价值,并引入经验回放目标网络稳定训练(Mnih et al., 2015)。

段末注释:深度 Q 网络(Deep Q-Network,DQN)以深度神经网络参数化 Q 函数,结合经验回放与目标网络;后文沿用 DQN

DQN 架构示意


一、从 Q-Learning 到 DQN

表格更新:

$$
Q(s,a) \leftarrow Q(s,a) + \alpha \left[ r + \gamma \max_{a’} Q(s’,a’) - Q(s,a) \right]
$$

DQN 用网络 $Q_\phi$ 替代表格,最小化 TD 误差平方:

$$
\mathcal{L}(\phi) = \mathbb{E}{(s,a,r,s’) \sim \mathcal{D}} \left[ \left( y - Q\phi(s,a) \right)^2 \right]
$$

其中 TD 目标(用目标网络 $Q_{\bar{\phi}}$):

$$
y = r + \gamma (1-d) \max_{a’} Q_{\bar{\phi}}(s’, a’)
$$

$d$ 为终止标志;$(1-d)$ 防止在终止状态 Bootstrap。


二、三大稳定技巧

技巧 作用
经验回放 $\mathcal{D}$ 打破样本相关性,重复利用数据
目标网络 $Q_{\bar{\phi}}$ 固定 TD 目标,减少追逐移动目标
$\varepsilon$-greedy 持续探索

2.1 目标网络更新

  • Hard update:每 $C$ 步 $\bar{\phi} \leftarrow \phi$
  • Soft update(Polyak):$\bar{\phi} \leftarrow \tau \phi + (1-\tau) \bar{\phi}$,常用 $\tau=0.005$

2.2 经验回放

从 Buffer 均匀采样 mini-batch;字段 $(s,a,r,s’,done)$ 见 RL-05 Replay Buffer


三、网络结构(Atari 例)

  1. 输入:$84 \times 84 \times 4$ 灰度帧堆叠
  2. 3 层卷积 + ReLU
  3. 全连接 → 输出 $|A|$ 维 Q 值(每动作一个标量)

选动作:$a = \arg\max_a Q_\phi(s,a)$(推理时)。


四、训练流程

  1. 初始化 $Q_\phi$、$Q_{\bar{\phi}}$($\bar{\phi} \leftarrow \phi$)、空 Replay
  2. 环境交互得 $(s,a,r,s’,d)$,存入 Replay
  3. 若 $|Replay| > \text{warmup}$:采样 batch,算 $\mathcal{L}$,梯度下降更新 $\phi$
  4. 每 $C$ 步同步 $\bar{\phi}$
  5. 重复至收敛

实现要点见 RL-04.实现框架与实践


五、伪代码(核心)

1
2
3
4
5
6
7
8
9
10
# sample batch from replay
s, a, r, s_next, done = replay.sample(batch_size)
with torch.no_grad():
q_next = target_net(s_next).max(dim=1).values
y = r + gamma * (1 - done) * q_next
q_sa = online_net(s).gather(1, a.unsqueeze(1)).squeeze(1)
loss = F.mse_loss(q_sa, y)
optimizer.zero_grad()
loss.backward()
optimizer.step()

六、超参数(Atari 量级参考)

超参 典型值
Replay 容量 $10^6$
Batch 32
$\gamma$ 0.99
学习率 $2.5 \times 10^{-4}$(RMSprop/Adam)
目标网络周期 $C$ 1000 ~ 10000 步
$\varepsilon$ 1.0 → 0.1,前 $10^6$ 步线性衰减
Frame skip 4(Atari)

七、已知问题

问题 说明
Q 过估计 $\max$ 算子 + 函数逼近导致乐观偏差 → Double DQN
连续动作 $\max_{a’} Q(s’,a’)$ 难算 → DDPG / SAC
样本效率 纯 DQN 仍需大量交互

改进见 RL-03-07-算法-DQN变体


八、小结

  • DQN = Q-Learning + 神经网络 + Replay + 目标网络
  • 损失 = MSE$(Q_\phi(s,a), ; r + \gamma \max Q_{\bar{\phi}}(s’,\cdot))$。
  • 下一篇:DQN 变体
-------------本文结束感谢您的阅读-------------