2.6 时序差分方法(Temporal Difference, TD)

2.6 时序差分方法(Temporal Difference, TD)

时序差分(Temporal Difference, TD)是一类经典的 model-free 强化学习方法:在不知道环境动力学(即不知道状态转移概率 p(s′∣s,a)p(s'|s,a)p(s′∣s,a)、也无法写出完整 MDP 转移方程)的情况下,仅通过 Agent 与环境交互采样得到的轨迹数据 来学习价值函数与策略。现实世界中,环境的转移规律往往复杂且难以精确建模,因此 model-free 方法具有非常强的实用性。

TD 方法要解决的核心问题是:如何评估"当前状态(或当前状态-动作)有多好"。它的关键思想可以用一句话概括:

用对"下一步及未来"的价值估计,来更新"当前"的价值估计。

这使得 TD 同时继承了两类方法的优点:

  • 像蒙特卡洛(MC)一样:不需要知道环境模型,可以直接从采样数据中学习;
  • 像动态规划(DP)一样:使用贝尔曼思想,用后继状态的价值来更新当前状态的价值(bootstrap,自举)。

1. 从 MC 到 TD:为什么要引入"自举"?

1.1 蒙特卡洛(MC)的增量更新回顾

MC 评估 Vπ(s)V^\pi(s)Vπ(s) 的基本思路是:对每次访问状态 sss 后得到的 完整回报 GGG 做平均。常见的增量形式为:

V(s)←V(s)+1N(s)[G−V(s)] V(s) \leftarrow V(s) + \frac{1}{N(s)}\left[G - V(s)\right] V(s)←V(s)+N(s)1[G−V(s)]

其中:

  • V(s)V(s)V(s):当前对状态价值的估计;
  • N(s)N(s)N(s):状态 sss 被访问的次数;
  • GGG:从当前时刻开始直到终止的累计折扣回报。

MC 的关键限制在于:必须等到一整个 episode 结束,才能算出 GGG。这在许多情形下很不方便:

  • episode 很长甚至近似无终止;
  • 希望在线实时更新(例如边交互边学习);
  • 回报方差可能很大(因为 GGG 叠加了很多随机性)。

1.2 TD 的动机:用"一步估计"替代"完整回报"

根据状态价值函数的定义:

Vπ(s)=Eπ[Gt∣St=s] V^{\pi}(s) = \mathbb{E}_{\pi}[G_t|S_t=s] Vπ(s)=Eπ[Gt∣St=s]

并且由贝尔曼期望方程可以写成:

Vπ(s)=Eπ[Rt+γVπ(St+1)∣St=s] V^{\pi}(s) = \mathbb{E}{\pi}[R_t + \gamma V^{\pi}(S{t+1})\mid S_t=s] Vπ(s)=Eπ[Rt+γVπ(St+1)∣St=s]

这条等式说明:从状态 sss 的期望回报 ,等价于 一步即时奖励 + 下一状态价值的折扣 的期望。

TD 的做法是:不再等待完整 GtG_tGt,而是在每一步交互后,用样本 rt,st+1r_t, s_{t+1}rt,st+1 直接构造一个目标:

  • 目标(一步 TD 目标):
    Targett=rt+γV(st+1) \text{Target}t = r_t + \gamma V(s{t+1}) Targett=rt+γV(st+1)

然后让 V(st)V(s_t)V(st) 朝这个目标靠近。这样做的本质是 用估计量 V(st+1)V(s_{t+1})V(st+1) 替代真实未来回报,因此:

  • 相比 MC:方差更低(因为只用一步随机量);
  • 代价是:引入偏差 (因为 V(st+1)V(s_{t+1})V(st+1) 不是精确真值,而是估计)。

2. TD(0):时序差分的增量更新与 TD 误差

TD(0) 的典型增量更新公式为:

V(st)←V(st)+α[rt+γV(st+1)−V(st)] V(s_t) \leftarrow V(s_t) + \alpha\left[r_t + \gamma V(s_{t+1}) - V(s_t)\right] V(st)←V(st)+α[rt+γV(st+1)−V(st)]

其中:

  • α∈(0,1]\alpha \in (0,1]α∈(0,1]:学习率(步长),控制每次更新幅度;
  • γ∈[0,1)\gamma \in [0,1)γ∈[0,1):折扣因子;
  • 方括号内的项称为 时序差分误差(TD error):

δt=rt+γV(st+1)−V(st) \delta_t = r_t + \gamma V(s_{t+1}) - V(s_t) δt=rt+γV(st+1)−V(st)

2.1 TD 误差的直观含义

δt\delta_tδt 描述了"当前估计"和"基于一步样本构造的目标"之间的差距:

  • 如果 δt>0\delta_t > 0δt>0:说明当前 V(st)V(s_t)V(st) 估计偏小,应上调;
  • 如果 δt<0\delta_t < 0δt<0:说明当前 V(st)V(s_t)V(st) 估计偏大,应下调;
  • 如果 δt≈0\delta_t \approx 0δt≈0:说明估计与当前一步目标一致。

2.2 一个非常具体的例子:走迷宫的"一步更新"

设想一个简单迷宫任务,折扣因子 γ=0.9\gamma = 0.9γ=0.9,学习率 α=0.1\alpha = 0.1α=0.1。

在某一步:

  • 当前状态 sts_tst 的价值估计 V(st)=2.0V(s_t)=2.0V(st)=2.0
  • 执行动作后获得即时奖励 rt=−1r_t = -1rt=−1
  • 到达下一状态 st+1s_{t+1}st+1,估计 V(st+1)=4.0V(s_{t+1}) = 4.0V(st+1)=4.0

则 TD 目标为:

rt+γV(st+1)=−1+0.9×4.0=2.6 r_t + \gamma V(s_{t+1}) = -1 + 0.9 \times 4.0 = 2.6 rt+γV(st+1)=−1+0.9×4.0=2.6

TD 误差:

δt=2.6−2.0=0.6 \delta_t = 2.6 - 2.0 = 0.6 δt=2.6−2.0=0.6

更新:

V(st)←2.0+0.1×0.6=2.06 V(s_t) \leftarrow 2.0 + 0.1 \times 0.6 = 2.06 V(st)←2.0+0.1×0.6=2.06

这一更新不需要等待 episode 结束,交互一步就能学一点,这就是 TD 的核心优势。


3. 从 V(s)V(s)V(s) 到 Q(s,a)Q(s,a)Q(s,a):动作价值与控制问题

仅评估 Vπ(s)V^\pi(s)Vπ(s) 还不够,因为最终目标通常是学到一个"更优的决策方式"(控制)。在控制里更常用的是 动作价值函数

Qπ(s,a)=Eπ[Gt∣St=s,At=a] Q^\pi(s,a) = \mathbb{E}_\pi[G_t \mid S_t=s, A_t=a] Qπ(s,a)=Eπ[Gt∣St=s,At=a]

直观上:

  • Vπ(s)V^\pi(s)Vπ(s):处于状态 sss 的好坏;
  • Qπ(s,a)Q^\pi(s,a)Qπ(s,a):在状态 sss 下选择动作 aaa 的好坏(更细粒度)。

4. SARSA:on-policy 的 TD 控制算法

4.1 SARSA 的更新公式

SARSA 是经典的 on-policy TD 控制算法,它用 TD 的方式直接学习 Q(s,a)Q(s,a)Q(s,a),更新形式为:

Q(st,at)←Q(st,at)+α[rt+γQ(st+1,at+1)−Q(st,at)] Q(s_t,a_t) \leftarrow Q(s_t,a_t) + \alpha\left[r_t + \gamma Q(s_{t+1},a_{t+1}) - Q(s_t,a_t)\right] Q(st,at)←Q(st,at)+α[rt+γQ(st+1,at+1)−Q(st,at)]

这里的 TD 误差同样可以写为:

δt=rt+γQ(st+1,at+1)−Q(st,at) \delta_t = r_t + \gamma Q(s_{t+1},a_{t+1}) - Q(s_t,a_t) δt=rt+γQ(st+1,at+1)−Q(st,at)

注意关键点:目标里用的是 Q(st+1,at+1)Q(s_{t+1}, a_{t+1})Q(st+1,at+1) ,而 at+1a_{t+1}at+1 是按照"当前正在使用的策略"选出来的动作,这就是 on-policy 的含义。

4.2 为什么叫 SARSA?

因为更新用到了五元组:

(st,at,rt,st+1,at+1) (s_t, a_t, r_t, s_{t+1}, a_{t+1}) (st,at,rt,st+1,at+1)

这五个量的首字母拼起来就是 SARSA。


5. ϵ\epsilonϵ-greedy:在探索与利用之间折中

在学习 QQQ 的过程中,如果每一步都选择当前估计最大的动作(纯贪婪),会带来严重问题:很多动作永远不被尝试,导致学习停留在局部最优甚至错误估计。

因此常用 ϵ\epsilonϵ-greedy 策略:

  • 以概率 1−ϵ1-\epsilon1−ϵ 选择当前 QQQ 最大的动作(利用);
  • 以概率 ϵ\epsilonϵ 在动作空间中随机采样(探索)。

写成概率形式:

π(a∣s)={1−ϵ+ϵ/∣A∣,如果 a=arg⁡max⁡a′Q(s,a′)ϵ/∣A∣,否则 \pi(a|s)= \begin{cases} 1-\epsilon+\epsilon/|\mathcal{A}|, & \text{如果 } a=\arg\max_{a'}Q(s,a') \\ \epsilon/|\mathcal{A}|, & \text{否则} \end{cases} π(a∣s)={1−ϵ+ϵ/∣A∣,ϵ/∣A∣,如果 a=argmaxa′Q(s,a′)否则

其中 ∣A∣|\mathcal{A}|∣A∣ 是动作数量。

5.1 一个例子:为什么必须探索?

设想在某状态 sss 有两个动作:

  • a1a_1a1:当前估计 Q(s,a1)=5Q(s,a_1)=5Q(s,a1)=5
  • a2a_2a2:当前估计 Q(s,a2)=4Q(s,a_2)=4Q(s,a2)=4

如果一直选 a1a_1a1,你将永远不知道 a2a_2a2 可能实际上能带来更高回报(比如真实最优是 a2a_2a2,但由于从未尝试过,估计一直偏低)。ϵ\epsilonϵ-greedy 允许以小概率试一试 a2a_2a2,从而纠正估计并发现更优策略。


6. SARSA 的流程(概念层面)

SARSA 的典型交互过程可以概括为:

  1. 初始化 Q(s,a)Q(s,a)Q(s,a);
  2. 每个 episode 开始,观察初始状态 sss,用 ϵ\epsilonϵ-greedy 从 QQQ 中选动作 aaa;
  3. 执行动作得到 rrr 与下一状态 s′s's′;
  4. 在 s′s's′ 用同样的 ϵ\epsilonϵ-greedy 选出下一动作 a′a'a′;
  5. 用 (s,a,r,s′,a′)(s,a,r,s',a')(s,a,r,s′,a′) 更新 Q(s,a)Q(s,a)Q(s,a);
  6. 令 s←s′,a←a′s\leftarrow s', a\leftarrow a's←s′,a←a′ 继续。

SARSA 的本质:更新目标与行为策略一致,因此学习到的策略会把"探索带来的风险"也考虑进去(这在一些有风险代价的环境里会更保守、更安全)。


7. SARSA-λ\lambdaλ:用多步回报折中偏差与方差

7.1 MC vs TD:偏差-方差的经典权衡

  • MC:无偏(unbiased),但方差大(因为回报由许多随机奖励累积)。
  • TD(0):方差小,但有偏(因为用估计 V(st+1)V(s_{t+1})V(st+1) 或 Q(st+1,at+1)Q(s_{t+1},a_{t+1})Q(st+1,at+1) 自举)。

自然的折中思路是:不要只看一步,也不要等到终点,而是看 nnn 步

7.2 nnn 步 SARSA 的更新(多步 TD)

nnn 步的目标可以写为"前 nnn 步真实奖励 + 第 nnn 步后的 bootstrap 项":

Gt(n)=rt+γrt+1+⋯+γn−1rt+n−1+γnQ(st+n,at+n) G_t^{(n)} = r_t + \gamma r_{t+1} + \cdots + \gamma^{n-1}r_{t+n-1} + \gamma^n Q(s_{t+n}, a_{t+n}) Gt(n)=rt+γrt+1+⋯+γn−1rt+n−1+γnQ(st+n,at+n)

对应的更新为:

Q(st,at)←Q(st,at)+α[Gt(n)−Q(st,at)] Q(s_t,a_t) \leftarrow Q(s_t,a_t) + \alpha\left[G_t^{(n)} - Q(s_t,a_t)\right] Q(st,at)←Q(st,at)+α[Gt(n)−Q(st,at)]

这里:

  • 当 n=1n=1n=1:退化为普通 SARSA(一步 TD);
  • 当 nnn 很大、接近 episode 结束:接近 MC(用更长回报,偏差更小但方差更大)。

7.3 SARSA-λ\lambdaλ 的思想

SARSA-λ\lambdaλ 进一步把不同步长的 nnn 步回报 加权融合 ,用一个参数 λ∈[0,1]\lambda \in [0,1]λ∈[0,1] 控制"更偏向短期自举"还是"更偏向长期回报":

  • λ\lambdaλ 小:更像 TD(0)(更短视,低方差,高偏差);
  • λ\lambdaλ 大:更像 MC(更长视,低偏差,高方差)。

在概念层面,SARSA-λ\lambdaλ 让学习既能利用 TD 的快速更新优势,也能从更长的真实奖励链条中纠正偏差。

(很多教材会进一步引入 eligibility trace 来实现高效更新,但这里只强调其核心动机与目标形式。)


8. Q-learning:off-policy 的 TD 控制算法

SARSA 是 on-policy:目标使用 at+1a_{t+1}at+1(由当前策略实际选出的动作)。

Q-learning 则是 off-policy:目标使用"下一状态下的最优动作价值",即不管你实际下一步怎么选,更新都朝最优方向逼近。

8.1 最优贝尔曼方程与 Q∗Q^*Q∗

最优动作价值函数 Q∗(s,a)Q^*(s,a)Q∗(s,a) 满足最优贝尔曼方程:

Q∗(s,a)=r(s,a)+γ∑s′∈Sp(s′∣s,a)max⁡a′∈AQ∗(s′,a′) Q^*(s,a)= r(s,a) + \gamma \sum_{s'\in\mathcal{S}} p(s'|s,a)\max_{a'\in\mathcal{A}} Q^*(s',a') Q∗(s,a)=r(s,a)+γs′∈S∑p(s′∣s,a)a′∈AmaxQ∗(s′,a′)

该式表达了"最优原则":

  • 在当前 (s,a)(s,a)(s,a) 的长期最优回报,等于即时奖励加上下一状态能取得的最大长期回报(折扣后)。

8.2 Q-learning 的更新公式

Q-learning 用样本 (rt,st+1)(r_t, s_{t+1})(rt,st+1) 构造 TD 目标:

rt+γmax⁡a′Q(st+1,a′) r_t + \gamma \max_{a'} Q(s_{t+1},a') rt+γa′maxQ(st+1,a′)

并更新:

Q(st,at)←Q(st,at)+α[rt+γmax⁡a′Q(st+1,a′)−Q(st,at)] Q(s_t,a_t) \leftarrow Q(s_t,a_t) + \alpha\left[r_t + \gamma \max_{a'}Q(s_{t+1},a') - Q(s_t,a_t)\right] Q(st,at)←Q(st,at)+α[rt+γa′maxQ(st+1,a′)−Q(st,at)]

对应的 TD 误差:

δt=rt+γmax⁡a′Q(st+1,a′)−Q(st,at) \delta_t = r_t + \gamma \max_{a'}Q(s_{t+1},a') - Q(s_t,a_t) δt=rt+γa′maxQ(st+1,a′)−Q(st,at)

8.3 一个直观例子:SARSA vs Q-learning 的差别

设想下一状态 st+1s_{t+1}st+1 有两个动作:

  • Q(st+1,a1)=10Q(s_{t+1}, a_1)=10Q(st+1,a1)=10
  • Q(st+1,a2)=0Q(s_{t+1}, a_2)=0Q(st+1,a2)=0

并且当前策略是 ϵ\epsilonϵ-greedy,有一定概率会选到差的动作 a2a_2a2。

  • SARSA 的目标使用实际选到的 at+1a_{t+1}at+1,如果这次因为探索选了 a2a_2a2,则目标会变成 rt+γQ(st+1,a2)r_t + \gamma Q(s_{t+1},a_2)rt+γQ(st+1,a2),可能较小;
  • Q-learning 的目标永远使用 max⁡a′Q(st+1,a′)\max_{a'}Q(s_{t+1},a')maxa′Q(st+1,a′),即 rt+γ×10r_t + \gamma \times 10rt+γ×10,始终朝"最优动作"对齐。

因此:

  • SARSA 更"现实":会把探索导致的潜在损失纳入学习,策略可能更保守;
  • Q-learning 更"理想":学习目标直接逼近最优策略,即使行为策略仍在探索。

9. Q-learning 的流程(概念层面)

Q-learning 的典型交互过程可以概括为:

  1. 初始化 Q(s,a)Q(s,a)Q(s,a);
  2. 每个 episode 开始,观察状态 sss;
  3. 用 ϵ\epsilonϵ-greedy 从 QQQ 中选择动作 aaa(行为仍需探索);
  4. 执行动作得到 rrr 和下一状态 s′s's′;
  5. 用 r+γmax⁡a′Q(s′,a′)r+\gamma\max_{a'}Q(s',a')r+γmaxa′Q(s′,a′) 更新 Q(s,a)Q(s,a)Q(s,a);
  6. 令 s←s′s\leftarrow s's←s′ 继续。

核心要点:行为使用 ϵ\epsilonϵ-greedy,但更新目标是"下一状态最优",因此属于 off-policy。


10. 总结:TD 家族的核心脉络

  • TD 的关键创新:用自举思想把"等待终点的完整回报"替换成"一步(或多步)目标",实现在线、低方差更新。
  • SARSA:on-policy,用实际下一步动作 at+1a_{t+1}at+1 做 bootstrap,学习到的策略更贴近当前探索行为。
  • SARSA-λ\lambdaλ:用多步回报融合,调节偏差-方差,兼顾稳定与准确。
  • Q-learning:off-policy,用 max⁡a′Q(s′,a′)\max_{a'}Q(s',a')maxa′Q(s′,a′) 逼近最优 Q∗Q^*Q∗,更新更激进地朝最优策略收敛。

在实践中,TD 方法的价值在于:它把"学习"拆成了每一步可执行的小更新,使得强化学习可以在长序列、在线交互、未知环境模型等现实条件下有效运作。

相关推荐
落羽的落羽2 小时前
【Linux系统】磁盘ext文件系统与软硬链接
linux·运维·服务器·数据库·c++·人工智能·机器学习
民乐团扒谱机2 小时前
【硬科普】位置与动量为什么是傅里叶变换对?从正则对易关系到时空弯曲,一次讲透
人工智能·线性代数·正则·量子力学·傅里叶变换·对易算符
陈天伟教授2 小时前
人工智能应用- 推荐算法:05.推荐算法的社会争议
算法·机器学习·推荐算法
@zulnger2 小时前
单元测试框架 —— unittest
python·单元测试
apcipot_rain2 小时前
原神“十盒半价”问题的兹白式建模分析
python·数学·算法·函数·数据科学·原神·数列
喵手2 小时前
Python爬虫实战:舆情语料项目 - 从新闻抓取到文本挖掘的完整实战(附CSV导出 + SQLite持久化存储)!
爬虫·python·爬虫实战·零基础python爬虫教学·舆论语料项目·新闻抓取到文本挖掘·爬虫实战采集舆论语料
坚持就完事了2 小时前
Python的类型注解
开发语言·python
岱宗夫up2 小时前
FastAPI进阶:从入门到生产级别的深度实践
python·信息可视化·fastapi
七夜zippoe2 小时前
图神经网络实战:从社交网络到推荐系统的工业级应用
网络·人工智能·pytorch·python·神经网络·cora