RL COLLECTION / 04 / DEEP DIVE

SARSA:
为什么要把“实际下一动作”写进 target?

SARSA 的名字就是一条经验的五元组。它不假装未来一定完全贪心,而是如实学习当前会探索、会犯错的行为策略长期会得到什么。

TARGET

读完后,你能从固定策略 Bellman 方程推到 SARSA,并解释它与 Q-learning 的差别不是一行代码那么简单。

理解目标算法原理应用判断
SARSA 名称与数据流State–Action–Reward–State–Action:一次更新明确需要实际采到的 a′。代码中下一动作必须在更新前按行为策略采样。
On-policy 的精确定义行为策略 μ 与被评估的目标策略 π 是同一条 ε-greedy 策略。探索本身的风险被写进 value;安全敏感的在线行为常在意这一点。
与 Q-learning 的 target 分叉Q(s′,a′) 对比 max Q(s′,·)。分清“实际会怎样走”和“若未来完美贪心会怎样走”。

1 · WHICH VALUE IS SARSA TRYING TO LEARN?

它估的不是 Q*,而是当前行为策略的 Qπ。

固定策略 π 下,动作价值满足 Bellman expectation equation:

Qπ(s,a) = Σs′,rP(s′,r|s,a)[r + γ Σa′π(a′|s′)Qπ(s′,a′)]当前 a 已固定;环境返回 s′、r 后,下一动作 a′ 不是取最大,而是按同一个策略 π 的概率分布行动。因此它评估的是“我之后真的会如何选择”。

若 π 是 ε-greedy,未来偶尔探索到坏动作的风险也进入 Qπ。这并不是算法保守,而是对实际执行机制的如实估值。

2 · FROM EXPECTATION TO SARSA SAMPLE

把下一动作也真实采出来,就得到名称中的最后一个 A。

一次在线交互按顺序产生 s→a→r→s′→a′。其中 a 和 a′ 都从同一行为策略 π(常为 ε-greedy)采样。用该实际样本替代上式期望:

targetSARSA = rt+1 + γQt(st+1,at+1)
Q(st,at) ← Q(st,at) + α[targetSARSA − Q(st,at)]这是一份 Bellman expectation target 的样本。注意 a′ 是已经按 π 实际抽到的动作,而非“Q 最大的假想动作”。
SARS′A′S,A,R,S′ come from one environment step; A′ is immediately sampled from the same behavior policy最后一个 A′ 使 target 与实际策略一致,这就是 on-policy。

3 · ONE CLIFF, TWO OBJECTIVES

悬崖行走不是“谁更聪明”的故事,而是两个不同的未来假设。

想象最短路紧贴悬崖。每步 −1,掉下去 −100;训练时 ε=0.1,意味着偶尔会随机走错。来到悬崖边的状态 B:safe 会绕远,risky 走近路。

算法在 B 后如何构造 future对训练中的随机失手是否定价常见学到的路径
SARSA采实际 ε-greedy 的 a′,它可能是安全动作也可能是随机失手。是。未来会探索的风险降低贴崖路线的 Q。通常更安全、更远的路。
Q-learning取 max Q(B,·),假设未来总能贪心走对。否。target 忽略实际 a′ 的探索风险。通常更短、贴崖的 greedy 目标路。
不要误读为“SARSA 更安全,所以更好”

若部署时也会持续 ε-greedy,SARSA 的估值更贴近实际行为;若训练后关闭探索并追求最优 greedy 策略,Q-learning 的目标更直接。问题先是“要评价哪条策略”,不是先选算法名。

4 · PSEUDOCODE AND INVARIANT

SARSA 必须携带下一动作进入下一轮;这不是写法偏好。

initialize Q(s, a)
for each episode:
    s = reset()
    a = epsilon_greedy(Q[s], epsilon)       # first A
    while not terminal:
        s_next, r, terminated = step(a)
        if terminated:
            target = r
            Q[s, a] += alpha * (target - Q[s, a])
            break
        a_next = epsilon_greedy(Q[s_next], epsilon)  # actual A′
        target = r + gamma * Q[s_next, a_next]
        Q[s, a] += alpha * (target - Q[s, a])
        s, a = s_next, a_next               # carry A′ forward
不变量为何必要破坏后会变成什么
target 使用的 a′ 与下一循环实际执行的 a 是同一动作。保证更新确实评估行为策略 π。若 target 用 max 而执行 ε-greedy,就变为 Q-learning 式 off-policy。
terminal 时没有 a′。终止后 future return=0。错误采样 terminal 的动作会把虚构 Q 泄漏进 target。
ε 影响所有未来样本动作。Qπ 随 π 改变;改变 ε 就是在改变估值对象。把不同 ε 收集的数据混作同一 on-policy 目标,解释会变模糊。

5 · CONVERGENCE AND LIMITS

理论保证描述的是表格、充分探索、逐步贪心的极限,不是任意训练曲线。

在有限 MDP、适当步长和充分访问的 tabular 条件下,SARSA 对固定策略可做 TD policy evaluation。用于控制时,常讨论 GLIE(Greedy in the Limit with Infinite Exploration):每个 state-action 持续被访问,同时行为策略逐渐变得 greedy。直觉上,早期探索收集证据,长期探索率趋零使被评估的策略靠近最优策略。

边界为什么会出问题应如何报告
ε 固定不降算法在持续评估带随机失手的策略,最终性能不等于纯 greedy 最优。分别报告训练 ε 与 ε=0 评估。
ε 太快归零覆盖不足,早期偶然 Q 排名会被锁定。给动作访问计数与 ε schedule 消融。
函数近似共享参数和 bootstrap 破坏简单表格分析。不能把 GLIE 结论直接声称到神经网络。
非平稳环境目标策略和转移都在变,旧 Q 不再代表同一对象。解释固定 α、持续探索作为适应性选择的代价。

SELF-CHECK

能回答这些,才真正分清了 SARSA 与 Q-learning。

01 · SARSA 是 off-policy 吗?

标准 SARSA 是 on-policy:它用行为策略实际选择的 a′ 构造 target,因此它学习的正是这条行为策略的 Qπ。

02 · 若 a′ 恰好是 greedy 动作,两者本次更新相同吗?

若 Q(s′,a′)=max Q(s′,·),则 target 数值相同;差异在于 SARSA 未来也可能采到非 greedy a′,长期平均 target 不同。

03 · 为什么 SARSA target 不显式写 Σπ(a′|s′)?

它采样一个实际 a′ 作为这层策略期望的样本。Expected SARSA 则直接计算 Σa′π(a′|s′)Q(s′,a′)。

NEXT

把表格换为神经网络,为什么问题突然变难?