函数逼近 · 深度学习
深度 Q 网络入门Intro to Deep Q-Networks
状态太多表格存不下时,用神经网络逼近 Q 函数。经验回放 + 目标网络 —— RL 与深度学习的第一次握手。
3.5h
阅读 + 实操
3 个
交互演示
高阶
难度
深度 Q 网络 · 交互演示
Q 误差0.07
回放池10k
Ep240
6.1 状态太多,表格装不下
前面的方法都靠表格存 Q 值 —— 但想象用像素打游戏:光是 210×160 的画面就有天文数字个状态,表格永远写不下。DQN 的答案是:用神经网络当「万能估值器」,输入状态、输出所有动作的 Q 值。为了让这不稳定的组合收敛,经验回放和目标网络两件套登场 —— 这也是 RL 与深度学习正式交汇的历史时刻。
下一步预告:DQN 学 Q 值、再用 argmax 间接得到策略;下一章绕开 Q 值,用策略梯度直接学策略,完成「学价值」到「学策略」的范式转换。
📌 发生了什么
- 用神经网络近似 Q(s,a),告别 Q 表
- 经验回放:把转移存池、随机采样,打破时序相关
- 目标网络:用较慢更新的副本算目标,抑制震荡
- 端到端从像素学到动作
⚠️ 常见陷阱
- 没有回放/目标网络时 Q 值容易发散
- 奖励缩放不当会让梯度爆炸
- ε 探索在连续动作空间仍不够高效
✅ 本章小结
- DQN = Q-Learning + 神经网络 + 两大稳定技巧
- 回放与目标网络是工程关键
- 打通了 RL 与深度学习的任督二脉
6.2 目标值 y:用目标网络算
DQN 用神经网络近似 Q(s,a;θ),把 Q-Learning 的表格更新变成梯度下降。
目标值 y:用目标网络 θ⁻ 计算下一状态的最优 Q。目标网络是主网络的延迟副本,稳定训练。
6.3 损失函数:让预测逼近目标
损失函数:目标 y 与当前预测 Q(s,a;θ) 的均方误差,期望在经验回放池 D 上采样计算。
6.4 稳定训练两件套:回放 + 目标网络
梯度下降更新主网络参数 θ。经验回放打破样本相关性,目标网络固定目标,二者共同解决 Q-Learning + 神经网络的不稳定问题。
6.5 防发散配置对比
经验回放大小与目标网络更新频率是 DQN 两大稳定器。
| 超参 | 表现 | 结果 |
|---|---|---|
| 回放池 = 1e3 | 样本快速遗忘,相关性强 | 易发散 |
| 回放池 = 1e4 | 样本多样且去相关 | 推荐 |
| 目标网络每 1e3 步更新 | 目标足够稳定,又不致过时 | 稳定收敛 |
💡 经验回放 + 目标网络是 DQN 区别于表格 Q-Learning 的两大关键,缺一不可。
6.6 DQN 训练步骤走读
从回放池采样 mini-batch,对主网络做一步梯度下降(Python):
# 主网络 Q(s,a;θ) 与目标网络 Q(s,a;θ⁻)
def train_step():
batch = sample(replay_buffer, 64) # 随机采样
for s, a, r, s2, done in batch:
# 目标值:done 时无后续
max_next = 0 if done else max_a(predict(target_net, s2))
y = r + gamma * max_next
# 对主网络做一步梯度下降
pred = predict(main_net, s)[a]
loss = (y - pred) ** 2
gradient_step(main_net, loss) # θ ← θ - η∇L
# 每 C 步把主网络权重复制给目标网络
if step % C == 0: target_net = copy(main_net)
📚 参考文献与延伸阅读
- Mnih et al. (2015), Human-level control through deep reinforcement learning, Nature 518 — DQN 经验回放 + 目标网络的原始论文
- Sutton & Barto, Reinforcement Learning (2nd ed.), §16 Applications — Deep RL 综述
- Wikipedia: Deep Q-learning — DQN 架构与变体(Double/Dueling)
📝 课后练习
检验你的理解——答对为止