无模型方法
动态规划的前提是已知环境模型($P(s'|s,a)$ 和 $R(s,a)$)。但现实中,你通常不知道"在这个状态下做这个动作,转移到那个状态的概率是多少"。
无模型方法的核心思路:不知道模型,就去做实验。智能体通过与环境交互,收集真实的经验数据 $(s_t, a_t, r_{t+1}, s_{t+1})$,然后从中学习价值函数和最优策略。
| 方法 | 需要模型? | 数据来源 | 代表算法 |
|---|---|---|---|
| 动态规划 | ✅ 需要 | 模型推演 | 策略迭代、价值迭代 |
| 蒙特卡洛 | ❌ 不需要 | 完整回合采样 | MC 预测 |
| 时序差分 | ❌ 不需要 | 单步交互 | SARSA、Q-Learning |
蒙特卡洛方法的思想极其朴素:多次采样取平均。
对状态 $s_t$ 进行 $n$ 次采样,得到 $n$ 个真实回报 $g_t^1, g_t^2, \ldots, g_t^n$。根据大数定律:
增量更新形式
为了不保存所有历史值,使用增量形式:
但 $\frac{1}{n}$ 作为学习率有个问题:随着 $n$ 增大,新数据对均值的影响越来越小。因此实际中常用固定学习率 $\alpha \in (0, 1]$:
时序差分(Temporal Difference, TD)解决了蒙特卡洛"必须等回合结束"的问题:走一步就能更新。
生活类比:从昆明开车去北京。出发前导航预计 20 小时。开了 10 小时到西安后,这 10 小时是真实值,你可以用"实际行驶的 10 小时 + 折扣后的剩余估计"来更新总时长预测。
TD(0) 更新公式
其中 $r_{t+1} + \gamma V(s_{t+1})$ 叫做TD 目标,$\delta_t = r_{t+1} + \gamma V(s_{t+1}) - V(s_t)$ 叫做TD 误差。
MC vs TD 对比
| 维度 | MC | TD(0) |
|---|---|---|
| 更新时机 | 回合结束后 | 每一步 |
| 目标 | 真实回报 $G_t$ | $r_{t+1} + \gamma V(s_{t+1})$ |
| 偏差 | 无偏差 | 有偏差(自举) |
| 方差 | 高 | 低 |
| 适用任务 | 仅有限任务 | 有限 + 无限 |
无模型方法的目标是找到最优策略。因为没有模型,所以学习状态价值 $V$ 没用(你不知道转移到哪个状态才能算出最优动作)。必须学习动作价值函数 $Q(s,a)$。
表格型方法中,直接维护一张 Q 表:行是状态,列是动作,单元格是该状态-动作对的价值估计。
SARSA 的名字来源于其更新所需的五元组:$S_t, A_t, R_{t+1}, S_{t+1}, A_{t+1}$。
更新公式
其中 $A'$ 是由当前执行的策略在 $S'$ 下实际选出的动作。
算法流程
- 初始化 $Q(s,a) = 0$ 对所有 $s, a$
- 对每个回合:
- 获取初始状态 $S$,用 $\epsilon$-Greedy 选择动作 $A$
- 循环每一步:
- 执行 $A$,获取 $R$ 和 $S'$
- 用 $\epsilon$-Greedy 选择 $A'$
- 更新 $Q(S, A)$
- $S \leftarrow S'$,$A \leftarrow A'$
Q-Learning 是最经典的无模型 RL 算法。你可以把它想象成训练一只小狗:做对了给饼干(正奖励),做错了就没有。
Q 值是什么?
"Q" 代表 Quality(质量)。$Q(s,a)$ 衡量在状态 $s$ 下采取动作 $a$ 后,预期能获得的长期奖励总和。
Q 表是智能体的"大脑"——一张查找表,横轴是动作,纵轴是状态。智能体查表选 Q 值最高的动作。
更新公式
注意与 SARSA 的区别:这里用的是 $\max_{a'} Q(s', a')$,而不是 $Q(s', A')$。也就是说:
- 与环境交互用 $\epsilon$-Greedy(探索)
- 更新 Q 表用贪婪策略($\max$,利用)
On-Policy vs Off-Policy
On-Policy(SARSA):采样策略和评估改进的策略是同一个。"老师批评小明,小明改之。"
Off-Policy(Q-Learning):采样策略和评估改进的策略不同。"老师批评小明,其他人改之。" Q 表里的价值绑定的是贪婪策略(最优策略的估计),而与环境交互用的是 $\epsilon$-Greedy。
环境设定:4 状态线性 MDP。
| 状态 | 动作 | 转移 | 奖励 |
|---|---|---|---|
| $s_1$ | → | $s_2$(确定) | $-1$ |
| $s_2$ | → | $s_3$(确定) | $-1$ |
| $s_3$ | → | $s_4$(终止) | $+10$ |
| $s_4$(终止) | — | — | — |
参数:$\gamma = 0.9$,$\alpha = 0.5$,$\epsilon = 0$(纯贪婪,简化演示)。
初始 Q 表
| 状态\动作 | → |
|---|---|
| $s_1$ | 0 |
| $s_2$ | 0 |
| $s_3$ | 0 |
| $s_4$ | 0 |
第一回合:$s_1 \to s_2 \to s_3 \to s_4$
步骤 1:在 $s_1$ 执行 →,获得 $r = -1$,到达 $s_2$。
步骤 2:在 $s_2$ 执行 →,获得 $r = -1$,到达 $s_3$。
步骤 3:在 $s_3$ 执行 →,获得 $r = +10$,到达 $s_4$(终止)。
第一回合结束后的 Q 表:
| 状态 | $Q(\cdot, →)$ |
|---|---|
| $s_1$ | -0.5 |
| $s_2$ | -0.5 |
| $s_3$ | 5.0 |
| $s_4$ | 0 |
第二回合
步骤 1:$s_1$ → $s_2$,$r = -1$。现在 $Q(s_2, →) = -0.5$。
步骤 2:$s_2$ → $s_3$,$r = -1$。现在 $Q(s_3, →) = 5.0$。
步骤 3:$s_3$ → $s_4$,$r = +10$。
第二回合结束后的 Q 表:
| 状态 | $Q(\cdot, →)$ |
|---|---|
| $s_1$ | -0.975 |
| $s_2$ | 1.5 |
| $s_3$ | 7.5 |
| $s_4$ | 0 |
第三回合
步骤 1:$s_1$ → $s_2$,$r = -1$,$Q(s_2) = 1.5$。
步骤 2:$s_2$ → $s_3$,$r = -1$,$Q(s_3) = 7.5$。
步骤 3:$s_3$ → $s_4$,$r = +10$。
收敛过程总结
| 回合 | $Q(s_1, →)$ | $Q(s_2, →)$ | $Q(s_3, →)$ |
|---|---|---|---|
| 0(初始) | 0.000 | 0.000 | 0.000 |
| 1 | -0.500 | -0.500 | 5.000 |
| 2 | -0.975 | 1.500 | 7.500 |
| 3 | -0.313 | 3.625 | 8.750 |
| 4 | 1.197 | 5.088 | 9.375 |
| ... | ... | ... | ... |
| $\infty$ | 7.100 | 9.000 | 10.000 |
收敛值的验证
真实 $Q^*$ 值:$Q^*(s_3) = 10$(直接得到奖励 10),$Q^*(s_2) = -1 + 0.9 \times 10 = 8$,$Q^*(s_1) = -1 + 0.9 \times 8 = 6.2$。可以看到 Q-Learning 的估计正在逐步逼近这些真实值。收敛速度取决于学习率 $\alpha$——$\alpha = 0.5$ 较大,每步更新幅度大,但波动也大。
环境:简化的悬崖漫步。1×5 网格,5 个状态。
| S(起点) | 普通 | 悬崖(-100) | 普通 | G(终点) |
状态编号:0(起点)、1(安全)、2(悬崖)、3(安全)、4(终点)。动作:左、右。每步奖励 -1。掉入悬崖奖励 -100 并重置到起点。
SARSA 的学习过程
SARSA 是 On-Policy 的。当智能体走到状态 3(紧邻悬崖右边),$\epsilon$-Greedy 有一定概率选择"左"——如果运气不好走进了悬崖,得到 -100 的惩罚。
这个惨痛经验被 SARSA 忠实记录在 Q 表中:$Q(s_3, \text{左})$ 会变得很低。结果:SARSA 学到的策略会刻意远离悬崖,选择一条更安全但可能更长的路径。
Q-Learning 的学习过程
Q-Learning 是 Off-Policy 的。即使 $\epsilon$-Greedy 偶尔走到悬崖,更新 Q 表时用的是 $\max_{a'} Q(s', a')$——即假设下一步选最优动作。这意味着偶尔的探索失败不会过度拉低 Q 值。
结果:Q-Learning 学到的策略会紧贴悬崖走最短路,因为在贪婪策略下($\epsilon = 0$),它不会真的掉下去。
关键区别总结
| 维度 | SARSA | Q-Learning |
|---|---|---|
| 策略类型 | On-Policy | Off-Policy |
| 更新目标 | $R + \gamma Q(S', A')$ | $R + \gamma \max_{a'} Q(S', a')$ |
| 悬崖漫步行为 | 走安全路径(远离悬崖) | 走最优路径(紧贴悬崖) |
| 训练时性能 | 更稳定(较少掉入悬崖) | 波动更大(但最终策略更优) |
| 适用场景 | 安全性优先(机器人导航) | 追求最优(游戏 AI) |
使用 Gymnasium 的 CliffWalking-v0 环境进行实验:
- 网格:4×12(48 个状态)
- 起点:(3, 0),即状态 36
- 终点:(3, 11),即状态 47
- 悬崖:(3, 1) 到 (3, 10),即状态 37-46
- 奖励:每步 -1,掉入悬崖 -100
$\epsilon$-Greedy 策略实现
以概率 $\epsilon$ 随机选择动作(探索),以概率 $1-\epsilon$ 选择 Q 值最大的动作(利用)。通常 $\epsilon$ 从 1.0 衰减到 0.01。
SARSA 的更新核心:
Q-Learning 的更新核心:
唯一的区别就是 $\text{td\_target}$ 中用的是 $Q[S', A']$(SARSA)还是 $\max_{a'} Q[S', a']$(Q-Learning)。
MC 方法看完整的轨迹(无偏,高方差),TD(0) 只看一步(有偏,低方差)。TD($\lambda$) 在两者之间取折中:回看 $n$ 步,用 $n$ 步回报作为更新目标。
$n$ 步回报
当 $n=1$ 时就是 TD(0),$n \to \infty$ 时就是 MC。
前向视角与后向视角
- 前向视角:从当前状态向前看 $n$ 步,需要等 $n$ 步才能更新。
- 后向视角(资格迹):维护一个"迹"(trace)$E_t(s)$,记录每个状态最近被访问的程度。每步更新所有状态的 V 值,但访问越久远的状态更新幅度越小。
参数 $\lambda \in [0,1]$ 控制迹的衰减速度。$\lambda = 0$ 退化为 TD(0),$\lambda = 1$ 接近 MC。
标准 Q-Learning 使用 $\max$ 操作选择下一状态的 Q 值。这会导致最大化偏差(Maximization Bias):因为 max 选的是估计值中最大的,而估计本身有噪声,所以结果倾向于高估。
Double Q-Learning 的解决方案
维护两张独立的 Q 表:$Q_1$ 和 $Q_2$。
- 更新 $Q_1$ 时,用 $Q_2$ 来评估价值:$\text{target} = R + \gamma Q_2(S', \arg\max_{a'} Q_1(S', a'))$
- 更新 $Q_2$ 时,用 $Q_1$ 来评估价值:对称操作
每次随机选择更新 $Q_1$ 还是 $Q_2$。这样,即使一个 Q 表高估了,另一个表提供无偏的价值评估,从而消除最大化偏差。
无模型方法解决了"不知道环境模型"的问题,但表格型方法在面对高维状态空间时会崩溃。下一节,我们引入深度学习 → 模块 04:深度强化学习
参考来源
- Sutton, R. S., & Barto, A. G. (2018). Reinforcement Learning: An Introduction, Chapters 5-6. MIT Press.
- Gymnasium CliffWalking-v0 文档
- CliffWalk SARSA vs Q-Learning 实验