Skip to content

价值学习:从动态规划到 DQN

本页速览 价值学习的完整脉络:策略评估与策略改进、值迭代;蒙特卡洛与时序差分 TD(0);SARSA 与 Q-learning 的同异;DQN 家族的工程技巧(回放、目标网络、Double、Dueling、Rainbow)。

价值学习:从动态规划到 DQN ​

一句话定位:这一页讲清楚价值学习(Value-based RL)的完整脉络——先学"价值函数"(V 或 Q),再从价值导出策略;从模型已知的动态规划,到无模型的蒙特卡洛与时序差分,再到深度时代的 DQN 家族;读完后你能手写 Q-learning 表格算法、解释 TD 误差,并说清 DQN 的每一项工程技巧为什么必要。

一、价值学习的总思路:学 Q,再从 Q 导出策略 ​

1. 核心逻辑链 ​

价值学习的思想极其朴素,只有三步:

text
价值学习三步走
─────────────────────────────────────────────
第一步:学一个价值函数 Q(s,a)("每个动作值多少")
第二步:策略 = argmax_a Q(s,a)("选最值的动作")
第三步:用 (s, r, s') 的经验不断改进 Q
─────────────────────────────────────────────

也就是说,价值函数是主角,策略是配角(由 Q 自动导出)。这与策略梯度方法正好相反——那边直接学策略,价值是配角(甚至没有)。

2. 学 Q 就是解贝尔曼方程 ​

回顾马尔可夫决策过程(MDP)页的贝尔曼最优方程:

$$ Q^(s,a) = \sum_{s'} P(s' \mid s,a) \left[ R(s,a,s') + \gamma \max_{a'} Q^(s', a') \right] $$

价值学习的全部历史,就是**"如何解这个方程"的不同算法**。按"解方程时用了多少信息",依次是:

时代用什么信息代表方法
动态规划完整模型 P、R策略迭代、值迭代
采样时代与环境交互的样本MC、TD(0)、SARSA、Q-learning
深度时代样本 + 神经网络DQN 及家族

二、模型已知时:动态规划(DP) ​

1. 策略迭代:评估 → 改进 → 评估 → 改进 ​

策略迭代(policy iteration) 分两步交替进行:

text
     ┌─────────────┐        ┌──────────────┐
     │  策略评估    │        │  策略改进     │
     │ 求 V^π       │ ─────▶ │ π' = greedy  │
     │ (贝尔曼方程  │        │ (对 V^π 取   │
     │  迭代求解)   │ ◀───── │  argmax)     │
     └─────────────┘        └──────────────┘
            ▲                     │
            └─────────直到策略不再变化──────┘
  • 策略评估(policy evaluation):给定策略 π,用贝尔曼方程迭代求 $V^\pi$:

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

  • 策略改进(policy improvement):有了 $V^\pi$,把策略改成"贪婪于价值":

$$ \pi'(s) = \arg\max_a \sum_{s'} P(s'|s,a) [R + \gamma V^\pi(s')] $$

策略改进定理保证:新策略 π' 一定不比 π 差。重复直到不动点 → 最优策略。

2. 值迭代:评估和改进合并成一步 ​

值迭代(value iteration) 把"评估到收敛"这一步砍掉,每轮只做一次贝尔曼最优方程更新:

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

直觉:值迭代是"边评估边改进"——价值每更新一次,策略隐含地也换一次。

3. 策略迭代 vs 值迭代 ​

维度策略迭代值迭代
每轮做什么完整评估 + 一次改进一次贝尔曼更新(隐含改进)
迭代轮数少(但每轮贵)多(但每轮便宜)
收敛速度通常更快较慢,需要很多轮
适用状态少、模型精确同上

DP 的现实意义

真实问题没有完美模型,DP 很少直接用于实战。但它是所有价值学习的理论基线:Q-learning 是"用采样替代 DP 中的求和",DDPG/SAC 的 target 计算本质是"一次贝尔曼备份"。理解 DP 才能理解后续所有"近似"做了什么、丢了什么。

三、模型未知时:蒙特卡洛(MC)与时序差分(TD) ​

现实中拿不到 $P$ 和 $R$,但智能体可以与环境交互采样。用样本代替模型,就是 MC 和 TD。

1. MC:跑完一整局再回头算价值 ​

蒙特卡洛法的直觉:"这个状态值多少?多玩几局,看看从这个状态出发平均赢多少。"

对每一条完整轨迹 ${s_0,a_0,r_1,s_1,\dots,r_T}$,计算每个访问过状态的回报 $G_t = r_{t+1}+\gamma r_{t+2}+\cdots$,然后对 $V(s_t)$ 做平均:

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

特性:无偏($G_t$ 是真实回报的样本均值)、方差大(一条轨迹运气成分大)、必须等回合结束才能更新(episodic 限定)。

2. TD:走一步就更新(自举) ​

时序差分(Temporal Difference, TD)的直觉:"我不用等到结局。走一步看看实际发生了什么,用'这一步的经验 + 对下一步的估计'来修正当前估计。"

$$ V(s_t) \leftarrow V(s_t) + \alpha \left[ r_{t+1} + \gamma V(s_{t+1}) - V(s_t) \right] $$

括号里的东西就是TD 误差(TD error):

$$ \delta_t = r_{t+1} + \gamma V(s_{t+1}) - V(s_t) $$

直觉:$\delta_t$ 度量"我原本以为状态 s_t 值 $V(s_t)$,但实际走一步后发现应该值 $r_{t+1} + \gamma V(s_{t+1})$"——两者的差就是修正方向。TD 误差为正是"比预期好",为负是"比预期差"。

3. MC vs TD 对比 ​

维度MCTD(0)
更新时机回合结束每步
偏差无偏有偏(依赖 $V(s_{t+1})$ 的当前估计)
方差大(整条轨迹的运气都算进去)小(只引入一步随机性)
需要回合结束是否(支持持续式任务)
是否自举(bootstrap)否是
收敛特性样本内一定收敛表格下收敛到 MDP 价值

面试必答:"MC 和 TD 各有什么毛病"

  • MC:方差大——同一条轨迹既包含"策略好"也包含"运气好",无法区分;
  • TD:有偏——$V(s_{t+1})$ 一开始是错的,这个错会被"自举"传播;
  • 折衷是 TD(λ)/GAE:用"多步回报"在这两者之间滑动(见策略梯度方法的 GAE 一节)。

四、SARSA 与 Q-learning:on-policy 与 off-policy 的分水岭 ​

TD 思想用在动作价值上,派生出两个经典算法——它们只在更新公式里的一个位置不同,却代表了 RL 最重要的概念分野。

1. Q-learning(off-policy):学"最优",用"次优"的行为 ​

$$ Q(s_t, a_t) \leftarrow Q(s_t, a_t) + \alpha \left[ r_{t+1} + \gamma \max_{a'} Q(s_{t+1}, a') - Q(s_t, a_t) \right] $$

关键在 $\max_{a'}$:更新时用的是"下一步的最优动作"的 Q,而不管实际下一步真的做了什么动作。也就是说:

  • 行为策略(behavior policy):ε-greedy,负责与环境交互、产生数据;
  • 目标策略(target policy):贪婪,负责定义"要学的最优策略"。

两者可以不一样 → off-policy(离策略)。

2. SARSA(on-policy):学"我正在用的策略" ​

$$ Q(s_t, a_t) \leftarrow Q(s_t, a_t) + \alpha \left[ r_{t+1} + \gamma Q(s_{t+1}, a_{t+1}) - Q(s_t, a_t) \right] $$

区别只有一个:把 $\max_{a'} Q(s_{t+1}, a')$ 换成 $Q(s_{t+1}, a_{t+1})$——用实际采取的下一步动作的价值。SARSA 学的是"包含探索在内的当前策略"的价值 → on-policy(在策略)。

维度SARSAQ-learning
全称State-Action-Reward-State-Action(无缩写的缩写)
更新用实际动作 $a_{t+1}$ 的 Q最优动作 $\max_{a'}$ 的 Q
on/off-policyon-policyoff-policy
探索敏感性害怕悬崖:把 ε 探索的代价算进价值无视探索:学纯最优策略
收敛收敛到"ε-greedy 策略"的价值收敛到最优策略的价值

3. 悬崖行走的经典故事:SARSA 更"怂"但更安全 ​

Sutton & Barto 的悬崖行走(Cliff Walking)例子:从起点到终点,紧贴悬崖的路线最短但有掉下去的风险。

  • Q-learning:学的是"每一步都走最优"的价值 → 贴悬崖走,因为最优策略本来就走最短路线;但训练期间 ε-greedy 有概率掉下悬崖 → 表现波动大;
  • SARSA:把"探索时会摔下去"也算进了价值 → 学会离悬崖远一点走 → 训练过程更稳。

工程启示

在训练期间要控制风险的系统(真实机器人、资金交易)里,on-policy 的"保守"是优点;在离线学一个最终策略(比如先训练后上线)的场景里,off-policy 的"大胆"更合适。没有绝对好坏,只有策略与部署是否匹配。

4. Q-learning 表格算法伪代码 ​

python
# Q-learning 表格版
def q_learning(env, episodes, alpha=0.1, gamma=0.99, eps=0.1):
    Q = defaultdict(lambda: zeros(n_actions))   # 初始 Q 全 0
    for _ in range(episodes):
        s = env.reset()
        done = False
        while not done:
            a = eps_greedy(Q, s, eps)           # 行为策略:ε-greedy
            s_next, r, done = env.step(a)
            # 更新公式(off-policy,用 max)
            td_target = r + gamma * max(Q[s_next]) if not done else r
            Q[s][a] += alpha * (td_target - Q[s][a])
            s = s_next
    return Q

表格 Q-learning 的实现坑

  1. done 的处理:终止状态没有"下一步",$td_target = r$(不能加 $\gamma Q(s_{next})$)。漏掉这个,终止状态的价值会被高估/低估,是入门最常见 bug;
  2. 连续状态必须先离散化(分桶),否则表格爆炸;
  3. α 和 ε 要配合:探索猛的时候 α 要小一点,否则估计抖动。

五、DQN:把 Q 换成神经网络 ​

1. 问题:表格装不下真实世界 ​

Atari 游戏输入是 210×160 的像素画面,状态空间天文数字,表格不存在。深度 Q 网络(Deep Q-Network, DQN)用神经网络 $Q_\theta(s,a)$ 逼近 Q 函数(Mnih et al., 2015, Nature)。

网络输出:给定 $s$,输出所有动作的 Q 值向量 $[Q_\theta(s,a_1), \dots, Q_\theta(s,a_K)]$。损失函数是"让 Q 满足贝尔曼方程":

$$ L(\theta) = \mathbb{E}{(s,a,r,s') \sim \mathcal{D}} \left[ \left( r + \gamma \max Q_{\bar\theta}(s', a') - Q_\theta(s,a) \right)^2 \right] $$

其中 $Q_{\bar\theta}$ 是目标网络的参数(定期拷贝自 $\theta$)。括号里就是 TD 误差;目标 = 平方最小化 TD 误差。

2. 两大工程技巧:为什么 DQN 缺了它们就不收敛 ​

技巧一:经验回放(experience replay)

把 $(s,a,r,s')$ 存进一个回放缓冲区,训练时随机抽样小批量。两个作用:

问题回放怎么解决
样本强相关(前后步高度相关)随机抽样打破时序相关 → 更像 i.i.d.,SGD 才稳
样本浪费(用完即弃)一条经验可反复学习 → 数据效率提升

技巧二:目标网络(target network)

DQN 的回归目标 $r + \gamma \max Q$ 本身依赖正在更新的同一个网络。如果直接用 $\theta$ 计算目标,目标也在变 → 梯度追着一个移动的靶子 → 振荡甚至发散。解法:冻结一个副本 $\bar\theta$,每 N 步才把 $\theta$ 拷贝过去。这样"靶子"每 N 步才动一次,训练稳定。

一句话记住 DQN 的动机

"回归目标里含有模型自身"(自举)是 DQN 不稳定的根源;回放解决样本相关,目标网络解决目标移动。这两个技巧从此成为深度 RL 的通用基建——几乎所有现代算法(包括 SAC、TD3)都带。

3. DQN 的预处理与结构 ​

Atari 上的经典配置:灰度化 → 84×84 裁剪 → 最近 4 帧堆叠成 84×84×4 输入(用历史帧给"速度"信息,弥补马尔可夫性质)→ 卷积网络 → 输出 18 个动作的 Q 值。完整案例见Atari 与电子游戏。

六、DQN 家族:七项改进与 Rainbow ​

1. Double DQN:治"价值高估" ​

Q-learning 的 $\max$ 天然高估价值(max 算子会把噪声往大的方向带)。Double DQN(van Hasselt et al., 2016)把"选动作"和"评估价值"拆到两个网络:

$$ r + \gamma , Q_{\bar\theta}\left(s', \arg\max_{a'} Q_\theta(s', a')\right) $$

直觉:用在线网络选"哪个动作最优",用目标网络评估"它值多少"。两套估计的噪声部分抵消,高估显著减小。

2. Dueling DQN:价值与优势解耦 ​

Dueling(Wang et al., 2016)把输出拆成两条支路:

$$ Q(s,a) = V(s) + A(s,a) - \overline{A}(s) $$

  • $V(s)$:状态本身值多少(跟动作无关的部分);
  • $A(s,a)$:这个动作相对平均的优势(advantage)。

直觉:有些游戏里"局面本身好不好"比"具体动作"重要得多(比如球快落地时,往哪跑都差不多)。Dueling 让网络专注于真正有差异的信息,学得更快更稳。

3. Prioritized Replay:回放也要分轻重 ​

普通回放均匀抽样。但TD 误差大的样本信息量更大(说明预测最不准)。Prioritized Replay(Schaul et al., 2016)按 $|\delta_t|$ 加权抽样,并加重要性采样修正权重(防止高频样本过拟合)。

4. C51(分布式 RL):学分布而不是均值 ​

C51(Bellemare et al., 2017)不学 $Q(s,a)$ 的期望,而是直接学回报的整个分布(用 51 个固定支点的分类分布表示)。分布信息更丰富,还能刻画风险,在 Atari 上效果拔群。

5. NoisyNet:把探索装进网络 ​

前面探索与利用提过,NoisyNet 在层里加可学习噪声,替代 ε-greedy 的随机探索,见多臂老虎机页的探索讨论。

6. Rainbow 汇总表 ​

Rainbow(Hessel et al., 2018)把七项改进打包,逐一消融实验证明每一项都有用:

改进解决的问题一句话机制
Double DQN价值高估选动作与估值分离
Prioritized Replay样本利用率按 TD 误差加权抽样
Dueling动作冗余V 与 A 分开学
多步回报(n-step)自举偏差走 n 步再自举(类似 TD(λ))
分布式 Q(C51)只学均值学回报分布
NoisyNet探索不智能网络内噪声
参数更新学习不稳定循环学习率(替代固定 α)

工程启示

不需要从零实现 Rainbow。实际项目(尤其连续控制)首选 SAC/TD3(见Actor-Critic 家族);只有离散动作空间且要榨干性能时才上 Rainbow 系。

七、价值学习的局限 ​

局限原因后果
连续动作空间瘫痪策略 = argmax Q,连续空间里 max 不可直接算价值学习几乎退出连续控制(DQN 无法用于机器人)
价值高估max 算子的统计偏差需要 Double 等修正,但只是缓解
对奖励缩放敏感Q 值随奖励量级变化需要 reward scaling 等工程技巧
收敛性无保证(深度版)自举 + 非线性近似训练不稳定,需要大量技巧堆叠

什么时候别用价值学习

  • 动作连续 → 用策略梯度/Actor-Critic(SAC、PPO);
  • 要求策略显式带随机性(扑克、博弈)→ 策略梯度天然支持;
  • 环境奖励极其稀疏 → 价值学习需要额外探索组件(RND 等)。 价值学习的理论意义不亚于实践意义:它是理解 TD、自举、off-policy 这些所有 RL 共用的地基概念的载体。

八、实践落点 ​

延伸阅读 ​

参考资料 ​

  • Sutton, R. S., & Barto, A. G. (2018). Reinforcement Learning: An Introduction (2nd ed.). MIT Press. 第 5-7 章(MC/TD/Q-learning/SARSA)与第 11 章(off-policy 近似)。
  • Watkins, C. J. C. H., & Dayan, P. (1992). Q-learning. Machine Learning, 8(3-4), 279-292. Q-learning 的原始论文与收敛证明。
  • Mnih, V., Kavukcuoglu, K., Silver, D., et al. (2015). Human-level control through deep reinforcement learning. Nature, 518, 529-533. DQN 的 Nature 论文。
  • van Hasselt, H., Guez, A., & Silver, D. (2016). Deep Reinforcement Learning with Double Q-learning. AAAI. arXiv:1509.06461
  • Wang, Z., Schaul, T., Hessel, M., et al. (2016). Dueling Network Architectures for Deep Reinforcement Learning. ICML. arXiv:1511.06581
  • Schaul, T., Quan, J., Antonoglou, I., & Silver, D. (2016). Prioritized Experience Replay. ICLR. arXiv:1511.05952
  • Hessel, M., Modayil, J., van Hasselt, H., et al. (2018). Rainbow: Combining Improvements in Deep Reinforcement Learning. AAAI. arXiv:1710.02298