期中复习(上):模仿学习 · 策略梯度 · Actor-Critic
把前半学期的三条主线——行为克隆的误差界、策略梯度的方差控制、actor-critic 的偏差/方差权衡——重新串成一条可以直接拿去考试的推导链。
0. 本讲导读
这一讲没有新算法。它是期中考试前的第一次复习课,Levine 把课程前半段的三大板块——模仿学习(imitation learning)、策略梯度(policy gradient)、actor-critic——各挑出最容易考、也最容易做错的那几页,重新推一遍。
复习课的 slides 有一个非常鲜明的特点:几乎每一页的角落里都埋着一个问句。「Question: how does the total number of mistakes scale with the horizon?」「but… are we allowed to do that??」「Why does this work?」「is it true? and when?」「Do we have to choose just one $n$?」这些问句就是考点本身。本文的组织方式因此与普通讲次不同:每遇到一个这样的问句,就把它还原成一道完整的复习题(题面 + 设定 + 备选答案),然后给出逐步解答、指出考点、说明每个错误选项错在哪里。
另外每一节末尾都会给一张公式速查卡,考前可以只翻这些卡片。
- 模仿学习:朴素行为克隆的期望错误数是 $O(\epsilon H^2)$,而不是监督学习直觉给出的 $O(\epsilon H)$。多出来的那个 $H$ 完全来自分布漂移——你在 $p_{\text{train}}$ 上训练,却在 $p_{\pi_\theta}$ 上测试。
- 策略梯度:$\nabla_\theta J$ 的推导只用到一个技巧(log-derivative trick)和一个事实(转移概率与 $\theta$ 无关,求导后消失)。它是 on-policy 的,因为期望是对 $p_\theta(\tau)$ 取的。
- baseline:任何与动作无关的 $b$ 减掉之后梯度仍然无偏,证明只有三行;平均回报不是方差最优的 baseline,但足够好。
- PPO 不是凭空发明的:它 = 「策略梯度即策略迭代」的界 + 一阶重要性采样近似 + 用裁剪代替显式 TV/KL 约束。考试常考「为什么可以忽略状态分布不匹配」,答案是 $D_{\text{TV}}(p_\theta, p_{\theta'}) \le \epsilon t$。
- Actor-critic:$\hat A_{\text{C}}$(自举)低方差高偏差,$\hat A_{\text{MC}}$(蒙特卡洛)无偏高方差,$n$-step 在两者之间插值,GAE 则是对所有 $n$ 做 $\lambda^{n-1}$ 指数加权,最后化简成一行 $\sum (\gamma\lambda)^{t'-t}\delta_{t'}$。
全局速查:三大板块的对应关系
| 板块 | 核心量 | 最关键的一行公式 | 典型失败模式 | 对应讲次 |
|---|---|---|---|---|
| 模仿学习 | 期望错误数 | $\sum_t \mathbb{E}_{p_{\pi_\theta}}[c(s_t,a_t)] \le O(\epsilon H^2)$ | 分布漂移;多模态动作分布 | Lecture 2 |
| MDP 与目标 | $J(\theta)=\mathbb{E}_{\tau\sim p_\theta}[\sum_t \gamma^t r(s_t,a_t)]$ | $p_\theta(\tau)=p(s_1)\prod_t \pi_\theta(a_t|s_t)p(s_{t+1}|s_t,a_t)$ | 混淆 $s$ 与 $o$、忘记 $\gamma$ | Lecture 4 |
| 策略梯度 | $\nabla_\theta J$ | $\mathbb{E}\left[\sum_t \nabla_\theta \log\pi_\theta(a_t|s_t)\,\hat A_t\right]$ | 方差爆炸;IS 权重指数级 | Lecture 5 |
| Actor-critic | $\hat A^\pi(s,a)$ | $\hat A_{\text{GAE}}=\sum_{t'\ge t}(\gamma\lambda)^{t'-t}\delta_{t'}$ | critic 有偏;on-policy 样本效率低 | Lecture 6 |
| PPO / TRPO | $\bar A(\theta')$ | $\sum_t \mathbb{E}_{s\sim p_\theta}\mathbb{E}_{a\sim\pi_\theta}\left[\frac{\pi_{\theta'}(a|s)}{\pi_\theta(a|s)}A^{\pi_\theta}(s,a)\right]$ | 忽略分布不匹配而不设约束 | Lecture 7 |
下面按 slides 的顺序展开:Part 1 模仿学习(第 1–3 节)、Part 2 策略梯度(第 4–8 节)、Part 3 actor-critic(第 9–10 节)。
1. 模仿学习:行为克隆和它为什么会崩
1.1 行为克隆的完整设定
行为克隆(behavioral cloning, BC)只有两步,Levine 在复习时把它压缩到了一页:
第一步,收集数据。让人类专家演示,得到 $N$ 条长度为 $H$ 的轨迹:
$$ \mathcal{D} = \left\{\left(o_1^{(i)}, a_1^{(i)}, \ldots, o_H^{(i)}, a_H^{(i)}\right)\right\}_{i=1}^{N} $$第二步,跑监督学习,也就是最大似然估计(maximum likelihood estimation, MLE):
$$ \argmax_\theta \sum_{i=1}^{N}\sum_{t=1}^{H} \log \pi_\theta\!\left(a_t^{(i)} \mid o_t^{(i)}\right) $$
数据集里写的是观测 $o_t$(observation),而分析误差时写的是状态 $s_t$(state)。状态满足马尔可夫性:给定 $s_t$ 和 $a_t$,$s_{t+1}$ 与历史无关。观测通常只是状态的一个(可能有损的)函数,$o_t = g(s_t)$。BC 在观测上做 MLE 完全没问题;但下面的理论分析为了能写出 $p_{\pi_\theta}(s_t)$ 这样的量,会假设我们直接看到状态。考试里如果题目强调「部分可观测」,那么「专家行为看起来非马尔可夫」就是一个合法答案。
1.2 复习题 Q1:错误数如何随 horizon 增长?
这是复习课上第一个正式的问句,也是模仿学习部分几乎必考的一道题。
设定。定义 0/1 代价
$$ c(s_t, a_t) = \begin{cases} 0 & \text{if } a_t = \pi^\star(s_t) \\ 1 & \text{otherwise} \end{cases} $$其中 $\pi^\star$ 是专家策略。我们关心的量是
$$ \sum_{t=1}^{H} \mathbb{E}_{s_t \sim p_{\pi_\theta}(s_t),\, a_t \sim \pi_\theta(a_t|s_t)}\left[c(s_t, a_t)\right], $$它正是期望的总犯错次数。假设学到的策略在训练分布上犯错概率不超过 $\epsilon$。
问:这个总犯错次数如何随 horizon $H$ 增长?
(A) $O(\epsilon)$ (B) $O(\epsilon H)$ (C) $O(\epsilon H^2)$ (D) $O(\epsilon^2 H)$
答案:(C) $O(\epsilon H^2)$。
直觉版推导(先看这个,考场上够用)。把策略想象成一个走钢丝的人。它在钢丝上(训练分布覆盖的状态)时,每一步犯错概率是 $\epsilon$;一旦掉下去,就进入了训练数据里从来没出现过的状态,网络在那里的输出完全没有保证,可以悲观地假设之后每一步都错。
于是:第一次犯错发生在时刻 $t$ 的概率大约是 $\epsilon$(准确说是 $(1-\epsilon)^{t-1}\epsilon$,但我们只要上界),此后剩下的 $H-t$ 步全部计入代价。总期望代价
$$ \mathbb{E}[\text{mistakes}] \;\lesssim\; \sum_{t=1}^{H} \epsilon \cdot (H - t) \;=\; \epsilon \cdot \frac{H(H-1)}{2} \;=\; O(\epsilon H^2). $$数值感受一下:$\epsilon = 0.01$(每步只有 1% 概率犯错,听起来是个非常好的监督学习模型),$H = 1000$(一段几十秒的驾驶)。$O(\epsilon H) = 10$ 次错误,还能接受;$O(\epsilon H^2) = 0.01\times 1000^2/2 = 5000$ 次错误——比 horizon 本身还大,意味着策略基本上从中途开始就一直在犯错。这就是为什么朴素 BC 在长时序控制任务上会彻底失效。
选 (B) 的人是把 BC 当成了普通监督学习:每步错 $\epsilon$,走 $H$ 步,总错 $\epsilon H$。这个推理只有在测试分布等于训练分布时才成立。但 RL 里策略的动作会改变后续状态分布,一次犯错会把你推到一个训练集没覆盖的状态,在那里 $\epsilon$ 的保证失效了。多出来的那个 $H$ 就是「犯错之后剩余的时间步数」。
(A) 忽略了误差会累积;(D) 把 $\epsilon$ 平方,但错误只需要发生一次就够了,不需要两次独立事件同时发生,所以不会出现 $\epsilon^2$。
提前剧透一下第 3 节:如果我们能保证训练分布就是策略自己的分布($p_{\text{train}} = p_{\pi_\theta}$),那么上面「掉下钢丝就没救了」的情形不存在——策略访问的每个状态都在训练分布里,每步错 $\epsilon$,总错 $\epsilon H$,二次项消失。DAgger 干的就是这件事。
2. 重点推导:$O(\epsilon H^2)$ 界的严格证明
上面的「走钢丝」论证假设了「一旦犯错就永远错下去」,这是一个很强的假设。Levine 在复习课上把更一般的版本完整推了一遍——这是本讲最长、也最值得逐行吃透的一段推导,考试里非常适合出「填空补步骤」。
2.1 假设与那个「有用的性质」
唯一的假设是:在训练分布上,犯错概率不超过 $\epsilon$:
$$ \mathbb{E}_{s_t \sim p_{\text{train}}(s_t)}\left[\pi_\theta\!\left(a_t \ne \pi^\star(s_t) \mid s_t\right)\right] \le \epsilon . $$注意这里不再假设「一旦犯错就完蛋」。相反,我们只写下一个恒等式:把策略在时刻 $t$ 的状态分布拆成「一次都没错过」和「至少错过一次」两部分:
$$ p_{\pi_\theta}(s_t) = \underbrace{(1-\epsilon)^t}_{\text{一次都没犯错的概率}} p_{\text{train}}(s_t) \;+\; \underbrace{\left(1-(1-\epsilon)^t\right)}_{\text{至少犯过一次错}} p_{\text{mistake}}(s_t). $$
很多人把 $(1-\epsilon)^t$ 当成「不等式」的一部分而纠结它是否精确。它其实是定义:我们先规定「没犯错的那一支」权重是 $(1-\epsilon)^t$,然后把剩下所有概率质量定义成 $p_{\text{mistake}}$。因为 $p_{\pi_\theta}$ 和 $(1-\epsilon)^t p_{\text{train}}$ 都是(次)概率测度,剩余部分归一化后必然是一个合法分布,所以这个分解总是成立。
2.2 第一步:用总变差散度界住分布差异
总变差散度(total variation divergence)定义为
$$ D_{\text{TV}}(p, q) = \frac{1}{2}\sum_x |p(x) - q(x)| \;\le\; 1 . $$把上面的分解代进去,逐步化简(红色划掉的是相消的项):
$$ \begin{aligned} D_{\text{TV}}(p_{\text{train}}, p_{\pi_\theta}) &= \frac{1}{2}\sum_{s_t}\left|p_{\text{train}}(s_t) - p_{\pi_\theta}(s_t)\right| \\ &= \frac{1}{2}\sum_{s_t}\left|p_{\text{train}}(s_t) - (1-\epsilon)^t p_{\text{train}}(s_t) - \left(1-(1-\epsilon)^t\right)p_{\text{mistake}}(s_t)\right| . \end{aligned} $$诀窍在于把第一个 $p_{\text{train}}(s_t)$ 拆成两块:
$$ p_{\text{train}}(s_t) = (1-\epsilon)^t p_{\text{train}}(s_t) + \left(1-(1-\epsilon)^t\right) p_{\text{train}}(s_t). $$于是 $(1-\epsilon)^t p_{\text{train}}$ 那一项恰好被减掉,只剩下公因子 $\left(1-(1-\epsilon)^t\right)$:
$$ = \left(1-(1-\epsilon)^t\right)\cdot\frac{1}{2}\sum_{s_t}\left|p_{\text{train}}(s_t) - p_{\text{mistake}}(s_t)\right| \;\le\; 1-(1-\epsilon)^t \;\le\; \epsilon t . $$最后两个不等号分别用到:
- $\frac{1}{2}\sum_{s_t}|p_{\text{train}} - p_{\text{mistake}}| = D_{\text{TV}} \le 1$——这就是对 $p_{\text{mistake}}$ 唯一的要求,它可以是任何分布;
- 有用的恒等式:对 $\epsilon \in [0,1]$ 有 $(1-\epsilon)^t \ge 1-\epsilon t$,因此 $1-(1-\epsilon)^t \le \epsilon t$。
这是伯努利不等式。最快的证法是对 $t$ 做归纳:$t=0$ 时两边都是 1。设 $(1-\epsilon)^t \ge 1-\epsilon t$,两边乘以非负数 $(1-\epsilon)$:
$$ (1-\epsilon)^{t+1} \ge (1-\epsilon t)(1-\epsilon) = 1-\epsilon(t+1) + \epsilon^2 t \ge 1-\epsilon(t+1), $$因为 $\epsilon^2 t \ge 0$。证毕。考试里如果要求「说明 $\epsilon t$ 这个上界从何而来」,答这三行即可。
2.3 第二步:把分布差异转成代价差异
现在回到我们真正关心的量。把期望展开成对状态求和,再加一项减一项:
$$ \begin{aligned} &\sum_{t=1}^{H} \mathbb{E}_{s_t\sim p_{\pi_\theta}(s_t),\,a_t\sim\pi_\theta}\left[c(s_t,a_t)\right] = \sum_{t=1}^{H}\sum_{s_t} p_{\pi_\theta}(s_t)\,\mathbb{E}_{a_t\sim\pi_\theta(a_t|s_t)}\left[c(s_t,a_t)\right] \\ &= \sum_{t=1}^{H}\sum_{s_t}\Big(p_{\text{train}}(s_t) + \big(p_{\pi_\theta}(s_t) - p_{\text{train}}(s_t)\big)\Big)\mathbb{E}_{a_t\sim\pi_\theta}\left[c(s_t,a_t)\right] \\ &\le \sum_{t=1}^{H}\sum_{s_t}\Big(p_{\text{train}}(s_t) + \big|p_{\pi_\theta}(s_t) - p_{\text{train}}(s_t)\big|\Big)\mathbb{E}_{a_t\sim\pi_\theta}\left[c(s_t,a_t)\right] \\ &= \sum_{t=1}^{H}\left[\underbrace{\sum_{s_t} p_{\text{train}}(s_t)\mathbb{E}_{\pi_\theta}[c]}_{\text{(I)}}\right] + \left[\underbrace{\sum_{s_t}\big|p_{\pi_\theta}(s_t)-p_{\text{train}}(s_t)\big|}_{\text{(II)}}\cdot\underbrace{\mathbb{E}_{\pi_\theta}[c]}_{\text{(III)}}\right]. \end{aligned} $$「加一项减一项」这一步是整个推导的枢纽:它把「在错误分布下的期望」改写成「在正确分布下的期望」加「一个分布差异项」。第三行的不等号只是把差值换成绝对值(因为 $c \ge 0$,放大差值只会让上界更大)。
三块分别界住:
| 项 | 含义 | 上界 | 依据 |
|---|---|---|---|
| (I) | 训练分布下的期望犯错率 | $\epsilon$ | 就是最初的假设 |
| (II) | $\sum_{s_t}|p_{\pi_\theta}-p_{\text{train}}| = 2D_{\text{TV}}$ | $2\epsilon t$ | 2.2 节的结论(注意有个因子 2,因为 TV 定义里带 $\tfrac12$) |
| (III) | 0/1 代价的期望 | $1$ | $c \in \{0,1\}$,期望不超过 1 |
合起来:
$$ \sum_{t=1}^{H}\mathbb{E}_{p_{\pi_\theta}}\left[c(s_t,a_t)\right] \;\le\; \sum_{t=1}^{H}\left(\epsilon + 2\epsilon t\right) \;=\; \epsilon H + \epsilon H(H+1) \;=\; O(\epsilon H^2). $$
| 量 | 公式 | 一句话 |
|---|---|---|
| 假设 | $\mathbb{E}_{p_{\text{train}}}[\pi_\theta(a\ne\pi^\star(s)|s)]\le\epsilon$ | 只在训练分布上有保证 |
| 分解 | $p_{\pi_\theta}=(1-\epsilon)^t p_{\text{train}} + (1-(1-\epsilon)^t)p_{\text{mistake}}$ | 恒等式,非假设 |
| 关键引理 | $(1-\epsilon)^t \ge 1-\epsilon t$ | 伯努利不等式 |
| 分布界 | $D_{\text{TV}}(p_{\text{train}},p_{\pi_\theta}) \le \epsilon t$ | 线性发散 |
| 代价界 | $\sum_t \mathbb{E}[c] \le O(\epsilon H^2)$ | 二次发散 |
| DAgger 后 | $O(\epsilon H)$ | 训练分布 = 策略分布 |
更细致的分析(包括 DAgger 的 no-regret 保证)见 Ross 等人的论文 A Reduction of Imitation Learning and Structured Prediction to No-Regret Online Learning (2011)。
3. 修复分布漂移:DAgger,以及为什么拟合不了专家
3.1 复习题 Q2:DAgger 到底改了哪一边?
我们希望 $p_{\text{data}}(o_t) = p_{\pi_\theta}(o_t)$。有两条路:(甲) 想办法让策略的状态分布 $p_{\pi_\theta}$ 贴近数据分布;(乙) 想办法让数据分布 $p_{\text{data}}$ 贴近策略的状态分布。DAgger 走的是哪条?它的四个步骤是什么?为什么第 3 步必须由人来做?
答案:走的是 (乙)。Levine 原话是「instead of being clever about $p_{\pi_\theta}(o_t)$, be clever about $p_{\text{data}}(o_t)$」。路线 (甲) 需要约束策略的行为(比如强行让它别偏离专家),这既难做也会损害性能;路线 (乙) 只需要换数据,而数据是我们能控制的东西。
DAgger(Dataset Aggregation)的四步循环:
| 步骤 | 操作 | 为什么必须这样 |
|---|---|---|
| 1 | 用人类数据 $\mathcal{D}=\{o_1,a_1,\ldots,o_N,a_N\}$ 训练 $\pi_\theta(a_t|o_t)$ | 先要有一个能跑的初始策略 |
| 2 | 运行 $\pi_\theta$,收集只有观测的数据集 $\mathcal{D}_\pi=\{o_1,\ldots,o_M\}$ | 这些 $o$ 正是从 $p_{\pi_\theta}$ 采出来的——恰恰是我们缺的分布 |
| 3 | 请人对 $\mathcal{D}_\pi$ 中的每个 $o$ 标注动作 $a_t$ | 这是瓶颈:只有专家知道「在这个策略自己走出来的怪状态下应该怎么办」,策略自己标就是自欺欺人 |
| 4 | 聚合 $\mathcal{D} \leftarrow \mathcal{D}\cup\mathcal{D}_\pi$,回到第 1 步 | 训练分布逐渐变成策略自己的分布,$O(\epsilon H^2)$ 退化为 $O(\epsilon H)$ |
「DAgger 让策略去模仿专家在专家自己访问的状态上的行为」——错。DAgger 的全部意义在于,让专家在学生访问的状态上给出标注。如果只在专家轨迹上加数据,那就还是原来的 BC,分布漂移一点没解决。
3.2 复习题 Q3:为什么即使没有分布漂移,也可能拟合不了专家?
DAgger 解决的是分布问题。但还有一类完全正交的问题:即使 $p_{\text{data}} = p_{\pi_\theta}$,模型也可能学不像专家。Levine 给了两个原因,这是一道标准的简答题。
列出「我们可能拟合不了专家」的两个原因,并各给一个例子和一个解法。
原因一:非马尔可夫行为(non-Markovian behavior)。人类的动作依赖于历史,而不只是当前这一帧。经典例子:你在演示开车时看到一个刹车灯亮了,你踩了刹车;但一秒后灯灭了,画面上看不出任何异常,你却仍然在减速。策略只看当前帧 $o_t$,会学到「这种画面下有时刹车有时不刹车」的矛盾标签。解法:把策略改成 $\pi_\theta(a_t \mid o_1,\ldots,o_t)$,用 RNN / Transformer 编码历史。
原因二:多模态行为(multimodal behavior)。面对同一棵树,人类可以选择从左绕、也可以从右绕,两者都是好动作。如果你用一个单峰高斯来拟合,MLE 会把两个模态平均掉,输出「直接撞树」。
3.3 解法之一:自回归离散化
把连续动作向量 $a_t = (a_{t,0}, a_{t,1}, a_{t,2}) = (0.1,\ 1.2,\ -0.3)$ 的每一维分别离散化成若干 bin,然后用一个自回归模型逐维预测。为什么这样做能表示任意多模态分布?
答案:因为链式法则。模型的三步分别输出
$$ p(a_{t,0} \mid s_t),\qquad p(a_{t,1} \mid s_t, a_{t,0}),\qquad p(a_{t,2}\mid s_t, a_{t,0}, a_{t,1}), $$把它们乘起来:
$$ p(a_{t,2}\mid s_t,a_{t,0},a_{t,1})\,p(a_{t,1}\mid s_t,a_{t,0})\,p(a_{t,0}\mid s_t) = p(a_{t,0},a_{t,1},a_{t,2}\mid s_t) = p(a_t\mid s_t). $$两点缺一不可:(1) 每一维用离散分布(softmax over bins),而离散分布可以是任意形状的,包括双峰;(2) 后面的维度以前面的维度为条件,所以维度之间的相关性也被保留了。如果去掉条件、让三维独立(即 $\prod_k p(a_{t,k}|s_t)$),你能表示「第 0 维双峰」,但表示不了「左绕时第 0 维取 $-1$ 且第 1 维取 $+1$,右绕时相反」这种联合模态,采样时会混搭出两个模态之间的无效动作。
3.4 解法之二:flow matching
离散化在动作维度高时会遇到 bin 数爆炸的问题。另一条路是直接学一个能表示复杂连续分布的生成模型,本课选的是 flow matching(与扩散模型同源,但训练目标更简单)。
采样过程:从噪声出发,沿着一个学到的速度场积分。
- 采 $x_0 \sim \mathcal{N}(0, I)$;
- 对 $t \in \{0, \Delta t, 2\Delta t, \ldots, 1-\Delta t\}$ 迭代 $x_{t+\Delta t} \leftarrow x_t + v(x_t, t)\Delta t$(欧拉积分);
- 返回 $x_1$。
训练过程:告诉网络,在噪声与数据的连线上,正确的速度是什么。
- 采 $x_0\sim\mathcal{N}(0,I)$;
- 从数据集 $\mathcal{D}=\{x^{(i)}\}_{i=1}^N$ 采一个真实样本 $x_1$;
- 采 $t\sim p(t)$,例如 $\mathcal{U}(0,1)$;
- 令 $x_t = t\,x_1 + (1-t)\,x_0$(噪声与数据之间的线性插值);
- 对 $\left\|v(x_t,t) - \underbrace{(x_1-x_0)}_{\text{target velocity}}\right\|^2$ 求梯度更新 $v$。
看起来很矛盾:目标速度 $x_1-x_0$ 对同一个 $(x_t,t)$ 有很多可能取值,网络做最小二乘回归学到的是条件均值 $\mathbb{E}[x_1-x_0 \mid x_t, t]$,不是某一条具体路径。矛盾的化解在于:这个条件均值场的积分曲线恰好把 $\mathcal{N}(0,I)$ 输运成数据分布。在 $t$ 很小时不同模态的速度确实被平均了,所以粒子先往「中间」走;但随着 $t$ 增大、$x_t$ 逐渐靠近某一个模态,条件均值就被那个模态主导,粒子被推向它。多模态性是在积分过程中逐渐分化出来的,而不是靠单步预测的多峰性。做机器人策略时,把 $v$ 额外条件在 $s_t$ 上,就得到 $\pi_\theta(a|s)$。
3.5 目标条件行为克隆
最后一个模仿学习的话题:目标条件行为克隆(goal-conditioned BC)。动机是「失败的演示也是数据」——一条没到达目标 $g$ 的轨迹,对于它实际到达的那个终点来说是完美演示。
做法:对每条演示 $\{s_1^i, a_1^i, \ldots, s_{T-1}^i, a_{T-1}^i, s_T^i\}$,把它的最后一个状态 $s_T^i$ 当作目标,最大化
$$ \sum_i \sum_t \log \pi_\theta\!\left(a_t^i \mid s_t^i,\ g = s_T^i\right). $$这样学到的是一个目标条件策略 $\pi_\theta(a\mid s, g)$,测试时给定任意目标 $g$ 都能用。
4. 策略梯度:直接微分与 log-derivative trick
Part 2 开始。模仿学习需要专家;强化学习不需要,代价是我们必须自己对目标函数求导。全部推导只有六行,但每一行都可能被单独拿出来考。
4.1 六行推导,逐行解释
第 1 行:目标。我们要找的是
$$ \theta^\star = \argmax_\theta J(\theta), \qquad J(\theta) = \mathbb{E}_{\tau\sim p_\theta(\tau)}\left[r(\tau)\right], $$其中 $r(\tau) = \sum_{t=1}^{H} r(s_t,a_t)$ 是整条轨迹的回报。参数 $\theta$ 出现在期望的分布里,而不是被期望的函数里——这正是 RL 与监督学习最本质的区别,也是为什么不能直接反向传播。
第 2 行:轨迹分布。
$$ p_\theta(s_1,a_1,\ldots,s_H,a_H) = p(s_1)\prod_{t=1}^{H}\pi_\theta(a_t\mid s_t)\,p(s_{t+1}\mid s_t,a_t). $$第 3 行:log-derivative trick。核心恒等式是
$$ p_\theta(\tau)\,\nabla_\theta \log p_\theta(\tau) = p_\theta(\tau)\cdot\frac{\nabla_\theta p_\theta(\tau)}{p_\theta(\tau)} = \nabla_\theta p_\theta(\tau). $$用它把 $\nabla_\theta J$ 变回一个期望:
$$ \nabla_\theta J(\theta) = \nabla_\theta\!\int p_\theta(\tau) r(\tau)\,d\tau = \int \nabla_\theta p_\theta(\tau)\,r(\tau)\,d\tau = \int p_\theta(\tau)\nabla_\theta\log p_\theta(\tau)\,r(\tau)\,d\tau = \mathbb{E}_{\tau\sim p_\theta(\tau)}\left[\nabla_\theta\log p_\theta(\tau)\,r(\tau)\right]. $$为什么非要变成期望?因为期望可以用采样近似,而 $\int \nabla_\theta p_\theta(\tau)\,r(\tau)d\tau$ 不能——$\nabla_\theta p_\theta$ 不是概率分布,你没法从它「采样」。
第 4 行:取对数把连乘变连加。
$$ \log p_\theta(\tau) = \log p(s_1) + \sum_{t=1}^{H}\log\pi_\theta(a_t\mid s_t) + \sum_{t=1}^{H}\log p(s_{t+1}\mid s_t,a_t). $$第 5 行:划掉两项。$\log p(s_1)$ 和 $\log p(s_{t+1}|s_t,a_t)$ 都不含 $\theta$,对 $\theta$ 求梯度后为零:
$$ \nabla_\theta \log p_\theta(\tau) = \sum_{t=1}^{H}\nabla_\theta \log\pi_\theta(a_t\mid s_t). $$第 6 行:结论。
$$ \nabla_\theta J(\theta) = \mathbb{E}_{\tau\sim p_\theta(\tau)}\left[\left(\sum_{t=1}^{H}\nabla_\theta\log\pi_\theta(a_t\mid s_t)\right)\left(\sum_{t=1}^{H} r(s_t,a_t)\right)\right]. $$
下面哪些说法正确?
(A) 策略梯度需要知道环境的转移概率 $p(s'|s,a)$。
(B) 策略梯度的估计是无偏的。
(C) 策略梯度可以用旧策略采的样本直接估计。
(D) 如果奖励全部加上一个常数 $c$,策略梯度的期望不变。
答案:只有 (B) 对。
- (A) 错:第 5 行已经把转移项划掉了,这就是 model-free 的来源。我们仍然需要与环境交互来采轨迹,但不需要它的解析形式。「不需要模型」≠「不需要环境」,这是最常见的混淆。
- (B) 对:整个推导只用了恒等变形,采样估计 $\frac1N\sum_i$ 是对期望的无偏估计。无偏但方差极大,这是后面所有改进(baseline、causality、critic、GAE)的出发点。
- (C) 错:期望是对 $p_\theta(\tau)$ 取的,$\theta$ 一变样本就失效了,所以朴素策略梯度是 on-policy 的。想用旧样本必须做重要性采样(第 6 节)。
- (D) 错——而且这是个有意思的陷阱。加常数 $c$ 会让 $r(\tau)$ 变成 $r(\tau)+Hc$,期望上确实不变(因为 $\mathbb{E}[\nabla\log p_\theta \cdot Hc]=0$,见第 5 节的 baseline 证明),但有限样本的方差会剧烈改变。如果原来回报有正有负、加了常数后全为正,那么所有采到的轨迹都会被「提升概率」,只是提升幅度不同,梯度估计的信噪比会显著恶化。严格说「期望不变」是对的、「策略梯度不变」是错的——考试里若给的是「梯度估计不变」,选它就错了。
4.2 最小实现
import torch
def reinforce_loss(logp, returns):
"""logp: [N, H] 每步动作的 log pi_theta(a_t|s_t)
returns: [N, H] 每步的 reward-to-go(已减 baseline)
返回一个标量 loss,对它做 .backward() 即得 -grad J。"""
# 注意 returns 必须 detach:它是「权重」,不是可微目标
return -(logp * returns.detach()).sum(dim=1).mean()
# 朴素版(对应第 6 行公式,未用 causality):
# weight = returns.sum(dim=1, keepdim=True).expand_as(logp)
# loss = -(logp * weight.detach()).sum(dim=1).mean()
两个实现细节值得记住:(1) 权重必须 detach(),否则 PyTorch 会顺着 returns 反传,得到一个完全错误的梯度;(2) 对时间维求和、对 batch 维求平均——公式里 $\sum_t$ 是求和,$\mathbb{E}_\tau$ 是平均,写反了会让梯度尺度随 $H$ 变化。
5. Baseline:为什么可以减、减什么最好
5.1 复习题 Q6:我们「被允许」减 baseline 吗?
实践中我们把梯度估计写成
$$ \nabla_\theta J(\theta) \approx \frac1N\sum_{i=1}^{N}\nabla_\theta\log p_\theta(\tau_i)\left[r(\tau_i) - b\right], \qquad b = \frac1N\sum_{i=1}^{N} r(\tau_i). $$但…… are we allowed to do that? 请证明减去 $b$ 之后估计仍然无偏,并说明对 $b$ 的要求是什么。
解答。只需证明多减的那一项期望为零。用第 4 节的恒等式 $p_\theta(\tau)\nabla_\theta\log p_\theta(\tau) = \nabla_\theta p_\theta(\tau)$:
$$ \mathbb{E}\left[\nabla_\theta \log p_\theta(\tau)\, b\right] = \int p_\theta(\tau)\nabla_\theta\log p_\theta(\tau)\, b\, d\tau = \int \nabla_\theta p_\theta(\tau)\, b\, d\tau = b\,\nabla_\theta \int p_\theta(\tau)\,d\tau = b\,\nabla_\theta 1 = 0 . $$四个等号分别是:代入期望定义 → 用恒等式 → 把常数 $b$ 提出、梯度与积分交换 → 概率归一化,$1$ 的梯度是 $0$。
对 $b$ 的要求:$b$ 不能依赖于被求导的那个随机变量(动作)。倒数第二个等号要求 $b$ 能提到积分号外,也就是 $b$ 与 $\tau$ 无关(或者在逐时间步的版本里,$b(s_t)$ 与 $a_t$ 无关即可——因为那时对 $a_t$ 积分同样给出 $\nabla_\theta 1 = 0$)。
5.2 复习题 Q7:什么才是方差最优的 baseline?
既然任意常数 $b$ 都无偏,我们可以挑一个让方差最小的。记 $g(\tau)=\nabla_\theta\log p_\theta(\tau)$,方差为
$$ \mathrm{Var} = \mathbb{E}\left[g(\tau)^2\left(r(\tau)-b\right)^2\right] - \left(\mathbb{E}\left[g(\tau)(r(\tau)-b)\right]\right)^2 . $$第二项与 $b$ 无关(我们刚证了减 $b$ 不改变期望),所以只需对第一项求导置零:
$$ \frac{d}{db}\mathbb{E}\left[g^2(r-b)^2\right] = -2\,\mathbb{E}\left[g^2 r\right] + 2b\,\mathbb{E}\left[g^2\right] = 0 \quad\Longrightarrow\quad b^\star = \frac{\mathbb{E}\left[g(\tau)^2\, r(\tau)\right]}{\mathbb{E}\left[g(\tau)^2\right]} . $$也就是被梯度幅值平方加权的平均回报。实践中几乎没人用它:它需要逐参数地估计($g$ 是向量,严格说每个分量有自己的最优 $b$),估计本身又引入噪声。Levine 的判断是「average reward is not the best baseline, but it's pretty good」——用简单平均回报,或者更好地,用一个学出来的 $\hat V^\pi_\phi(s_t)$ 作为状态相关 baseline,这就通向 actor-critic。
| 名称 | 公式 | 性质 |
|---|---|---|
| log-derivative trick | $p\nabla\log p = \nabla p$ | 把梯度变回期望 |
| REINFORCE | $\mathbb{E}\left[\left(\sum_t\nabla\log\pi_\theta\right)\left(\sum_t r\right)\right]$ | 无偏、高方差、on-policy |
| causality(reward-to-go) | $\mathbb{E}\left[\sum_t \nabla\log\pi_\theta(a_t|s_t)\sum_{t'\ge t} r_{t'}\right]$ | 仍无偏,方差更小 |
| baseline | $\left(\hat Q_t - b\right)$,$b$ 与 $a_t$ 无关 | 无偏 |
| 最优 baseline | $b^\star = \mathbb{E}[g^2 r]/\mathbb{E}[g^2]$ | 理论最优,实践少用 |
| 状态 baseline | $b(s_t) = \hat V^\pi_\phi(s_t)$ | 通向 actor-critic |
6. Off-policy 策略梯度与重要性采样
6.1 为什么会走到这一步
策略梯度是 on-policy 的:每次更新完 $\theta$,之前采的所有样本都作废。跑一次真机器人、或者跑一次大模型的 rollout 都很贵,扔掉太浪费。问题是:如果我们只有从别的分布 $\bar p(\tau)$ 采的样本,还能估计 $J(\theta)$ 吗?
答案是重要性采样(importance sampling, IS),一行恒等式:
$$ \mathbb{E}_{x\sim p(x)}[f(x)] = \int p(x)f(x)dx = \int \frac{q(x)}{q(x)}p(x)f(x)dx = \int q(x)\frac{p(x)}{q(x)}f(x)dx = \mathbb{E}_{x\sim q(x)}\left[\frac{p(x)}{q(x)}f(x)\right]. $$套到轨迹上:
$$ J(\theta) = \mathbb{E}_{\tau\sim\bar p(\tau)}\left[\frac{p_\theta(\tau)}{\bar p(\tau)}\,r(\tau)\right]. $$6.2 复习题 Q8:轨迹的重要性权重能约掉什么?
写出 $\dfrac{p_\theta(\tau)}{\bar p(\tau)}$ 的显式表达式,并化到最简。它还依赖转移概率吗?
解答。把两个轨迹分布都展开:
$$ \frac{p_\theta(\tau)}{\bar p(\tau)} = \frac{\cancel{p(s_1)}\prod_{t=1}^{H}\pi_\theta(a_t|s_t)\cancel{p(s_{t+1}|s_t,a_t)}}{\cancel{p(s_1)}\prod_{t=1}^{H}\bar\pi(a_t|s_t)\cancel{p(s_{t+1}|s_t,a_t)}} = \prod_{t=1}^{H}\frac{\pi_\theta(a_t|s_t)}{\bar\pi(a_t|s_t)} . $$初始状态分布和转移概率完全约掉——因为两个策略跑在同一个环境里。这和第 4 节「转移项求导后消失」是同一件事的两种表现:策略梯度方法之所以 model-free,就是因为环境动力学在两个地方都被消掉了。
6.3 复习题 Q9:为什么这个权重不能直接用?
把 IS 塞回策略梯度,并加上 causality($t$ 时刻的动作只影响 $t$ 之后的奖励,也只需要 $t$ 之前的 IS 权重),得到严格正确的 off-policy 策略梯度:
$$ \nabla_{\theta'} J(\theta') = \mathbb{E}_{\tau\sim p_\theta(\tau)}\left[\sum_{t=1}^{H}\nabla_{\theta'}\log\pi_{\theta'}(a_t|s_t)\left(\underbrace{\prod_{t'=1}^{t}\frac{\pi_{\theta'}(a_{t'}|s_{t'})}{\pi_\theta(a_{t'}|s_{t'})}}_{\text{exponential in } T\ldots}\right)\left(\sum_{t'=t}^{H} r(s_{t'},a_{t'})\right)\right]. $$问题:那个连乘是 $T$ 的指数函数。做个数值估计:假设每一步的比值是 $1\pm 0.1$ 的独立随机量,均值为 1。$H=100$ 时,$\log$ 权重是 100 个方差约 $0.01$ 的量之和,方差约 $1$,于是权重本身是一个对数正态随机变量,跨越一到两个数量级;$H=1000$ 时 $\log$ 权重的标准差约 $3.2$,权重跨越 $e^{\pm 6}\approx$ 四百倍。实际中一小撮样本的权重会占据全部质量,有效样本量塌缩到个位数,估计彻底失效。
6.4 一阶近似:把连乘扔掉
Levine 的做法是先把目标改写成「逐个 $(s,a)$」的形式再动手。on-policy 版本是
$$ \nabla_\theta J(\theta) \approx \frac1N\sum_{i=1}^{N}\sum_{t=1}^{H}\nabla_\theta\log\pi_\theta\!\left(a_t^{(i)}|s_t^{(i)}\right)\hat A_t^{(i)},\qquad \left(s_t^{(i)}, a_t^{(i)}\right)\sim \pi_\theta(s_t,a_t), $$其中 $\pi_\theta(s_t,a_t) = p_{\pi_\theta}(s_t)\pi_\theta(a_t|s_t)$ 是状态-动作的联合边缘分布。做 IS 时要对这个联合分布加权:
$$ \nabla_{\theta'}J(\theta') \approx \frac1N\sum_{i}\sum_{t}\frac{\pi_{\theta'}\!\left(s_t^{(i)},a_t^{(i)}\right)}{\pi_\theta\!\left(s_t^{(i)},a_t^{(i)}\right)}\nabla_{\theta'}\log\pi_{\theta'}\!\left(a_t^{(i)}|s_t^{(i)}\right)\hat A_t^{(i)} . $$把联合比值按链式法则拆开:
$$ \frac{\pi_{\theta'}(s_t,a_t)}{\pi_\theta(s_t,a_t)} = \underbrace{\frac{p_{\pi_{\theta'}}(s_t)}{p_{\pi_\theta}(s_t)}}_{\text{扔掉它}}\cdot\frac{\pi_{\theta'}(a_t|s_t)}{\pi_\theta(a_t|s_t)} . $$把状态边缘的比值直接扔掉,只保留动作比值。这就是「a first-order approximation for IS」。得到的估计量是
$$ \nabla_{\theta'}J(\theta') \approx \frac1N\sum_i\sum_t \frac{\pi_{\theta'}(a_t^{(i)}|s_t^{(i)})}{\pi_\theta(a_t^{(i)}|s_t^{(i)})}\nabla_{\theta'}\log\pi_{\theta'}\!\left(a_t^{(i)}|s_t^{(i)}\right)\hat A_t^{(i)}, $$它不再有连乘,方差不随 $H$ 指数增长。
Levine 在 slide 上直白地写着 "this is a little bit wrong, we'll see next time why it's mostly ok to do this"。扔掉 $p_{\pi_{\theta'}}(s_t)/p_{\pi_\theta}(s_t)$ 意味着我们假装新策略访问的状态分布和旧策略一样。这个假设在 $\theta'$ 接近 $\theta$ 时近似成立——第 8 节会把「接近」量化成 $D_{\text{TV}} \le \epsilon$,并证明误差是 $O(\epsilon t)$ 级的。这正是 PPO 必须裁剪的根本理由:不是为了「训练稳定」这种含糊说法,而是因为一旦 $\theta'$ 跑远,被我们扔掉的那一项就不再可忽略,整个目标函数失去意义。
7. 裁剪重要性权重:从代理目标到 PPO
7.1 代理目标与它的失控方向
回到轨迹层面看问题的本质。定义权重 $w(\tau) = \dfrac{p_{\theta'}(\tau)}{p_\theta(\tau)}$,代理目标(surrogate objective)是
$$ J(\theta') = \mathbb{E}_{\tau\sim p_\theta(\tau)}\left[w(\tau)\,r(\tau)\right],\qquad \nabla_{\theta'}J(\theta') = \mathbb{E}_{\tau\sim p_\theta(\tau)}\left[w(\tau)\nabla_{\theta'}\log p_{\theta'}(\tau)\,r(\tau)\right]. $$这个目标的病理在于:优化器只看到 $w(\tau)$,而 $w$ 可以无限增大。对于一条回报为正的样本轨迹,把 $\pi_{\theta'}$ 的概率质量全部堆到它上面能让目标无限上升——但这条轨迹只是一个样本,它的高回报可能纯粹是运气。优化器会一路把策略推到离数据非常远的地方,那里我们的估计完全没有依据。
解法:裁剪。
$$ w(\tau) = \max\left\{1-\epsilon,\ \min\left\{1+\epsilon,\ \frac{p_{\theta'}(\tau)}{p_\theta(\tau)}\right\}\right\},\qquad \epsilon \approx 0.1 . $$
7.2 复习题 Q10:为什么裁剪之后还要再套一个 min?
只用裁剪权重 $J(\theta')=\mathbb{E}\left[w_c(\tau)r(\tau)\right]$ 有一个漏洞。请画出 $J$ 关于比值 $\frac{p_{\theta'}}{p_\theta}$ 的函数图像,分别考虑 $r(\tau)\gt 0$ 和 $r(\tau)\lt 0$ 两种情况,指出漏洞在哪,并说明 PPO 用的 $\min\{w r,\ w_c r\}$ 如何补上它。
解答。设 $u = p_{\theta'}(\tau)/p_\theta(\tau)$,裁剪权重 $w_c = \mathrm{clip}(u, 1-\epsilon, 1+\epsilon)$。
情况一,$r(\tau) \gt 0$:$J = w_c r$ 随 $u$ 线性上升,直到 $u = 1+\epsilon$ 后变成平台。优化器把 $u$ 推到 $1+\epsilon$ 就没有梯度了,停下。正确行为。
情况二,$r(\tau) \lt 0$:$J = w_c r$ 随 $u$ 线性下降,在 $u \lt 1-\epsilon$ 时是平台。优化器想最大化 $J$,于是把 $u$ 往小推——推到 $1-\epsilon$ 以下进入平台后梯度为零,看起来也停了。漏洞在于:优化器在到达平台之前不受任何惩罚地一路下滑,而且一旦某次更新把 $u$ 甩到远小于 $1-\epsilon$ 的地方(例如 $u=0.01$),目标函数值反而是「好」的(平台值),策略却已经跑到数据分布之外。Slide 上写的是 "not paying any price for drifting away from data here!"——飘走却不付代价。
PPO 的修补是把裁剪和不裁剪两个版本取 $\min$:
$$ J(\theta') = \mathbb{E}_{\tau\sim p_\theta(\tau)}\left[\min\left\{w(\tau)r(\tau),\ w_c(\tau)r(\tau)\right\}\right],\quad w(\tau)=\frac{p_{\theta'}(\tau)}{p_\theta(\tau)},\ w_c = \mathrm{clip}(w,1-\epsilon,1+\epsilon). $$取 $\min$ 意味着我们总是采用更悲观的那个估计。在 $r \lt 0$ 且 $u$ 很小时,未裁剪的 $w r = u\cdot r$ 趋近于 0,而裁剪版是 $(1-\epsilon)r$(一个负数),$\min$ 选中后者……更重要的是在 $u \gt 1$ 且 $r\lt 0$ 时:未裁剪版 $ur$ 持续下降(惩罚一直生效),裁剪版在 $u\gt1+\epsilon$ 后是常数,$\min$ 选中持续下降的未裁剪版,于是「把坏动作的概率提高」这件事永远要付代价。这就是那个 $\min$ 的全部意义。
7.3 PPO 算法全貌
把逐样本形式写出来,并把 $r(\tau)$ 换成优势估计 $\hat A_t$,就得到教科书上的 PPO 裁剪目标:
$$ \mathcal{L}_{\text{CLIP}}(\theta') = \sum_{i=1}^{N}\sum_{t=1}^{H}\min\left\{\frac{\pi_{\theta'}(a_t^{(i)}|s_t^{(i)})}{\pi_\theta(a_t^{(i)}|s_t^{(i)})}\hat A_t^{(i)},\ \ \mathrm{clip}\!\left(\frac{\pi_{\theta'}(a_t^{(i)}|s_t^{(i)})}{\pi_\theta(a_t^{(i)}|s_t^{(i)})},\,1-\epsilon,\,1+\epsilon\right)\hat A_t^{(i)}\right\} $$完整算法:
- 用 $\pi_\theta$ 采一批轨迹 $\{\tau^{(i)}\}$;
- 计算价值回归目标 $y_t^{(i)} = r(s_t^{(i)},a_t^{(i)}) + \hat V_\phi^\pi(s_{t+1}^{(i)})$;
- 把 $\hat V_\phi^\pi(s)$ 拟合到 $\{y_t^{(i)}\}$;
- 用 GAE 算优势 $\hat A_{\text{GAE}}^\pi(s_t^{(i)},a_t^{(i)}) = \sum_{t'=t}^{\infty}(\gamma\lambda)^{t'-t}\delta_{t'}^{(i)}$;
- 令 $\theta' \leftarrow \theta$;
- 重复 $K$ 次:$\nabla_{\theta'}J(\theta')\approx\nabla_{\theta'}\mathcal{L}_{\text{CLIP}}(\theta')$,$\theta'\leftarrow\theta'+\alpha\nabla_{\theta'}J(\theta')$;
- $\theta\leftarrow\theta'$,回到第 1 步。
第 5–7 步的内层 $K$ 次循环是 PPO 之所以比朴素策略梯度样本效率高的原因:同一批数据被复用 $K$ 次(典型 $K=4\sim10$),而裁剪保证了 $\theta'$ 在这 $K$ 步中不会跑太远。
Slide 上还提到一个实用细节:熵正则化(entropy regularization),在目标里加上 $\sum_i\sum_t \mathcal{H}\left(\pi_{\theta'}(\cdot|s_t^{(i)})\right)$,鼓励策略保持随机性、延缓过早收敛到确定性策略。
8. 策略梯度即策略迭代:分布不匹配的界
这一节是 Part 2 的理论核心,也是整讲最容易出证明题的地方。它回答两个问题:(1) 为什么最大化那个带重要性权重的目标就等于改进策略?(2) 第 6 节扔掉的状态分布比值,凭什么可以扔?
8.1 复习题 Q11:证明策略改进恒等式
设 $J(\theta) = \mathbb{E}_{\tau\sim p_\theta(\tau)}\left[\sum_t \gamma^t r(s_t,a_t)\right]$。证明
$$ J(\theta') - J(\theta) = \mathbb{E}_{\tau\sim p_{\theta'}(\tau)}\left[\sum_{t=0}^{\infty}\gamma^t A^{\pi_\theta}(s_t,a_t)\right]. $$注意期望是对新策略 $\theta'$ 取的,而优势函数是旧策略的。
解答。分五步。
第 1 步:$J(\theta) = \mathbb{E}_{s_0\sim p(s_0)}\left[V^{\pi_\theta}(s_0)\right]$,这是价值函数的定义。
第 2 步(关键的小花招):初始状态分布 $p(s_0)$ 与策略无关,所以我们可以把它换成「从 $\theta'$ 采的轨迹的初始状态」:
$$ J(\theta) = \mathbb{E}_{\tau\sim p_{\theta'}(\tau)}\left[V^{\pi_\theta}(s_0)\right]. $$这一步把两个不同策略的量放到了同一个期望下,是整个证明能走通的原因。
第 3 步(望远镜求和):把 $V^{\pi_\theta}(s_0)$ 写成一个 telescoping series:
$$ V^{\pi_\theta}(s_0) = \sum_{t=0}^{\infty}\gamma^t V^{\pi_\theta}(s_t) - \sum_{t=1}^{\infty}\gamma^t V^{\pi_\theta}(s_t) = -\sum_{t=0}^{\infty}\gamma^t\left(\gamma V^{\pi_\theta}(s_{t+1}) - V^{\pi_\theta}(s_t)\right). $$(第二个和式做变量替换 $t\to t+1$ 后变成 $\sum_{t=0}^\infty \gamma^{t+1}V^{\pi_\theta}(s_{t+1})$。)于是
$$ J(\theta') - J(\theta) = J(\theta') + \mathbb{E}_{\tau\sim p_{\theta'}}\left[\sum_{t=0}^{\infty}\gamma^t\left(\gamma V^{\pi_\theta}(s_{t+1}) - V^{\pi_\theta}(s_t)\right)\right]. $$第 4 步:把 $J(\theta') = \mathbb{E}_{\tau\sim p_{\theta'}}\left[\sum_t \gamma^t r(s_t,a_t)\right]$ 也写进同一个期望里(合法,因为两边都是对 $p_{\theta'}$ 取期望):
$$ = \mathbb{E}_{\tau\sim p_{\theta'}}\left[\sum_{t=0}^{\infty}\gamma^t\left(r(s_t,a_t) + \gamma V^{\pi_\theta}(s_{t+1}) - V^{\pi_\theta}(s_t)\right)\right]. $$第 5 步:括号里正是旧策略优势函数的(单样本)定义,取期望后 $\mathbb{E}\left[r+\gamma V^{\pi_\theta}(s')\right] = Q^{\pi_\theta}(s,a)$,所以
$$ = \mathbb{E}_{\tau\sim p_{\theta'}}\left[\sum_{t=0}^{\infty}\gamma^t A^{\pi_\theta}(s_t,a_t)\right].\qquad\blacksquare $$
8.2 复习题 Q12:为什么想要忽略分布不匹配?
把上面的恒等式用重要性采样改写(对动作做 IS,因为我们只有 $\pi_\theta$ 的样本):
$$ J(\theta')-J(\theta) = \sum_t \mathbb{E}_{s_t\sim p_{\theta'}(s_t)}\left[\mathbb{E}_{a_t\sim\pi_\theta(a_t|s_t)}\left[\frac{\pi_{\theta'}(a_t|s_t)}{\pi_\theta(a_t|s_t)}A^{\pi_\theta}(s_t,a_t)\right]\right]. $$问题是外层期望还是对 $p_{\theta'}(s_t)$ 取的——而 $\theta'$ 正是我们要优化的量,我们不可能采它的样本。于是我们希望下面这个近似成立:
$$ \sum_t \mathbb{E}_{s_t\sim p_{\theta'}(s_t)}\left[\cdots\right] \;\approx\; \underbrace{\sum_t \mathbb{E}_{s_t\sim p_{\theta}(s_t)}\left[\mathbb{E}_{a_t\sim\pi_\theta}\left[\frac{\pi_{\theta'}(a_t|s_t)}{\pi_\theta(a_t|s_t)}A^{\pi_\theta}(s_t,a_t)\right]\right]}_{\bar A(\theta')} . $$为什么想要它成立?因为如果 $J(\theta')-J(\theta)\approx\bar A(\theta')$,那么
$$ \theta' \leftarrow \argmax_{\theta'}\bar A(\theta') $$就是一次策略改进——而 $\bar A(\theta')$ 里所有的采样都来自旧策略 $\theta$,完全可以用手上的数据算出来。这就是 6.4 节那个「一阶近似」在理论层面的正身。
8.3 复习题 Q13:把「策略接近」翻译成「状态分布接近」
先看简单情形:设 $\pi_\theta$ 是确定性策略 $a_t = \pi_\theta(s_t)$,并定义「$\pi_{\theta'}$ 接近 $\pi_\theta$」为 $\pi_{\theta'}\left(a_t\ne\pi_\theta(s_t)\mid s_t\right)\le\epsilon$。证明 $D_{\text{TV}}\left(p_{\theta'}(s_t), p_\theta(s_t)\right)\le\epsilon t$。这个推导让你想起什么?
解答:它和第 2 节的模仿学习分析一模一样。Slide 上就写着 "seem familiar?"。只需把「专家」换成「旧策略 $\pi_\theta$」,「学生」换成「新策略 $\pi_{\theta'}$」:
$$ p_{\theta'}(s_t) = (1-\epsilon)^t p_\theta(s_t) + \left(1-(1-\epsilon)^t\right)p_{\text{mistake}}(s_t), $$ $$ \frac12\sum_{s_t}\left|p_{\theta'}(s_t)-p_\theta(s_t)\right| = \left(1-(1-\epsilon)^t\right)\frac12\sum_{s_t}\left|p_{\text{mistake}}(s_t)-p_\theta(s_t)\right| \le 1-(1-\epsilon)^t \le \epsilon t . $$Levine 的评价是 "not a great bound, but a bound!"——$\epsilon t$ 在 $t$ 大时会超过 1(而 TV 本来就不超过 1),所以这个界在长 horizon 下是空的。但它足以说明当 $\epsilon$ 足够小时,分布差异可以任意小,这就够了。
去掉确定性假设:$\pi_\theta$ 是任意分布,定义「接近」为 $D_{\text{TV}}\left(\pi_{\theta'}(a_t|s_t),\pi_\theta(a_t|s_t)\right)\le\epsilon$ 对所有 $s_t$ 成立。同样的结论还成立吗?
解答:成立,靠一条耦合引理(coupling lemma)。
若 $D_{\text{TV}}(p_X, p_Y)\le\epsilon$,则存在一个联合分布 $p(x,y)$,其边缘分别是 $p_X$ 和 $p_Y$,并且 $p(x=y)= 1-\epsilon$。
直观地说:我们可以构造一种「配对采样」的方式,使得两个分布采出的样本至少有 $1-\epsilon$ 的概率完全相同。
把引理用到策略上:$\pi_{\theta'}(a_t|s_t)$ 与 $\pi_\theta(a_t|s_t)$ 可以耦合成「以至少 $1-\epsilon$ 的概率取相同动作」。于是「新策略与旧策略取不同动作」的概率不超过 $\epsilon$——这就把一般情形完全归约到了确定性情形,前面的推导原封不动照搬,得到同样的 $\frac12\sum_{s_t}\left|p_{\theta'}(s_t)-p_\theta(s_t)\right|\le \epsilon t$。
8.4 复习题 Q14:从分布界到目标值界
最后一步:分布接近 ⟹ 任何有界函数的期望也接近。对任意函数 $f$,
$$ \mathbb{E}_{p_{\theta'}(s_t)}\left[f(s_t)\right] = \sum_{s_t}p_{\theta'}(s_t)f(s_t) \;\ge\; \sum_{s_t}p_\theta(s_t)f(s_t) - \sum_{s_t}\left|p_\theta(s_t)-p_{\theta'}(s_t)\right|\max_{s_t}f(s_t) $$ $$ \ge\; \mathbb{E}_{p_\theta(s_t)}\left[f(s_t)\right] - 2\epsilon t \max_{s_t}f(s_t). $$(第一个不等号是把逐点差值放大成绝对值乘上 $f$ 的最大值;第二个用 $\sum|p-p'| = 2D_{\text{TV}} \le 2\epsilon t$。)
把 $f(s_t)$ 取成内层那个期望,得到
$$ \sum_t \mathbb{E}_{s_t\sim p_{\theta'}}\left[\mathbb{E}_{a_t\sim\pi_\theta}\left[\tfrac{\pi_{\theta'}}{\pi_\theta}A^{\pi_\theta}\right]\right] \;\ge\; \bar A(\theta') - \sum_t 2\epsilon t\, C, $$其中常数 $C = O(H r_{\max})$(有限 horizon)或 $O\!\left(\frac{r_{\max}}{1-\gamma}\right)$(折扣无限 horizon),因为优势函数的量级不超过回报的量级。
Slide 原话:"maximizing this maximizes a bound on the thing we want!" 这是 TRPO/PPO 全部理论正当性的来源。于是最终的优化问题是
$$ \theta' \leftarrow \argmax_{\theta'}\ \sum_t \mathbb{E}_{s_t\sim p_\theta(s_t)}\left[\mathbb{E}_{a_t\sim\pi_\theta(a_t|s_t)}\left[\frac{\pi_{\theta'}(a_t|s_t)}{\pi_\theta(a_t|s_t)}A^{\pi_\theta}(s_t,a_t)\right]\right] $$ $$ \text{s.t.}\quad D_{\text{TV}}\left(\pi_{\theta'}(a_t|s_t),\pi_\theta(a_t|s_t)\right)\le\epsilon . $$对足够小的 $\epsilon$,这保证 $J(\theta')-J(\theta)\ge 0$:因为 $\theta'=\theta$ 是可行解且目标值为 0,最优解的目标值只会更大,而误差项 $O(\epsilon)$ 在 $\epsilon\to0$ 时比目标项衰减得更慢……严格说是要求 $\epsilon$ 小到误差项不吃掉改进量,这也是「for small enough $\epsilon$」这句限定的含义。
8.5 PPO 的另一半:KL 惩罚版
TV 散度在实现上不方便(要对动作空间求和/积分)。实践中用 KL 散度代替——它与 TV 有 Pinsker 不等式 $D_{\text{TV}}\le\sqrt{\tfrac12 D_{\text{KL}}}$ 的关系,而且对高斯策略有闭式表达。把约束用拉格朗日乘子 $\beta$ 变成惩罚项:
$$ \mathcal{L}_{\text{KL}}(\theta',\beta) = \sum_{i}\sum_{t}\frac{\pi_{\theta'}(a_t^{(i)}|s_t^{(i)})}{\pi_\theta(a_t^{(i)}|s_t^{(i)})}A^{\pi_\theta}(s_t^{(i)},a_t^{(i)}) + \beta\log\pi_{\theta'}(a_t^{(i)}|s_t^{(i)}) $$算法与 7.3 节的裁剪版几乎一样,只在内层循环之后多一步对偶上升:
$$ \beta \leftarrow \beta + \alpha\left(D_{\text{KL}}\left(\pi_\theta(a_t|s_t)\,\|\,\pi_{\theta'}(a_t|s_t)\right) - \epsilon\right). $$直觉很清楚:如果实测 KL 超过了预算 $\epsilon$,就调大 $\beta$ 加重惩罚;如果远小于预算,就调小 $\beta$ 放松限制。这是一个自动调参的负反馈回路,比手工设定固定的惩罚系数稳健得多。
| 层次 | 内容 | 本讲对应 |
|---|---|---|
| 恒等式 | $J(\theta')-J(\theta)=\mathbb{E}_{p_{\theta'}}\left[\sum_t\gamma^t A^{\pi_\theta}\right]$ | 8.1 |
| 近似 | 把 $p_{\theta'}(s_t)$ 换成 $p_\theta(s_t)$ 得到 $\bar A(\theta')$ | 8.2 / 6.4 |
| 合法性 | $D_{\text{TV}}(p_\theta,p_{\theta'})\le\epsilon t$(耦合引理) | 8.3 |
| 下界 | 真实改进 $\ge \bar A(\theta') - \sum_t 2\epsilon t C$ | 8.4 |
| 约束实现 A | 裁剪 $\mathrm{clip}(w,1-\epsilon,1+\epsilon)$ + $\min$ | 7.2 / 7.3 |
| 约束实现 B | KL 惩罚 + 对偶上升调 $\beta$ | 8.5 |
| 约束实现 C | 二阶近似 + 自然梯度 = TRPO | Lecture 7 |
9. Actor-Critic:偏差与方差的连续调节
9.1 在线 actor-critic 算法
Part 3 开始。actor-critic 把「用蒙特卡洛回报当权重」换成「用学出来的价值函数算优势」。最精简的在线版本只有六步:
- 用 $a\sim\pi_\theta(a|s)$ 走一步,得到转移 $(s_i, a_i, s_i')$;
- 算回归目标 $y_i = r(s_i,a_i) + \gamma\hat V_\phi^\pi(s_i')$;
- 用 $\nabla_\phi\mathcal{L}_i(\phi)$ 更新 critic,其中 $\mathcal{L}_i(\phi) = \left\|\hat V_\phi^\pi(s_i) - y_i\right\|^2$,$\phi\leftarrow\phi-\alpha\nabla_\phi\mathcal{L}_i(\phi)$;
- 算优势 $\hat A^\pi(s_i,a_i) = r(s_i,a_i)+\gamma\hat V_\phi^\pi(s_i') - \hat V_\phi^\pi(s_i)$;
- 算策略梯度 $\nabla_\theta J(\theta)\approx\nabla_\theta\log\pi_\theta(a_i|s_i)\hat A^\pi(s_i,a_i)$;
- $\theta\leftarrow\theta+\alpha\nabla_\theta J(\theta)$。
要。第 2 步的 $y_i$ 里含有 $\hat V_\phi^\pi(s_i')$,如果不切断梯度,第 3 步的平方损失会同时把 $\hat V_\phi(s_i)$ 拉向 $y_i$ 并且 把 $y_i$ 拉向 $\hat V_\phi(s_i)$,退化成让两者都往中间跑,训练直接崩掉。这是实现 actor-critic 时最常见的 bug。第 4 步算优势时同样要对整个 $\hat A$ 做 detach,因为它只是策略梯度里的权重。
9.2 复习题 Q15:两种优势估计的偏差-方差谱
下面两个优势估计
$$ \hat A_{\text{C}}^\pi(s_t,a_t) = r(s_t,a_t)+\gamma\hat V_\phi^\pi(s_{t+1}) - \hat V_\phi^\pi(s_t), $$ $$ \hat A_{\text{MC}}^\pi(s_t,a_t) = \sum_{t'=t}^{\infty}\gamma^{t'-t}r(s_{t'},a_{t'}) - \hat V_\phi^\pi(s_t), $$各自的偏差和方差如何?请分别指出它们的优缺点,并写出能在两者之间插值的估计量。
解答。
| 估计量 | 偏差 | 方差 | 原因 |
|---|---|---|---|
| $\hat A_{\text{C}}$(critic / 自举) | 高(critic 总是不准) | 低 | 只用一步真实奖励,其余靠 $\hat V_\phi$ 概括;$\hat V_\phi$ 是一个被平滑过的函数逼近,随机性小但系统性地错 |
| $\hat A_{\text{MC}}$(蒙特卡洛) | 无(只要 baseline 与动作无关) | 高 | 整条未来轨迹的回报是单样本估计,$H$ 步的随机性全部累加进来 |
Slide 上 Levine 的标注是「+ lower variance / − higher bias if value is wrong (it always is)」和「+ no bias / − higher variance (because single-sample estimate)」。括号里那句 "it always is" 是重点:深度网络拟合的价值函数永远有误差,所以自举估计的偏差不是理论上的小项,而是实践中的主要误差源。
插值:$n$-step 回报。
$$ \hat A_n^\pi(s_t,a_t) = \sum_{t'=t}^{t+n}\gamma^{t'-t}r(s_{t'},a_{t'}) - \hat V_\phi^\pi(s_t) + \gamma^n \hat V_\phi^\pi(s_{t+n}). $$前 $n$ 步用真实奖励(无偏但有方差),第 $n$ 步之后用 critic 接管(有偏但无方差)。$n=1$ 退化成 $\hat A_{\text{C}}$,$n\to\infty$ 退化成 $\hat A_{\text{MC}}$。Levine 的经验判断:"choosing $n\gt1$ often works better!"——典型取 $n = 5\sim 20$。
9.3 复习题 Q16:GAE——必须只选一个 $n$ 吗?
「Do we have to choose just one $n$?」如果对所有 $n$ 做加权平均 $\hat A_{\text{GAE}}^\pi = \sum_{n=1}^{\infty}w_n\hat A_n^\pi$,权重 $w_n$ 应该怎么选?为什么最后能化简成一行?
权重的选择:$w_n \propto \lambda^{n-1}$,指数衰减。理由是「Mostly prefer cutting earlier (less variance)」——我们更偏好小的 $n$(方差小),但也不想完全放弃大 $n$ 带来的低偏差,所以用一个几何级数把权重平滑地压下去。$\lambda\in[0,1]$ 是超参数,$\lambda=0$ 时只剩 $n=1$(纯自举),$\lambda=1$ 时是均匀偏好(趋向蒙特卡洛)。
化简。把加权和展开,可以写成一个递归形式:
$$ \hat A_{\text{GAE}}^\pi(s_t,a_t) = r(s_t,a_t)+\gamma\Big((1-\lambda)\hat V_\phi^\pi(s_{t+1}) + \lambda\big(r(s_{t+1},a_{t+1})+\gamma\big((1-\lambda)\hat V^\pi_\phi(s_{t+2})+\lambda r(s_{t+2},a_{t+2})+\ldots\big)\big)\Big) $$读法:在每一步,以概率 $1-\lambda$ 「用 critic 收尾」,以概率 $\lambda$ 「继续往下看一步」。整理之后得到那个著名的一行公式:
$$ \boxed{\ \hat A_{\text{GAE}}^\pi(s_t,a_t) = \sum_{t'=t}^{\infty}(\gamma\lambda)^{t'-t}\,\delta_{t'},\qquad \delta_{t'} = r(s_{t'},a_{t'}) + \gamma\hat V_\phi^\pi(s_{t'+1}) - \hat V_\phi^\pi(s_{t'})\ } $$$\delta_{t'}$ 就是时序差分误差(TD error),也就是单步优势 $\hat A_{\text{C}}$。所以 GAE 的最终形态极其简洁:把未来所有的 TD 误差按 $(\gamma\lambda)$ 的幂加权求和。
注意衰减因子是 $(\gamma\lambda)$ 这个乘积——slide 上标注 "similar effect as discount!"。$\gamma$ 通过「未来奖励不重要」来降方差,$\lambda$ 通过「未来的 TD 误差不重要」来降方差,两者在数学上以相同的方式进入公式。区别在于:$\gamma$ 改变的是问题定义(你真的在优化一个折扣目标),$\lambda$ 只改变估计量(问题没变,只是用了一个有偏但低方差的估计)。所以调 $\lambda$ 是安全的调参,改 $\gamma$ 是改题目。常用取值 $\lambda=0.95$、$\gamma=0.99$。
9.4 用 GAE 的策略梯度:完整实现
把 GAE 装进策略梯度,就得到 PPO 的前半部分:
- 用 $\pi_\theta$ 采一批轨迹;
- 算 $y_t^{(i)} = r(s_t^{(i)},a_t^{(i)})+\gamma\hat V_\phi^\pi(s_{t+1}^{(i)})$(这里也可以用 GAE 估计量作为回归目标,即 $y_t = \hat A_{\text{GAE}} + \hat V_\phi(s_t)$);
- 把 $\hat V_\phi^\pi$ 拟合到 $\{y_t^{(i)}\}$;
- 算 $\hat A_{\text{GAE}}^\pi(s_t^{(i)},a_t^{(i)}) = \sum_{t'\ge t}(\gamma\lambda)^{t'-t}\delta_{t'}^{(i)}$;
- $\nabla_\theta J(\theta)\approx\sum_i\sum_t\nabla_\theta\log\pi_\theta(a_t^{(i)}|s_t^{(i)})\hat A^\pi(s_t^{(i)},a_t^{(i)})$;
- $\theta\leftarrow\theta+\alpha\nabla_\theta J(\theta)$。
实践中还要做优势中心化(advantage centering):
$$ \mu = \frac{1}{HN}\sum_{i,t}\hat A^\pi(s_t^{(i)},a_t^{(i)}),\qquad \sigma = \sqrt{\frac{1}{HN}\sum_{i,t}\left(\hat A^\pi(s_t^{(i)},a_t^{(i)})-\mu\right)^2}, $$ $$ \bar A^\pi(s_t^{(i)},a_t^{(i)}) = \frac{\hat A^\pi(s_t^{(i)},a_t^{(i)}) - \mu}{\sigma}. $$减去 $\mu$ 是第 5 节讲的 baseline(无偏);除以 $\sigma$ 严格说会引入偏差(因为 $\sigma$ 依赖于样本、也依赖于动作),但它把梯度的尺度归一化了,使得同一套学习率能在不同奖励量级的任务上工作,实践中收益远大于那点偏差。
import numpy as np
def compute_gae(rewards, values, next_value, gamma=0.99, lam=0.95):
"""rewards: [T] 单条轨迹的奖励
values: [T] critic 在 s_0..s_{T-1} 上的估计
next_value: 标量,critic 在 s_T 上的估计(终止则传 0)
返回 [T] 的 GAE 优势。"""
T = len(rewards)
adv = np.zeros(T, dtype=np.float64)
gae = 0.0
v_next = next_value
for t in reversed(range(T)):
delta = rewards[t] + gamma * v_next - values[t] # TD error
gae = delta + gamma * lam * gae # 递归形式
adv[t] = gae
v_next = values[t]
return adv
# 中心化(PPO 标配)
def normalize(adv, eps=1e-8):
return (adv - adv.mean()) / (adv.std() + eps)
注意实现上的关键:倒序遍历。因为 $\hat A_t = \delta_t + \gamma\lambda \hat A_{t+1}$ 是一个从后往前的递归,$O(T)$ 就能算完整条轨迹,不需要 $O(T^2)$ 的双重求和。
10. Off-policy actor-critic 与重参数化
最后一页 slides 指向下半学期:如果我们学的是 $Q$ 而不是 $V$,就可以彻底摆脱 on-policy 的限制,用 replay buffer 反复利用旧数据。
算法:
- 用 $a\sim\pi_\theta(a|s)$ 走一步得到 $(s_i,a_i,s_i')$,存进 replay buffer;
- 从 buffer 里取一个 batch $\{(s_i,a_i,s_i')\}_{i=1}^{B}$,算目标 $y_i = r(s_i,a_i)+\gamma\,\mathbb{E}_{a'\sim\pi_\theta(a'|s_i')}\left[\hat Q_\phi^\pi(s_i',a')\right]$;
- 用 $\nabla_\phi\sum_{i=1}^{B}\left\|\hat Q_\phi^\pi(s_i,a_i)-y_i\right\|^2$ 更新 critic;
- $\nabla_\theta J(\theta)\approx\sum_i\nabla_\theta \hat Q_\phi^\pi\!\left(s,\ \mu_\theta(s)+\sigma_\theta(s)\epsilon_i\right)$;
- $\theta\leftarrow\theta+\alpha\nabla_\theta J(\theta)$。
10.1 复习题 Q17:第 4 步为什么不用 log-derivative?
第 4 步的梯度直接穿过了 $\hat Q_\phi$,没有出现 $\nabla_\theta\log\pi_\theta$。它凭什么合法?和策略梯度相比有什么优劣?
解答:重参数化技巧(reparameterization trick)。对高斯策略 $\pi_\theta(a|s) = \mathcal{N}\left(\mu_\theta(s),\ \sigma_\theta(s)^2\right)$,采样可以写成一个确定性函数加一个与 $\theta$ 无关的噪声:
$$ a = \mu_\theta(s) + \sigma_\theta(s)\,\epsilon,\qquad \epsilon\sim\mathcal{N}(0,1). $$于是
$$ \mathbb{E}_{a\sim\pi_\theta(a|s)}\left[Q(s,a)\right] = \mathbb{E}_{\epsilon\sim\mathcal{N}(0,1)}\left[Q\!\left(s,\ \mu_\theta(s)+\sigma_\theta(s)\epsilon\right)\right] \approx Q\!\left(s,\ \mu_\theta(s)+\sigma_\theta(s)\epsilon\right),\ \ \epsilon\sim\mathcal{N}(0,1). $$现在 $\theta$ 出现在被期望的函数里,而期望的分布 $\mathcal{N}(0,1)$ 与 $\theta$ 无关,可以直接对样本求导、反向传播穿过 critic 网络。
| 维度 | REINFORCE / log-derivative | 重参数化(pathwise) |
|---|---|---|
| 适用动作空间 | 离散、连续都行 | 只能连续(需要 $a$ 对 $\theta$ 可微) |
| 需要 $Q$ 可微吗 | 不需要,$Q$ 可以是黑箱数值 | 需要,梯度要穿过 $Q$ |
| 方差 | 高(只用到 $Q$ 的值) | 低(用到 $Q$ 的梯度,信息量更大) |
| 能否 off-policy | 需要 IS 修正 | 天然可以:$s$ 从 buffer 采、$a$ 从当前 $\pi_\theta$ 重采 |
| 代表算法 | REINFORCE、A2C、PPO | DDPG、SAC |
状态 $s_i$ 来自 buffer,因此服从旧策略混合分布而非当前 $p_{\pi_\theta}$,这个不匹配我们照样没有修正——理由和 6.4 节一样,只是这次连借口都不找了。真正被修正的只有动作:$a'$ 是从当前策略重新采的。这类算法(DDPG、SAC)在实践中样本效率远高于 PPO,代价是对超参数更敏感、更容易发散,因为它们同时承受了 off-policy 分布不匹配和 bootstrapping 的双重压力。
本讲小结:期中复习清单
考前把下面每一行都能默写出来,前半学期就没问题了。「讲次」一列给出该知识点第一次出现的地方,卡住了回去翻。
Part 1 · 模仿学习
| 知识点 | 一句话 / 关键公式 | 讲次 |
|---|---|---|
| 行为克隆 | $\argmax_\theta\sum_i\sum_t\log\pi_\theta(a_t^{(i)}|o_t^{(i)})$,就是 MLE | L2 |
| 状态 vs 观测 | $s$ 满足马尔可夫性,$o$ 可能部分可观测;BC 用 $o$,理论分析用 $s$ | L2 |
| 分布漂移 | 训练在 $p_{\text{train}}$、测试在 $p_{\pi_\theta}$,两者随 $t$ 线性发散 | L2 |
| 混合分解 | $p_{\pi_\theta}=(1-\epsilon)^tp_{\text{train}}+(1-(1-\epsilon)^t)p_{\text{mistake}}$(恒等式) | L2 |
| 伯努利不等式 | $(1-\epsilon)^t\ge 1-\epsilon t$,故 $D_{\text{TV}}\le\epsilon t$ | L2 |
| 误差界 | $\sum_t\mathbb{E}[c]\le O(\epsilon H^2)$,二次而非线性 | L2 |
| DAgger | 改数据分布而非策略分布;瓶颈是第 3 步人工标注;界降为 $O(\epsilon H)$ | L2 |
| 拟合失败的两因 | 非马尔可夫行为(→ 用历史编码)、多模态行为(→ 用表达力更强的分布) | L2 |
| 自回归离散化 | 逐维离散 + 链式法则 $\prod_k p(a_{t,k}|s_t,a_{t,\lt k})=p(a_t|s_t)$ | L2 |
| flow matching | 训练回归 $x_1-x_0$,采样靠欧拉积分速度场;多模态在积分中分化 | L2 |
| 目标条件 BC | 用 $s_T$ 当目标标签,失败演示也能用 | L2 |
Part 2 · MDP 与策略梯度
| 知识点 | 一句话 / 关键公式 | 讲次 |
|---|---|---|
| 轨迹分布 | $p_\theta(\tau)=p(s_1)\prod_t\pi_\theta(a_t|s_t)p(s_{t+1}|s_t,a_t)$ | L4 |
| RL 目标 | $J(\theta)=\mathbb{E}_{\tau\sim p_\theta}\left[\sum_t\gamma^tr(s_t,a_t)\right]$ | L4 |
| 值函数三兄弟 | $V^\pi(s)=\mathbb{E}_{a\sim\pi}[Q^\pi(s,a)]$,$A^\pi=Q^\pi-V^\pi$ | L4 |
| log-derivative trick | $p\nabla\log p=\nabla p$,把梯度变回可采样的期望 | L5 |
| 策略梯度 | $\mathbb{E}\left[\left(\sum_t\nabla\log\pi_\theta\right)\left(\sum_tr\right)\right]$;转移项求导后消失 ⟹ model-free | L5 |
| causality | 权重换成 reward-to-go $\sum_{t'\ge t}r_{t'}$,仍无偏、方差更小 | L5 |
| baseline 无偏性 | $\mathbb{E}[\nabla\log p_\theta\cdot b]=b\nabla\!\int p_\theta=b\nabla 1=0$(要求 $b$ 与动作无关) | L5 |
| 最优 baseline | $b^\star=\mathbb{E}[g^2r]/\mathbb{E}[g^2]$;实践用平均回报或 $\hat V_\phi$ | L5 |
| 重要性采样 | $\mathbb{E}_p[f]=\mathbb{E}_q\left[\tfrac{p}{q}f\right]$;轨迹权重 $=\prod_t\tfrac{\pi_{\theta'}}{\pi_\theta}$,指数级方差 | L5 |
| 一阶近似 | 扔掉 $p_{\pi_{\theta'}}(s_t)/p_{\pi_\theta}(s_t)$,只留动作比值 | L5 |
| 策略改进恒等式 | $J(\theta')-J(\theta)=\mathbb{E}_{p_{\theta'}}\left[\sum_t\gamma^tA^{\pi_\theta}\right]$(望远镜求和) | L7 |
| 耦合引理 | $D_{\text{TV}}\le\epsilon$ ⟹ 可构造联合分布使两者以 $1-\epsilon$ 概率相同 | L7 |
| 分布变化界 | $D_{\text{TV}}(p_\theta,p_{\theta'})\le\epsilon t$,与模仿学习的推导同构 | L7 |
| 目标下界 | 真实改进 $\ge\bar A(\theta')-\sum_t2\epsilon tC$,$C=O(Hr_{\max})$ 或 $O(\tfrac{r_{\max}}{1-\gamma})$ | L7 |
| PPO-clip | $\min\{w\hat A,\ \mathrm{clip}(w,1-\epsilon,1+\epsilon)\hat A\}$;$\min$ 是为了堵住 $\hat A\lt0$ 时的漏洞 | L7 |
| PPO-KL | 惩罚项 $\beta$ 用对偶上升 $\beta\leftarrow\beta+\alpha(D_{\text{KL}}-\epsilon)$ 自动调节 | L7 |
| TRPO | KL 的二阶近似 + Fisher 信息矩阵 = 自然梯度 | L7 |
Part 3 · Actor-Critic
| 知识点 | 一句话 / 关键公式 | 讲次 |
|---|---|---|
| 在线 actor-critic | 单步转移即可更新;critic 目标 $y=r+\gamma\hat V_\phi(s')$ 必须 detach | L6 |
| A3C | 在线 AC 的异步并行版,多 worker 打散样本相关性 | L6 |
| 偏差-方差 | $\hat A_{\text{C}}$ 低方差高偏差;$\hat A_{\text{MC}}$ 无偏高方差 | L6 |
| $n$-step 优势 | $\sum_{t'=t}^{t+n}\gamma^{t'-t}r_{t'}-\hat V_\phi(s_t)+\gamma^n\hat V_\phi(s_{t+n})$,$n\gt1$ 通常更好 | L6 |
| GAE | $w_n\propto\lambda^{n-1}$ ⟹ $\hat A_{\text{GAE}}=\sum_{t'\ge t}(\gamma\lambda)^{t'-t}\delta_{t'}$,$\delta=r+\gamma\hat V(s')-\hat V(s)$ | L6 |
| GAE 实现 | 倒序递归 $\hat A_t=\delta_t+\gamma\lambda\hat A_{t+1}$,$O(T)$ | L6 |
| 优势中心化 | 减均值无偏、除标准差有偏但实用 | L6 |
| 重参数化 | $a=\mu_\theta(s)+\sigma_\theta(s)\epsilon$,梯度穿过 $Q$;只适用连续动作,方差低 | L6 |
| replay buffer | 状态来自旧策略混合分布,这个不匹配同样没修正 | L6 |
- 分布不匹配是 RL 的原罪。模仿学习的 $O(\epsilon H^2)$、off-policy 策略梯度扔掉的状态比值、PPO 的裁剪、replay buffer 的偏差——从头到尾是同一个问题的四次露面,而且它们的界用的是同一套推导(混合分解 + 伯努利不等式 + TV 散度)。
- 偏差与方差是可以连续调节的。$\hat A_{\text{MC}}\to n\text{-step}\to\hat A_{\text{C}}$ 是一条谱线,GAE 用 $\lambda$ 在上面滑动;$\gamma$、$\lambda$、$n$、baseline、critic 全部是这条谱线上的旋钮。
- 「不能直接求导」的时候有两条路。log-derivative trick(通用、高方差)和重参数化(要求可微、低方差)。认清一个算法用的是哪条,就知道它的适用边界。
延伸阅读
模仿学习
- A Reduction of Imitation Learning and Structured Prediction to No-Regret Online Learning (Ross et al., 2011) — DAgger 原文。第 2 节那个 $O(\epsilon H^2)$ 界和它降到 $O(\epsilon H)$ 的严格条件都在这里,是复习题 Q1/Q2 的一手来源。
- End to End Learning for Self-Driving Cars (Bojarski et al., 2016) — NVIDIA 的行为克隆驾驶系统,用左右侧摄像头做数据增广来「假装」DAgger,是工程上绕开人工标注的经典技巧。
- Flow Matching for Generative Modeling (Lipman et al., 2022) — 第 3.4 节那五步训练流程的出处,读它可以搞清「回归条件均速度为什么能输运分布」。
策略梯度与 PPO 系谱
- Trust Region Policy Optimization (Schulman et al., 2015) — 第 8 节的界几乎逐字来自这篇(包括耦合引理那一步)。想彻底吃透 8.3–8.4,读它的附录。
- Proximal Policy Optimization Algorithms (Schulman et al., 2017) — 裁剪版与 KL 惩罚版并列给出,第 7 节和第 8.5 节的原始出处。篇幅很短,值得完整读一遍。
- High-Dimensional Continuous Control Using Generalized Advantage Estimation (Schulman et al., 2016) — GAE 原文,第 9.3 节的化简过程有完整推导,还讨论了 $\lambda$ 与 $\gamma$ 的实验敏感性。
- Implementation Matters in Deep Policy Gradients (Engstrom et al., 2020) — 一篇消融研究,指出 PPO 相对 TRPO 的优势有多少来自裁剪、多少来自优势归一化和学习率退火之类的实现细节。看完第 7、9 节的「实践细节」之后读它很解气。
Actor-Critic
- Asynchronous Methods for Deep Reinforcement Learning (Mnih et al., 2016) — A3C 原文,第 9.1 节那个在线算法的并行化实现。
- Continuous Control with Deep Reinforcement Learning (Lillicrap et al., 2016) — DDPG,第 10 节重参数化路线的确定性策略版本。
- Soft Actor-Critic (Haarnoja et al., 2018) — 第 10 节算法的完全体:随机策略 + 重参数化 + 熵正则化 + 双 Q 网络,目前连续控制最稳的 off-policy 基线。