时序差分学习(Temporal Difference Learning,简称 TD 学习)是强化学习中最为核心和富有影响力的算法思想之一。它结合了**动态规划(DP)的自举(bootstrapping)思想和蒙特卡洛方法(MC)**的采样思想,实现了无需环境模型的在线增量式学习。可以说,TD 学习是现代强化学习的基石——从经典的 SARSA、Q-Learning 到最新的深度强化学习算法(如 DQN、PPO),都深深植根于 TD 学习的基本思想。
要理解 TD 学习,首先要理解它解决了什么问题。回顾前两篇知识:
TD 学习巧妙地将两者的优势结合:
这种结合使得 TD 学习成为一种在线、增量式、无模型的学习方法。
对于策略 下的状态价值函数 ,TD 学习使用以下更新规则:
其中:
这个公式被称为 TD(0) —— TD 学习的最简单形式,表示只向前看了一步(one-step TD)。
| 特性 | 蒙特卡洛方法 | 动态规划 | TD学习(TD(0)) |
|---|---|---|---|
| 是否需要环境模型 | 否 | 是 | 否 |
| 是否需要完整回合 | 是 | 否 | 否 |
| 自举 | 否 | 是 | 是 |
| 在线学习 | 否 | 是(策略迭代中) | 是 |
| 方差 | 高(完整回报方差大) | 低(期望计算) | 中 |
| 偏差 | 无偏 | 有偏(取决于自举精度) | 有偏 |
| 更新目标 |
为了直观理解 TD(0) 如何工作,考虑一个经典的**随机行走(Random Walk)**实验:
问题设定:一条包含 5 个状态 A-B-C-D-E 的线性链,两端为终止状态(左端奖励 0,右端奖励 1)。从状态 C 出发,每一步等概率向左或向右移动一个位置,到达终止状态即结束。
真实价值(解析解):由于从任何非终止状态出发,到达右端(奖励 1)的概率等于状态到右端距离的比例:
TD(0) 学习过程(学习率 ):
假设一个训练回合:C → D → E → 终止(右端, 奖励1)
| 时刻 | 状态 | 动作 | 奖励 | 后继 | TD Target | TD Error | 更新前 | 更新后 |
|---|---|---|---|---|---|---|---|---|
| 0 | C | 右 | 0 | D | -0.25 | 0.5 | 0.475 | |
| 1 | D | 右 | 0 | E | -0.25 | 0.5 | 0.475 | |
| 2 | E | 右 | 1 | 终止 | +0.5 | 0.5 | 0.550 |
注:假设初始所有状态价值为 0.5,折扣因子
经过大量回合训练,TD(0) 会收敛到真实价值。关键特征:每走一步就更新一次,不用等到回合结束。
TD(0) 用于评估给定策略 下的状态价值函数 :
输入:策略 π(待评估),学习率 α ∈ (0, 1]
对所有 s ∈ S,初始化 V(s)(通常为 0 或随机小值)
循环每个回合(episode):
初始化状态 S
循环每一步(直到 S 为终止状态):
根据策略 π 在状态 S 选择动作 A
执行动作 A,观测奖励 R 和下一个状态 S'
V(S) ← V(S) + α [R + γ V(S') - V(S)]
S ← S'
直到 S 为终止状态
TD 误差 具有深刻的理论意义:
预测误差信号:它衡量了当前价值估计的"意外程度"。如果 ,意味着实际获得的(奖励 + 后继价值)比预期的好,应上调 ;反之则下调。
与神经元活动的联系:神经科学发现,多巴胺神经元的活动模式与 TD 误差高度一致。当动物获得意外奖励时,多巴胺神经元会爆发性放电(正 );当预期奖励未出现时,它们会被抑制(负 )。这是强化学习与神经科学最著名的交叉发现之一。
收敛性质:在固定策略下,如果满足以下条件,TD(0) 以概率 1 收敛到真实价值函数 :
设 ,,初始 ,运行 10 个完整回合:
| 回合 | 路径 | A | B | C | D | E |
|---|---|---|---|---|---|---|
| 初始 | - | 0.500 | 0.500 | 0.500 | 0.500 | 0.500 |
| 1 | C→B→A→左端(0) | 0.450 | 0.450 | 0.500 | 0.500 | 0.500 |
| 2 | C→D→C→B→A→左端(0) | 0.405 | 0.410 | 0.455 | 0.500 | 0.500 |
| 3 | C→D→E→右端(+1) | 0.405 | 0.410 | 0.460 | 0.505 | 0.550 |
| 4 | C→B→C→D→E→右端(+1) | 0.405 | 0.419 | 0.469 | 0.519 | 0.595 |
| 5 | C→B→A→左端(0) | 0.374 | 0.387 | 0.469 | 0.519 | 0.595 |
| 6 | C→D→E→右端(+1) | 0.374 | 0.387 | 0.474 | 0.527 | 0.636 |
| 7 | C→B→C→B→A→左端(0) | 0.347 | 0.358 | 0.442 | 0.527 | 0.636 |
| 8 | C→D→D→E→右端(+1) | 0.347 | 0.358 | 0.447 | 0.530 | 0.672 |
| 9 | C→B→C→D→E→右端(+1) | 0.347 | 0.367 | 0.456 | 0.540 | 0.705 |
| 10 | C→D→C→D→E→右端(+1) | 0.347 | 0.367 | 0.462 | 0.551 | 0.734 |
可以看到,经过 10 个回合,左侧状态(A、B)受负奖励影响下降,右侧状态(D、E)受正奖励影响上升,整体趋势向真实价值靠近。
TD(0) 只能评估给定策略的价值。要实现控制(找到最优策略),需要将 TD 学习与策略改进结合起来。SARSA 是这种结合的最直接形式,得名于算法中使用的五元组 。
SARSA 更新动作价值函数 :
关键点在于:更新中使用的后继动作 是由当前策略 实际选择的——这就是"同策略(on-policy)"的含义:学习和评估的是同一个策略。
初始化 Q(s, a)(对所有 s ∈ S, a ∈ A(s)),可设为零
循环每个回合:
初始化状态 S
从 Q 使用 ε-贪心策略选择动作 A
循环每一步(直到 S 为终止状态):
执行动作 A,观测奖励 R 和下一个状态 S'
从 Q 使用 ε-贪心策略选择动作 A'(来自 S')
Q(S, A) ← Q(S, A) + α [R + γ Q(S', A') - Q(S, A)]
S ← S';A ← A'
直到 S 为终止状态
问题设定:4×4 网格世界,起始状态 S(0,0),目标状态 G(3,3),有冻结区域 F(安全)和洞 H(掉入即结束,奖励 -1)。成功到达 G 得奖励 +1,每步奖励 0。动作:上下左右。由于冰面光滑,实际移动方向有 1/3 概率偏离(即意图↑但实际可能→或←各 8.33%)。
考虑一个简单路径经过的状态和 SARSA 的更新过程(,,):
初始 ,第一个完整回合:
| 步 | 状态 | 动作 | 奖励 | 下一状态 | 下一动作 | TD Target | TD Error | 更新后 |
|---|---|---|---|---|---|---|---|---|
| 1 | S(0,0) | 右 | 0 | F(0,1) | 右 | 0 | 0 | |
| 2 | F(0,1) | 右 | 0 | F(0,2) | 下 | 0 | 0 | |
| 3 | F(0,2) | 下 | 0 | F(1,2) | 右 | 0 | 0 | |
| 4 | F(1,2) | 右 | 0 | F(1,3) | 下 | 0 | 0 | |
| 5 | F(1,3) | 下 | 0 | F(2,3) | 下 | 0 | 0 | |
| 6 | F(2,3) | 下 | 0 | F(3,3)=G | - | +1 | 0.1 |
当第一次成功到达 G 时,倒数第二步的 更新为 0.1,这个正向信号会通过多回合逐渐传播回起始状态。
SARSA 使用 ε-贪心(-greedy)策略平衡探索与利用:
以一个具体状态为例:假设状态 F(1,2) 经过多次学习后, 值为:
| 动作 | Q 值 | ε-贪心选择概率() |
|---|---|---|
| ↑ | 0.45 | |
| ↓ | 0.20 | |
| ← | 0.10 | |
| → | 0.30 |
即使 ↑ 是当前最优动作,仍有 7.5% 的概率选择其他动作来探索。
SARSA 在以下条件下保证收敛到最优动作价值函数:
典型 衰减计划:
| 回合数 | ε 值 | 探索概率 |
|---|---|---|
| 1-100 | 1.0 | 完全随机 |
| 101-1000 | 从 1.0 线性衰减到 0.1 | 从完全探索到 10% 探索 |
| 1001-5000 | 从 0.1 衰减到 0.01 | 从 10% 到 1% 探索 |
| 5000+ | 0.01 | 仅 1% 探索 |
为了深入理解 TD 学习,需要从数学上对比三种方法的更新目标:
动态规划(DP)的期望更新:
DP 计算了所有可能性的加权平均,精确但需要完整模型。
蒙特卡洛(MC)的采样更新:
MC 使用完整回报的一次采样,无偏但方差大。
TD(0) 的采样自举更新:
TD(0) 使用一次采样加自举,有偏但方差小。
用数学语言表述 TD 学习的方差-偏差特性。在固定策略下:
MC 目标 :
TD(0) 目标 :
设计一个简单实验来直观感受 TD 和 MC 的差异。考虑一个状态链,每步获取奖励 或 (等概率),折扣因子 :
| 指标 | MC(10 步回报) | TD(0) |
|---|---|---|
| 单次更新方差 | ||
| 偏差(初始 ) | 0 | |
| 均方误差(MSE) |
可以看到,TD 的方差显著小于 MC,但引入了偏差。初期 TD 的总 MSE 通常小于 MC,因为方差降低的收益大于偏差引入的成本。
在经典的随机行走实验中,**RMS 误差(均方根误差)**随训练步数的变化:
| 训练步数 | MC 错误率 | TD(0) 错误率 () | TD(0) 错误率 () |
|---|---|---|---|
| 0 | 0.373 | 0.373 | 0.373 |
| 10 | 0.352 | 0.290 | 0.310 |
| 50 | 0.315 | 0.195 | 0.225 |
| 100 | 0.278 | 0.145 | 0.180 |
| 200 | 0.232 | 0.105 | 0.130 |
| 500 | 0.165 | 0.065 | 0.080 |
| 1000 | 0.120 | 0.045 | 0.055 |
结论:TD(0) 的收敛速度显著快于 MC,尤其是在初始阶段。
一步 TD 只看一个时间步,MC 看整个回合。自然的中间地带是 n 步 TD——向前看 步后再进行自举。
**n 步回报(n-step return)**定义为:
其中 ,( 为终止时刻)。
特殊边界情况:
| n 值 | 偏差 | 方差 | 学习速度 | 收敛性能 |
|---|---|---|---|---|
| 1 (TD(0)) | 高 | 低 | 快(早期) | 好 |
| 3 | 中 | 中 | 居中 | 最好(通常) |
| 5 | 低 | 中高 | 慢(早期) | 好 |
| (MC) | 0 | 高 | 很慢 | 好 |
实验数据(随机行走,RMS 误差,100 回合后):
| n 值 | 最优 | 100回合后RMS |
|---|---|---|
| 1 (TD(0)) | 0.15 | 0.082 |
| 2 | 0.12 | 0.075 |
| 3 | 0.10 | 0.072 |
| 5 | 0.08 | 0.078 |
| 8 | 0.06 | 0.085 |
| (MC) | 0.04 | 0.105 |
折中方案:在实际应用中, 到 之间通常能取得最佳平衡。
TD(λ) 是 Sutton 提出的一个重要扩展,它使用 λ-回报(λ-return) 将所有 n 步回报加权平均:
其中 是迹衰减参数。
| λ 值 | 对应方法 | 回看距离 | 偏差/方差 |
|---|---|---|---|
| 等效 TD(0) | 只看 1 步 | 高偏差低方差 | |
| 加权平均 | 约 2-3 步有效视野 | 平衡 | |
| 长视野 | 约 10 步有效视野 | 低偏差中方差 | |
| 等效 MC | 完整回合 | 无偏差高方差 |
权重分布:当 时,各 n 步回报的权重:
| n | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
|---|---|---|---|---|---|---|---|---|
| 权重 | 0.500 | 0.250 | 0.125 | 0.063 | 0.031 | 0.016 | 0.008 | 0.004 |
关键点:权重之和为 1,且呈指数衰减。
直接计算 λ-回报需要前瞻 步,不适合在线学习。资格迹是一种高效的后向实现方式,使得 TD(λ) 可以在线更新,并且回头看之前访问过的状态。
前向视图(理论定义):
后向视图(实际实现):
其中 是状态 在时刻 的资格迹值,每次访问该状态时递增,之后以 的速率衰减。
考虑一个简单链:(分别被访问,,):
| 时刻 | 当前状态 | |||||
|---|---|---|---|---|---|---|
| 0 | A | 1.0 | 0 | 0 | 0 | 0 |
| 1 | B | 0.63 | 1.0 | 0 | 0 | 0 |
| 2 | C | 0.40 | 0.63 | 1.0 | 0 | 0 |
| 3 | D | 0.25 | 0.40 | 0.63 | 1.0 | 0 |
| 4 | E | 0.16 | 0.25 | 0.40 | 0.63 | 1.0 |
当在时刻 4 获得 TD 误差 时,所有之前访问过的状态都会按对应的迹值进行更新。迹值越大,更新幅度越大。
| λ 值 | 最优 α | 100回合后RMS | 200回合后RMS |
|---|---|---|---|
| 0.0 (TD(0)) | 0.15 | 0.082 | 0.055 |
| 0.3 | 0.12 | 0.075 | 0.048 |
| 0.5 | 0.10 | 0.070 | 0.042 |
| 0.7 | 0.08 | 0.073 | 0.045 |
| 0.9 | 0.05 | 0.085 | 0.055 |
| 1.0 (MC) | 0.03 | 0.110 | 0.075 |
结论: 左右通常能获得最佳收敛性能。
期望 SARSA(Expected SARSA) 是 SARSA 的一种变体。它不采样实际选择的 ,而是对所有可能动作的 取期望:
| 特性 | SARSA | 期望 SARSA |
|---|---|---|
| 后继动作处理 | 采样实际 | 期望所有可能动作 |
| 单步更新方差 | 较高 | 显著降低 |
| 计算复杂度 | ||
| 学习率选择 | 需更低(补偿方差) | 可用更高(方差异常低) |
| 收敛速度 | 标准 | 更快 |
| 偏差 | 有偏 | 有偏(但方差小总体误差小) |
考虑一个三动作状态(动作 A、B、C),对应的 值分别为 [0.5, 0.3, 0.2],策略为 -greedy():
SARSA:实际选择动作 的概率分布
期望 SARSA:直接计算期望
关键优势:期望 SARSA 消除了由于随机选择 引入的方差,使得同一事务下 估计的更新更加稳定。
理解 SARSA、Q-Learning 和期望 SARSA 在策略类型上的根本差异:
| 算法 | 策略类型 | 行为策略 | 目标策略 | 更新的 |
|---|---|---|---|---|
| SARSA | 同策略(On-policy) | -greedy | -greedy | ( 来自行为策略) |
| Q-Learning | 离策略(Off-policy) | -greedy | 贪心 | |
| 期望 SARSA | 可同可离 | -greedy | 取决于 |
| 考量维度 | 同策略(SARSA) | 离策略(Q-Learning) |
|---|---|---|
| 数据效率 | 较低 | 较高(能复用过去数据) |
| 收敛稳定性 | 较高 | 不稳定(可能发散) |
| 探索风险 | 安全(考虑探索时的坏结果) | 可能高估风险 |
| 悬崖行走场景 | 学会避让悬崖(保守路径) | 走悬崖边(最优但风险高) |
| 理论收敛保证 | 有保证(DP 收敛) | 需要 GLIE 条件 |
| 适用场景 | 安全性要求高的真实环境 | 模拟环境或可充分探索 |
问题:4×12 网格,起点(4,0),终点(4,11),中间区域(3,1)-(3,10)为悬崖(掉入奖励 -100,回到起点),其余地面每步奖励 -1。
两种算法学习到的路径对比:
S=起点, G=终点, C=悬崖
行1: □□□□□□□□□□□□
行2: □□□□□□□□□□□□
行3: CCCCCCCCCCCC (悬崖)
行4: S□□□□□□□□□□G (起始行)
SARSA 学到的路径(保守,沿行4绕行):
S→□□□□□□□□□□G 总奖励 ≈ -13(13步到达)
Q-Learning 学到的路径(最优但危险):
S↑□□□□□□□□□□↓G 总奖励 ≈ -11(11步到达,但可能掉下悬崖)
累积奖励对比(训练过程中):
| 训练回合 | SARSA(累积奖励) | Q-Learning(累积奖励) |
|---|---|---|
| 1-50 | -85 | -175 |
| 51-100 | -35 | -45 |
| 101-200 | -18 | -13 |
| 201-500 | -14 | -11 |
| 500+ | -13 | -11 |
关键洞察:虽然在极限上 Q-Learning 找到了更优路径,但在训练初期,由于探索导致的悬崖坠落,其平均累积奖励远低于 SARSA。在真实物理系统中(如机器人)这种"训练期的事故"可能是不可接受的。
| 算法 | 条件 | 收敛到 |
|---|---|---|
| TD(0)(预测) | 固定策略,Robbins-Monro | |
| TD(0)(控制 Tabular) | GLIE,Robbins-Monro | |
| SARSA(Tabular) | GLIE,Robbins-Monro | |
| Q-Learning(Tabular) | 每个状态-动作对无限次访问 | |
| TD(λ)(预测) | 固定策略,线性函数逼近 | 可能发散 |
| 带函数逼近的 Q-Learning | 不满足收敛条件 | 可能发散(致命三要素) |
当强化学习同时包含以下三个要素时,发散风险很高:
这个"致命三要素"是深度强化学习中许多不稳定问题的根源(如 DQN 的初始不稳定期)。
| 策略 | 针对的要素 | 代表性方法 |
|---|---|---|
| 目标网络 | 自举 | DQN 的目标网络 |
| 经验回放 | 离策略 + 函数逼近 | DQN 的 Replay Buffer |
| 梯度裁剪 | 函数逼近 | 限制梯度的范围 |
| 同策略方法 | 离策略 | A3C、PPO |
| 双估计 | 自举 + 离策略 | Double Q-Learning |
| 平均奖励 TD | 所有 | RVI TD |
面对一个强化学习问题时,可以按以下决策树选择 TD 算法:
环境是否有确定性终止条件?
状态空间是否离散且有限?
探索成本是否高昂?
安全性是否重要?
是否能够等回合结束再更新?
| 超参数 | 典型范围 | 调优策略 |
|---|---|---|
| 学习率 | 0.01 - 0.5 | 先大后小,使用自适应学习率 |
| 折扣因子 | 0.9 - 0.99 | 短期任务用 0.9,长期任务用 0.99 |
| 探索率 | 0.01 - 1.0 | 从高衰减到低 |
| (资格迹) | 0.3 - 0.7 | 经验法则: 起调 |
| n 步数 | 3 - 5 | 状态数越多 n 可以越大 |
| 批次大小 | 32 - 256 | 更大批次 = 更稳定但更慢 |
| 策略 | 公式 | 特点 |
|---|---|---|
| 常数 | 简单但可能不收敛 | |
| 线性衰减 | 常用,需要调 | |
| 指数衰减 | 衰减快,容易过早停止学习 | |
| Robbins-Monro | 理论保证好但实际衰减过快 | |
| 自适应(AdaGrad 风格) | 效果好但计算稍复杂 |
| 陷阱 | 症状 | 解决方案 |
|---|---|---|
| 学习率过大 | 价值估计震荡、不收敛 | 减小 或使用自适应学习率 |
| 探索不足 | 收敛到次优策略 | 增大 初始值或使用乐观初始值 |
| 折扣因子不当 | 短期贪心或长期发散 | 根据任务时间尺度调整 |
| 资格迹 设置不当 | 收敛慢 | 从 开始调优 |
| 未处理致命三要素 | 训练发散 | 使用目标网络、经验回放 |
| 和 衰减过快 | 过早收敛,学习不足 | 使用更慢的衰减速率 |
将 TD 学习与深度神经网络结合诞生了现代深度强化学习。核心架构保持不变,但价值函数由神经网络参数化: 或 ,其中 是网络参数。
更新公式(深度学习版本):
主要挑战及已提出的解决方案:
| 挑战 | 表现 | 解决方案 |
|---|---|---|
| 样本相关性 | 相邻样本高度相关,破坏 i.i.d. 假设 | 经验回放(Experience Replay) |
| 目标漂移 | 自举导致更新目标和网络同步变化 | 目标网络(Target Network) |
| 训练不稳定 | Q 值估计震荡甚至发散 | 梯度裁剪(Gradient Clipping) |
| 过高估计 | Q-Learning 的 操作导致贪婪偏差 | Double Q-Learning |
| 算法 | 核心思想 | 是否基于 TD | 是否离策略 |
|---|---|---|---|
| DQN | TD + 深度网络 + 经验回放 + 目标网络 | 是(Q-Learning) | 是 |
| Double DQN | 用两个网络解耦选择和评估 | 是 | 是 |
| Dueling DQN | Q = V + A(优势函数分解) | 是 | 是 |
| A3C | 并行 actor-learner + TD 误差梯度 | 是(TD + Policy Gradient) | 否 |
| PPO | 裁剪的替代目标 + TD 误差估计优势 | 是(GAE 即广义优势估计基于 TD(λ)) | 否 |
| SAC | 最大熵 + TD 更新的 Q 函数 | 是 | 是 |
广义优势估计(GAE)——PPO 中使用的优势函数正是基于 TD(λ) 的思想:
其中 是 TD 误差。可以证明:
即 GAE 的 相当于 TD(0) 的误差(单步优势), 相当于 MC 的回报减去基线。
┌─────────────────────────────────┐
│ 动态规划 (DP) │
│ 需要完整环境模型 │
│ 期望更新 │
└──────────┬──────────────────────┘
│ 自举思想
▼
┌─────────────────────────────────┐
│ TD 学习 │
│ 采样 + 自举,无需模型 │
│ TD(0), SARSA, Q-Learning │
└──────┬──────────────┬───────────┘
│ │
▼ ▼
┌────────────────┐ ┌────────────────┐
│ TD(λ) / GAE │ │ 深度 TD │
│ 资格迹 │ │ DQN, SAC, PPO │
│ 多步回报加权 │ │ 神经网络+TD │
└────────────────┘ └────────────────┘
| 方法 | 更新信号来源 | 学习速度 | 适用场景 |
|---|---|---|---|
| TD 学习 | 时序差分误差 | 快 | 连续决策 |
| 蒙特卡洛 | 完整回报 | 慢 | 短回合任务 |
| 动态规划 | 模型推导 | 快(有模型时) | 模型已知的小规模问题 |
| 监督学习 | 标签差异 | 视数据量 | 静态输入输出 |
| 时间序列预测 | 历史模式 | 中等 | 规律性序列 |
| 项目 | 语言 | 特点 |
|---|---|---|
| OpenAI Spinning Up | Python | 包含 TD 算法的简洁实现 |
| Stable-Baselines3 | Python | 工业级强化学习库 |
| rlax | Python (JAX) | DeepMind 的 RL 函数库 |
| RLlib | Python | 分布式 RL 框架 |