CS234 L10 · 策略梯度 III 与 TRPO · 全片速览

65 镜一次看完 · Ctrl+F 可搜全文 · Ctrl+P 可存成 PDF · 想看动画回放映厅

1 · 开场2 · 1 · 为什么要「单调改进」——3 · 2 · 一般下界:从混合策略推广4 · 3 · 板上的 D_TV 写成了5 · 4 · Pinsker 少了一个6 · 5 · MM 论证的全部支点:<7 · 6 · 讲义上的「=」应是「≥」8 · 7 · 理论常数 C 大到没法用9 · 8 · 于是惩罚变成硬约束10 · 9 · TRPO 的四步实用化,11 · 完
知识点 1

开场

1 / 65
讲解
L9 停在一个半成品上,而且是讲座自己声明的半成品:相对性能恒等式写好了,代理目标 L_π 构造好了,CPI 下界也引了——但最后一步没走。 这一讲把它走完。 那一步的内容是:单调地最大化一个下界,就单调地改进了真值。论证本身只有三行,全部的支点是一个几乎显然的观察——惩罚项在当前策略处等于零。这是本讲唯一一个真正在板上证完的东西,也是 TRPO 的全部理论基础。 然后是从理论到实践的落差,而这个落差非常大:理论给出的惩罚常数在 γ=0.99 时是 39600ε,按它走步子小到几乎不动。TRPO 的做法是把这个常数扔掉,换成一个硬的信赖域约束。所以 TRPO 不是那条定理的实现,是受它启发的工程化——这个区别值得记住。 这一讲的板书有三处数学上的不精确:距离的定义、Pinsker 的常数、以及一个该写「≥」的地方写成了「=」。本片会逐处标出。
知识点 2

1 · 为什么要「单调改进」—— 部署是有代价的

2 / 65
✕金融每次部署都是真钱✕医疗病人只有一次✕线上系统客户会流失这些地方不能「先试试」
在这些场景里,每一次把新策略推上线,都是一次不可撤销的代价。
讲解
这一讲的目标叫单调改进:保证新部署的策略至少不比当前的差。 为什么值得为它付出额外的数学:因为在很多真实场景里,部署本身是有代价的。 金融策略上线一次就是真金白银;医疗决策面对的病人只有一次机会;线上系统推一个更差的策略出去,流失的客户不会回来。 在这些地方「先试试,不行再回滚」不成立——不是技术上做不到回滚,而是试错期间造成的损失已经发生了。
3 / 65
震荡一下没关系反正最后会收敛
「最终收敛」和「每一步都不变差」是两个完全不同的要求。
讲解
这个错误模型来自优化的默认口味:我们通常只关心终点,中途上上下下无所谓。整门课前九讲基本也是这个立场——收敛到 V*、收敛到 Q*、渐近无偏。 但「最终收敛」和「每一步都不变差」是两个不同的要求,而且后者严格更强。 而且 L9 第四集已经给过一个纯技术上的理由,与代价无关:坏策略采出来的数据也是坏的。所以在 RL 里,中途的震荡不只是「不好看」,它会污染你接下来的学习信号。 两个理由叠加起来,才让这一讲的机器值得造。
4 / 65
Vπi+1(s) ≥ Vπi(s)∀s
对每一个状态都成立
把目标写死:逐状态不变差,不是平均意义上不变差。
讲解
把目标精确写出来:对每一个状态 s,新策略的值都不小于旧策略的值。 课上有学生专门问了这个——策略之间的比较是不是在 L∞ 的意义下。答案是的:几乎总是逐状态的,而不是「平均起来更好」。 这个区分有实际意义:一个在多数状态上大幅改善、在少数状态上严重退化的策略,平均可能更好,但在医疗那种场景里是不可接受的。 顺带说明一处记号重载:V 在这一讲里同时指策略的标量目标和状态值向量。上面这个式子里的 V 是后者(每个状态一个数)。
5 / 65
L9:恒等式不可算L9:代理目标可算L10:把最后一步走完
L9 铺了两块砖,第三块在这一讲。
讲解
回顾 L9 铺好的两块砖。 相对性能恒等式(L9 第七集):V(π̃) = V(π) + E_{s,a~π̃}[Σγᵗ A^π]。精确,但期望要对新策略的占用测度取——而你还没有它的数据。 代理目标 L_π(L9 第九集):把状态分布换成旧策略的,于是可以用手上的数据估。而且 L_π(π) = V(π),在当前点精确。 缺的第三块是:代理目标变好,真值也一定变好吗? 凭什么?L_π 只是一个替身,在远离 π 的地方它可能和真值差很远。这一讲后面六集就是在回答它,而答案的形状是:给替身加一个惩罚,把它压成一个真正的下界。
6 / 65
最终收敛每步不变差后者严格更强
指名反驳:要的不是收敛,是逐步、逐状态都不变差。
讲解
指名回去:这一讲要的不是「最终收敛」——前九讲已经有很多收敛结论了。要的是每一步、每一个状态都不变差。 两个理由:部署的代价不可撤销(金融、医疗、线上系统),以及 RL 特有的那条——坏策略产生坏数据,震荡会污染后续学习(L9 第四集)。 路线图是清楚的:L9 给了一个可算但不保真的替身 L_π;这一讲要把它变成一个下界,然后证明最大化下界就改进了真值。 下一集先补上 L9 那个界的一个限制——它只对混合策略成立,而我们需要对任意随机策略都成立的版本。
7 / 65

知识点 1 · 总结

目标是逐步、逐状态都不变差,不只是最终收敛

核心结论

要的是 V^{π_{i+1}}(s) ≥ V^{π_i}(s) 对每一个 s(学生问过:是的,L∞ 意义下的逐状态比较)。

底层机制

两个理由:部署代价不可撤销(金融/医疗/线上);以及 RL 特有的 —— 坏策略产生坏数据(L9 第四集)。

常见误解

误解:「震荡没关系,最后收敛就行」。「最终收敛」与「每步不变差」是两个要求,后者严格更强。

与你的考试

L9 铺好两块:恒等式(精确不可算)、代理目标 L_π(可算,L_π(π)=V(π))。缺的是:代理变好,真值也变好吗?

8 / 65

知识点 1 · 检验

「单调改进」在这一讲里的精确含义是什么?

知识点 3

2 · 一般下界:从混合策略推广到任意随机策略

9 / 65
πnew=(1−α)πold+απ′
CPI 界要求这个形状
L9 引的那条界有一个限制:新策略必须是一个混合策略。
讲解
L9 第九集引的 Kakade–Langford 下界有一个没被强调的限制:它是对混合策略成立的。 混合策略的意思是:新策略必须写成「以 1−α 的概率按旧策略走,以 α 的概率按某个候选策略走」。α 就是那个「走多远」的旋钮。 这个形状很好分析,但它不是我们实际在做的事。用神经网络参数化策略时,你做的是 θ ← θ + αg——得到的新策略不是旧策略和别的什么的混合,它就是一个新的网络。 所以那条界虽然漂亮,却套不上实际算法。
10 / 65
有 CPI 就够了界已经有了,直接用就是
形状对不上:梯度更新出来的策略不是混合策略。
讲解
这个错误模型很容易犯,因为两条界长得很像,而且都叫「下界」。 但形状对不上就是套不上。一条只对「(1−α)π + απ′」这种形状成立的界,你拿去保证一个神经网络参数更新的结果,没有依据。 这是本系列反复出现的那个检查:定理失效时先看前提(L5 第九集的压缩性、L8 第二集的确定性最优策略都是同一个形状)。这里前提是「策略必须是混合形式」。 所以需要一条对任意两个随机策略都成立的版本。Schulman 等人给了它。
11 / 65
V(πnew) ≥ L(πnew)−4εγ(1−γ)2DTVmax(πold,πnew)2
对任意随机策略成立
一般下界:代理目标 减去 一个随距离增长的惩罚。
讲解
Schulman 等人的版本去掉了混合策略的限制:对任意两个随机策略,真值不小于代理目标减去一个惩罚项。 惩罚项由两部分组成: 一个常数 4εγ/(1−γ)²,只依赖 γ 和 ε。 两个策略之间的距离的平方,用全变差距离 D_TV 的最大值衡量。 结构上这就是「你走得越远,代理目标越不可信」,而且不可信的程度按距离的平方增长——所以小步走时惩罚是二阶小量,这一点和 L9 的 α² 是同一件事。 按约定标一处:这个常数被字幕弄坏了两次,一次念成「4 epsilon gamma divided by 1 minus gamma squared」,一次念成「4 epsilon gamma minus gamma squared」。正确的是 4εγ/(1−γ)²,分母整体平方。
12 / 65
✓CPI 的 ε动作先取期望✕一般界的 ε状态动作都取 max后者不小于前者
推广的代价全在 ε 上:从动作取期望后的最大,变成状态动作都取最大。
讲解
推广不是免费的,代价全在 ε 上。 CPI(混合策略)里的 ε:max_s |E_{a~π′}A^π(s,a)|——对状态取最大,但动作已经按候选策略取了期望。 一般界里的 ε:max_{s,a}|A^π(s,a)|——对状态和动作都取最大。 后者不小于前者,通常严格更大:取期望会把不同动作的优势平均掉,取最大不会。 这里要把功劳记清楚:讲座本身没有混淆这两个。有学生在后面专门问了 ε 是什么(「ε 会随 π 变,而且是个全局性质」),Brunskill 的回答是明确的——「Epsilon is a max over all states and actions of your advantage.」 危险不在讲座,在读者自己:如果你把 L9 那个较小的 ε 顺手带过来代进这条公式,会得到过于乐观的惩罚估计,于是允许自己走得比安全范围更远。
13 / 65
✕CPI只对混合策略✓一般界任意随机策略✕但 ε 变大了max_{s,a}|A|推广不是免费的
指名反驳:CPI 套不上梯度更新。推广版能用 —— 但 ε 更大。
讲解
指名回去:CPI 的界只对混合策略成立,而梯度更新出来的不是混合策略,所以套不上。 讲座自己也是这么过渡的——「in general we're not going to want to just consider mixture policies」,然后给出对任意随机策略都成立的版本。 但推广不是免费的:新界的 ε 是对状态和动作都取最大,比 CPI 的那个大。界更通用,也更松。 这是一个值得记住形状的权衡:把定理的适用范围扩大,通常要付出常数变差的代价。 下面两集处理这条界里剩下的两个技术问题:那个距离在板上被写成了 L∞(下一集),以及从它转到 KL 时少了一个常数(第四集)。两处都不改变结论方向,但都值得说清。
14 / 65

知识点 2 · 总结

一般下界:去掉混合策略的限制,代价是 ε 变大

核心结论

V(π_new) ≥ L(π_new) − [4εγ/(1−γ)²]·D_TV^max²。惩罚按距离的平方增长(与 L9 的 α² 同形)。

底层机制

CPI 只对 (1−α)π+απ′ 这种形状成立,而梯度更新出来的不是混合策略 —— 形状对不上就套不上。

常见误解

误解:「有 CPI 就够了」。这是「定理失效先看前提」的又一次应用(同 L5 压缩性、L8 确定性最优)。

与你的考试

两个 ε 不同:CPI 是 max_s|E_{a~π′}A|(动作已取期望),一般界是 max_{s,a}|A|(更大)。讲座在学生提问时明确定义了后者;出错的风险在于把 L9 的默认带过来,那会低估惩罚。

15 / 65

知识点 2 · 检验

为什么需要 Schulman 的一般下界,而不能直接用 CPI 的界?

知识点 4

3 · 板上的 D_TV 写成了 L∞ —— 两者只在两动作时相等

16 / 65
DTV(p,q) =? maxa|p(a)−q(a)|
板上是这么写的标准定义不是这个
界里那个距离,板上写的是 L∞,而全变差距离的标准定义不是它。
讲解
上一集那条界里有一个距离 D_TV。它在板上被写成:对动作取最大的绝对概率差,也就是一个 L∞ 距离。 而全变差距离(total variation distance)的标准定义、也是 Schulman 等人论文里用的,是 L1 距离的一半。 两个不是同一个量。而界里的常数取决于用的是哪一个。 这一集把两者的关系算清楚——顺带会得到一个解释,说明为什么这个错误特别容易被略过。
17 / 65
取 max 和取 ½L1 差不多反正都是衡量两个分布差多远
在两个动作时它们完全相等 —— 这正是它难被发现的原因。
讲解
这个错误模型有一条很强的经验支持:你随手试的例子里,两者往往真的相等。 所有两动作的情形都相等。三动作的例子也常常相等。 所以如果你只是代两个数验算一下,很可能验不出问题来——这正是这处错误容易被略过的原因,也是我自己第一次找反例时踩的坑:随手挑的那组数恰好相等。 下一镜说明它们什么时候相等,以及怎么构造一个真正分得开的例子。
18 / 65
∑a(p(a)−q(a))=0 ⟹ 正差之和=负差之和=12L1
只有一个分量上升时L∞ 恰好等于那个和
两者相等的充分条件:只有一个分量上升(或只有一个下降)。
讲解
为什么它们常常相等,有一个干净的解释。 两个都是概率分布,所以差的总和是零:正的那些差加起来,等于负的那些差加起来,而这个共同的值正好是 ½L1。 于是:如果只有一个分量上升,那个分量的差就等于全部正差之和,也就等于 ½L1;而它同时是最大的差,所以 L∞ 也等于它。两者重合。 两个动作时必然只有一个上升(另一个必然下降),所以两动作永远相等。三动作里只要变化集中在一个方向上,也相等。 要分开它们,必须让至少两个分量同时上升。
19 / 65
L∞(板上)½L1(标准)0.300.60四动作,两个分量上升
反例:p=(.4,.4,.1,.1) → q=(.1,.1,.4,.4),0.30 对 0.60,差一倍。
讲解
看什么:看右边那根正好是左边的两倍。同一对分布,两种算法给出的距离差一倍 —— 而界里的常数是乘在这个距离的平方上的,所以实际差的是四倍。 —— 构造一个真正分得开的例子:四个动作,两个分量上升,两个下降。 p = (0.4, 0.4, 0.1, 0.1) → q = (0.1, 0.1, 0.4, 0.4) 四个差分别是 −0.3、−0.3、+0.3、+0.3。 L∞(板上写的)= 0.30——最大的那个差。 ½L1(标准定义)= ½(0.3+0.3+0.3+0.3) = 0.60。 差一倍。而界里这个距离是被平方之后乘上常数的,所以对惩罚项来说实际差的是四倍。 方向也值得注意:板上那个写法给出的距离更小,于是惩罚估得更小,于是会认为自己可以走得更远——偏向不安全的一侧。
20 / 65
✓两动作两者相等✕多动作可以差一倍✕惩罚里是平方实际差四倍而且偏向不安全那侧
指名反驳:只在两动作时相等。多动作时 L∞ 偏小,惩罚被低估。
讲解
指名回去:L∞ 与全变差距离只在「仅一个分量上升」时相等,而两动作情形必然如此——这正是它看起来无害的原因。 动作一多就分得开,实测可以差一倍;而界里是平方,所以惩罚项差四倍。 更要紧的是方向:板上那个写法给出的距离偏小,于是惩罚被低估,于是你会允许自己走得比安全范围更远。三处不精确里,只有这一处偏向不安全的一侧。 实用的处理:用论文的定义(½L1),或者干脆直接用 KL——下一集会看到 TRPO 实际用的就是 KL,而从 TV 到 KL 的那一步在讲座里也少了一个常数。
21 / 65

知识点 3 · 总结

板上的 D_TV 是 L∞,而标准定义是 ½L1

核心结论

两者相等的条件:只有一个分量上升(两动作必然如此)。反例 p=(.4,.4,.1,.1)→q=(.1,.1,.4,.4):L∞=0.30,½L1=0.60。

底层机制

概率和为 1 ⟹ 正差之和 = 负差之和 = ½L1。单个分量上升时它同时是最大差,于是两者重合。

常见误解

误解:「取 max 和 ½L1 差不多」。随手验算常常相等 —— 这正是它难被发现的原因。

与你的考试

界里距离是平方的,所以惩罚实际差四倍;而且 L∞ 偏小 ⟹ 惩罚被低估 ⟹ 偏向不安全一侧。

22 / 65

知识点 3 · 检验

L∞ 距离 max_a|p(a)−q(a)| 与全变差距离 ½Σ_a|p(a)−q(a)| 什么时候相等?

知识点 5

4 · Pinsker 少了一个 ½ —— 界仍然成立,但松了一倍

23 / 65
✕界里是 D_TV全变差距离✓算法要 KL好算、接自然梯度这一步要一个不等式
要把界变成可优化的目标,得先从全变差距离换到 KL 散度。
讲解
上一集那条界里的距离是 D_TV。但 TRPO 实际约束的是 KL 散度。 为什么要换?因为 KL 对参数化的策略好算得多——对高斯策略、对 softmax 策略都有闭式;而且它的二阶展开就是 Fisher 信息矩阵,后面做自然梯度直接就接上了。 所以需要一个不等式,把 D_TV 换成 KL。这座桥就是 Pinsker 不等式。 讲座给出的版本少了一个常数。这一集把它补上,并且说清楚少了它会怎样、不会怎样。
24 / 65
D_TV² ≤ D_KL讲座就是这么接上去的
这一步成立,但它不是 Pinsker —— Pinsker 的右边还要再乘 ½。
讲解
讲座在这里的原话是:「we can use the fact that the square of it is upper bounded by the KL divergence」——全变差距离的平方被 KL 散度控住。 这个式子是对的,它确实成立。问题在于它不是 Pinsker 不等式,而是 Pinsker 的一个更弱的推论。 真正的 Pinsker 给出的是 D_TV² ≤ ½·D_KL。少了这个 ½,不等式仍然成立(因为右边只会变大),但它松了。 松多少、松在哪个方向,下面两镜算清楚。
25 / 65
DTV(p,q) ≤ 12DKL(p‖q)⟹DTV2 ≤ 12DKL
20 万组随机分布未见反例p→q 时比值趋于 1.0000
Pinsker 本尊:½ 在根号里面,而且这个界是紧的。
讲解
Pinsker 不等式:全变差距离不超过二分之一 KL 的平方根。 我把它验算了:20 万组随机分布(2 到 4 个动作),比值 D_TV / √(½D_KL) 从未超过 1。 而且这个界是紧的——两动作、q=(½,½)、p=(½+d, ½−d),当 d 从 0.2 缩到 0.001 时,比值依次是 0.9860、0.9966、0.9992、1.0000。也就是说,两个分布靠得越近,Pinsker 越接近等号。 这一点很重要:在信赖域里我们本来就只走一小步,恰好是 Pinsker 最紧的区域。所以这座桥在这里几乎不损失什么——前提是那个 ½ 没丢。
26 / 65
正确板上0.5·C·KL1.0·C·KL惩罚项,同一组分布
丢掉 ½ 让惩罚项整整大一倍:(C/2)·KL 变成 C·KL。
讲解
看什么:看右边那根正好是左边的两倍。同一组分布、同一个常数 C,只因为根号里少了个 ½,惩罚就翻倍 —— 因为 D_TV 在界里是平方出现的,根号里的 ½ 平方出来就是整个 ½。 —— 代进去看后果。 界里是 D_TV 的平方,所以: 正确版本:D_TV² ≤ ½D_KL,惩罚变成 (C/2)·D_KL。 板上版本:D_TV² ≤ D_KL,惩罚变成 C·D_KL。 整整大一倍。 注意这个「一倍」是怎么来的:根号里少的是 ½,而平方把根号消掉,于是那个 ½ 原封不动地跑到惩罚项前面。不是 √2 倍,是 2 倍。
27 / 65
✓界还成立吗成立✕松了多少一倍✓偏哪一侧更保守惩罚估大 = 步子更小
指名反驳:不是 Pinsker,是它的弱化版。界仍然成立,但松一倍。
讲解
指名回去:板上写的不是 Pinsker,是它的一个弱化推论。 但要把话说完整,因为这处和上一集那处方向相反: 惩罚被估大了,于是下界被压得更低,于是不等式仍然成立——一个更松的下界还是下界。实际影响是步子走得比必要的更小:慢,但安全。 对照 L∞ 那处:距离被估小,惩罚被低估,步子走得比安全范围更大——那才是危险的方向。 同样是「板书不精确」,后果可以完全不同。判断一处笔误要不要紧,看的不是它有多显眼,而是它把结论推向哪一边。 两处技术问题清完了。下一集是这一讲真正的核心——那个只有三行、但整个 TRPO 都架在上面的论证。
28 / 65

知识点 4 · 总结

Pinsker 少了一个 ½ —— 界仍成立,但松一倍

核心结论

正确:D_TV ≤ √(½D_KL) ⟹ D_TV² ≤ ½D_KL ⟹ 惩罚 (C/2)·KL。板上少了 ½ ⟹ 惩罚 C·KL,大一倍。

底层机制

验算:20 万组随机分布无反例;且 p→q 时比值 → 1.0000(Pinsker 是紧的)—— 信赖域恰好工作在它最紧的区域。

常见误解

误解:「板上那个就是 Pinsker」。它成立,但是 Pinsker 的弱化推论。

与你的考试

方向:惩罚估大 ⟹ 步子更小 ⟹ 慢但安全。与 L∞ 那处相反(那处偏不安全)。判断笔误要紧不要紧,看它把结论推向哪一边。

29 / 65

知识点 4 · 检验

板上把 Pinsker 写成 D_TV ≤ √D_KL(少了根号里的 ½),后果是什么?

知识点 6

5 · MM 论证的全部支点:惩罚项在 π_i 处归零

30 / 65
✓可算的代理 LL9 给的✓距离惩罚上上集给的—单调改进这一集拼出来论证只有三行
两块料都齐了。这一集把它们拼成单调改进的保证。
讲解
现在两块料都齐了:一个可算的代理目标 L,和一个随距离增长的惩罚。 把它们拼成保证的论证叫 MM——minorize-maximization,下界化-最大化。(字幕把它听成了「mineral minimization」,实际是 minorize-maximization;而且是最大化,不是最小化。) 论证本身只有三行。这是这一讲唯一一个在板上完整证完的东西,也是 TRPO 的全部理论基础。 而它全部的支点,是一个几乎显然到会被跳过的观察。
31 / 65
有下界就够了最大化下界,真值自然跟着涨
不对。下界可以合法,而最大化它让真值变差。
讲解
这是这一讲最值得停下来的错误模型,因为它听上去太顺了:既然 M 处处不超过 V,那把 M 推高,V 不就被顶上去了吗? 不。 「M ≤ V 处处成立」只告诉你 V 在 M 之上,没有说 V 会跟着 M 的形状走。M 的最大值点,完全可以是 V 上一个很低的地方。 这不是抽象的担心。下一镜给一个具体的、可验证的反例:一个处处成立的合法下界,最大化它之后真值掉了。
32 / 65
当前策略下界切在这里真值 V
先看一个合法的下界:处处不超过真值,相切点却不在当前策略处。
讲解
构造一个玩具来检验。真值曲线取 V(x) = 1 − 4(x−0.62)²,当前点 x_i = 0.20,V(x_i) = 0.2944。 现在造一个下界 B:让它在 x = 0.05 处与 V 相切(值和斜率都相同),然后比 V 弯得更快。 这样造出来的 B 处处不超过 V——我在两万个点上验过,min(V − B) = 0.00000000,恰好在相切点取到。它是一个完全合法的下界。 唯一的问题是:它相切在 0.05,不在当前点 0.20。 下一镜看最大化它会发生什么。
33 / 65
切在当前点切在别处+0.5292-0.2705最大化下界后,真值的变化
两个都是合法下界。右边那个把真值从 0.2944 推到了 0.0239。
讲解
看什么:两根柱子指向相反。左边的下界在当前点相切,最大化它让真值涨 0.5292;右边的下界同样处处成立,只是相切点挪到了别处 —— 最大化它让真值跌 0.2705。「是下界」这一条,不足以保证改进。 —— 两个下界,都合法,结果相反。 相切在别处的那个 B:最大值点在 x = 0.126。真值从 0.2944 变成 0.0239——掉了 0.2705。 断在哪里?B(x_i) = −0.2906,而 V(x_i) = 0.2944,差了 0.5850。链条 V(新) ≥ B(新) ≥ B(旧) 的最后一环接不到 V(旧) 上,保证从这里漏掉了。 相切在当前点的那个 M:M(x_i) = V(x_i) = 0.2944,差恰好为零。最大值点在 0.41,真值涨到 0.8236——+0.5292。 所以关键的不是「是下界」,是「在当前点与真值相等」。
34 / 65
Mi(π)=Lπi(π)−C⋅DKLmax(πi,π)  ⟹  Mi(πi)=V(πi)
因为 KL(π_i,π_i)=0全部支点就是这一条
指名反驳:支点不是「是下界」,是惩罚在 π_i 处归零。
讲解
指名回去:光是下界不够。支点是——惩罚项在当前策略处恰好为零。 因为 D_KL(π_i, π_i) = 0,所以 M_i(π_i) = L_{π_i}(π_i) − C·0 = L_{π_i}(π_i),而 L 在自己这一点是精确的(L9 第九集),于是 M_i(π_i) = V(π_i)。 三行链条立刻闭合: V(π_{i+1}) ≥ M_i(π_{i+1}) (M 是下界) M_i(π_{i+1}) ≥ M_i(π_i) (π_{i+1} 让 M 变大) M_i(π_i) = V(π_i) (惩罚归零) 还有一个常被忽略的好处:π_i 自己永远在可行集里,所以「找不到更好的」这种情况只会让你原地不动,绝不会变差。 整个 TRPO,架在「KL 在自己这一点等于零」这一件事上。 下一集看讲座在写这条链时的一处笔误。
35 / 65

知识点 5 · 总结

MM 的支点:惩罚项在 π_i 处归零,于是下界在起点与真值相切

核心结论

M_i(π)=L(π)−C·D_KL^max。因 D_KL(π_i,π_i)=0 ⟹ M_i(π_i)=V(π_i)。三行闭合:V(新) ≥ M(新) ≥ M(旧) = V(旧)。

底层机制

验算反例:一个处处合法的下界(min(V−B)=0),只因相切点不在 x_i,最大化后真值 0.2944 → 0.0239,跌 0.2705。

常见误解

误解:「有下界就够了」。「M ≤ V」不保证 V 跟着 M 走 —— M 的峰可以落在 V 很低的地方。

与你的考试

附带保证:π_i 自己永远可行,所以最差是原地不动,绝不变差。MM = minorize-maximization(字幕作 mineral minimization,且是最大化)。

36 / 65

知识点 5 · 检验

MM 论证能给出单调改进,靠的是 M_i 的哪一条性质?

知识点 7

6 · 讲义上的「=」应是「≥」—— 而口头说的是对的

37 / 65
Vi+1 =? Mi(πi+1)
讲义上是等号口头说的是「≥」
链条推完之后,讲义那一行是等号 —— 而讲课时说的是「大于等于」。
讲解
链条推完之后,讲义上落下一行:V_{i+1} 等于 M_i(π_{i+1})。应该是大于等于。 但这一处要把话说准:讲课时说的是对的。原话是「we know that's greater than or equal to Mi of pi_i + 1」。等号只出现在写下来的那一行上。 所以这是三处不精确里最小的一处——它甚至不改变后面任何一步的用法。但它值得拿一集说清楚,因为为什么必须是不等号,正好把上一集的结构又照了一遍。
38 / 65
= 和 ≥ 差不多反正后面用的是同一条链
等号只在一个点成立:π = π_i。离开它就有间隙。
讲解
这个错误模型有一定道理——后面确实照样能推。但它会让人记住一个错误的图像。 如果 V_{i+1} 等于 M_i(π_{i+1}),那意思是:最大化下界之后,你精确地知道了新策略的真值。 实际不是。你只知道真值不低于某个数。中间差多少,取决于你走了多远。 而等号确实成立——但只在一个点上:π = π_i,那个惩罚归零的点。这正是上一集的支点,从另一个角度又出现了一次。
39 / 65
V(π) ≥ Mi(π)∀π,V(πi)=Mi(πi)
下界:处处成立等号:只在一点
「处处是下界」和「在一点相等」是两条性质,不能混成一条。
讲解
把两条性质并排摆出来,就能看清笔误在哪。 第一条:V(π) ≥ M_i(π),对所有 π 成立。这是「下界」。 第二条:V(π_i) = M_i(π_i)。这是「在当前点相切」。 上一集证明了:单独的第一条不够,必须两条都有。 板上那个等号,等于把第二条的适用范围悄悄扩大到了所有 π——而那会让 M 和 V 变成同一个函数,整个构造就没意义了。 下一镜量一下间隙有多大。
40 / 65
0.05.10.210.00000.01000.04000.1764横轴:步长
间隙 V − M:起点恰好为 0,然后按步长的平方张开。
讲解
看什么:第一根柱子高度为零 —— 那就是等号成立的唯一一点。往右三根按 0.0100 → 0.0400 → 0.1764 张开,步长翻倍间隙就翻四倍:这是二次增长,和惩罚项里的平方是同一件事。 —— 用上一集那个玩具量一下间隙 V(x) − M_i(x)。 步长 0:间隙 0.0000——等号成立,唯一的一点。 步长 0.05:0.0100。 步长 0.10:0.0400。 步长 0.21:0.1764。 注意这几个数:步长从 0.05 到 0.10 翻了一倍,间隙从 0.01 到 0.04 翻了四倍。这个玩具里间隙恰好等于 4×(步长)²。 二次增长。和惩罚项里的距离平方、和 L9 里的 α²,是同一个结构在第三次出现:走小步时误差是二阶小量,走大步时它主导一切。 这也解释了为什么信赖域是有用的——它就是在把这个二次项按住。
41 / 65
✕板上V = M✓实际V ≥ M✓等号只在 π_i间隙按步长平方张开
指名反驳:等号只在 π_i 成立。最大化 M 给的是下界,不是真值。
讲解
指名回去:等号只在 π_i 处成立,一般情况是 V ≥ M。 实际后果很轻——讲课时口头说的就是不等号,后面的用法也是不等号,结论不受影响。但记住正确的图像有用:最大化 M 给你的是一个保底的数,不是新策略的真值。真值只会比它更好,而且通常好不少(上面那个玩具里差 0.1764)。 这是三处不精确里的最后一处。总结一下方向: D_TV 写成 L∞:距离估小 ⟹ 惩罚低估 ⟹ 偏不安全。 Pinsker 少 ½:惩罚估大 ⟹ 步子更小 ⟹ 偏保守。 讲义的「=」:只是写松了,不影响结论,口头也没说错。 三处都不改变这一讲的结论方向——这也说明为什么它们容易被略过。 数学到此为止。下一集开始算账:这套理论能不能真的用来跑算法。
42 / 65

知识点 6 · 总结

讲义上的「=」应是「≥」—— 等号只在 π_i 处成立

核心结论

两条性质要分开:V ≥ M 处处成立(下界),V(π_i)=M(π_i)(只在一点相切)。写成等号等于把第二条扩大到所有 π。

底层机制

间隙 V−M 按步长的平方张开:0 → 0.0100 → 0.0400 → 0.1764(步长翻倍,间隙翻四倍)。与惩罚的平方、L9 的 α² 同构。

常见误解

误解:「= 和 ≥ 差不多」。等号会让人以为最大化 M 就精确得到了新策略的真值;实际只得到一个保底数。(讲课时口头说的是「greater than or equal to」,没说错。)

与你的考试

三处不精确的方向:L∞ 偏不安全;Pinsker 偏保守;讲义的「=」不影响结论。都不改结论方向,所以都容易被略过。

43 / 65

知识点 6 · 检验

为什么 V_{i+1} = M_i(π_{i+1}) 应该写成 ≥?

知识点 8

7 · 理论常数 C 大到没法用:γ=0.99 时是 39600ε

44 / 65
C=4εγ(1−γ)2
算算它给多大的步子
论证完成了。现在把数代进去,看这套理论能不能真的用来跑算法。
讲解
前六集把定理做完了:一条对任意随机策略成立的下界,一个在当前点归零的惩罚,一条三行的改进链。 现在算账。 惩罚常数是 C = 4εγ/(1−γ)²,其中 ε = max_{s,a}|A^π(s,a)|。 按约定标一处:这个常数被字幕弄坏了两次——一次念成「4 epsilon gamma divided by 1 minus gamma squared」,一次念成「4 epsilon gamma minus gamma squared」。正确的是 4εγ/(1−γ)²,分母整体平方。 这一集只做一件事:把 γ 代进去。
45 / 65
照着定理走就行有理论保证的算法当然能跑
保证是真的。按它走的步子小到策略几乎不动。
讲解
这个错误模型很自然:定理证完了,照着做不就行了吗? 保证确实是真的——如果你严格按 M_i 来更新,单调改进一定成立。 问题不在正确性,在数量级。理论给出的 C 大到让每一步都小得几乎不动。 这是一个在很多领域都会遇到的落差:一个正确的界,可以松到没有任何实用价值。下面两镜把这个落差量出来。
46 / 65
✓γ=0.9360ε✕γ=0.9939600ε✕γ=0.9993996000ε(1−γ)²
γ 从 0.9 挪到 0.99,常数涨了 110 倍;再到 0.999,又涨 101 倍。
讲解
代三个常用的折扣因子: γ = 0.9 → C = 360ε γ = 0.99 → C = 39600ε γ = 0.999 → C = 3996000ε 驱动这个增长的是分母里的 (1−γ)²:γ 每靠近 1 一个数量级,(1−γ)² 就小两个数量级。 而 0.99 并不是什么极端设置——机器人、Atari、几乎任何有长期回报的任务都在这个区间。 再叠上 ε = max_{s,a}|A| 本身就不小(它取的是最坏的状态动作对),整个惩罚项的量级就出来了。
47 / 65
γ=0.9γ=0.950.004670.00111允许的步长
最优步长 = 斜率 ÷ (2C),与 C 成反比。γ 只挪了 0.05,步长缩到 ¼。
讲解
看什么:看右边那根只有左边的四分之一出头。γ 从 0.9 挪到 0.95 而已 —— 而真正常用的 0.99 那根画不出来:它只有右边这根的 1/26,会塌成一条线。这就是为什么这里不画第三根柱子。 —— 把 C 换成步长。最大化「一阶增益 − C·(步长)²」,最优步长是 斜率 ÷ (2C)——与 C 成反比。 用第五集那个玩具(斜率 3.36、ε=1): γ=0.9,C=360 → 步长 0.004667 γ=0.95,C=1520 → 步长 0.001105(缩到 ¼) γ=0.99,C=39600 → 步长 0.0000424(再缩 26 倍) γ=0.999 → 步长 0.0000004 最后两个数没有画出来,因为画不了:从 0.004667 到 0.0000004 跨了四个数量级,在同一根线性坐标轴上最小的柱子会塌成看不见的一条线。与其画一张骗人的图,不如说出这个比值。 讲座自己的措辞是:如果用这个,「we would take very small step sizes」。
48 / 65
✓保证对吗对✕能算出来吗原则上能✕能用吗步子太小正确,但松到没有用
指名反驳:定理是对的,按它走太慢 —— 于是 C 被扔掉。
讲解
指名回去:不是定理错了,是按它走太慢。 讲座把三层都说到了: 关于 ε 能不能算——「in principle, you could evaluate this, particularly if you're at a discrete state and action space. In practice, that's something that you would not wanna do.」 关于知不知道 C——「often we don't know what this is」。 关于步子——「even if you could compute it… we would take very small step sizes」,所以「this is not generally practical」。 于是做法是:把 C 从推导里摘出来,当成一个超参数(讲座原话:「we take this constant here and we turned it into a hyperparameter」)。 这一步要说清它的代价:C 一旦不是定理给的那个值,那条单调改进的保证就不再成立了。换来的是一个能跑的算法。 下一集:为什么最后连「惩罚」这个形式都被换掉了。
49 / 65

知识点 7 · 总结

理论常数 C 大到没法用:γ=0.99 时是 39600ε

核心结论

C = 4εγ/(1−γ)²(字幕两次念坏这个式子,分母是整体平方)。γ=0.9→360ε,γ=0.99→39600ε,γ=0.999→3996000ε。

底层机制

最优步长 = 斜率/(2C),与 C 成反比。γ 从 0.9 到 0.95 步长缩到 ¼;再到 0.99 又缩 26 倍。

常见误解

误解:「照着定理走就行」。保证是真的,问题在数量级 —— 一个正确的界可以松到没有实用价值。

与你的考试

讲座原话:ε「in practice, that's something that you would not wanna do」;C「often we don't know what this is」;按它走「we would take very small step sizes」。于是 C 被摘出来当超参数 —— 而保证也随之失效。

50 / 65

知识点 7 · 检验

理论常数 C = 4εγ/(1−γ)² 带来的实际问题是什么?

知识点 9

8 · 于是惩罚变成硬约束:信赖域

51 / 65
✕惩罚形式减去 C·KL✓约束形式KL ≤ δTRPO 选了右边
C 没法用。但换掉的不只是 C —— 整个「惩罚」的形式都被换掉了。
讲解
上一集的结论是 C 没法用。但 TRPO 做的不只是把 C 调小。 它把惩罚换成了约束:不再是「目标减去一个随距离增长的罚项」,而是「在一个 KL 球里最大化目标」。 讲座的原话:「instead of explicitly subtracting off our lower bound, we're just going to say you could move. You can change your gradient but not too far.」 这一集说明:为什么换形式,比换数值更要紧。
52 / 65
把 C 调小就行反正它已经是超参数了
不够。固定的 C 会让步长随梯度大小一起变。
讲解
既然 C 已经变成超参数,把它调到一个能跑的值不就完了吗? 不够。惩罚形式有一个结构性的毛病:在固定的 C 下,最优步长是 斜率 ÷ (2C)——它正比于梯度的大小。 而梯度的大小在训练过程中会变好几个数量级:优势估计的尺度会漂、回报的尺度会漂、不同任务之间更是差得远。 于是同一个 C,在训练早期可能太保守,在某个梯度暴涨的时刻又会把你甩出安全范围。下一镜把这个行为画出来。
53 / 65
maxπ L(π)−CDKLvs.maxπ L(π)  s.t.  DKL≤δ
单次求解上二者等价差别在参数能不能搬
两种形式在单次求解上等价。差别在于参数跨情形还管不管用。
讲解
先把话说公平:这两种形式在一次求解上是等价的。对任何一个 δ,总存在某个 C 使两边给出同一个解——这就是拉格朗日对偶。 所以差别不在「哪个更强」。差别在于: δ 的含义是「策略这一步最多改变多少」——一个直接的、可跨任务搬运的量。 C 的含义是「每单位 KL 值多少回报」——它必须随回报的尺度、随梯度的大小一起改。 下一镜用数字说明这个区别有多大。
54 / 65
0.10弱0.10中0.10强三种梯度强度下的步长
固定 C:步长跟着梯度放大。固定 δ:三根拉平。
讲解
看什么:三根柱子从高低不齐变成一样高。起始高度是固定 C 下的步长:梯度强弱差 4 倍,步长就差 4 倍;末状态是固定 δ 下的步长,三根完全相同 —— 约束让步长与梯度大小脱钩。 —— 玩具:最大化 a·s − C·s²,对比「最大化 a·s,且约束 s² ≤ δ」。 固定 C = 16.8:梯度 a = 1.68 / 3.36 / 6.72 时,步长分别是 0.05 / 0.10 / 0.20——梯度翻倍,步长翻倍。a 再涨到 33.6,步长变成 1.00,比最初大了 20 倍。 固定 δ = 0.01:步长恒为 0.10,与梯度大小无关。 反过来看更清楚:要用惩罚形式复现「步长恒为 0.10」这件事,C 必须随 a 一起改——8.4 / 16.8 / 33.6 / 168。C 不是一个能固定下来的数。 这就是为什么 TRPO 换的是形式,不只是数值。约束形式给了你一个跨任务、跨训练阶段都还有同样含义的旋钮。
55 / 65
✓步长可控δ 说了算✓参数可搬跨任务能用✕定理保证没有了换来的和付出的
指名反驳:换的是形式,不是数值。代价是那条定理不再罩着它。
讲解
指名回去:把 C 调小不够,因为毛病在形式里——固定的 C 让步长正比于梯度大小,而梯度大小会漂好几个数量级。 约束形式把这一条切断了:δ 直接规定「策略每步最多改变多少」,与回报尺度、与梯度大小都无关。这才是 TRPO 里 δ 能当默认值用的原因。 但要把代价说清楚,而且说两遍都不算多: 一旦 C 不再是 4εγ/(1−γ)²,那条单调改进定理就不再罩着这个算法了。剩下的是一个受它启发的、形状相同的算法,不是它的实现。 下一集看 TRPO 为了真的能跑,还做了哪几处代换——以及哪几处确实不改变问题,哪一处改变了。
56 / 65

知识点 8 · 总结

惩罚变成硬约束:换的是形式,不是数值

核心结论

max L − C·KL → max L s.t. KL ≤ δ。单次求解上二者对偶等价;差别在参数能不能跨情形搬运。

底层机制

固定 C 时步长 = 斜率/(2C),正比于梯度大小:a=1.68/3.36/6.72 给出步长 0.05/0.10/0.20。固定 δ=0.01 时步长恒为 0.10。

常见误解

误解:「把 C 调小就行」。毛病在形式里 —— 梯度尺度漂几个数量级,固定的 C 就跟着漂。

与你的考试

代价要说清:C 一旦不是 4εγ/(1−γ)²,单调改进定理就不再罩着这个算法。剩下的是一个受它启发的算法。

57 / 65

知识点 8 · 检验

TRPO 把「减去 C·KL」换成「约束 KL ≤ δ」,主要好处是什么?

知识点 10

9 · TRPO 的四步实用化,以及整门课的主线

58 / 65
✕状态求和→ 采样✕动作求和→ 重要性采样✕优势 A→ Q✕max KL→ 平均讲座只列前三
从纸上的目标到能跑的代码,中间隔着四处代换。
讲解
最后一集:从纸上的目标到能跑的代码,中间隔着几处代换。 讲座明确列了三处,并且给了一个很强的断言——「all of these three substitutions don't change the solution to the optimization problem」。 还有第四处,讲座跳过了(它说「I will skip through sort of exactly how they do some of the additional details」),但它在论文里,而且它确实改变了问题。 这一集逐处过,并且检验那个断言。
59 / 65
TRPO 是那条定理的实现照着单调改进定理写成代码
讲座自己的措辞是 inspired by —— 受它启发,不是实现它。
讲解
这个错误模型很值得拆,因为它会让人对 TRPO 抱有错误的期待:既然有单调改进定理,那 TRPO 跑出来就该是单调的吧? 不是。TRPO 的训练曲线会掉,和别的策略梯度方法一样会掉。 讲座自己的措辞是最准确的:「them being inspired by this conservative policy improvement, and then trying to make that more practical and fast」——受它启发,然后把它变得实用、变快。 这个区分不是咬文嚼字。看一个算法时,分清哪部分是定理、哪部分是工程,决定了你能对它抱什么期待、出问题时该怀疑哪里。
60 / 65
maxθ E^s,a∼πold[πθ(a|s)πold(a|s)A^(s,a)]s.t.E^s[DKL]≤δ
每一项都能从一批轨迹里算出来
代换之后的样子:每一项都只用旧策略的数据。
讲解
先看终点。代换做完之后,要解的是这个: 在 KL 约束下,最大化「新旧策略的概率比 × 优势估计」在旧策略数据上的经验平均。 关键在于每一项都能从一批轨迹里算出来:状态来自旧策略的 rollout,动作概率比对任何参数化策略都是闭式,优势用 L9 那套估计,KL 也是闭式。 三处代换分别负责:状态求和(讲座:状态空间「might be continuous and infinite」)、动作求和(同样可能连续)、以及优势换成 Q。 下一镜检验那个断言。
61 / 65
π¹π²π³π⁴π⁵-0.4190-0.4190-0.4190-0.4190-0.4190用 Q 的目标 − 用 A 的目标
五个不同的候选策略,两个目标的差完全相同 —— 所以 argmax 相同。
讲解
看什么:五根柱子一根不差地一样高。它们是五个完全不同的候选策略下「用 Q 的目标」减「用 A 的目标」—— 差值恒为 −0.4190。差一个与策略无关的常数,就意味着两个目标的最大值点必然相同。 —— 检验讲座那个断言。拿第三处代换算:把优势 A 换成 Q。 A(s,a) = Q(s,a) − V(s),代进目标里,多出来的是 Σ_s ρ(s)V(s)——这一项完全不含新策略。所以两个目标只差一个常数,argmax 一模一样。 我验算了:4 个状态、3 个动作、300 个随机候选策略,两个目标之差的极差是 3.9×10⁻¹⁶(浮点噪声),恰好等于 Σ_s ρ(s)V(s) = −0.4190;两边选出的是同一个策略。断言成立。 前两处也站得住,但要补一句精度:它们是无偏估计,所以总体目标的解不变;有限样本下当然有噪声,这是估计误差,不是代换带来的偏差。 第四处就不一样了。定理里的是 max over states 的 KL——对所有状态取最大。这个量和 ε 一样算不出来。论文用平均 KL(在采样状态上取期望)替代。平均不是最大,这一步真的换掉了被约束的问题。
62 / 65
✓前三代换解不变✓信赖域形状来自定理✕C→δ保证没了✕max→平均问题变了定理与工程的分界线
指名反驳:TRPO 是受启发的工程化。分清哪部分是定理、哪部分不是。
讲解
指名回去:TRPO 不是那条定理的实现。 把分界线画出来—— 保住了的:前三处代换不改变解(第三处精确到浮点噪声,前两处无偏);信赖域这个形状直接来自定理。 放掉了的:C 换成 δ(保证失效);max KL 换成平均 KL(被约束的问题变了)。 最后是解法。目标做一阶近似、约束做二阶近似,最优方向就是自然梯度 F⁻¹g。但 F 是参数数量的平方那么大,不能显式求逆,所以用共轭梯度只求那个乘积;再用一次线搜索(讲座:「they do this sort of line search with a KL constraint」)回头检查:约束真的满足了吗?目标真的变好了吗?没有就回退。 这次线搜索是很关键的一笔:它把「二次近似不准」这个风险兜住了。近似可以不准,但每一步都真的验过才接受。 这也是整门课反复出现的那个手法最后一次露面:做不到精确,就把误差挡在一个能检查的地方。
63 / 65

知识点 9 · 总结

TRPO 的四处代换:三处不改变解,一处改变了

核心结论

状态求和→采样、动作求和→重要性采样(两者无偏,总体目标的解不变)、A→Q(只差常数 Σρ(s)V(s),argmax 完全相同)。

底层机制

验算 A→Q:4 状态 3 动作 300 个候选策略,两个目标之差的极差 3.9×10⁻¹⁶,恒等于 −0.4190,argmax 同一个。断言成立。

常见误解

误解:「TRPO 是那条定理的实现」。讲座原话是 inspired by。TRPO 的训练曲线会掉。

与你的考试

第四处代换讲座跳过了:max KL → 平均 KL,这一步真的换了问题。解法:一阶目标 + 二阶约束 = 自然梯度 F⁻¹g,用共轭梯度避免求逆,再用线搜索验证约束与改善 —— 把近似误差挡在一个能检查的地方。

64 / 65

知识点 9 · 检验

下面哪一处代换真的改变了被求解的问题?

知识点 11

完

65 / 65
讲解
回头看这九集,承重的是三件事。 第一,MM 论证的支点小得惊人。定义 M_i(π) = L(π) − C·D_KL^max(π_i, π),那个 KL 惩罚在 π = π_i 处恰好为零,于是 M_i(π_i) = V(π_i)。把这一条和「M_i 是 V 的下界」放在一起,就得到 V(π_{i+1}) − V(π_i) ≥ M_i(π_{i+1}) − M_i(π_i)——只要新策略让 M 变大,真值就一定变大。整个 TRPO 的理论就建立在「惩罚在起点归零」这一件事上。 第二,理论常数和实用算法之间隔着一个数量级问题。C = 4εγ/(1−γ)²,γ=0.99 时是 39600ε。按它走,每步的 KL 必须小到策略几乎不动。TRPO 的处理是把 C 当超参数、把惩罚换成硬约束——这让它不再享有那条定理的保证,但它能跑。看一个算法时要分清哪部分是定理、哪部分是工程。 第三,这一讲的板书有三处不精确,而它们都不影响结论的方向:D_TV 被写成 L∞(只在两动作时相等)、Pinsker 少了个 ½(界松一倍)、一处「≥」写成了「=」。三处都让界变弱或表述变松,没有一处让它变错——这也说明为什么它们容易被略过。 下一讲换一个问题。前十讲问的都是「能不能学到」,L11 开始问「要多少样本才能学到」——从渐近保证转向有限样本的保证。