第 4 讲:无模型控制——SARSA、Q-learning 与探索策略

Reinforcement Learning · Lecture 04。个人学习讲义与配套实验,按主题整理并持续修订。

课程源码 ZIP ↓

个人整理的学习笔记,非官方讲义;课程来源与整理说明见课程介绍。配套示例未逐一运行验证。

本篇目录

对应:Stanford CS234 Lecture 4 前半(Model-Free Control) 配套代码:code/lecture04/ 预计阅读时间:4 小时(第一遍通读 1.5 小时,第二遍推导 + 跑代码 2.5 小时)


0. 本讲导航

0.1 本讲要回答的问题

不知道世界如何运转,只能通过交互收集经验。怎样找到最优策略?

前三讲的拼图已经齐了:

模型已知模型未知
评估(给定策略有多好)第 2 讲:策略评估第 3 讲:MC、TD
控制(找最优策略)第 2 讲:策略迭代、价值迭代本讲:MC 控制、SARSA、Q-learning

本讲把第 3 讲的”无模型评估”和第 2 讲的”策略改进”拼在一起。拼的过程中会遇到一个第 2 讲从未出现过的难题——探索。

0.2 学完本讲,你应该能够

  1. 解释为什么无模型控制要学习 Q(s,a)Q(s, a) 而不是 V(s)V(s)。
  2. 解释为什么”贪心 + 无模型评估”会失败,以及 ε\varepsilon-贪心如何解决这个问题。
  3. 陈述并证明 ε\varepsilon-贪心策略改进定理。
  4. 说出 GLIE 条件的含义,并理解”理论保证”与”有限数据下的实际表现”的差距。
  5. 写出 MC 控制、SARSA、Q-learning、Expected SARSA 的算法,说清楚它们的 TD 目标有何不同。
  6. 解释**同策略(on-policy)与异策略(off-policy)**的区别;用悬崖行走的例子说明它们各自学到了什么。
  7. 解释最大化偏差的来源,写出 Double Q-learning 算法。
  8. 把本讲的算法与第 2 讲的动态规划算法一一对应起来。

0.3 先修知识

知识点用在哪里最低要求
第 2 讲:QπQ^\pi、策略改进定理、策略迭代、价值迭代、贝尔曼最优方程全讲必须
第 3 讲:MC、TD(0)、增量更新、常数步长 vs 1/N1/N、Robbins–Monro 条件全讲必须
第 1 讲 04 代码:ε\varepsilon-贪心、平局随机打破第 2 节看过即可
期望的基本性质、Jensen 不等式(凸函数的期望 ≥ 期望的函数值)第 6 节知道结论即可,讲义会解释

0.4 本讲地图

第1节 从评估到控制:为什么学 Q?为什么需要探索?
   │
第2节 蒙特卡洛控制:ε-贪心、ε-贪心策略改进定理、GLIE
   │
第3节 SARSA:把 TD 用到控制上(同策略)
   │
第4节 Q-learning:不知道模型时的价值迭代(异策略);Expected SARSA
   │
第5节 同策略 vs 异策略:悬崖行走
   │
第6节 最大化偏差与 Double Q-learning
   │
第7节 实践要点:探索方案、步长、初始化、多个随机种子
   │
第8节 全景:动态规划 ↔ 采样算法的对应关系

1. 从评估到控制

1.1 回顾:广义策略迭代

第 2 讲的策略迭代交替进行两件事:

  1. 策略评估:计算当前策略 π\pi 的价值;
  2. 策略改进:对价值贪心,得到更好的策略。

第 2 讲 9.2 节提到,这两步不必”做到底”——评估一半就改进、改进之后再评估一点,只要两者不断交替,最终仍会走向最优。这个框架叫广义策略迭代(GPI):

          评估:让价值更接近 V^π
     ┌───────────────────────────────┐
     │                               ▼
   策略 π                          价值 V
     ▲                               │
     └───────────────────────────────┘
          改进:让策略对价值贪心

几乎所有 RL 控制算法都是 GPI 的某种实现。本讲要做的,就是把”评估”换成第 3 讲的无模型方法。

1.2 第一个问题:改进步骤需要模型

对 VV 贪心:

π′(s)=arg⁡max⁡a[R(s,a)+γ∑s′P(s′∣s,a)V(s′)]\pi'(s) = \arg\max_a \left[ R(s, a) + \gamma \sum_{s'} P(s' \mid s, a) V(s') \right]

这需要 PP 和 RR——而我们不知道它们。

对 QQ 贪心:

π′(s)=arg⁡max⁡aQ(s,a)\pi'(s) = \arg\max_a Q(s, a)

完全不需要模型。这就是第 2 讲 5.4 节埋下的伏笔:无模型控制要直接估计 Q(s,a)Q(s,a)。

估计 Qπ(s,a)Q^\pi(s, a) 的方法和第 3 讲估计 Vπ(s)V^\pi(s) 完全一样,只是把”状态”换成”状态–动作对”:

  • MC:Q(s,a)Q(s, a) = 在 ss 执行 aa 之后的回报的平均;
  • TD:Q(s,a)←Q(s,a)+α[r+γQ(s′,a′)−Q(s,a)]Q(s, a) \leftarrow Q(s, a) + \alpha[r + \gamma Q(s', a') - Q(s, a)]。

1.3 第二个问题:贪心策略看不到其他动作

假设我们有了 QQ 的估计,对它贪心得到确定性策略 π\pi,然后用 π\pi 收集数据来评估 QπQ^\pi。问题来了:

确定性策略在每个状态只做一个动作。其他动作的 QQ 值永远得不到任何数据。

如果某个没被选中的动作其实更好,我们永远不会知道。这就是第 1 讲 2.3 节说的”数据是被审查的”——你只能看到自己所选之事的后果。

在第 2 讲(模型已知)中不存在这个问题:有了模型,可以直接计算每个动作的 QQ 值,不需要去”试”。无模型之后,探索才成为必需。

代码验证:01_mc_control.py 演示 2 让纯贪心(ε=0\varepsilon = 0)的 MC 控制在网格世界上学了 3000 个回合。9 个普通格子 × 4 个动作 = 36 个 (s,a)(s, a) 对中,有 3 个一次都没被试过,27 个被试过不到 5 次。学到的策略只有 6/9 个格子与最优一致。


2. 蒙特卡洛控制

2.1 一个不现实的办法:探索性起点

如果每个回合都能从随机的 (s,a)(s, a) 对开始(第一步强制执行一个随机动作),那么所有 (s,a)(s, a) 都会被尝试。这叫探索性起点(exploring starts)。

它在理论上可行,但在现实中通常做不到:你没法让机器人”从任意姿态、执行任意动作”开始,也没法让一个病人”从任意病情”开始接受治疗。

2.2 ε\varepsilon-贪心策略

更实用的办法:让策略本身保持一点随机性。

π(a∣s)={1−ε+ε∣A∣若 a=arg⁡max⁡a′Q(s,a′)ε∣A∣其他动作\pi(a \mid s) = \begin{cases} 1 - \varepsilon + \dfrac{\varepsilon}{|A|} & \text{若 } a = \arg\max_{a'} Q(s, a') \\[8pt] \dfrac{\varepsilon}{|A|} & \text{其他动作} \end{cases}

即:以 1−ε1 - \varepsilon 的概率选当前最好的动作,以 ε\varepsilon 的概率在所有动作中均匀随机选。注意”随机选”也可能选到最好的那个,所以最好动作的总概率是 1−ε+ε/∣A∣1 - \varepsilon + \varepsilon / |A|。

这样每个动作都有至少 ε/∣A∣\varepsilon/|A| 的概率被选到,只要数据足够多,所有 (s,a)(s, a) 都会被尝试到。

像这样”每个动作的概率都至少是 ε/∣A∣\varepsilon / |A|“的策略叫 ε\varepsilon-软(ε\varepsilon-soft)策略。

2.3 ε\varepsilon-贪心策略改进定理

换成 ε\varepsilon-贪心以后,改进步骤还能保证”不变差”吗?能:

定理:设 πi\pi_i 是一个 ε\varepsilon-软策略,πi+1\pi_{i+1} 是对 QπiQ^{\pi_i} 的 ε\varepsilon-贪心策略。那么 Vπi+1(s)≥Vπi(s)V^{\pi_{i+1}}(s) \ge V^{\pi_i}(s) 对所有 ss 成立。

证明:由第 2 讲 7.3 节的策略改进定理,只需证明对每个状态 ss:

∑aπi+1(a∣s) Qπi(s,a)  ≥  Vπi(s)\sum_a \pi_{i+1}(a \mid s)\, Q^{\pi_i}(s, a) \;\ge\; V^{\pi_i}(s)

(左边是”在 ss 按新策略选一步、之后按旧策略”的价值。)展开左边:

∑aπi+1(a∣s) Qπi(s,a)=ε∣A∣∑aQπi(s,a)+(1−ε)max⁡aQπi(s,a)≥ε∣A∣∑aQπi(s,a)+(1−ε)∑aπi(a∣s)−ε/∣A∣1−ε⏟wa Qπi(s,a)=∑aπi(a∣s) Qπi(s,a)=Vπi(s)\begin{aligned} \sum_a \pi_{i+1}(a \mid s)\, Q^{\pi_i}(s, a) &= \frac{\varepsilon}{|A|} \sum_a Q^{\pi_i}(s, a) + (1 - \varepsilon) \max_a Q^{\pi_i}(s, a) \\ &\ge \frac{\varepsilon}{|A|} \sum_a Q^{\pi_i}(s, a) + (1 - \varepsilon) \sum_a \underbrace{\frac{\pi_i(a \mid s) - \varepsilon/|A|}{1 - \varepsilon}}_{w_a}\, Q^{\pi_i}(s, a) \\ &= \sum_a \pi_i(a \mid s)\, Q^{\pi_i}(s, a) = V^{\pi_i}(s) \end{aligned}

关键在第二步:权重 wa=πi(a∣s)−ε/∣A∣1−εw_a = \frac{\pi_i(a \mid s) - \varepsilon/|A|}{1 - \varepsilon} 都是非负的(因为 πi\pi_i 是 ε\varepsilon-软的,πi(a∣s)≥ε/∣A∣\pi_i(a \mid s) \ge \varepsilon/|A|),并且加起来等于 1(1−ε1−ε=1\frac{1 - \varepsilon}{1 - \varepsilon} = 1)。所以 ∑awaQ(s,a)\sum_a w_a Q(s, a) 是 QQ 的一个加权平均,而最大值不小于任何加权平均。■\blacksquare

直觉:ε\varepsilon-贪心策略的”随机部分”(ε/∣A∣\varepsilon/|A| 的均匀分布)在新旧策略中是一样的;区别只在”剩下的 1−ε1-\varepsilon 概率”怎么分配。新策略把这部分全部给了当前最好的动作,旧策略按某种方式分散——集中到最好的动作上当然不会更差。

但要注意:这个定理说的是”在 ε\varepsilon-软策略中不断改进”。它最终收敛到的是最好的 ε\varepsilon-软策略,而不是真正的最优策略 π∗\pi^*——因为 ε\varepsilon-软策略永远有 ε\varepsilon 的概率”乱走”。要得到 π∗\pi^*,ε\varepsilon 必须逐渐趋于 0。

2.4 GLIE:最终变贪心,但永远在探索

我们想要两件看起来矛盾的事:

  • 为了学到正确的 QQ,要一直探索;
  • 为了最终执行最优策略,要最终变成贪心的。

GLIE(Greedy in the Limit with Infinite Exploration,极限贪心且无限探索) 条件把两者统一起来:

  1. 无限探索:每个 (s,a)(s, a) 都被访问无穷多次,lim⁡k→∞Nk(s,a)=∞\lim_{k \to \infty} N_k(s, a) = \infty;
  2. 极限贪心:策略收敛到对 QQ 的贪心策略,lim⁡k→∞πk(a∣s)=1[a=arg⁡max⁡a′Qk(s,a′)]\lim_{k \to \infty} \pi_k(a \mid s) = \mathbb{1}\left[a = \arg\max_{a'} Q_k(s, a')\right]。

例子:εk=1/k\varepsilon_k = 1/k(kk 是回合数)。εk→0\varepsilon_k \to 0 保证了极限贪心;∑kεk=∞\sum_k \varepsilon_k = \infty(调和级数发散)保证了每个动作被尝试无穷多次。εk=1/k\varepsilon_k = 1/\sqrt{k} 同样满足 GLIE。

定理:GLIE 蒙特卡洛控制收敛到最优动作价值函数 Q∗Q^*。

2.5 算法

算法:GLIE 蒙特卡洛控制(同策略,首次访问)
初始化:Q(s,a) = 0,N(s,a) = 0,对所有 s, a
对第 k 个回合(k = 1, 2, ...):
    ε ← 1/k(或其他 GLIE 方案)
    用"对 Q 的 ε-贪心策略"生成一个回合:s_0, a_0, r_0, s_1, a_1, r_1, ..., s_T
    对回合中每个 (s,a) 的首次出现,计算回报 G:
        N(s,a) ← N(s,a) + 1
        Q(s,a) ← Q(s,a) + α (G - Q(s,a))       (α = 1/N(s,a) 时就是增量平均)
    (策略改进是隐式的:下一个回合直接用新的 Q 做 ε-贪心)

2.6 理论保证 vs 实际表现

在第 2 讲的 4×3 网格世界(γ=1\gamma = 1,最优策略从起点出发的价值 0.705)上,每种设置用 5 个随机种子各训练 20000 个回合(代码 01 演示 3):

设置5 个种子学到的贪心策略的真实价值训练最后 1000 回合的平均回报
固定 ε=0.1\varepsilon = 0.1,α=1/N\alpha = 1/N0.470, 0.691, 0.705, 0.705, 0.7050.603
GLIE ε=1/k\varepsilon = 1/k,α=1/N\alpha = 1/N−1.034, −1.073, 0.305, 0.374, 0.705−0.214
GLIE ε=1/k\varepsilon = 1/\sqrt{k},α=1/N\alpha = 1/N0.470, 0.340, 0.705, 0.672, 0.7050.577
GLIE ε=1/k\varepsilon = 1/\sqrt{k},α=0.02\alpha = 0.020.705, 0.705, 0.705, 0.705, 0.7050.706

这张表包含三个重要教训:

  1. “理论上收敛”不等于”有限数据下表现好”。ε=1/k\varepsilon = 1/k 满足 GLIE,但它衰减得太快:第 100 个回合时 ε\varepsilon 就只剩 0.01,很多动作还没被充分尝试,探索就几乎停止了。有两个种子甚至学会了走进 −1!定理说的是 k→∞k \to \infty 的极限,而我们只有有限的数据。
  2. 控制问题中常数步长往往更好。α=1/N\alpha = 1/N 会把所有历史回报平均进来,包括早期那个很差的策略产生的回报——策略已经改进了,QQ 却被”过时”的数据拖住。常数步长会逐渐遗忘旧数据,让 QQ 跟上当前策略(回忆第 3 讲 2.3 节:“被评估的对象本身在变化时,遗忘旧数据反而是好事”)。
  3. 一定要用多个随机种子。同样的算法,换一个种子可能从”学到最优”变成”学得很差”。只看一次运行很容易得出错误结论。

3. SARSA:同策略 TD 控制

3.1 算法

MC 控制要等回合结束才能更新。把第 3 讲的 TD(0) 用到 QQ 上,每走一步就能更新:

  Q(st,at)←Q(st,at)+α[ rt+γ Q(st+1,at+1)−Q(st,at) ]  \boxed{\;Q(s_t, a_t) \leftarrow Q(s_t, a_t) + \alpha \left[\, r_t + \gamma\, Q(s_{t+1}, a_{t+1}) - Q(s_t, a_t) \,\right]\;}

更新用到了五个量:st,at,rt,st+1,at+1s_t, a_t, r_t, s_{t+1}, a_{t+1}——这就是名字 SARSA 的来历(State, Action, Reward, State, Action)。

算法:SARSA
初始化:Q(s,a) 任意(例如 0),Q(终止, ·) = 0
对每个回合:
    s ← 初始状态
    a ← 对 Q 的 ε-贪心动作(在 s)
    直到回合结束:
        执行 a,观察 r, s'
        a' ← 对 Q 的 ε-贪心动作(在 s')          ← 先把下一个动作选好
        Q(s,a) ← Q(s,a) + α [ r + γ Q(s',a') - Q(s,a) ]
        s ← s';a ← a'                             ← 下一步真的执行 a'

关键细节:TD 目标里的 a′a' 是下一步真正要执行的动作(由同一个 ε\varepsilon-贪心策略选出)。所以 SARSA 在评估的,就是它自己正在执行的那个 ε\varepsilon-贪心策略。这叫同策略(on-policy)。

SARSA 就是 GPI 的一种极致形式:每走一步就评估一点(一次 TD 更新)、改进一点(下一步用更新后的 QQ 做 ε\varepsilon-贪心)。

3.2 收敛性

定理(表格型 SARSA):如果策略序列满足 GLIE,且步长满足 Robbins–Monro 条件(∑αt=∞\sum \alpha_t = \infty,∑αt2<∞\sum \alpha_t^2 < \infty),那么 SARSA 以概率 1 收敛到 Q∗Q^*。

两个条件分别保证:GLIE 让评估的策略最终变成贪心策略(所以学到的是 Q∗Q^* 而不是某个 ε\varepsilon-贪心策略的 QQ);Robbins–Monro 让估计的噪声最终消失。

3.3 固定 ε\varepsilon 时,SARSA 学到的是什么?

如果 ε\varepsilon 固定不变(实践中很常见),SARSA 评估的始终是 ε\varepsilon-贪心策略,它会收敛到最好的 ε\varepsilon-贪心策略的价值 Qπε∗Q^{\pi^*_\varepsilon},而不是 Q∗Q^*。

用真实模型可以精确算出这两个标准答案(代码 02:对 Q∗Q^* 用价值迭代;对 Qπε∗Q^{\pi^*_\varepsilon} 用”改进步骤为 ε\varepsilon-贪心”的策略迭代)。在网格世界中,ε=0.1\varepsilon = 0.1 时:

  • 起点处 max⁡aQ∗\max_a Q^* = 0.705;
  • 起点处 max⁡aQπε∗\max_a Q^{\pi^*_\varepsilon} = 0.666(因为有 10% 的时间在乱走,价值更低)。

实验结果见 4.4 节的表格。


4. Q-learning:不知道模型时的价值迭代

4.1 算法

  Q(st,at)←Q(st,at)+α[ rt+γmax⁡a′Q(st+1,a′)−Q(st,at) ]  \boxed{\;Q(s_t, a_t) \leftarrow Q(s_t, a_t) + \alpha \left[\, r_t + \gamma \max_{a'} Q(s_{t+1}, a') - Q(s_t, a_t) \,\right]\;}

与 SARSA 的唯一区别:TD 目标里用 max⁡a′Q(st+1,a′)\max_{a'} Q(s_{t+1}, a') 代替了 Q(st+1,at+1)Q(s_{t+1}, a_{t+1})。

算法:Q-learning
初始化:Q(s,a) 任意(例如 0),Q(终止, ·) = 0
对每个回合:
    s ← 初始状态
    直到回合结束:
        a ← 对 Q 的 ε-贪心动作(在 s)              ← 行为策略:用来收集数据
        执行 a,观察 r, s'
        Q(s,a) ← Q(s,a) + α [ r + γ max_a' Q(s',a') - Q(s,a) ]    ← 目标策略:贪心
        s ← s'

4.2 为什么说它是”采样版的价值迭代”?

回忆第 2 讲的贝尔曼最优方程(QQ 版本):

Q∗(s,a)=R(s,a)+γ∑s′P(s′∣s,a)max⁡a′Q∗(s′,a′)=E[r+γmax⁡a′Q∗(s′,a′) | s,a]Q^*(s, a) = R(s, a) + \gamma \sum_{s'} P(s' \mid s, a) \max_{a'} Q^*(s', a') = \mathbb{E}\left[ r + \gamma \max_{a'} Q^*(s', a') \,\middle|\, s, a \right]

价值迭代用模型精确计算右边的期望;Q-learning 用一个采样 r+γmax⁡a′Q(s′,a′)r + \gamma \max_{a'} Q(s', a') 代替这个期望,再用步长 α\alpha 慢慢平均。这就是 Q-learning 的全部思想:不知道模型时的价值迭代。

4.3 异策略:行为策略 vs 目标策略

Q-learning 里有两个策略:

  • 行为策略(behavior policy):实际用来与环境交互、收集数据的策略(这里是 ε\varepsilon-贪心);
  • 目标策略(target policy):我们想要学习其价值的策略(这里是对 QQ 的贪心策略——TD 目标中的 max 对应的就是它)。

两者不同,所以叫异策略(off-policy)。Q-learning 学的是贪心策略(最终是最优策略)的价值,不管自己实际上是怎么行动的。

异策略的好处很大:可以用任何方式收集数据(随机探索、人类示范、旧策略的历史数据),同时学习最优策略的价值。第 5 讲 DQN 的”经验回放”、第 10 讲的离线 RL 都建立在这个性质上。

为什么 Q-learning 不需要重要性采样? 一般的异策略学习需要用”重要性权重”修正两个策略的分布差异(第 10 讲)。Q-learning 不需要,因为它学习的是 Q(s,a)Q(s, a):给定 (s,a)(s, a),下一状态 s′s' 的分布只由环境决定,与策略无关;而下一步的动作不是采样的,而是直接取 max。整个目标中没有任何”由行为策略采样的动作”需要修正。

定理(Watkins & Dayan, 1992):如果每个 (s,a)(s, a) 都被访问无穷多次,且步长满足 Robbins–Monro 条件,那么表格型 Q-learning 以概率 1 收敛到 Q∗Q^*。

注意这个条件比 SARSA 弱:不需要 GLIE。行为策略可以一直保持 ε=0.1\varepsilon = 0.1,Q-learning 学到的仍然是 Q∗Q^*。(但如果你想让智能体执行最优策略,最终还是要贪心地行动。)

4.4 Expected SARSA

介于两者之间:TD 目标对下一个动作按策略取期望,而不是采样一个:

Q(st,at)←Q(st,at)+α[ rt+γ∑a′π(a′∣st+1) Q(st+1,a′)−Q(st,at) ]Q(s_t, a_t) \leftarrow Q(s_t, a_t) + \alpha \left[\, r_t + \gamma \sum_{a'} \pi(a' \mid s_{t+1})\, Q(s_{t+1}, a') - Q(s_t, a_t) \,\right]
  • 若 π\pi 是 ε\varepsilon-贪心(与行为策略相同),它和 SARSA 学的是同一个东西,但消除了”下一个动作碰巧选到哪个”带来的方差;
  • 若 π\pi 是贪心策略,∑a′π(a′∣s′)Q(s′,a′)=max⁡a′Q(s′,a′)\sum_{a'} \pi(a' \mid s') Q(s', a') = \max_{a'} Q(s', a'),它就变成了 Q-learning。

同一次转移,三种目标对比(代码 02 演示 1):智能体滑到了 −1 左边的危险格子 (1,2),此时 Q((1,2),⋅)=[0.6,−0.8,0.3,0.1]Q(\text{(1,2)}, \cdot) = [0.6, -0.8, 0.3, 0.1](上 右 下 左),r=−0.04r = -0.04,ε=0.1\varepsilon = 0.1:

算法TD 目标
SARSA(若下一个动作碰巧是”右”,掉进 −1 的方向)−0.04+(−0.8)=−0.840-0.04 + (-0.8) = -0.840
SARSA(若下一个动作是贪心的”上”)−0.04+0.6=+0.560-0.04 + 0.6 = +0.560
Q-learning−0.04+max⁡=+0.560-0.04 + \max = +0.560
Expected SARSA−0.04+∑a′π(a′∣s′)Q(s′,a′)=+0.505-0.04 + \sum_{a'} \pi(a' \mid s') Q(s', a') = +0.505

实验:它们分别收敛到哪里?(代码 02 演示 2:固定 ε=0.1\varepsilon = 0.1、α=0.02\alpha = 0.02,20000 个回合,5 个种子平均;V=max⁡aQV = \max_a Q,在 9 个普通格子上与两个标准答案比较)

算法∣V−V∗∣\lvert V - V^* \rvert 平均∣V−Vπε∗∣\lvert V - V^{\pi^*_\varepsilon} \rvert 平均起点 max⁡Q\max Q贪心策略的真实价值
SARSA0.0530.0240.6640.705
Expected SARSA0.0460.0230.6660.705
Q-learning0.0230.0370.7080.705
  • SARSA 和 Expected SARSA 的价值更接近 Vπε∗V^{\pi^*_\varepsilon}(起点 ≈ 0.666),Q-learning 的价值更接近 V∗V^*(起点 ≈ 0.705)。同策略学习”自己的”价值,异策略学习”最优”价值。
  • 三者学到的贪心策略都是最优的(真实价值都是 0.705)。

为什么要用 α=0.02\alpha = 0.02 这么小的步长? 常数步长下,估计会一直在收敛点附近抖动;α\alpha 大到一定程度(比如 0.1),抖动会淹没两个标准答案之间的差别(0.705 vs 0.666),就看不清”它到底在向哪个答案收敛”了。

4.5 让 ε\varepsilon 衰减:SARSA 向 Q∗Q^* 移动

代码 02 演示 4(α=0.02\alpha = 0.02,20000 回合,5 个种子):

探索方案第 20000 回合时 ε\varepsilon∣V−V∗∣\lvert V - V^* \rvert5 个种子的起点 max⁡Q\max Q
固定 ε=0.1\varepsilon = 0.1(对照)0.10.053≈ 0.664
εk=1/k\varepsilon_k = 1/\sqrt{k}0.0070.0550.685, 0.487, 0.677, 0.463, 0.678
εk=0.3⋅2000/(2000+k)\varepsilon_k = 0.3 \cdot 2000/(2000+k)0.0270.0360.678, 0.659, 0.691, 0.674, 0.706
  • ε=1/k\varepsilon = 1/\sqrt{k} 衰减太快:有 2 个种子在探索还不充分时就”定型”了,学会了沿下排走、再从 −1 旁边上去的冒险路线,之后 ε\varepsilon 太小,再也纠正不回来。
  • 从 0.3 缓慢衰减时,5 个种子都没有被困住,价值整体从 Vπε∗V^{\pi^*_\varepsilon} 向 V∗V^* 移动。但 20000 回合后 ε\varepsilon 仍有 0.027,还没完全变成贪心,所以还没到达 V∗V^*。

“探索衰减得多快”是一个需要小心调节的实际问题,没有放之四海而皆准的答案。第 11–13 讲会研究更有原则的探索方法。


5. 同策略 vs 异策略:悬崖行走

5.1 问题设定

Sutton & Barto 例 6.6:

    行\列  0   1   2   3   4   5   6   7   8   9  10  11
      0    .   .   .   .   .   .   .   .   .   .   .   .
      1    .   .   .   .   .   .   .   .   .   .   .   .
      2    .   .   .   .   .   .   .   .   .   .   .   .
      3    S   C   C   C   C   C   C   C   C   C   C   G
  • 每走一步奖励 −1;掉下悬崖(C)奖励 −100,并被送回起点 S(回合不结束);
  • 动作是确定性的(没有噪声);
  • 最短路线:沿着悬崖边走,13 步,回报 −13。

用 ε=0.1\varepsilon = 0.1、α=0.5\alpha = 0.5 训练 500 个回合。

5.2 结果

训练过程中的平均回报(50 次运行平均,代码 03 演示 1):

算法第 1–25 回合第 26–50 回合第 51–100 回合第 101–200 回合第 201–500 回合
SARSA−173.5−46.8−34.0−28.3−28.0
Expected SARSA−150.7−33.4−23.0−21.4−20.6
Q-learning−177.9−50.3−48.7−47.6−49.3

学到的贪心路线(* 为经过的格子):

  SARSA(17 步)               Expected SARSA(15 步)       Q-learning(13 步)
  * * * * * * * * * * * *      . . . . . . . . . . . .       . . . . . . . . . . . .
  * . . . . . . . . . . *      * * * * * * * * * * * *       . . . . . . . . . . . .
  * . . . . . . . . . . *      * . . . . . . . . . . *       * * * * * * * * * * * *
  S C C C C C C C C C C G      S C C C C C C C C C C G       S C C C C C C C C C C G

5.3 解读

  • Q-learning 学到了最优路线:紧贴悬崖走。它学的是”如果以后每一步都选最好的动作”的价值,不考虑自己训练时会乱走。但训练时它真的会乱走——在悬崖边,每一步有 0.1×1/4=2.5%0.1 \times 1/4 = 2.5\% 的概率随机选到”下”而掉下去(−100)。所以训练回报很差(约 −49)。
  • SARSA 学到了安全路线:离悬崖远远的。它学的是”它自己的 ε\varepsilon-贪心策略”的价值,把”自己会乱走”这件事也算了进去,知道走在悬崖边太危险。路线更长,但训练时几乎不会掉下去(约 −28)。
  • Expected SARSA 介于两者之间,而且训练回报最好(约 −21):它的目标没有”下一个动作碰巧选到哪个”的随机性,可以放心使用 α=0.5\alpha = 0.5 这样的大步长。

哪个”更好”?取决于你关心什么:

  • 关心学习过程中的表现——比如真实机器人边学边干活,掉下去代价很大——SARSA 更稳妥。
  • 关心学完之后用贪心策略执行的表现——Q-learning 学到的路线更好。

5.4 如果 ε\varepsilon 逐渐衰减到 0 呢?

εk=0.1×100/(100+k)\varepsilon_k = 0.1 \times 100/(100 + k),训练 2000 个回合,10 次运行(代码 03 演示 3):

算法贪心路线长度(10 次)最后 100 回合平均回报
SARSA17, 17, 17, 17, 15, 17, 17, 17, 17, 17−17.0
Q-learning13, 13, 13, 13, 13, 13, 13, 13, 13, 13−15.1

Q-learning 的训练回报随 ε\varepsilon 减小接近最优的 −13。SARSA 却仍然停留在较安全的路线上!它的 QQ 值是在”自己还会经常乱走”的时期学到的;探索减少后,它几乎不再去悬崖边的格子,那里的 QQ 值很少被更新,“悬崖边其实已经安全了”这个信息迟迟传不过来。理论上(GLIE + 合适的步长)SARSA 最终也会收敛到最优,但可能需要多得多的数据。

这再次说明:同策略方法学到什么,很大程度上取决于它在学习过程中探索了什么。


6. 最大化偏差与 Double Q-learning

6.1 问题:对噪声估计取最大值会高估

Q-learning 的目标里有 max⁡a′Q(s′,a′)\max_{a'} Q(s', a')。当 QQ 是带噪声的估计时,这个 max 会系统性地高估真实的最大值。

直觉:10 个同学的真实水平都是 60 分,但每次考试有随机波动。“这次考试的最高分”几乎总会高于 60 分——max 挑中的恰好是”运气最好”的那个人。如果你拿”最高分”当作”最强者的真实水平”,就高估了。

数学上:设 Q^(a)\hat Q(a) 是 Q(a)Q(a) 的无偏估计,E[Q^(a)]=Q(a)\mathbb{E}[\hat Q(a)] = Q(a)。因为 max 是凸函数,由 Jensen 不等式:

E[max⁡aQ^(a)]  ≥  max⁡aE[Q^(a)]=max⁡aQ(a)\mathbb{E}\left[ \max_a \hat Q(a) \right] \;\ge\; \max_a \mathbb{E}\left[ \hat Q(a) \right] = \max_a Q(a)

每个估计单独都是无偏的,但它们的最大值是有偏的。 这叫最大化偏差(maximization bias)。

实验(代码 04 实验 1):所有动作的真实价值都是 0,每个动作用若干个标准差为 1 的噪声样本取平均来估计:

动作数每个动作的样本数单估计器 E[max⁡Q^]\mathbb{E}[\max \hat Q]双估计器
11+0.011+0.001
21+0.577−0.001
101+1.536+0.000
1010+0.481+0.007
1001+2.509−0.027
10010+0.792−0.003

真实最大值是 0。动作越多、样本越少(噪声越大),高估越严重;只有 1 个动作时没有”挑选”,也就没有偏差。

6.2 解决:双估计器

偏差来自”用同一份带噪声的估计,既挑选最大的动作,又评估它的价值”——被挑中的恰好是噪声为正的那个,然后又用这个正的噪声来评估它。

双估计器:用两组独立的数据分别得到两个估计 Q^A\hat Q_A、Q^B\hat Q_B。用 Q^A\hat Q_A 挑动作,用 Q^B\hat Q_B 评估它:

a∗=arg⁡max⁡aQ^A(a),估计=Q^B(a∗)a^* = \arg\max_a \hat Q_A(a), \qquad \text{估计} = \hat Q_B(a^*)

因为 Q^B\hat Q_B 的噪声与”a∗a^* 是怎么被挑出来的”无关,E[Q^B(a∗)]=E[Q(a∗)]≤max⁡aQ(a)\mathbb{E}[\hat Q_B(a^*)] = \mathbb{E}[Q(a^*)] \le \max_a Q(a)——不会高估(可能轻微低估,因为挑出的不一定是真正最好的动作)。上表最后一列证实了这一点。

6.3 Double Q-learning

把双估计器用到 Q-learning 上:维护两张独立的 Q 表 Q1Q_1、Q2Q_2。

算法:Double Q-learning
初始化:Q1(s,a) = Q2(s,a) = 0
对每个回合,每一步:
    a ← 对 (Q1 + Q2) 的 ε-贪心动作;执行 a,观察 r, s'
    以 1/2 的概率:
        a* ← argmax_a' Q1(s', a')
        Q1(s,a) ← Q1(s,a) + α [ r + γ Q2(s', a*) - Q1(s,a) ]     (Q1 挑、Q2 评)
    否则:
        a* ← argmax_a' Q2(s', a')
        Q2(s,a) ← Q2(s,a) + α [ r + γ Q1(s', a*) - Q2(s,a) ]     (Q2 挑、Q1 评)

每次只更新一张表,两张表得到的数据是不同的(由抛硬币决定),因此近似独立。

6.4 实验:最大化偏差导致错误决策

Sutton & Barto 例 6.7:

   终点 ◄── B 的 10 个动作 ── [B] ◄── 左,奖励 0 ── [A] ── 右,奖励 0 ──► 终点
            (奖励 ~ N(-0.1, 1))
  • 从 A 出发:向右直接结束(奖励 0);向左到 B(奖励 0);
  • 在 B 有 10 个动作,都直接结束,奖励从 N(−0.1,1)N(-0.1, 1) 中随机抽取;
  • 真实价值:Q(A,右)=0Q(A, \text{右}) = 0,Q(A,左)=−0.1Q(A, \text{左}) = -0.1,最优是向右。

在 A 选择”左”的比例(1000 次运行平均;ε=0.1\varepsilon = 0.1 下的最低可能比例是 5%,代码 04 实验 2):

回合15102050100200300
Q-learning49.7%66.4%86.0%93.9%82.4%44.6%15.6%11.5%
Double Q-learning50.0%50.3%44.8%31.8%14.1%8.2%7.2%6.9%
  • 两者都从 50% 起步(初始估计都是 0,平局随机选)。
  • Q-learning 随后越来越偏爱”左”,第 20 回合高达约 94%:B 的 10 个动作估计里总有几个碰巧偏高,max 把它们挑出来,让 Q(A,左)Q(A, \text{左}) 看起来比 0 还好。直到第 100 回合以后才慢慢回落。
  • Double Q-learning 从 50% 稳步下降,从未被”骗”去更多地选左。

在学习早期、动作很多、奖励噪声很大的问题中,最大化偏差可能造成严重后果。第 5 讲的 Double DQN 就是把这个思想用到了深度 Q 网络上。


7. 实践要点

7.1 探索方案

方案做法特点
固定 ε\varepsilon如 ε=0.1\varepsilon = 0.1简单;学到的是 ε\varepsilon-贪心策略的价值(同策略算法)
线性 / 指数衰减如从 1.0 线性降到 0.05DQN 等深度 RL 中最常用;不满足严格的 GLIE(没有降到 0),但实用
GLIE(如 1/k1/k、c/(c+k)c/(c+k))趋于 0 但总和发散有理论保证;衰减速度需要仔细调节
乐观初始化把 QQ 初始化成一个很大的值没被尝试过的动作”看起来很好”,于是会被尝试;适合确定性、状态少的问题

乐观初始化的直觉:如果 QQ 初始都是 +10(远高于实际可能的回报),贪心智能体选了某个动作后发现”没那么好”,估计下降,于是转而去试其他”看起来还是 +10”的动作——即使 ε=0\varepsilon = 0,所有动作也都会被尝试。这是”面对不确定性时保持乐观”思想的最简单形式,第 11 讲的 UCB 算法会把它严格化。

7.2 步长

  • 表格型、平稳问题:1/N1/N 或满足 Robbins–Monro 的衰减步长可以精确收敛。
  • 控制问题(策略在变):常数步长往往更好(2.6 节)。
  • 步长太大:估计抖动大;太小:学得慢。本讲的实验中,α\alpha 从 0.02 到 0.5 都有用到,取决于问题的噪声大小。

7.3 一定要用多个随机种子

本讲几乎每个实验都显示:同一个算法,不同的随机种子,结果可能天差地别。比较算法时,至少要用 5 个以上的种子,并报告平均值和波动范围。这在深度 RL 中尤其重要(第 5 讲以后)。


8. 全景:动态规划 ↔ 采样算法

本讲和第 3 讲的所有算法,都可以看成”用采样代替第 2 讲某个贝尔曼备份中的期望”:

第 2 讲(需要模型)贝尔曼方程本讲 / 第 3 讲(不需要模型)
迭代策略评估 V←BπVV \leftarrow B^\pi VVπ(s)=E[r+γVπ(s′)∣s]V^\pi(s) = \mathbb{E}[r + \gamma V^\pi(s') \mid s]TD(0):V(s)←V(s)+α[r+γV(s′)−V(s)]V(s) \leftarrow V(s) + \alpha[r + \gamma V(s') - V(s)]
QQ 的策略迭代Qπ(s,a)=E[r+γQπ(s′,a′)∣s,a]Q^\pi(s,a) = \mathbb{E}[r + \gamma Q^\pi(s', a') \mid s, a]SARSA:Q(s,a)←Q(s,a)+α[r+γQ(s′,a′)−Q(s,a)]Q(s,a) \leftarrow Q(s,a) + \alpha[r + \gamma Q(s', a') - Q(s,a)]
QQ 的价值迭代Q∗(s,a)=E[r+γmax⁡a′Q∗(s′,a′)∣s,a]Q^*(s,a) = \mathbb{E}[r + \gamma \max_{a'} Q^*(s', a') \mid s, a]Q-learning:Q(s,a)←Q(s,a)+α[r+γmax⁡a′Q(s′,a′)−Q(s,a)]Q(s,a) \leftarrow Q(s,a) + \alpha[r + \gamma \max_{a'} Q(s', a') - Q(s,a)]

把这张表记住,你就能从一个统一的视角理解大部分表格型 RL 算法。

本讲各算法对比:

算法更新时机TD 目标同/异策略固定 ε\varepsilon 时收敛到收敛到 Q∗Q^* 的条件
MC 控制回合结束GtG_t同策略Qπε∗Q^{\pi^*_\varepsilon}GLIE
SARSA每一步r+γQ(s′,a′)r + \gamma Q(s', a')同策略Qπε∗Q^{\pi^*_\varepsilon}GLIE + RM 步长
Expected SARSA每一步r+γ∑a′π(a′∣s′)Q(s′,a′)r + \gamma \sum_{a'} \pi(a' \mid s') Q(s', a')同/异策略均可取决于 π\pi同上
Q-learning每一步r+γmax⁡a′Q(s′,a′)r + \gamma \max_{a'} Q(s', a')异策略Q∗Q^*无限访问 + RM 步长
Double Q-learning每一步r+γQ2(s′,arg⁡max⁡a′Q1(s′,a′))r + \gamma Q_2(s', \arg\max_{a'} Q_1(s', a'))异策略Q∗Q^*同上

9. 本讲总结

9.1 核心概念清单

  1. 无模型控制学 QQ 而不是 VV:对 QQ 贪心不需要模型。
  2. 探索是必需的:贪心策略只能看到自己所选动作的后果,其他动作永远学不到。
  3. ε\varepsilon-贪心:以 ε\varepsilon 的概率随机探索;ε\varepsilon-贪心策略改进定理保证改进不变差。
  4. GLIE:无限探索 + 极限贪心;理论上保证收敛,但衰减速度在有限数据下至关重要。
  5. 控制问题中常数步长往往更好:策略在变,旧数据会”过时”。
  6. SARSA(同策略):目标用实际的下一个动作;学的是自己的 ε\varepsilon-贪心策略的价值。
  7. Q-learning(异策略):目标用 max;学的是最优策略的价值,是采样版的价值迭代。
  8. Expected SARSA:对下一个动作取期望,方差更小。
  9. 悬崖行走:SARSA 学安全路线(训练表现好),Q-learning 学最优路线(训练中常掉下去)。
  10. 最大化偏差:E[max⁡Q^]≥max⁡Q\mathbb{E}[\max \hat Q] \ge \max Q;Double Q-learning 用两张表分别”挑”和”评”来消除它。
  11. 用多个随机种子评价算法。

9.2 公式速查表

名称公式
ε\varepsilon-贪心π(a∣s)=ε/∣A∣+(1−ε) 1[a=arg⁡max⁡a′Q(s,a′)]\pi(a \mid s) = \varepsilon/\lvert A\rvert + (1-\varepsilon)\,\mathbb{1}[a = \arg\max_{a'} Q(s,a')]
ε\varepsilon-贪心改进∑aπi+1(a∣s)Qπi(s,a)≥Vπi(s)\sum_a \pi_{i+1}(a \mid s) Q^{\pi_i}(s,a) \ge V^{\pi_i}(s)
GLIE 例子εk=1/k\varepsilon_k = 1/k
MC 控制Q(s,a)←Q(s,a)+α(Gt−Q(s,a))Q(s,a) \leftarrow Q(s,a) + \alpha(G_t - Q(s,a))
SARSAQ(s,a)←Q(s,a)+α[r+γQ(s′,a′)−Q(s,a)]Q(s,a) \leftarrow Q(s,a) + \alpha[r + \gamma Q(s',a') - Q(s,a)]
Q-learningQ(s,a)←Q(s,a)+α[r+γmax⁡a′Q(s′,a′)−Q(s,a)]Q(s,a) \leftarrow Q(s,a) + \alpha[r + \gamma \max_{a'} Q(s',a') - Q(s,a)]
Expected SARSAQ(s,a)←Q(s,a)+α[r+γ∑a′π(a′∣s′)Q(s′,a′)−Q(s,a)]Q(s,a) \leftarrow Q(s,a) + \alpha[r + \gamma \sum_{a'} \pi(a' \mid s') Q(s',a') - Q(s,a)]
Double Q-learningQ1(s,a)←Q1(s,a)+α[r+γQ2(s′,arg⁡max⁡a′Q1(s′,a′))−Q1(s,a)]Q_1(s,a) \leftarrow Q_1(s,a) + \alpha[r + \gamma Q_2(s', \arg\max_{a'} Q_1(s',a')) - Q_1(s,a)]
最大化偏差E[max⁡aQ^(a)]≥max⁡aE[Q^(a)]\mathbb{E}[\max_a \hat Q(a)] \ge \max_a \mathbb{E}[\hat Q(a)]

9.3 中英术语对照表

中文英文中文英文
无模型控制Model-free control广义策略迭代Generalized policy iteration (GPI)
探索性起点Exploring startsε\varepsilon-贪心ε\varepsilon-greedy
ε\varepsilon-软策略ε\varepsilon-soft policy极限贪心且无限探索GLIE
同策略On-policy异策略Off-policy
行为策略Behavior policy目标策略Target policy
SARSAState-Action-Reward-State-ActionQ 学习Q-learning
期望 SARSAExpected SARSA悬崖行走Cliff walking
最大化偏差Maximization bias双 Q 学习Double Q-learning
双估计器Double estimatorJensen 不等式Jensen’s inequality
乐观初始化Optimistic initialization随机种子Random seed
重要性采样Importance sampling经验回放Experience replay

10. 练习题

练习 1(概念):为什么在第 2 讲(模型已知)中不需要探索,而在本讲中需要?如果我们有一个不完全准确的模型呢?

参考答案

模型已知时,可以直接用 R(s,a)+γ∑s′P(s′∣s,a)V(s′)R(s,a) + \gamma \sum_{s'} P(s' \mid s,a) V(s') 计算每个动作的价值,不需要亲自去试。无模型时,动作的价值只能通过尝试它来获得数据,不试就永远不知道。

如果模型不完全准确,基于模型的规划可能对某些动作给出错误的估计;如果智能体从不尝试这些动作,模型的错误就永远不会被发现和纠正。所以即使有模型,只要模型可能不准,探索仍然有价值——这是第 13、15 讲基于模型的探索要讨论的问题。

练习 2(ε\varepsilon-贪心):在一个有 4 个动作的状态中,Q=[1.0,3.0,2.0,3.0]Q = [1.0, 3.0, 2.0, 3.0],ε=0.2\varepsilon = 0.2。写出 ε\varepsilon-贪心策略下每个动作的概率(平局时把贪心的概率平分给并列最大的动作)。

参考答案

每个动作都有 ε/4=0.05\varepsilon/4 = 0.05 的”随机部分”。贪心部分 1−ε=0.81 - \varepsilon = 0.8 平分给动作 1 和 3(都是 3.0),各 0.4。 所以:π=[0.05,0.45,0.05,0.45]\pi = [0.05, 0.45, 0.05, 0.45],和为 1 ✓。

练习 3(手算更新):α=0.5\alpha = 0.5,γ=0.9\gamma = 0.9。当前 Q(s1,⋅)=[2,4]Q(s_1, \cdot) = [2, 4],Q(s2,⋅)=[6,1]Q(s_2, \cdot) = [6, 1]。智能体在 s1s_1 执行动作 0,得到 r=1r = 1,到达 s2s_2;按 ε\varepsilon-贪心选出的下一个动作是 1(一次探索)。分别用 SARSA 和 Q-learning 更新 Q(s1,0)Q(s_1, 0)。

参考答案

SARSA:目标 =1+0.9×Q(s2,1)=1+0.9=1.9= 1 + 0.9 \times Q(s_2, 1) = 1 + 0.9 = 1.9;Q(s1,0)=2+0.5×(1.9−2)=1.95Q(s_1, 0) = 2 + 0.5 \times (1.9 - 2) = 1.95。 Q-learning:目标 =1+0.9×max⁡(6,1)=6.4= 1 + 0.9 \times \max(6, 1) = 6.4;Q(s1,0)=2+0.5×(6.4−2)=4.2Q(s_1, 0) = 2 + 0.5 \times (6.4 - 2) = 4.2。

SARSA 因为”下一步探索到了一个差动作”而下调了估计;Q-learning 忽略下一步的探索,按”下一步最优”来估计,所以上调了估计。

练习 4(证明):在 2.3 节的证明中,为什么要求 πi\pi_i 是 ε\varepsilon-软的?如果 πi\pi_i 是一个任意的策略(比如确定性策略),证明中哪一步会失败?

参考答案

需要权重 wa=πi(a∣s)−ε/∣A∣1−εw_a = \frac{\pi_i(a \mid s) - \varepsilon/|A|}{1 - \varepsilon} 非负。如果 πi\pi_i 在某个动作上的概率小于 ε/∣A∣\varepsilon/|A|(比如确定性策略中未被选中的动作概率为 0),那个权重就是负的,∑awaQ(s,a)\sum_a w_a Q(s,a) 不再是加权平均,“最大值 ≥ 加权平均”的论证就不成立了。

直觉上:如果旧策略是一个确定性的最优策略,新的 ε\varepsilon-贪心策略会在 ε\varepsilon 的时间里乱走,当然可能比旧策略差。

练习 5(同策略 vs 异策略):在悬崖行走中,如果把 ε\varepsilon 从 0.1 改成 0.3,你预计 SARSA 学到的路线会怎样变化?Q-learning 呢?训练回报呢?

参考答案

预测:SARSA 乱走的概率更大,走在离悬崖近的地方更危险,它会更加小心;Q-learning 学的是贪心策略的价值,与 ε\varepsilon 无关,路线仍然是紧贴悬崖的最短路线,但训练时掉下去的概率大大增加(悬崖边每步 0.3/4=7.5%0.3/4 = 7.5\%)。

实测(训练 1000 回合,6 个种子):

  • Q-learning:6 个种子的贪心路线全部是 13 步的最短路线,但训练回报从 ε=0.1\varepsilon = 0.1 时的约 −49 暴跌到约 −180。
  • SARSA:大多数种子仍走最上面一行(17 步,本来就已经离悬崖最远了),训练回报约 −40 到 −75。有的种子学到的贪心路线甚至走不到终点:终点就在悬崖旁边,最后”下去”的那一步离悬崖太近,按 ε=0.3\varepsilon = 0.3 的策略来评估显得太危险,贪心策略在终点上方来回徘徊。

这说明 SARSA 学到的是”ε\varepsilon-贪心策略”的价值:ε\varepsilon 越大,它越悲观;对这样的 QQ 取贪心,有时会得到一个过于保守、甚至无法完成任务的确定性策略。修改方法:在 03_cliff_walking.py 中调用 train(algo, 1000, epsilon=0.3)。

练习 6(最大化偏差):两个动作的真实价值都是 0,估计 Q^(a)=Q(a)+ϵa\hat Q(a) = Q(a) + \epsilon_a,其中 ϵ1,ϵ2\epsilon_1, \epsilon_2 独立且都等概率取 +1+1 或 −1-1。计算 E[max⁡(Q^(1),Q^(2))]\mathbb{E}[\max(\hat Q(1), \hat Q(2))]。

参考答案

四种等可能情况:(+1,+1)→1(+1, +1) \to 1;(+1,−1)→1(+1, -1) \to 1;(−1,+1)→1(-1, +1) \to 1;(−1,−1)→−1(-1, -1) \to -1。期望 =(1+1+1−1)/4=0.5>0= (1 + 1 + 1 - 1)/4 = 0.5 > 0。每个估计单独都是无偏的,但它们的最大值高估了 0.5。

练习 7(算法对应):Expected SARSA 在目标策略为贪心策略时变成了 Q-learning。那么当 ε=1\varepsilon = 1(完全随机的行为策略),SARSA 学到的是什么策略的价值?这个价值有用吗?

参考答案

ε=1\varepsilon = 1 时 SARSA 评估的是均匀随机策略的 QQ 值。对这个 QQ 贪心,相当于做了一步策略改进(第 2 讲 7.2 节),得到的策略比随机策略好,但一般不是最优的。而 Q-learning 即使用完全随机的行为策略收集数据,只要每个 (s,a)(s,a) 被访问足够多次,仍然能学到 Q∗Q^*——这正是异策略学习的威力。

练习 8(动手)★:修改 02_sarsa_qlearning.py,给 Q-learning 加上乐观初始化(把 Q = np.zeros(...) 改成 Q = np.full(..., 1.0)),并把 ε\varepsilon 设为 0。它能学到最优策略吗?和演示 5 中 ε=0\varepsilon = 0、QQ 初始化为 0 的结果比较。

提示

网格世界中所有回报都不超过 1,所以初始值 1.0 是”乐观”的。每个 (s,a)(s,a) 被尝试之后,估计会降下来,贪心策略于是转去尝试其他仍是 1.0 的动作。(注意把吸收状态 END 的 QQ 设回 0。)

参考结果(2000 回合,α=0.1\alpha = 0.1,5 个种子):

  • 乐观初始化 + ε=0\varepsilon = 0:与最优动作一致的格子数为 7、8、8、9、8,其中 4 个种子的贪心策略真实价值达到最优的 0.705。
  • Q=0Q = 0 + ε=0\varepsilon = 0:一致格子数为 5、7、7、7、7,真实价值只有 0.668~0.691。

乐观初始化明显更好,但它的作用只在早期:一旦所有动作都被试过若干次,它就退化为纯贪心,仍可能被不幸的早期样本误导(所以不是每个种子都达到最优)。


11. 延伸阅读

  • Sutton & Barto,Reinforcement Learning: An Introduction(第 2 版):第 5.3–5.5 节(MC 控制)、第 6.4–6.7 节(SARSA、Q-learning、Expected SARSA、Double Q-learning;悬崖行走和最大化偏差的例子都来自这里)。
  • CS234 Spring 2024 Lecture 4 录像与课件。
  • Watkins & Dayan (1992),Q-learning:Q-learning 收敛性的经典证明。
  • Singh, Jaakkola, Littman & Szepesvári (2000),Convergence Results for Single-Step On-Policy Reinforcement-Learning Algorithms:SARSA 在 GLIE 下的收敛性。
  • van Hasselt (2010),Double Q-learning:最大化偏差与双估计器。

12. 下一讲预告

本讲的所有算法都用一张表存储 Q(s,a)Q(s, a)——每个状态–动作对一个格子。网格世界有 12 × 4 = 48 个格子,没问题。但如果状态是一张 Atari 游戏画面(210 × 160 像素)、一个机器人的连续关节角度、一段对话的上下文呢?表格存不下,而且每个状态几乎只会出现一次,必须能从见过的状态推广到没见过的状态。

下一讲我们引入函数逼近:用一个带参数的函数(线性函数、神经网络)来表示 Q(s,a;w)Q(s, a; w)。你会看到:

  • 把 MC、TD、Q-learning 改写成”梯度下降”的形式;
  • 为什么 TD + 函数逼近 + 异策略会导致发散(“致命三角”);
  • DQN 如何用经验回放和目标网络驯服这个不稳定性,第一次让 RL 从原始像素学会玩 Atari 游戏。

下一讲之前,建议你:跑通 code/lecture04/ 下的所有脚本(先运行 python gridworld.py 看标准答案),完成练习 3、5、6,尝试练习 8。

← 返回课程目录