AI 学习课程 / LESSON 15

第十五节:表格型强化学习

上一节只走路线,这一节开始真正更新“每个状态值多少、每个动作值多少”。同一张小网格,依次看已知规则的价值迭代、固定策略的 MC/TD 估计,以及靠经验学习策略的 Q-learning。

价值迭代蒙特卡洛 / TDNumPy Q 表SARSA 对照离线 HTML

01 / 别把“知道环境”与“靠经验学习”混在一起

同一个网格,四种更新方式

方法知道完整转移规则?何时能更新?本节学习什么
价值迭代知道可直接枚举所有状态和动作最优状态价值 V*
蒙特卡洛(MC)预测不需要整回合结束,得到完整回报固定策略的 Vπ
TD(0) 预测不需要每经历一步,就用下一状态估计固定策略的 Vπ
Q-learning 控制不需要每经历一步,更新 Q(s,a)用于选择动作的 Q 表

还是第十四节的网格:S 向右到 C 立即拿 +2 并结束;向下经过 A、B、D 再到 G,末尾拿 +10。动作撞墙或越界会原地停留且奖励 0。折扣因子 γ 决定从 S 看哪条路更好。

先记住:价值迭代在规划,需要转移模型;MC 和 TD 在评估一个固定策略;Q-learning 在靠采样经历学会选动作。它们的目标对象不同。

02 / 已知环境时如何规划

价值从奖励处一轮轮向前传播

把所有状态的 V₀ 设为 0。每轮对每个非终止状态同时做一次 Bellman 最优备份,使用的是上一轮的数值;终止状态 C/G 价值设为 0,因为奖励已经在进入它们的转移上给出。切换 γ 和轮数,观察 G 的 +10 怎样传回 S。

每格当前 V 值
奖励传播

Vₖ₊₁(s) = maxₐ Σ_s' P(s'|s,a) [r(s,a,s') + γ Vₖ(s')] 本例转移确定,概率和只剩对应的一个下一状态。 进入 C 或 G 后回合结束,后续项为 0。

γ=0.8:第 1 轮 D 因可直接到 G 获得价值 10;第 2 轮 B 看见 D 的价值;第 3 轮 A 看见 B;第 4 轮 S 才把“向下通往 G”的价值提高到 5.12,超过立即拿 2。γ=0.5 时,S 保持 2 更好。

03 / 不知道转移表,只能经历一回合

MC 等最终结果;TD 先借用已有估计

为了只比较更新规则,固定策略为 S↓A→B→D→G,奖励始终是 0,0,0,10,γ=0.8,学习率 α=0.5,初始 V 都是 0。这里是预测 Vπ,尚未改进策略。

此状态的估计

四个通道状态
MC:V(s) ← V(s) + α [Gₜ − V(s)] (等完整回合) TD(0):V(s) ← V(s) + α [rₜ₊₁ + γV(s') − V(s)] (每走一步) 终止转移:下一状态价值按 0 处理。

第一回合结束后,MC 已知道从 S 出发的完整回报 5.12,所以 V(S) 变成 2.56;TD 第一回合走到 S→A 时 V(A) 仍是 0,所以 V(S) 仍是 0,直到后续回合把价值逐步传回来。TD 的优势是不用等回合结束就能更新,不是说第一次就一定学得更快。

04 / 从 V 转向状态—动作对

Q-learning 每经历一步,就修正一个表格单元

Q 表的行是状态 S/A/B/D/C/G,列是右、下、上、左,形状 (6,4)。下面这个独立数字例子允许你切换“下一状态是否终止”,从而看清为什么终止时不能继续加未来价值。

target = r (如果已终止) target = r + γ maxₐ' Q(s',a') (否则) Q(s,a) ← Q(s,a) + α[target − Q(s,a)]

演算固定 Q旧(s,a)=1、γ=0.8、α=0.5、max Q(s',·)=5。代码训练时使用同一更新式;动作来自 ε-greedy 行为策略。收集数据可以探索,而更新目标仍选下一状态的最大 Q,这正是后面说的 off-policy 含义。

05 / 真正训练 6 张 Q 表

训练时探索,评估时关闭探索

代码分别用 γ=0.5/0.8、ε=0/0.1/0.3 训练 800 回合,每步按 ε-greedy 选动作;最多走 20 步。每次都从 S 开始,固定随机种子方便重现。下方“贪心评估”把 ε 设为 0,从 S 实际走一回合。

起点两个关键 Q 值

随机策略与学后贪心策略

随机基线是不学习、四方向均匀随机,评估 300 回合并取平均;贪心评估来自本次训练后的 Q 表。在这个确定性网格里,同一张 Q 表的贪心路线每次相同。训练回合的平均回报仍包含 ε 探索动作,不等于关闭探索后的评估回报。

这只是固定种子的微型示例。ε=0 恰好因平手优先向右而反复选择 +2;它没有试过长路线,所以不能仅凭这次结果断言“永远不能学习”。要判断算法稳定性,需要换随机种子和环境多次评估。

06 / 表格不是抽象符号

逐行读出最终 Q(s,a) 与实际路线

下表显示你在上一节训练面板选中的 800 回合末Q 表;改变 γ 或 ε 可观察差异。每行最高的动作就是贪心动作,平手按“右、下、上、左”的顺序选择。C/G 是终止格,不再选动作。

Q 表(6×4)
贪心路线

如果你把 γ 改为 0.5,走到 G 的起点折扣回报只有 1.25,因此即使知道长路线,起点选右拿 2 仍是合理策略。若 γ=0.8 且训练中探索到了长路线,Q(S,下) 可以超过 Q(S,右)。

07 / 同是 TD 控制,目标可不同

SARSA 跟随实际下一动作;Q-learning 取下一状态最大值

看一个独立数字例子:当前 Q(s,a)=1、r=0、γ=0.8、α=0.5;下一状态的最大 Q 为 5。如果行为策略因探索真的选了一个 Q=1 的动作,SARSA 用 1,Q-learning 仍用 5。

SARSA · on-policy

Q-learning · off-policy

SARSA 目标:r + γ Q(s', 实际选的 a') Q-learning 目标:r + γ maxₐ' Q(s',a') 两者在终止状态的目标都只是 r。

“on-policy”在这里指 SARSA 更新时跟着正在采样的行为策略所选下一动作;“off-policy”指 Q-learning 即使从探索行为采样,也朝下一状态的贪心最大值更新。这个小数例子用于对照公式,不是上面训练所得的某个真实 Q 行。

08 / 自己改代码

用项目已有的 NumPy 重跑与验证

代码沿用第十四节的网格,输出价值迭代各轮、固定策略 MC/TD、6 组 NumPy Q-learning、随机基线及贪心评估。无新依赖,也不需要启动服务。

uv run python lessons/lesson-15-tabular-rl.py

阅读代码 · 查看本次实验结果

  1. 手算 γ=0.8 时价值迭代前四轮 V(S)、V(A)、V(B)、V(D),再用页面核对。
  2. 解释为什么同一条长路线第一回合后,MC 的 V(S)=2.56,而 TD 的 V(S)=0。
  3. 从 Q-learning 循环找出行为策略、TD 目标、更新公式和终止判断,并预测删掉终止判断会出现什么问题。
  4. 将训练 ε 从 0 改为 0.1,比较 γ=0.8 的贪心评估路线;再把 γ 改成 0.5,解释起点策略变化。
  5. 改随机种子重跑,不用一次结果概括算法性能;记录贪心终点与随机基线。

09 / 自测

五道题

1. 价值迭代与 Q-learning 的关键数据要求差别?

2. MC 预测通常什么时候拿到目标 Gₜ?

3. Q-learning 遇到真正终止状态时,目标是什么?

4. SARSA 与 Q-learning 下一步目标的不同点?

5. 为什么不能把训练平均回报直接当成贪心评估?

下一节:深度强化学习与 DQN。当状态数太多、不方便列 Q 表时,用神经网络近似 Q,并讨论经验回放和目标网络。