RL · Lecture 5 · Model-Free Control

21 点实验室 / 让 MC 与 SARSA 自己学会最优策略

lec4 只是评估一个固定策略;这一讲要直接跑出最优策略。下面两个算法都在真实的 21 点环境里在线学习,热力图会从一片混沌逐渐收敛成清晰的「要牌 / 停牌」阈值。

本讲两把刀:用 Q 代替 V(改进不需要模型) · 用 ε-greedy 代替纯贪心(不停止探索)
骨架不变:评估 ↑ × 改进 ↓ = 广义策略迭代 GPI(来自 lec3)

00 环境:21 点是一个 MDP

要让算法学习,先把 21 点翻译成 状态 / 动作 / 奖励。整局只有结束时才有奖励,中途全是 0——这正是 model-free 控制最干净的试验台。

状态 s =(我的点数 12–21, 庄家明牌 A–10, 是否有可用 A → 共 200 个状态
动作 a ∈ { STICK 停牌 , HIT 要牌 }
奖励:赢 +1 / 平 0 / 输 −1 (只在终局,γ = 1)
动手玩:感受状态与奖励
庄家 DEALER
明牌:—
你 PLAYER
点数:—
当前状态:点击「发新牌」开始。
注意这一把是你手动操作。下面两节里,是算法通过成千上万把这样的对局、靠 ε-greedy 探索 + 更新 Q,自己把每个状态该 HIT 还是 STICK 学出来。

01 MC ε-greedy 控制(GLIE)

蒙特卡洛思路最直白:玩完一整局,看终局回报 G,回头把这局走过的每个 (s,a) 的 Q 往 G 上挪一点。因为中途奖励都是 0、γ=1,所以一局里所有 (s,a) 的回报就等于同一个终局奖励 G ∈ {+1, 0, −1}。

每访问一次 (s,a):
N(s,a) ← N(s,a) + 1
Q(s,a) ← Q(s,a) + 1 / N(s,a) · ( G − Q(s,a) )
↑ 这就是「增量式求均值」:Q 永远是这个 (s,a) 历次回报的平均

怎么探索?—— GLIE 的 ε 自动衰减

纯贪心会把只试过一次的动作永久锁死(你前面问过的「左门悲剧」)。所以行动用 ε-greedy;而要最终收敛到最优策略,ε 必须慢慢归零。这里用 David Silver 在 Easy21 里的经典 GLIE 方案——越熟悉的状态、探索越少

ε(s) = N0 / ( N0 + N(s) ) N(s)=该状态被访问次数,N0=100
新状态 N(s)=0 → ε=1(纯探索);访问 900 次后 → ε≈0.1;→∞ 时 ε→0(纯贪心)
两个条件同时满足 = GLIE。① 无限探索:每个 (s,a) 被访问无限次(ε 不会突然变 0)。② 最终贪心:ε→0,策略塌缩成对 Q 的 argmax。于是 Q→Q*,策略→π*。
动手玩:跑 MC 控制,看策略热力图收敛
已玩局数 k
0
当前平均 ε
1.00
近 5k 局胜率
本轮策略翻转
HIT 要牌 STICK 停牌 颜色越深 = Q 差距越大 = 越确定
点「快进 50,000 局」最直观:无 A 一侧会浮现出「≥17 停牌」的硬边界。

02 SARSA:在线 TD 控制

MC 必须等一整局结束才能更新。SARSA 不等——每走一步就更新一次,用「下一步自己的估计」来自举(bootstrap)。名字就是它更新时用到的五元组:S, A, R, S′, A′

Q(S,A) ← Q(S,A) + α · [ R + γ·Q(S′,A′) − Q(S,A) ]
A′ = 你的策略在 S′ 实际会选的动作(先 ε-greedy 采出来,再代入)→ 所以是 on-policy

在 21 点里,中途每一步 R=0、γ=1,所以非终局更新就是 Q(S,A) += α·(Q(S′,A′) − Q(S,A));终局那一步没有 S′,target 直接是真实奖励 R = ±1/0。

慢放一局:看 TD 更新逐步发生
点上面按钮,逐条看 S → A → R → S′ → A′ 如何改写一个 Q 值。
动手玩:跑 SARSA,看它学出和 MC 几乎一样的策略
1/N(s,a)
GLIE
已玩局数 k
0
总更新步数
0
近 5k 局胜率
vs MC 策略一致
HIT 要牌 STICK 停牌 「vs MC 一致」需要先在上面把 MC 跑出来
把 α 拉到 1/N、ε 设 GLIE,跑 50k 局,结果会和 MC 这张图几乎重合——殊途同归。

03 MC vs SARSA:同一个 GPI,两种评估

两个算法骨架完全一样(评估→ε-greedy 改进→反复),只在「怎么估 Q」这一处分叉:

MC  Q ← Q + (1/N)·( G真实终局回报 − Q ) 等整局结束,无偏、方差大
SARSA Q ← Q + α·( R + γ·Q(S′,A′)自己的估计 − Q ) 每步更新,有偏、方差小
回到笔记里的结论
跑到收敛后看「无可用 A」那张图:底部一条清晰的橙蓝分界线落在 16/17 附近——点数 ≤16 要牌,≥17 停牌;唯独庄家明牌很烂(2–6)时,分界会下压,让你更早停牌等他爆。有可用 A 时整体更偏橙(更敢要牌)。这正是 David 那句 "this is the optimal way to behave" 的可视化。
一句话收口。Model-free 控制 = GPI 骨架 + 两把刀(Q 代替 V、ε-greedy 代替纯贪心)。MC 和 SARSA 只是 GPI 里「评估」那一格的两种填法;它们各自跑出来的策略热力图几乎重合,因为它们逼近的是同一个 Q*
Sk 的费曼笔记 · RL Lecture 5 · 环境实现参照 Sutton & Barto 21 点设定,GLIE 方案参照 David Silver Easy21(N₀=100, α=1/N)。所有学习都在你浏览器里实时计算。