跳转至

第 5 章 值函数方法与深度 Q 网络

给定 MDP 后,第一类解法是先估计价值,再按价值选动作。这条路从动态规划出发,经过蒙特卡洛与时序差分,最后落到深度 Q 网络:把表格换成网络,用回放池与目标网络把训练稳住。

1. 动态规划:策略迭代与值迭代

当转移与回报已知,价值可以直接迭代求解。策略评估固定策略 \(\pi\),反复套用 Bellman 期望方程直到收敛:

\[ V_{k+1}(s)=\sum_a\pi(a\mid s)\left[r(s,a)+\gamma\sum_{s'}P(s'\mid s,a)V_k(s')\right] \]

策略改进用评估出的价值对每个状态取贪心动作。评估与改进交替,就是策略迭代;把两者合成一步、直接对价值取 \(\max\),就是值迭代:

\[ V_{k+1}(s)=\max_a\left[r(s,a)+\gamma\sum_{s'}P(s'\mid s,a)V_k(s')\right] \]

两者都依赖第 4 章「马尔可夫决策过程与价值」的压缩性质:每轮误差按 \(\gamma\) 收缩。一轮扫描的代价是 \(O(|\mathcal S|^2|\mathcal A|)\)(转移稠密时),状态数上万就难以承受——这是动态规划在机器人上只用于低维问题的原因。

2. 无模型估计:蒙特卡洛与时序差分

转移未知时,只能从采样里估价值。两种估计的差别在"用多长的未来"。

蒙特卡洛用完整回报当目标:

\[ V(s_t)\leftarrow V(s_t)+\alpha\left[G_t-V(s_t)\right] \]

它无偏,但方差随回合长度增长,而且必须等回合结束才能更新。长回合任务里,一次更新要等几十秒甚至几分钟。

时序差分(temporal difference, TD)只往前看一步,用当前的价值估计补上剩余部分:

\[ V(s_t)\leftarrow V(s_t)+\alpha\left[\underbrace{r_t+\gamma V(s_{t+1})}_{目标}-V(s_t)\right] \]

括号里的差记作 TD 误差 \(\delta_t\)。它引入自举(bootstrapping)——用估计去更新估计——因此有偏,但方差小、可在线更新、不要求回合结束。

估计方式 偏差 方差 更新时机 对初值
蒙特卡洛 无偏 高 回合结束 不敏感
TD(0) 有偏 低 每步 敏感

两端之间有连续的折中:n 步回报看 n 步再自举;TD(\(\lambda\)) 用资格迹把所有权重做指数加权。第 6 章的广义优势估计(generalized advantage estimation, GAE)就是同一思想在优势上的版本。

3. 表格控制:Q-learning 与 SARSA

把评估换成控制,目标从 \(V\) 变成 \(Q\),于是可以直接从价值读出动作。Q-learning 的目标取下一状态的最大动作价值:

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

无论行为策略怎么选,它都在逼近最优动作价值,因此是异策略(off-policy)方法。SARSA 的目标用实际执行的下一个动作:

\[ Q(s,a)\leftarrow Q(s,a)+\alpha\left[r+\gamma Q(s',a')-Q(s,a)\right] \]

它评估的是当前行为策略(含探索噪声)的价值,属于同策略(on-policy)。这个差别在风险敏感的任务上很明显:在悬崖边行走的经典例子里,Q-learning 学到贴崖边的最优路径,SARSA 学到离崖更远的保守路径——因为它把"探索时可能掉下去"算进了价值。

探索由行为策略提供。\(\varepsilon\)-贪心以 \(1-\varepsilon\) 概率选当前最优、以 \(\varepsilon\) 概率随机;\(\varepsilon\) 随训练衰减,并在极限上保证每个动作被无限次尝试(GLIE 条件),表格方法才收敛到最优。

4. 函数逼近与三元困境

状态一多,表格就放不下,于是用参数化函数 \(\hat Q_\theta(s,a)\) 逼近,最小化

\[ \mathcal L(\theta)=\mathbb E\left[\left(y-\hat Q_\theta(s,a)\right)^2\right],\qquad y=r+\gamma\max_{a'}\hat Q_{\theta^-}(s',a') \]

其中 \(y\) 视为常数(不回传梯度),这种更新称半梯度(semi-gradient)。它不再是真正的梯度下降,收敛性没有保证。

Sutton 与 Barto 把失效条件总结为三元困境(deadly triad):函数逼近、自举、异策略三者同时出现时,价值估计可能发散。缺一条则有稳定性保证——表格表示、蒙特卡洛目标、同策略采样分别对应三种"缺一"。DQN 恰好三条全占,它的稳定靠工程手段换来的,不是理论保证。

线性逼近下还有可分析的条件(在策略分布下做投影),非线性网络连这个都失去。实践中的稳定来自三处:目标网络冻结一部分参数、回放池打散相关性、学习率压小。

5. DQN 的四件套

深度 Q 网络(deep Q-network, DQN)在 2015 年把 Q-learning 搬到像素输入上,靠四个部件让它跑得起来:

  • 经验回放:交互存进固定容量的回放池,训练时随机取批。它打断相邻样本的相关性,也让一份数据被多次使用。
  • 目标网络:另存一份参数 \(\theta^-\),每隔若干步同步一次。目标 \(y\) 因此在两次同步之间保持稳定,避免"追自己的尾巴"。
  • \(\varepsilon\)-贪心探索:训练早期大、后期小,保证状态覆盖。
  • 损失与梯度处理:用 Huber 损失(误差大时线性、小时平方),并对梯度做范数裁剪,抑制离群目标造成的突变。

一次更新把上述环节串起来,其中动作选择用在线网络、动作评估用目标网络,即 Double DQN 的写法:

import torch

def dqn_update(batch, online, target, optimizer, gamma=0.99):
    s, a, r, s2, done = batch                        # 每项第一维为批大小 B
    q = online(s).gather(1, a.unsqueeze(1)).squeeze(1)   # Q(s, a)
    with torch.no_grad():
        a2 = online(s2).argmax(dim=1, keepdim=True)       # 在线网络选动作
        q2 = target(s2).gather(1, a2).squeeze(1)          # 目标网络估价值
        y = r + gamma * q2 * (1.0 - done)                 # 终止状态不做自举
    loss = torch.nn.functional.smooth_l1_loss(q, y)
    optimizer.zero_grad()
    loss.backward()
    torch.nn.utils.clip_grad_norm_(online.parameters(), 10.0)
    optimizer.step()

三个常见改进各解决一个问题。Double DQN 修正过估计:\(\max\) 会系统性偏好被高估的动作,把选择与评估拆到两个网络后可缓解。Dueling 把网络拆成状态价值与优势两支,让"很多动作差不多好"的状态学得更快。优先回放按 TD 误差给样本排序,重要样本多采几次,同时用重要性权重修正分布偏差。

flowchart LR
    act["ε-贪心执行"] --> buf["回放池<br/>容量固定、先进先出"]
    buf --> sample["随机取批 B"]
    sample --> online["在线网络 Q_θ"]
    sample --> target["目标网络 Q_θ⁻"]
    online --> loss["Huber 损失<br/>y = r + γ Q_θ⁻(s', a*)"]
    target --> loss
    loss --> step["半梯度更新 θ"]
    step -->|"每 N 步复制"| target

坑:目标网络同步过频

每步都同步目标网络,等于没有目标网络,训练会退化成不稳定的 Q-learning;同步周期过长,目标又跟不上策略,学习变慢。同步间隔与回放池容量一起决定训练的稳定性。

6. 连续动作的边界

DQN 的目标里有一个 \(\max_{a'}\)。离散动作可以枚举,连续动作不行——对 \(\mathbb R^m\) 上的网络做精确最大化没有闭式解。

离散化是最直接的绕法,代价与第 4 章「马尔可夫决策过程与价值」的表格问题同构:\(m\) 维、每维 \(n\) 档就有 \(n^m\) 个动作,六轴机械臂没法这样枚举。近似求解(梯度上升、采样若干候选)可行但每次更新都要多解一个优化问题。

通用做法是再学一个策略网络来近似 \(\arg\max\):演员给候选动作,评论家估它的价值,两者交替优化。这一步跨出值函数方法的边界,进入第 6 章「策略梯度与演员-评论家」与第 7 章「离策略与最大熵方法」的领域。

7. 要点

  • 策略评估与策略改进交替即策略迭代;合成一步即值迭代,收敛速率由 \(\gamma\) 决定。
  • 蒙特卡洛无偏但方差大、需回合结束;TD(0) 有偏但方差小、可在线更新;n 步与 \(\lambda\) 是两端折中。
  • Q-learning 的目标取 \(\max\),异策略;SARSA 的目标取实际动作,同策略;风险敏感任务上行为不同。
  • 函数逼近、自举、异策略三者同时出现可能发散,DQN 三条全占,靠目标网络与回放池工程稳定。
  • DQN 四件套:回放池、目标网络、\(\varepsilon\)-探索、Huber 损失与梯度裁剪;Double、Dueling、优先回放各修一个问题。
  • 连续动作下 \(\max\) 不可枚举,要么再学策略网络近似,要么直接对策略求梯度。

参考文献与延伸阅读

  • Watkins, C. J. C. H., & Dayan, P. Q-Learning. Machine Learning, 1992. DOI
  • Mnih, V., Kavukcuoglu, K., Silver, D., et al. Human-Level Control through Deep Reinforcement Learning. Nature, 2015. DOI
  • van Hasselt, H., Guez, A., & Silver, D. Deep Reinforcement Learning with Double Q-Learning. AAAI, 2016. arXiv
  • Wang, Z., Schaul, T., Hessel, M., et al. Dueling Network Architectures for Deep Reinforcement Learning. ICML, 2016. arXiv
  • Schaul, T., Quan, J., Antonoglou, I., & Silver, D. Prioritized Experience Replay. ICLR, 2016. arXiv