RL ML Learning Lab
06 / 13
函数逼近 · 深度学习

深度 Q 网络入门Intro to Deep Q-Networks

状态太多表格存不下时,用神经网络逼近 Q 函数。经验回放 + 目标网络 —— RL 与深度学习的第一次握手。

3.5h
阅读 + 实操
3 个
交互演示
高阶
难度

深度 Q 网络 · 交互演示

Q 误差0.07
回放池10k
Ep240
ε 探索率 1.00
速度 33步/秒
学习率 0.001

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)

📝 课后练习

检验你的理解——答对为止