跳转至

十二:强化学习:Q-learning、Dyna-Q 与 DQN

来源:http://mp.weixin.qq.com/s?__biz=MzYyNTk3Njg1NA==&mid=2247483936&idx=1&sn=77e7cfef0eaa8d3954de8027088730ab&chksm=f01eb159c769384f1a1dc8a6a12ba993d928f127c768b15a98f1d7ee7c01c269d3806375bcd5#rd

1. 学习定位

第十一天已经学习了 Sarsa 与多步 Sarsa。第十二天继续强化学习值函数方法,从表格型 Q-learning 过渡到函数近似,再进入 DQN(Deep Q-Network)。 本日知识链路:

Sarsa: on-policy TD control
-> Q-learning: off-policy TD control
-> Dyna-Q: real experience + learned model planning
-> function approximation: 用参数模型近似 Q(s,a)
-> DQN: 用深度神经网络近似 Q 函数
-> experience replay + target network 稳定训练
-> Double DQN / Dueling DQN / PER / Rainbow 等改进
DQN 是深度强化学习的标志性方法之一。面试中通常不会只问“公式是什么”,还会追问:为什么直接把 Q-learning 接上神经网络会不稳定,experience replay 和 target network 分别解决什么问题,DQN 的输入输出怎么设计,以及 Double DQN、Dueling DQN、优先经验回放等改进的动机。

2. Q-learning

Q-learning 是 off-policy TD control。它用行为策略采样数据,但学习目标是贪心目标策略。 更新公式:

Q(S_t,A_t) <- Q(S_t,A_t)
  + alpha [R_{t+1} + gamma max_a Q(S_{t+1},a) - Q(S_t,A_t)]

img

TD target:

y_t = R_{t+1} + gamma max_a Q(S_{t+1},a)
TD error:

delta_t = y_t - Q(S_t,A_t)

img

Sarsa 与 Q-learning 的关键区别:

Sarsa target:
  R + gamma Q(S', A')
  A' 是行为策略实际采样动作

Q-learning target:
  R + gamma max_a Q(S', a)
  使用下一状态的贪心动作
因此 Sarsa 是 on-policy,Q-learning 是 off-policy。 算法 TD 目标形式 下一动作来源 策略类型 特点 Sarsa R+γQ(S′,A′)实际采样A′ on-policy 保守、规避危险路径 Q-learning R+γmaxaQ(S′,a)全局最优贪心动作 off-policy 激进,直接学最优策略

3. Dyna-Q 的基本思想

Dyna-Q 把 model-free learning 和 model-based planning 结合起来。智能体每次真实交互后,做两件事:

1. 用真实 transition 更新 Q。
2. 用真实 transition 更新环境模型。
3. 从模型中采样过去的 state-action,生成模拟 transition,再额外更新 Q。
简化流程:

observe real transition (S,A,R,S')
Q-learning update using real transition
Model(S,A) <- (R,S')

repeat n times:
  sample previously observed (S,A)
  get simulated (R,S') from Model
  Q-learning update using simulated transition
Dyna-Q 的意义是:真实环境交互昂贵时,利用学习到的模型做 planning,提高样本效率。 - 真实交互更新 Q 和模型 - 模型生成虚拟经验加速学习

4. 表格方法(代表算法:Q-learning、Sarsa、Dyna-Q)的局限

表格型方法为每个状态动作对存一个数:

Q table shape = [num_states, num_actions]
局限: - 状态空间巨大时无法存储。

  • 连续状态无法直接查表。

  • 从未访问过的状态动作对没有泛化能力。

  • 图像、文本、传感器数据等高维观测不能直接作为表格索引。

因此需要函数近似:

Q(s,a) ≈ Q(s,a; w)
其中 w 是可学习参数,可以是线性模型、决策树、神经网络或深度网络。

5. 函数近似的 Q 学习

用参数模型近似 Q 函数后,一次 TD 更新可以写成监督学习形式:

target y = r + gamma max_a' Q(s',a'; w)
prediction = Q(s,a; w)
loss = 1/2 * (y - prediction)^2

img

半梯度更新:

w <- w + alpha [y - Q(s,a;w)] grad_w Q(s,a;w)
称为 semi-gradient,是因为 target 里也含有当前参数 w,但更新时通常只对 prediction 求梯度,不对 target 反传。

img

函数近似带来泛化能力,但也带来不稳定性。尤其是 off-policy、bootstrapping、function approximation 同时出现时,训练可能发散,这被称为 deadly triad。

6. DQN 的核心定义

DQN 用深度神经网络近似动作价值函数:

Q(s,a; theta)
经典 Atari DQN 中:

input:
  多帧游戏画面堆叠,例如 84 x 84 x 4

network:
  CNN feature extractor + MLP

output:
  每个离散动作对应一个 Q 值
  shape = [num_actions]
DQN 适合离散动作空间。如果动作连续,不能直接对所有动作取 max_a Q(s,a),通常需要 DDPG、SAC 等连续控制算法。

7. DQN 损失函数

DQN 的目标是最小化 TD target 和当前 Q 预测之间的差。 使用 target network theta^- 时:

y = r + gamma * max_a' Q(s', a'; theta^-)
如果 done=True

y = r

img

损失函数:

L(theta) = E[(y - Q(s,a;theta))^2]

img

这就是均方误差损失(MSE)。常用 Huber loss 替代 MSE,以降低异常 TD error 对训练的冲击。

8. Experience Replay经验回放

Experience replay 维护一个 replay buffer:

D = {(s,a,r,s',done)}
每次和环境交互得到的经验先存起来,训练时不只用最新 transition,而是从 buffer 中随机采样 minibatch 更新网络。 作用: - 打破连续样本之间的强相关性。

  • 提高样本利用率。

  • 让训练数据分布更平滑。

  • 允许多次复用过去经验。

Replay buffer 也有代价:样本可能过旧,off-policy 偏差更明显;buffer 太小会相关性强,太大可能包含过时策略数据。

9. Target Network

如果 target 和 prediction 都使用同一个网络,target 会随着参数更新同时移动,训练容易震荡:

y = r + gamma max_a' Q(s',a';theta)
DQN 使用 target network:

online network: theta
target network: theta^-

img

target network 每隔若干步从 online network 复制参数:

theta^- <- theta
或者使用 soft update:

theta^- <- tau theta + (1 - tau) theta^-
作用是让 TD target 更稳定。

10. DQN 训练流程

典型流程:

initialize online Q network theta
initialize target Q network theta^- = theta
initialize replay buffer D

for each environment step:
  choose action using epsilon-greedy(Q_theta)
  execute action, observe r, s', done
  store (s,a,r,s',done) in D

  sample minibatch from D
  y = r + gamma * (1-done) * max_a' Q(s',a';theta^-)
  minimize loss (y - Q(s,a;theta))^2

  periodically update theta^- <- theta
实际训练还会使用 frame stacking、reward clipping、gradient clipping、learning rate schedule、epsilon schedule 等工程设置。

11. DQN 与监督学习的关系

DQN 的单步更新看起来像监督学习:

input: state s
label: TD target y
prediction: Q(s,a;theta)
loss: prediction 与 y 的差
但它不是普通监督学习,原因是: - label 是 bootstrap target,由模型自身估计生成。

  • 数据分布由当前策略和 replay buffer 决定。

  • target 会随参数和策略变化而变化。

  • 探索策略会影响训练数据覆盖。

因此 DQN 的训练稳定性比普通监督学习更敏感。

12. Double DQN

标准 DQN 的 target 使用同一个 target network 完成动作选择和动作评估:

y = r + gamma max_a Q(s',a;theta^-)

img

max 操作容易带来过估计,因为噪声较大的动作可能被选中。 Double DQN 解耦动作选择和动作评估:

a* = argmax_a Q(s',a;theta)
y = r + gamma Q(s',a*;theta^-)

img

online network 选择动作,target network 评估该动作,从而缓解 Q 值过估计。

13. Dueling DQN

Dueling DQN 把 Q 值拆成状态价值和优势函数:

Q(s,a) = V(s) + A(s,a)

img

为了避免 VA 不可辨识,常用聚合方式:

Q(s,a) = V(s) + A(s,a) - mean_a A(s,a)

img

直觉:在很多状态下,知道“这个状态整体好不好”比精细区分每个动作更重要。Dueling 结构可以更有效地学习状态价值,尤其在动作之间差异不明显时有帮助。

14. Prioritized Experience Replay PER 优先回放

普通 replay buffer 均匀采样。Prioritized Experience Replay(PER)让 TD error 大的样本更可能被采样:

p_i ∝ |delta_i| + epsilon
P(i) = p_i^alpha / sum_k p_k^alpha

img

为了修正非均匀采样带来的偏差,使用 importance sampling weight:

w_i = (1 / (N * P(i)))^beta

img

PER 能更频繁学习“当前模型误差大”的样本,但也可能放大噪声样本。

15. Rainbow DQN 的常见组件

Rainbow DQN 把多种 DQN 改进组合起来: - Double DQN:减少过估计。

  • Dueling network:分离状态价值和优势。

  • Prioritized replay:优先学习高 TD error 样本。

  • Multi-step return:加快奖励传播。

  • Distributional RL:学习回报分布而不只是期望。

  • Noisy Nets:用参数噪声改进探索。

面试中不一定要推导 Rainbow,但要能说出每个组件解决的问题。

16. 实现细节与排错

常见实现要点:

Q_values = q_net(states)             # [batch, num_actions]
Q_sa = Q_values.gather(1, actions)   # [batch, 1]

with no_grad:
  next_Q = target_net(next_states).max(dim=1)
  y = rewards + gamma * (1-dones) * next_Q
容易出错的地方: - done=True 时没有去掉 bootstrap。

  • actions shape 不对,gather 取错维度。

  • target network 没有冻结梯度。

  • replay buffer 初始样本太少就训练。

  • epsilon 衰减过快导致探索不足。

  • Q 值尺度爆炸导致 loss 不稳定。

  • evaluation 时仍然使用高 epsilon。

17. DQN 的局限

DQN 的局限包括: - 主要适合离散动作空间。

  • 对超参数和奖励尺度敏感。

  • 样本效率仍然不高。

  • off-policy + bootstrapping + function approximation 组合可能不稳定。

  • 对部分可观测任务,需要帧堆叠、RNN 或记忆机制。

  • 在复杂文本/Agent 场景中,动作空间和状态空间远超 Atari。

18. 与 LLM、RLHF、Agent 的联系

DQN 本身不是 LLM RLHF 的主流算法,但它提供了重要思想: - 用神经网络近似价值函数。

  • 用 replay buffer 提高样本利用率。

  • 用 target network 稳定 bootstrap target。

  • 用 Double/Dueling/PER 等技术处理估计偏差和训练效率。

在 Agent 场景中,如果高层动作是有限工具集合,理论上可以用 DQN 类方法学习工具选择策略。但真实系统通常还要处理巨大状态、非平稳用户、稀疏奖励和安全约束。

19. 核心总结

第十二天需要掌握的最小闭环:

Q-learning:
  target = r + gamma max_a Q(s',a)
  off-policy TD control

Dyna-Q:
  real experience update + learned model planning update

Function Approximation:
  Q(s,a) ≈ Q(s,a;theta)

DQN:
  neural network approximates Q
  output one Q value per discrete action
  loss = TD target - Q prediction

Stabilization:
  experience replay: reduce sample correlation, reuse data
  target network: stabilize bootstrap target

Improvements:
  Double DQN: reduce overestimation
  Dueling DQN: V/A decomposition
  PER: sample important transitions more often
  Rainbow: combine major DQN improvements

20. 参考资料

  • CSDN:函数估计的强化学习方法讲解:https://blog.csdn.net/qq_64671439/article/details/136629758

  • 动手学强化学习:Dyna-Q 算法:http://hrl.boyuai.com/chapter/1/dyna-q%E7%AE%97%E6%B3%95/

  • 动手学强化学习:DQN 算法:http://hrl.boyuai.com/chapter/2/dqn%E7%AE%97%E6%B3%95/

  • 动手学强化学习:DQN 改进算法:http://hrl.boyuai.com/chapter/2/dqn%E6%94%B9%E8%BF%9B%E7%AE%97%E6%B3%95/

  • Playing Atari with Deep Reinforcement Learning:https://arxiv.org/abs/1312.5602

  • Human-level control through deep reinforcement learning:https://www.nature.com/articles/nature14236

  • Deep Reinforcement Learning with Double Q-learning:https://arxiv.org/abs/1509.06461

  • Prioritized Experience Replay:https://arxiv.org/abs/1511.05952

  • Dueling Network Architectures for Deep Reinforcement Learning:https://arxiv.org/abs/1511.06581

  • Rainbow: Combining Improvements in Deep Reinforcement Learning:https://arxiv.org/abs/1710.02298

            预览时标签不可点
    

    <div class="