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=argmaxa′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 的典型交互过程可以概括为:
- 初始化 Q(s,a)Q(s,a)Q(s,a);
- 每个 episode 开始,观察初始状态 sss,用 ϵ\epsilonϵ-greedy 从 QQQ 中选动作 aaa;
- 执行动作得到 rrr 与下一状态 s′s's′;
- 在 s′s's′ 用同样的 ϵ\epsilonϵ-greedy 选出下一动作 a′a'a′;
- 用 (s,a,r,s′,a′)(s,a,r,s',a')(s,a,r,s′,a′) 更新 Q(s,a)Q(s,a)Q(s,a);
- 令 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)maxa′∈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+γmaxa′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+γmaxa′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+γmaxa′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 的目标永远使用 maxa′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 的典型交互过程可以概括为:
- 初始化 Q(s,a)Q(s,a)Q(s,a);
- 每个 episode 开始,观察状态 sss;
- 用 ϵ\epsilonϵ-greedy 从 QQQ 中选择动作 aaa(行为仍需探索);
- 执行动作得到 rrr 和下一状态 s′s's′;
- 用 r+γmaxa′Q(s′,a′)r+\gamma\max_{a'}Q(s',a')r+γmaxa′Q(s′,a′) 更新 Q(s,a)Q(s,a)Q(s,a);
- 令 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,用 maxa′Q(s′,a′)\max_{a'}Q(s',a')maxa′Q(s′,a′) 逼近最优 Q∗Q^*Q∗,更新更激进地朝最优策略收敛。
在实践中,TD 方法的价值在于:它把"学习"拆成了每一步可执行的小更新,使得强化学习可以在长序列、在线交互、未知环境模型等现实条件下有效运作。