跳转至

十一:强化学习:蒙特卡洛方法、Sarsa 与多步 Sarsa

来源:http://mp.weixin.qq.com/s?__biz=MzYyNTk3Njg1NA==&mid=2247483907&idx=1&sn=0f674df77aff573409529e7a62f0d8f2&chksm=f01eb17ac769386c28172b04404ef6541004f19dbe478458d9c5e8063cedc7b9376158e980e9#rd

1. 学习定位

第十天学习了 Bellman 方程、动态规划、策略迭代和价值迭代。那些方法默认已知完整环境模型 PR。现实中更常见的情况是:智能体只能和环境交互,采样到轨迹,不知道真实转移概率和奖励函数。 第十一天进入 model-free 强化学习的基础:

不再枚举 P(s'|s,a)
-> 通过 episode 或 transition 采样学习价值
-> Monte Carlo 用完整回报更新
-> TD 用一步 bootstrap 更新
-> Sarsa 学 on-policy 动作价值
-> n-step Sarsa 在 MC 和 TD(0) 之间折中
本日知识链路:

Dynamic Programming: 已知模型,做期望 backup
Monte Carlo: 不需要模型,用完整 episode return
Robbins-Monro: 用随机样本迭代估计期望
Temporal Difference: 用 reward + next value 做 bootstrap
Sarsa: 用 (S,A,R,S',A') 更新 Q
n-step Sarsa: 用 n 步回报连接 MC 和 TD
Q-learning: 与 Sarsa 对比,理解 on-policy/off-policy 差异

2. 从 DP 到采样式学习

动态规划的更新形如:

V(s) <- sum_a pi(a|s) sum_{s'} P(s'|s,a) [R(s,a,s') + gamma V(s')]

img

它依赖完整环境模型。采样式 model-free 方法不再显式求这个期望,而是通过实际交互样本近似期望。 一次采样 transition:

(S_t, A_t, R_{t+1}, S_{t+1})
一条 episode:

S_0, A_0, R_1, S_1, A_1, R_2, ..., S_T
采样式学习的基本思想:

真实期望不可直接计算
-> 用样本平均或随机逼近估计
-> 多次采样后估计逐渐接近真实价值

3. 蒙特卡洛方法的核心思想

Monte Carlo(MC)方法通过完整 episode 的实际回报来估计价值函数。 对于状态价值:

V^pi(s) = E_pi[G_t | S_t=s]

img

MC 的估计方式是:收集多条 episode 中访问状态 s 后得到的回报 G_t,对这些回报取平均。

V(s) = average(returns after visits to s)
MC 不需要知道 PR,只需要能采样 episode。因此它适合 episodic task,也就是有自然终止的任务。必须跑完整段任务直到终止,才能算出每一步的G_t,这是 MC 最典型的特征。

4. First-visit MC 与 Every-visit MC

同一个 episode 中,状态 s 可能出现多次。 First-visit MC:

每条 episode 中只使用第一次访问 s 后的 return 更新 V(s)
Every-visit MC:

每条 episode 中每次访问 s 后的 return 都用于更新 V(s)
在足够采样和适当条件下,两者都可以收敛到真实价值。First-visit 理论分析更直接,Every-visit 更充分利用数据。

5. 增量均值更新

如果把所有回报都存下来再求平均,内存开销会增加。可以使用增量均值:

V_n = V_{n-1} + 1/n * (G_n - V_{n-1})

img

更一般地,可以用学习率 alpha

V(s) <- V(s) + alpha [G_t - V(s)]

img

其中:

target = G_t
error = G_t - V(s)
当环境非平稳时,固定 alpha 可以让新样本持续影响估计;当需要收敛到稳定均值时,通常使用逐渐减小的 alpha

6. Robbins-Monro 随机逼近

Robbins-Monro 算法提供了用随机样本逼近期望或方程根的理论基础。强化学习中很多更新都可以看成随机逼近:

estimate <- estimate + alpha_t * (sample_target - estimate)
经典收敛条件:

sum_t alpha_t = infinity
sum_t alpha_t^2 < infinity
第一条保证持续学习,第二条保证噪声影响逐渐可控。

直观理解

  • 条件 1:我必须一直学,不能学到一半停更
  • 条件 2:学习步子必须越来越小,不能一直大跳

典型例子是:

alpha_t = 1/t
在深度强化学习中,常使用固定学习率或调度学习率,不一定严格满足理论条件,但 Robbins-Monro 仍是理解随机更新的基础。

7. 蒙特卡洛预测

MC prediction 的目标是:给定策略 pi,估计 V^piQ^pi。 状态价值 MC prediction:

generate episode following pi
for each state S_t in episode:
  G_t = R_{t+1} + gamma R_{t+2} + ...
  V(S_t) <- V(S_t) + alpha [G_t - V(S_t)]
动作价值 MC prediction:

Q(S_t,A_t) <- Q(S_t,A_t) + alpha [G_t - Q(S_t,A_t)]
在没有环境模型时,控制问题通常更偏向学习 Q(s,a),因为有了 Q 就可以不通过 P 直接改进策略。

8. 蒙特卡洛控制

MC control 的目标是学习最优策略。它通常遵循 GPI:

1. 用 MC return 估计 Q^pi
2. 让策略对 Q 更贪心
3. 重复采样和更新
如果直接变成完全贪心策略,可能丧失探索。常用方法是 epsilon-greedy:

以 1 - epsilon 的概率选择当前最优动作
以 epsilon 的概率随机探索其他动作
为了保证所有状态动作对都被充分访问,可以使用 exploring starts,或使用 epsilon-soft policy。

9. On-policy MC 与 Off-policy MC

On-policy MC 使用同一个策略产生数据并改进该策略。典型做法是保持策略为 epsilon-greedy,使探索一直存在。 Off-policy MC 使用行为策略 b 采样数据,学习目标策略 pi。由于数据分布不一致,需要重要性采样:

rho = product_t pi(A_t|S_t) / b(A_t|S_t)

img

Off-policy 可以利用更广泛数据,但重要性采样可能高方差,尤其在长 episode 中。

10. TD 学习的核心思想

Temporal Difference(TD)方法结合了 Monte Carlo 和 Dynamic Programming: - 像 MC 一样,不需要完整模型,直接从采样经验学习。

  • 像 DP 一样,使用已有价值估计进行 bootstrap。

  • TD:一步就能更新,不用模型、不用等结束

TD(0) 状态价值更新:

V(S_t) <- V(S_t) + alpha [R_{t+1} + gamma V(S_{t+1}) - V(S_t)]

img

TD target:

R_{t+1} + gamma V(S_{t+1})
TD error:

delta_t = R_{t+1} + gamma V(S_{t+1}) - V(S_t)
TD 可以在线更新,不必等到 episode 结束。

11. MC 与 TD 的偏差方差权衡

MC target 使用真实完整回报:

G_t
它通常无 bootstrap bias,但方差较高,且必须等 episode 结束。 TD target 使用一步奖励和下一状态估计:

R_{t+1} + gamma V(S_{t+1})
它方差较低,可以在线更新,但引入 bootstrap bias,因为 target 依赖当前价值估计。 这种权衡贯穿强化学习:

MC: low bias, high variance
TD: higher bias, lower variance
n-step: between MC and TD(0)

12. Sarsa 算法

Sarsa 是 on-policy TD control 算法。名字来自一次更新使用的五元组:

S_t, A_t, R_{t+1}, S_{t+1}, A_{t+1}
更新公式:

Q(S_t,A_t) <- Q(S_t,A_t)
  + alpha [R_{t+1} + gamma Q(S_{t+1},A_{t+1}) - Q(S_t,A_t)]

img

其中 A_{t+1} 是当前行为策略实际会选择的下一个动作。因此 Sarsa 学的是包含探索行为在内的策略价值。

13. Sarsa 的训练流程

典型流程:

initialize Q(s,a)
for each episode:
  initialize S
  choose A from S using epsilon-greedy(Q)
  loop until terminal:
    take action A, observe R, S'
    choose A' from S' using epsilon-greedy(Q)
    Q(S,A) <- Q(S,A) + alpha [R + gamma Q(S',A') - Q(S,A)]
    S <- S'
    A <- A'
如果 S' 是终止状态,则 target 只等于 R

14. 多步 Sarsa

多步 Sarsa 使用 n-step return:

G_{t:t+n}
= R_{t+1} + gamma R_{t+2} + ... + gamma^{n-1} R_{t+n}
  + gamma^n Q(S_{t+n}, A_{t+n})
更新:

Q(S_t,A_t) <- Q(S_t,A_t)
  + alpha [G_{t:t+n} - Q(S_t,A_t)]
n=1 时,它就是 Sarsa(0)。当 n 到 episode 结束时,它接近 Monte Carlo 更新。

15. Sarsa 与 Q-learning

Sarsa 更新目标:

R + gamma Q(S', A')
其中 A' 是行为策略实际采样的动作,所以 Sarsa 是 on-policy。 Q-learning 更新目标:

R + gamma max_a Q(S', a)
它学习的是贪心目标策略,即使行为策略仍在探索,所以 Q-learning 是 off-policy。 Cliff Walking 中,Sarsa 会考虑 epsilon-greedy 探索可能掉下悬崖,因此倾向更保守路径;Q-learning 学到最优贪心路径,可能贴近悬崖。

16. 关键超参数

常见超参数: - alpha:学习率,控制新样本更新幅度。

  • gamma:折扣因子,控制未来奖励权重。

  • epsilon:探索率,控制随机探索比例。

  • n:多步 Sarsa 的步数。

  • episode 数量:采样规模。

调参直觉: - alpha 太大容易震荡,太小学习慢。

  • epsilon 太大策略噪声高,太小探索不足。

  • gamma 越大越重视长期结果,但方差和学习难度上升。

  • n 越大越接近 MC,方差上升但 bootstrap bias 减少。

17. 实现细节

表格型 Sarsa 通常维护:

Q: shape = [num_states, num_actions]
policy: epsilon-greedy(Q)
多步 Sarsa 需要缓存最近的状态、动作和奖励:

states[t], actions[t], rewards[t+1]
处理终止状态时:

if t+n >= T:
  G = sum of rewards until terminal
else:
  G = n-step rewards + gamma^n Q(S_{t+n}, A_{t+n})
常见错误包括:奖励索引错位、终止状态继续 bootstrap、更新了错误的动作、epsilon-greedy 没有覆盖全部动作、Q 表维度与状态编号不一致。

18. 与 LLM、RLHF、Agent 的联系

LLM/RLHF 和 Agent 场景中,很难知道完整转移模型,因此更接近采样式强化学习。 对应关系:

episode: 一次完整对话、一次工具任务、一次代码修复流程
state: 当前上下文、历史消息、工具结果、任务状态
action: 生成 token、回复、工具调用、检索、追问
reward: 偏好模型评分、任务成功、人工反馈、安全分、成本惩罚
MC 思想对应“等完整任务结束后用最终结果更新”。TD 思想对应“用中间价值估计更新当前决策”。在长任务 Agent 中,纯 MC 反馈太慢,TD/critic 类方法能更早传播学习信号。

19. 常见误区

误区一:认为 MC 和 TD 都需要已知模型。 它们通常是 model-free 方法,通过采样学习。 误区二:认为 MC 一定比 TD 更准确。 MC target 不 bootstrap,但方差高;TD target 有 bias,但方差低、可在线更新。 误区三:把 Sarsa 和 Q-learning 的 target 写成一样。 Sarsa 用实际下一个动作 A',Q-learning 用 max_a Q(S',a)。 误区四:忽略探索策略。 控制算法如果探索不足,很多状态动作对不会被访问,Q 值无法可靠估计。 误区五:多步 Sarsa 的索引错位。 R_{t+1} 是执行 A_t 后得到的奖励,n-step return 的 reward 与 state/action 索引必须统一。

20. 核心总结

第十一天需要掌握的最小闭环:

Monte Carlo:
  用完整 episode return G_t 更新价值。
  target = G_t

Robbins-Monro:
  estimate <- estimate + alpha(sample_target - estimate)

TD(0):
  target = R_{t+1} + gamma V(S_{t+1})
  delta = target - V(S_t)

Sarsa:
  Q(S,A) <- Q(S,A) + alpha[R + gamma Q(S',A') - Q(S,A)]
  on-policy

n-step Sarsa:
  target = n 步奖励 + gamma^n Q(S_{t+n},A_{t+n})

Q-learning:
  target = R + gamma max_a Q(S',a)
  off-policy

21. 参考资料

  • CSDN:蒙特卡洛方法:https://blog.csdn.net/qq_64671439/article/details/135345465

  • CSDN:Robbins-Monro 算法和随机梯度下降:https://blog.csdn.net/qq_64671439/article/details/135375515

  • CSDN:从 Sarsa 讲到 Q-learning:https://blog.csdn.net/qq_64671439/article/details/136529678

  • 动手学强化学习:时序差分算法:http://hrl.boyuai.com/chapter/1/%E6%97%B6%E5%BA%8F%E5%B7%AE%E5%88%86%E7%AE%97%E6%B3%95/

  • Sutton and Barto, Reinforcement Learning: An Introduction, Chapter 5-7:http://incompleteideas.net/book/RLbook2020.pdf

  • OpenAI Spinning Up: Key Concepts in RL:https://spinningup.openai.com/en/latest/spinningup/rl_intro.html

  • Hugging Face Deep RL Course:https://huggingface.co/learn/deep-rl-course/

            预览时标签不可点
    

    <div class="