自举 · 在线学习
时序差分学习Temporal-Difference Learning
RL 最著名的算法对决:Cliff Walking 上的 SARSA(同策略)vs Q-Learning(异策略),差异一眼看懂。
3h
阅读 + 实操
3 个
交互演示
进阶
难度
时序差分学习 · 交互演示
算法Q-L
步数48
掉落0
SARSA(在策略)— 安全路径
Q-Learning(离策略)— 最优路径
颜色 =
低
高 Q 值
-13= 该格 max Q(预计总分)
→= 当前最优动作
最近一集路径
X = 悬崖(-100)
终点 G
5.1 边走边学:TD 的核心思想
蒙特卡洛要等回合结束才能学 —— 但很多任务没有「结束」(比如持续运行的系统),或者回合太长等不起。时序差分学习(TD)给出了 RL 最漂亮的答案:每走一步就更新一次,用「对下一状态的当前猜测」代替「未知的真实未来」。SARSA 和 Q-Learning 这对经典算法的差异,将在悬崖行走环境里展现出两种截然不同的性格。
下一步预告:表格型方法到此齐了,但状态一多表格就装不下;下一章引入神经网络近似 Q 函数,DQN 让 RL 与深度学习交汇。
📌 发生了什么
- TD 用「下一步的估计值」自举,不必等回合结束
- SARSA 是同策略:更新用的 a' 就是实际策略会选的
- Q-Learning 是异策略:更新用 maxₐ Q(s',a')
- 同策略更保守安全,异策略学最优但训练更抖
⚠️ 常见陷阱
- 误把 SARSA 当 Q-Learning:悬崖任务里 SARSA 反而更安全
- α 太大导致不收敛、太小学得极慢
- ε 探索不足时 Q 表很多状态从未更新
✅ 本章小结
- TD = 自举 + 采样,兼具 MC 与 DP 优点
- SARSA 保守、Q-Learning 激进
- 二者之差正是「同策略 vs 异策略」
5.2 TD(0):用猜测更新猜测
时序差分结合了 MC 的采样与 DP 的自举(bootstrap):用「下一步的估计」更新当前估计。
TD(0):更新目标为 R + γV(s')(自举),无需等 episode 结束。括号内称为 TD 误差 δ = R + γV(s') - V(s)。
5.3 Q-Learning:假设下一步选最优
Q-Learning:异策略,更新目标用 max_a' Q(s',a') —— 无论实际执行什么动作,都按「假设下一步选最优」来更新。
5.4 SARSA:按实际动作更新
SARSA(同策略)则把 max 换成实际下一动作 Q(s',a'):目标 = R + γQ(s',a'),更保守、对探索更敏感。
5.5 学习率 α 与 TD/MC 对比
α 控制每步更新的步幅;TD 与 MC 在偏差/方差上各有取舍。
| 参数 | 表现 | 结果 |
|---|---|---|
| α = 0.01 | 更新极慢,估值变化平缓 | 收敛过慢 |
| α = 0.1 | 平衡更新速度与稳定性 | 推荐区间 |
| α = 0.5 | 单步更新剧烈,估值震荡 | 不稳定 |
💡 TD 有偏(自举引入偏差)但方差低;MC 无偏但方差高(取决于完整轨迹)。TD 通常更快收敛。
5.6 Q-Learning 核心代码走读
每步用 ε-greedy 采样动作,按 max 更新 Q(Python,与上方演示器一致):
gamma, alpha, eps = 0.9, 0.1, 0.1
Q = {} # Q[s][a]
for ep in range(n_episodes):
s = reset()
while not is_terminal(s):
# ε-greedy 选动作
a = (random_action(s) if np.random.rand() < eps
else argmax(Q[s]))
s2, r = step(s, a)
# Q-Learning 更新(异策略:用 max)
max_next = 0 if is_terminal(s2) else max_a(Q[s2])
Q[s][a] += alpha * (r + gamma * max_next - Q[s][a])
s = s2
📚 参考文献与延伸阅读
- Sutton & Barto, Reinforcement Learning (2nd ed.), §6 Temporal-Difference Learning — TD(0)、SARSA、Q-Learning
- Watkins, C. (1989), Learning from Delayed Rewards — Q-Learning 的博士论文原始提出
- Wikipedia: Q-learning — 算法、收敛性与变体
📝 课后练习
检验你的理解——答对为止