强化学习理论 02:从 MC、TD 到 SARSA 与 Q-learning

上一章的 Bellman 方程告诉我们“价值应该满足什么关系”,但实际训练时,环境转移概率通常没有直接交给我们。能拿到的是一条条 (st,at,rt,st+1)(s_t,a_t,r_t,s_{t+1})。这一章讨论怎样把这些样本变成价值更新。

主线分两段:先固定策略,学习它的 VπV^\pi;再用动作价值 QQ 改进决策。不要把“评价现有策略”和“求最优策略”混在一次公式替换里。

一、更新的共同骨架:估计向目标走一点

表格价值更新可以统一写成

V(st)←V(st)+α[yt−V(st)],V(s_t)\leftarrow V(s_t)+\alpha\left[y_t-V(s_t)\right],

其中 α\alpha 是学习率,yty_t 是本次训练目标。难点主要不是减法,而是目标由什么构成、它在估计哪一个策略。

下面继续使用两步任务:s0s_0 选 forward 得到 −1-1,到 s1s_1 后得到 44 并真正终止,γ=0.9\gamma=0.9。先固定采样策略,假设当前估计 V(s0)=1.5,V(s1)=3V(s_0)=1.5,V(s_1)=3,学习率 α=0.1\alpha=0.1。

二、Monte Carlo:等完整回报揭晓

MC 的目标是这次真正终止的完整轨迹回报:

ytMC=Gt=∑k=0T−t−1γkrt+k.y_t^{\rm MC}=G_t=\sum_{k=0}^{T-t-1}\gamma^k r_{t+k}.

两步 forward 轨迹上,y0=−1+0.9×4=2.6y_0=-1+0.9\times4=2.6,因此

V(s0)←1.5+0.1(2.6−1.5)=1.61.V(s_0)\leftarrow1.5+0.1(2.6-1.5)=1.61.

MC 不从旧 VV 推测未发生的尾部,它等待奖励序列本身。固定策略、完整 on-policy 回合且回报可积时,条件于当前状态的采样回报是 VπV^\pi 的无偏样本;一次回报仍可能很不典型,需要多次采样。

特别注意:当前策略也可能采到 stop 路径,此时目标是 1。若策略各以 0.50.5 选择两条路径,目标平均才是上一章的 Vπ(s0)=1.8V^\pi(s_0)=1.8。这次 forward 的目标 2.6 不是这个混合策略的状态价值。

三、TD(0):用下一状态的估计提前更新

一步时序差分目标为

ytTD=rt+γbtV(st+1final),δt=ytTD−V(st).y_t^{\rm TD}=r_t+\gamma b_t V(s_{t+1}^{\rm final}),\qquad \delta_t=y_t^{\rm TD}-V(s_t).

这里 btb_t 表示能否从这次转移抵达的状态继续估值;真正终止时取 0,正常继续时取 1。st+1finals_{t+1}^{\rm final} 强调使用 reset 前的后继状态,而非下一局初始状态。

在 forward 第一步,y0=−1+0.9×3=1.7y_0=-1+0.9\times3=1.7,所以

δ0=0.2,V(s0)←1.5+0.1×0.2=1.52.\delta_0=0.2,\qquad V(s_0)\leftarrow1.5+0.1\times0.2=1.52.

这个目标没有等到最终的 +4+4,而是先相信当前的 V(s1)=3V(s_1)=3。这就是 bootstrap:用已有估计构造新的估计目标。随后在 s1s_1 真正终止,目标为 4,可把 V(s1)V(s_1) 从 3 更新为 3.1;未来再次访问 s0s_0 时,改进后的下一状态估计就会向前传播。

MC 的目标包含整段未来随机性,TD 的目标依赖一个可能不准的估计。常见直觉是前者方差较大、后者通常较低但有 bootstrap 误差;这不是适用于所有任务和分布的严格大小排序。一次目标有偏,也不等于算法必然不能收敛:表格 TD 的收敛需要固定策略、足够访问及合适步长等条件。

四、n-step:让真实奖励多走几步再接估计

如果接下来 nn 步没有越过终止边界:

yt(n)=∑k=0n−1γkrt+k+γnV(st+n).y_t^{(n)}=\sum_{k=0}^{n-1}\gamma^k r_{t+k} +\gamma^nV(s_{t+n}).

若在这之前真正终止,则只累加到终止,去掉 bootstrap 尾项。n=1n=1 对应 TD(0);在完整终止回合上一直累加到末尾,就得到 MC 目标。两步任务的二步目标正好是 2.6。

这条连续谱为下一章的 GAE 做准备:不只选一个固定步数,也可以把不同长度的证据加权组合。长片段能减少对近端错误价值的依赖,但也会包含更多随机奖励,数据等待与计算方式也不同。

五、为什么 terminated 和 truncated 不能都当“未来为零”

环境需要 reset,并不总意味着任务的长期价值为零。

边界 语义 是否 bootstrap 是否跨 reset 传播
正常转移 当前任务继续 是 同一轨迹可继续
真正终止 任务定义中的成功、失败或结束 否 否
外部时间截断 采样器提前停下,原任务仍可继续 是,用截断前的 final observation 否
rollout buffer 收满 只是这批数据存够了 是,用最后状态 本批反向计算到这里停止

假设这一步 r=2,γ=0.9,V(sfinal)=5r=2,\gamma=0.9,V(s^{\rm final})=5:真正终止的目标是 2;外部时间截断的目标是 6.5。如果把后者错误清零,就系统性低估边界附近的价值。

时间耗尽也有两种含义。 如果“必须在 10 秒内完成”就是任务定义的一部分,时间耗尽可是真正终止;为了保持马尔可夫性,剩余时间应纳入充分状态,策略需要时也应可观测。不能把所有 timeout 都解释成外部截断。

下面的伪代码只展示 bootstrap 语义:

# final_next_state 是本次 transition 的真实后继,不是自动 reset 后的新起点。
bootstrap = 0.0 if terminated else V(final_next_state)
target = reward + gamma * bootstrap
# truncated 会切断 episode 序列,但不把这个 bootstrap 直接清零。

不同库有不同自动 reset 与 final-observation 接口,必须读使用版本的 API。这个边界在 GAE 中还需要第二个 mask,下一章展开。

六、从评价 V 走到控制 Q

只有 V(s)V(s),还需要模型才能直接比较“选某个动作之后会去哪”。学习 Q(s,a)Q(s,a) 后,就能用同一状态下的动作价值选择动作。常见探索方法是 ϵ\epsilon-greedy:以 1−ϵ1-\epsilon 选当前最大 QQ 动作,以 ϵ\epsilon 在动作集中随机采样。探索用于发现尚未见过的结果,不是保证机器人实机试错安全。

SARSA:沿着实际行为策略备份

采到 (s,a,r,s′,a′)(s,a,r,s',a'),且 a′a' 是下一步实际按行为策略选择的动作:

ySARSA=r+γQ(s′,a′),Q(s,a)←Q(s,a)+α[y−Q(s,a)].y^{\rm SARSA}=r+\gamma Q(s',a'), \qquad Q(s,a)\leftarrow Q(s,a)+\alpha[y-Q(s,a)].

真正终止时去掉后项。若行为含随机探索,目标会把“之后也可能探索到较差动作”这件事计入价值。

Q-learning:对下一步的贪心目标备份

yQ=r+γmax⁡a′Q(s′,a′).y^{Q}=r+\gamma\max_{a'}Q(s',a').

采样行为可以仍然在探索,但这一步目标以未来贪心选择为基础。给定 r=1,γ=0.9,Q(s′,⋅)=(6,2)r=1,\gamma=0.9,Q(s',\cdot)=(6,2),如果探索实际选择第二个动作:

ySARSA=1+0.9×2=2.8,yQ=1+0.9×6=6.4.y^{\rm SARSA}=1+0.9\times2=2.8,\qquad y^{Q}=1+0.9\times6=6.4.

差别不是谁把减法算对了,而是在评价哪一种后续行为。SARSA 与 Q-learning 的表格收敛结论都有访问覆盖、步长及策略变化等条件;固定不衰减的学习率、不断变化的环境和深网逼近不自动满足这些定理。

七、on-policy / off-policy 到底在分什么

  • 行为策略产生数据;目标策略是正在评价或改进的对象。
  • 二者对齐,称 on-policy;允许不同,称 off-policy。SARSA 是典型的 on-policy 例子,Q-learning 是典型的 off-policy 例子。
  • 这不是“在线训练/离线训练”的同义词,也不能只通过有没有 replay buffer 判断。
  • Actor–Critic 是 actor 与 critic 的结构分工,不等于一种固定的数据使用方式;它可以是 on-policy,也可以是 off-policy。

当状态多到无法建表,改用神经网络 Qϕ(s,a)Q_\phi(s,a),常见损失是预测与冻结目标间的均方误差。函数逼近、bootstrap、off-policy 三者组合可能导致不稳定,不能从表格更新式直接推断深网一定收敛。DQN 的 replay buffer 和 target network 是工程稳定机制;理解基础后再看完整算法,别把一行 Q-learning 当作 DQN 全部。

参考与下一步

知识共享许可协议