CS234 L6 · 卷积网络与深度 Q 学习 · 全片速览

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

1 · 开场2 · 1 · 线性特征的天花板:你得先3 · 2 · 核方法是 average4 · 3 · CNN 不是「更聪明」,5 · 4 · 「最近四帧」是一个会失效6 · 5 · 两个病理:样本相关 + 7 · 6 · 经验回放:把在线数据变回8 · 7 · 固定 Q 目标:把非平稳9 · 8 · 两个补丁各治三要素的哪一10 · 9 · 后续三个改动,各自回头修11 · 完
知识点 1

开场

1 / 66
讲解
L5 结束在一个坏消息上:致命三要素——函数逼近、自举、离策略——凑齐就可能发散,而 Baird 反例把它演示得很彻底。 这一讲讲的是深度 Q 网络,而 DQN 三条全占:它用卷积网络做函数逼近,用 Q-learning 自举,而 Q-learning 本身是离策略的。按 L5 的结论,它应该是最危险的组合。 它确实跑通了。这一讲的核心内容就是解释靠什么跑通的:两个补丁——经验回放与固定 Q 目标——以及它们分别在对付三要素里的哪一条。 本片会一直把这两个补丁和 L5 的诊断对齐。如果你把它们当成工程调优,这一讲就只是一串实现细节;而把它们当成对具体病理的回答,整件事就有了结构。 这一讲的自动字幕仍然有几处坏损,其中一处是实质性的错误(优先回放里新样本的优先级),本片会标出来并给出正确的做法。
知识点 2

1 · 线性特征的天花板:你得先猜对那组基

2 / 66
V^(s;w)=x(s)⊤wx(⋅) is yours to choose
这组基得你自己给
L5 全程假定 x(s) 已经有了。可是它从哪来?
讲解
L5 从头到尾把特征 x(s) 当成给定的。所有结论——最小 MSVE、1/(1−γ) 的界、投影算子——都是相对于一个已经选好的特征集说的。 但那组特征是谁给的?在火星车上是你手写的;在真实问题上,它得由你去设计。 而 L5 第六集已经说清了后果:如果真值函数不在这组特征的张成里,min MSVE 就大于 0,而后面所有的界都是乘在这个数上的。特征选不好,再好的算法也只能收敛到一个差的地方。
3 / 66
特征不够就多加几个多项式、傅里叶、瓦片编码,堆上去就是了
「加特征」确实能降低 min MSVE —— 代价藏在维数里。
讲解
这个错误模型有一条正确的核心:加特征确实会扩大可表示的函数类,从而降低 min MSVE。极端情况下加到 one-hot,min MSVE 就是 0——那正是回到表格。 而且实践里确实有一整套现成的特征构造法:多项式基、傅里叶基、径向基、瓦片编码。加起来并不难。 问题在于代价。这些构造法的特征数随状态维数指数增长,而你的样本数不会。下面两镜把这件事的两个面都说清楚:一个是「你得猜对」,一个是「猜不对就得堆,而堆不起」。
4 / 66
Vπ∉span{x1,…,xd}⟹minwMSVE>0
这个下界你测不到
真值不在张成里时,误差有一个你无法通过训练消掉的下界。
讲解
把 L5 第六集那条结论反过来读:一旦真值函数 V^π 不落在特征的张成里,min_w MSVE 就严格大于 0。 这个下界有两个讨厌的性质。 第一,再多数据也消不掉它——它是表达能力的问题,不是估计的问题。你收集十倍的数据,收敛得更稳,但收敛到的还是那个点。 第二,你测不到它。要知道 min MSVE 有多大,你得先知道 V^π,而那正是你在估的东西。所以你既不知道自己离最好有多远,也不知道该不该继续加特征。 这一点和后面几讲的调试经验直接相关:训练曲线平了,你分不清是「收敛了」还是「撞到表达能力的天花板了」。
5 / 66
d=3 维d=4 维100010000每维取 10 格
网格式特征:每多一维乘 10。d=1→10、d=2→100、d=3→1000、d=4→10000。
讲解
看什么:看右边那根是左边的十倍高:维数只加了 1,需要的特征就乘了 10。这是乘法不是加法 —— 再往右两档,柱子就画不进这张图了。 —— 用最朴素的网格式特征算一笔账:把每个维度切成 10 格,那么 d 维一共需要 10^d 个特征。 d=1 要 10 个,d=2 要 100,d=3 要 1000,d=4 要 10000。到 d=10 就是一百亿。 而机器人的状态维数轻易就到几十,图像更是成千上万。特征数是乘上去的,样本数不是。 所以「不够就多加几个」在低维时是可行的工程手段,在高维时根本不是一个选项。这不是算力问题——即使你存得下 10^10 个权重,你也没有足够的数据去估它们。 注意这个论证只依赖维数,不依赖你用哪种特征构造法。下一集会看到,连非参数方法也逃不掉它。
6 / 66
✓猜对基min MSVE 才小✕猜不对就堆特征数 10^d✕而且测不到不知道离最好多远这才是要学表示的理由
指名反驳:问题不是「几个特征」,是你得先猜对那组基。
讲解
指名回去:线性逼近的天花板不在特征数量上,在于你必须事先猜对那组基。 三件事叠在一起:猜对了 min MSVE 才小;猜不对只能靠堆,而堆的代价是 10^d;更糟的是你无法判断自己猜得对不对,因为那需要知道真值。 这正是「学习表示」这件事存在的理由,也是这一讲后半段要引入深度网络的动机:不再手工给基,而是让基本身也从数据里学出来。 但在那之前,先看一条看起来更优雅的出路——非参数方法。它有一个 L5 会非常羡慕的性质,而它失败的方式恰好也是这一集这个 10^d。
7 / 66

知识点 1 · 总结

线性逼近的天花板是「你得先猜对那组基」

核心结论

真值不在 span{x} 里 ⟹ min MSVE > 0,而这个下界再多数据也消不掉,而且你测不到它(要测就得先知道真值)。

底层机制

补救办法是加特征,但网格式特征是 10^d:每多一维乘一次。特征数是乘上去的,样本数不是。

常见误解

误解:「不够就多加几个」。在低维是可行工程手段,在高维根本不是选项 —— 而且与用哪种构造法无关。

与你的考试

调试后果:训练曲线平了,你分不清是收敛了还是撞到了表达能力的天花板。这也是「学表示」存在的理由。

8 / 66

知识点 1 · 检验

线性值函数逼近里,「真值不在特征张成里」造成的误差有什么特别之处?

知识点 3

2 · 核方法是 averager,所以安全 —— 但覆盖不了高维

9 / 66
不用预先选基k-NN · 核回归
非参数方法绕开了上一集的问题:它不要求你先猜出一组基。
讲解
上一集的病根是「你得先猜对那组基」。非参数方法直接绕开它:不设定基,把见过的数据点存下来,新状态的值由邻近的点加权平均得出。 k-近邻和核回归都属于这一类。它们的表达能力随数据自动增长,不需要你预先判断真值函数长什么样。 而且它们还有一条性质,是 L5 看了会非常眼红的——下面会看到,它正面解决了 L5 第九集那个发散问题。
10 / 66
更灵活所以更好不用选基,表达能力还随数据增长
它确实更安全,而且是有定理的安全。但它撞的是另一堵墙。
讲解
这个错误模型的前半段不但对,而且比听起来更强:非参数方法不只是「更灵活」,它在 L5 那个最要命的问题上有定理保证。 所以这一集的反驳不是说它不好,而是说它好在别处、坏在别处。它换掉的是一堵墙,换来的是另一堵,而后一堵更硬。 先说它好在哪——这一条值得认真讲,因为它是 L5 第九集那个发散问题唯一一个干净的正面答案。
11 / 66
averager⟹‖ΠV−ΠV′‖∞≤‖V−V′‖∞
在 sup 范数下非扩张于是 Π∘B 仍是压缩
averager:输出是输入的凸组合,因而在 sup 范数下非扩张。
讲解
k-NN 和核回归属于一类叫 averager 的逼近器:新点的预测是已知点的凸组合(权重非负、和为 1)。 凸组合有一条直接的后果:它在 sup 范数下是非扩张的——两个函数经过它之后,最大差距不会变大。 这正好补上了 L5 第九集缺的那一块。那里的问题是:B 在 sup 范数下是 γ-压缩,而线性投影只在自己的加权范数下非扩张,两个范数对不上,复合就可能扩张。 而 averager 的非扩张性恰好也在 sup 范数下。范数对上了,于是 Π∘B 仍然是 γ-压缩,不动点存在、迭代收敛、与初值无关。 讲座提到这是 Geoff Gordon 1995 年关于 averager 的工作(字幕把名字念成了「Jeff Gordon」)。
12 / 66
d=3 维d=4 维100010000覆盖所需的点数
覆盖 d 维所需的点数还是 10^d:d=3 要 1000 个,d=4 要 10000 个。
讲解
看什么:看右边那根是左边的十倍高:和上一集完全相同的形状。上一集数的是特征个数,这一集数的是数据点个数 —— 不同的量,同一个指数。 —— 现在说它坏在哪。averager 靠「邻近的点」做预测,所以它要求你关心的区域里到处都有数据点。 而要让 d 维空间里任意一点都有近邻,所需的点数同样是指数级的:每维切 10 格就要 10^d 个点。d=4 已经一万,d=10 是一百亿。 请注意这张图和上一集完全相同。上一集数的是特征个数,这一集数的是数据点个数——不同的量,同一个指数。 这就是为什么非参数方法在低维控制问题上很好用,而在 Atari 或机器人视觉上不可行:它的收敛保证是真的,但它要的数据量拿不到。
13 / 66
✓稳定性有定理保证✓表达能力随数据增长✕可扩展性覆盖要 10^d 个点换了一堵墙,更硬
指名反驳:它确实更安全 —— 代价是它要的数据量拿不到。
讲解
指名回去:非参数方法不是「更灵活所以更好」,它是用可扩展性换了稳定性。 把账摆清楚。稳定性:有定理,而且是 L5 那个问题唯一干净的正面答案。表达能力:随数据自动增长,不用猜基。可扩展性:覆盖 d 维要 10^d 个点,这一条直接判了它在高维上的死刑。 这个对照很有教学价值,因为它说明收敛保证不是免费的——你总是在用别的东西去换。L5 结尾那句「稳定还不够」在这里有了第二层意思:稳定也不是白来的。 于是路就剩一条:保留参数化(可扩展),但让特征本身从数据里学出来,同时接受没有收敛保证。这就是深度网络,也是这一讲剩下的全部内容。
14 / 66

知识点 2 · 总结

核方法安全但不可扩展:稳定性是用可扩展性换的

核心结论

averager 的输出是输入的凸组合 ⟹ 在 sup 范数下非扩张 ⟹ 与 B 的范数对上了 ⟹ Π∘B 仍是 γ-压缩,收敛有保证。

底层机制

这正是 L5 第九集缺的那一块:线性投影只在自己的加权范数下非扩张,范数对不上才会发散。

常见误解

误解:「更灵活所以更好」。它确实更安全(有定理),但覆盖 d 维需要 10^d 个数据点。

与你的考试

同一张图上一集数特征、这一集数数据点 —— 不同的量,同一个指数。收敛保证不是免费的。

15 / 66

知识点 2 · 检验

k-NN 这类 averager 为什么能保证与 Bellman 回溯复合后仍然收敛?

知识点 4

3 · CNN 不是「更聪明」,它是参数削减装置

16 / 66
输入是一整屏像素1000 × 1000
深度网络把「选基」变成「学基」。但直接接全连接层,参数会爆。
讲解
深度网络给出的是第三条路:保留参数化,但把特征本身也变成要学的东西。基不再由你猜,由数据决定。 可是如果直接把一整屏像素接进全连接层,参数量立刻失控。 先把这笔账算清楚,因为卷积的全部理由都在这笔账里——而这个理由比通常说的那些要朴素得多。
17 / 66
CNN 更聪明它像视觉皮层,所以更懂图像
类比很好听,但它解释不了为什么参数会少四万倍。
讲解
关于 CNN 最常见的说法是它「模仿视觉皮层」「更懂图像」。这类说法在科普里很流行,而且不算错。 但它们有一个实际的坏处:解释不了任何可验证的东西。你没法从「像视觉皮层」推出参数量、推出它什么时候适用、推出它什么时候失效。 讲座在这里的处理很干脆——她把 CNN 完全当作一个参数削减装置来介绍,动机纯粹是数量上的。下面就按这个口径算。
18 / 66
fully connected: 1000×1000=106 weights per unit
每个单元 10⁶ 个权重
全连接:一个隐层单元就要 10⁶ 个权重。而你需要很多个单元。
讲解
一张 1000×1000 的图像有 10⁶ 个像素。全连接层里,每一个隐层单元都要和每一个像素连一条边,所以单个单元就是 10⁶ 个权重。 而一层通常要几百上千个单元。参数量直接进入十亿量级——而且这还只是第一层。 这不只是存储问题。参数越多,估准它们所需的数据越多,而 L5 第四集已经说过:参数少于状态时必须取舍,参数多到这个地步时,取舍的问题变成了根本估不出来。
19 / 66
同一组 25 个权重
卷积:同一个 5×5 滤波器在整张图上重复使用 —— 25 个权重,不是 10⁶。
讲解
看什么:看那个亮块滑过整张图:每到一个位置,用的都是同一组 25 个权重。所以图像再大,这个滤波器的参数量也不变 —— 这就是四万倍差距的全部来源。 —— 卷积做的事只有一件:把同一小块权重在整张图上重复使用。 一个 5×5 的滤波器有 25 个权重。它滑过整张图像,每个位置都用同一组权重去算。所以不管图像多大,这个滤波器的参数量永远是 25。 和全连接对比:10⁶ 对 25,四万倍。 而且这个削减不是白拿的表达能力损失——它编码了一个关于图像的假设:一个在左上角有用的特征检测器,在右下角同样有用。这个假设对自然图像大体成立,对任意排列过的像素则完全不成立。
20 / 66
参数共享平移不变性同一件事的两面
共享权重顺带白送了平移不变性 —— 不是额外设计,是同一个约束。
讲解
参数共享还有一个副产品:平移不变性。既然每个位置用的是同一组权重,那么一个图案出现在哪里,检测结果就是一样的。 这不是额外加上去的设计,它就是参数共享这个约束的另一种说法。你省参数的动作和你获得不变性的动作是同一个动作。 这也解释了 CNN 什么时候不适用:如果你的输入里「位置本身有意义」——比如表格数据的列顺序、或者每个像素代表不同的传感器——那么共享权重就是在强加一个错误的假设,参数是省下来了,但省错了地方。 讲座还提到了步幅、零填充、多个滤波器组、池化和最后的全连接头。这些都是同一个思路的延伸,本片不展开——它们不改变「CNN 是参数削减装置」这个定性结论。
21 / 66
✓10⁶ → 25四万倍✓白送不变性同一个约束✕前提位置无关才成立这是关于图像的假设
指名反驳:CNN 不是更聪明,它是一个关于图像结构的假设。
讲解
指名回去:CNN 不是「更聪明」或「更像大脑」。它是一个很具体的结构假设——同一个特征检测器在图像各处都有用——而这个假设换来了四万倍的参数削减。 这么说的好处是它可以被检验,也可以被证伪。假设成立时(自然图像),你白赚参数和不变性;假设不成立时(位置本身有意义的输入),你强加了一个错误的约束。 把它和前两集接起来:第一集说线性逼近要你手工猜基;第二集说非参数方法不用猜但不可扩展;这一集说深度网络学基,而卷积用一个关于图像的假设把学基的代价压了下来。 三条路,三种代价。而深度网络付的代价是:L5 的收敛保证一条都不剩。下面六集就是在这个前提下讨论怎么活。
22 / 66

知识点 3 · 总结

CNN 是参数削减装置,不是「更聪明」

核心结论

1000×1000 图像,全连接每个单元 10⁶ 个权重;5×5 共享滤波器只要 25 个 —— 四万倍。

底层机制

参数共享与平移不变性是同一个约束的两种说法:省参数的动作就是获得不变性的动作。

常见误解

误解:「CNN 更像视觉皮层所以更懂图像」。这类说法推不出任何可验证的东西。

与你的考试

它是一个可证伪的假设:位置本身有意义时(表格列序、异质传感器),共享权重就是强加了错误约束。

23 / 66

知识点 3 · 检验

讲座给出的引入卷积的理由是什么?

知识点 5

4 · 「最近四帧」是一个会失效的充分统计量

24 / 66
帧1帧2帧3帧4一帧看不出速度方向所以取最近四帧
DQN 的状态不是一帧,是最近四帧。这是一个有理由的选择。
讲解
Atari 的原始输入是一屏像素。但单独一帧不足以做决策:看一张静止的画面,你分不出球是在往上飞还是往下落。 DQN 的做法是把最近四帧叠起来当作状态。四帧足以恢复位置、速度、以及加速度的大致方向,对大多数街机游戏够用。 这个选择有理由,也确实好用——一套架构和一组超参数在约 50 个游戏上从零学起。 但它同时是一个很强的假设,而这一集要说的是这个假设在哪里会断。
25 / 66
四帧就是状态够用了,剩下的是调参问题
它在多数游戏上够用 —— 但「够用」和「是状态」是两件事。
讲解
这个错误模型的依据很硬:它在约 50 个游戏上跑通了,成绩还超过人类。工程上「够用」是最有说服力的证据。 但「够用」和「是状态」是两个不同的命题。L1 第五集给过判据:状态是充分统计量,当且仅当 P(s′|s,a) = P(s′|h,a)——知道当前状态之后,再知道全部历史也不会改变对未来的预测。 四帧满足这一条吗?对球的轨迹满足;对「我三十步前有没有捡到钥匙」不满足。 而一旦不满足,你面对的就不是 MDP,而是把 POMDP 当 MDP 在处理——前五讲所有的定理都不适用。
26 / 66
P(s′∣st,at)=P(s′∣ht,at)
L1 第五集的判据四帧之外的历史必须无关
判据没变:知道状态之后,再知道历史也不改变预测。
讲解
把 L1 第五集的判据原样搬过来:状态 s_t 是充分统计量,意味着给定它之后,更早的历史对预测未来毫无帮助。 代入 DQN:状态是最近四帧,那么「第 5 帧之前发生的一切」必须与未来无关。 对 Breakout 这类游戏基本成立——球的物理只取决于当前位置和速度,而那两样四帧里都有。 对需要记忆的游戏则明显不成立。讲座点名了 Montezuma's Revenge:你要先在某个房间拿到钥匙,很多步之后才在另一个房间用它。「我有没有钥匙」这个信息,四帧里一个像素都没有。 她的原话是「即使是最近四帧,也给不了你」——这不是猜测,是明确说出来的失效点。
27 / 66
✓Breakout物理只看位置与速度✓多数街机游戏四帧近似够用✕Montezuma钥匙在几十步前同一个状态定义,两种结果
同一套状态定义:多数游戏近似成立,需要记忆的游戏直接失效。
讲解
同一套状态定义,在不同游戏上落在判据的两侧。 成立的一侧:Breakout、Pong 这类游戏,后续演化只取决于当前的位置与速度,而四帧完整地编码了它们。近似 Markov,算法照常工作。 失效的一侧:Montezuma's Revenge 要求跨越几十上百步的记忆。四帧里没有这个信息,所以两个看起来完全相同的状态(有钥匙 / 没钥匙),最优动作却不同。 后果不是「学得慢一点」。它意味着不存在一个只依赖四帧的最优策略——你要的那个函数根本不是四帧的函数。再多数据、再大的网络都补不上,因为缺的是输入不是容量。 这也解释了为什么 Montezuma 长期是 Atari 基准里最难的那个,以及为什么后来的工作要往里加记忆或者内在奖励。
28 / 66
够用是充分统计量两个不同的命题
指名反驳:四帧是一个近似的 Markov 统计量,而且它的失效点是已知的。
讲解
指名回去:「四帧就是状态」把工程上够用误当成了数学上是充分统计量。 正确的说法是:四帧是一个近似的 Markov 统计量,它在物理主导的游戏上足够好,在需要长程记忆的游戏上明确失效——而且失效点是事先可以判断的,不需要跑完才知道:问一句「有没有一个超出四帧的信息会改变最优动作」就行。 这个判断方法值得带走,因为它在你自己的问题上同样适用。把观测窗口截断成固定长度是实践里最常见的做法(对话历史、传感器缓冲、时间序列窗口),而它随时可能把一个 POMDP 悄悄变成一个看起来是 MDP 的东西。 而 L3 第二集已经说过后果:Markov 性坏掉时,自举类方法不会报错,只会安静地收敛到错的值。
29 / 66

知识点 4 · 总结

「最近四帧」是近似的 Markov 统计量,失效点是已知的

核心结论

判据仍是 L1 第五集的 P(s′|s,a)=P(s′|h,a)。四帧编码了位置与速度,但编码不了「几十步前有没有拿钥匙」。

底层机制

失效时不是学得慢,是不存在只依赖四帧的最优策略 —— 缺的是输入不是容量,加数据加参数都补不上。

常见误解

误解:「50 个游戏上够用,所以它就是状态」。够用与是充分统计量是两个命题。

与你的考试

可事先判断:问「有没有超出窗口的信息会改变最优动作」。截断观测窗口是实践常态,而它会把 POMDP 悄悄变成假 MDP。

30 / 66

知识点 4 · 检验

DQN 用「最近四帧」当状态,在 Montezuma's Revenge 上失效的原因是什么?

知识点 6

5 · 两个病理:样本相关 + 目标在动

31 / 66
Δw=α(r+γmaxa′Q^(s′,a′;w)−Q^(s,a;w))∇wQ^
直接接上网络会怎样
把 L4 的 Q-learning 和 L6 的网络直接拼起来:这一行就是全部。
讲解
把前面的零件拼一下:L4 的 Q-learning 更新,L5 的半梯度形式,L6 的卷积网络当 Q̂。得到的就是屏幕上这一行。 这个组合三要素全齐:函数逼近(网络)、自举(目标里有 Q̂)、离策略(max 和行为策略不一致)。按 L5 第九集的结论,它应该随时会炸。 实际跑起来也确实不稳定。但有意思的是,把它拆开看,不稳定的来源可以归成两个具体的病理,而且每个都有一个针对性的补丁。 这一集先把两个病理说清楚,后两集分别讲两个补丁。
32 / 66
把表换成网络就行算法照旧,只是 Q 的存法变了
这正是 L5 第一集那个错误模型 —— 而这里它有了两个具体的后果。
讲解
这是 L5 第一集那个「只是换个存法」的错误模型,在深度设定下再出现一次。 在 L5 里它的后果是抽象的:更新会互相干扰、投影可能扩张。在这里它变得非常具体,而且可以分成两条: 第一,样本不再独立。监督学习里的随机梯度下降,其收敛性依赖于每次抽到的样本近似独立同分布。而在线跑 Atari 时,连续两帧几乎一模一样——你喂给网络的是一串高度相关的数据。 第二,回归目标在动。监督学习的标签是固定的;这里的目标 r + γ max Q̂(s′,·;w) 里含 w,你每更新一步,标签就跟着变。 两条都不是「存法」的问题,是训练过程的问题。
33 / 66
样本高度相关目标一直在动两个都违反监督学习的前提
两个病理:样本不 IID 与 目标非平稳。两个都不是「存法」问题。
讲解
把两个病理并排放。 样本不 IID:在线学习时,第 t 帧和第 t+1 帧几乎相同,而且它们都来自当前策略走出来的那一段轨迹。于是网络在一小段时间里反复看同一类画面,权重被拉向局部,然后又被下一段拉走。 目标非平稳:标签 r + γ max Q̂(s′,·;w) 依赖当前权重。你朝着目标走一步,目标自己也移了一步——这正是 L5 第七集那个半梯度问题在实践中的样子。 请注意这两条都是在和监督学习对比时才显出来的。监督学习的两个基本前提是「样本 IID」和「标签固定」,而在线 Q-learning 把它们同时破坏了。 所以补丁的思路也很直接:把这两个前提各自修回去。
34 / 66
✓样本不 IID→ 经验回放✓目标非平稳→ 固定 Q 目标✕函数逼近本身→ 没有补丁一一对应,不是调参
两个病理,两个补丁,一一对应 —— 而第三条没有对应物。
讲解
两个病理对应两个补丁,而且对应关系是精确的。 样本不 IID → 经验回放:把转移存进一个大缓冲,训练时随机抽小批量。抽出来的样本来自不同时间、不同策略,相关性被打散。 目标非平稳 → 固定 Q 目标:把计算目标用的那份权重冻结一段时间,于是在这段时间里标签是固定的,回归问题变回平稳的。 这两句话就是 DQN 全部的「创新」。它们看起来像工程技巧,实际上是对两个已命名病理的针对性回答。 而第三条要现在就说清楚:函数逼近本身没有补丁。致命三要素里的那一条原封不动地留着,所以 DQN 仍然没有收敛保证。第八集会把这笔账算完。
35 / 66
IID标签固定补丁在修这两个前提
指名反驳:不是「换个存法」,是监督学习的两个前提同时被破坏了。
讲解
指名回去:把表换成网络之后,坏掉的不是存储方式,是监督学习赖以成立的两个前提——样本独立同分布,以及标签固定。 这个读法的价值在于它让两个补丁变得可预测:既然病理是「前提被破坏」,补丁就一定是「把前提修回去」。你不需要记住经验回放和目标网络的实现细节,只要记住它们各自在修哪一个前提。 它也给了你一个诊断工具。以后遇到别的深度 RL 不稳定,先问:是哪个前提坏了?——样本相关性、目标漂移、分布偏移、还是别的。答案通常直接指向该用哪一类修法。 下面两集分别看这两个补丁,而重点不在它们怎么实现,在它们各自换来了什么、又带来了什么新问题。
36 / 66

知识点 5 · 总结

坏掉的是监督学习的两个前提:样本 IID 与标签固定

核心结论

在线 Q-learning 同时破坏两者:连续帧高度相关(不 IID);目标 r+γmax Q̂(s′,·;w) 含 w(标签在动)。

底层机制

两个病理 → 两个补丁,一一对应:经验回放修 IID,固定 Q 目标修标签固定。不是调参技巧。

常见误解

误解:「只是把表换成网络,算法照旧」。这是 L5 第一集那个错误模型的深度版本。

与你的考试

函数逼近那一条没有补丁 —— 三要素只被处理了两条,所以 DQN 仍无收敛保证(第八集算这笔账)。

37 / 66

知识点 5 · 检验

把 Q-learning 直接接上神经网络,相对监督学习坏掉的是哪两个前提?

知识点 7

6 · 经验回放:把在线数据变回一个数据集

38 / 66
t+0t+1t+2t+3t+4连续五帧几乎一样喂进去的是同一类画面
在线学习时,相邻样本几乎相同,而且都来自同一段轨迹。
讲解
Atari 的画面每秒六十帧,相邻两帧的差别只有几个像素。在线学习时,你连续喂给网络的就是这样一串几乎相同的样本。 更糟的是它们不只是相似,还都来自同一段轨迹:一段时间里你都在同一个关卡的同一个区域,网络看到的分布是那一小块。 随机梯度下降的收敛分析要求每次抽到的样本近似独立同分布。这里两条都不满足——既不独立,分布也在随时间漂。
39 / 66
回放是为了省数据存下来多用几次,样本效率高
样本效率确实提高了 —— 但那是副产品,不是它被发明的理由。
讲解
这个错误模型很常见,而且它说的事是真的:把转移存进缓冲,每条可以被重复采样很多次,样本效率确实显著提高。在真实机器人这类采样昂贵的场景里,这甚至是主要卖点。 但它不是经验回放在 DQN 里被引入的理由。上一集已经点名了它要修的病理:样本不 IID。 把主要作用和副产品搞反的实际代价是:你会以为「数据够多就不需要回放」。而事实是,即使数据无限,在线顺序采样的相关性问题依然存在——它是关于采样顺序的,不是关于数据量的。
40 / 66
D={(s,a,r,s′)}  |D|≈106 ⟶ minibatch
缓冲约一百万条训练时随机抽小批量
做法只有两句:把转移存进大缓冲,训练时随机抽小批量。
讲解
做法极其简单。每走一步,把 (s, a, r, s′) 这条转移存进一个缓冲区,DQN 用的大小约 10⁶ 条。训练时不使用刚刚那条,而是从缓冲里随机抽一个小批量。 效果是直接的:抽出来的这批样本来自缓冲里各个时期——不同的关卡、不同的策略版本、相隔很远的时间。相关性被打散,分布也比一小段轨迹稳定得多。 这就把在线学习变回了一个近似的监督学习问题:有一个固定的数据集,从里面独立抽样。监督学习的那条前提被修回来了。
41 / 66
✓主要作用打散时间相关性✓副产品每条转移重复使用✕新代价数据来自旧策略它让算法更「离策略」了
回放加重了三要素里的第三条:缓冲里的数据来自很旧的策略。
讲解
把账算全。 主要作用:打散时间相关性,把在线问题变回近似的监督学习。 副产品:每条转移被重复使用很多次,样本效率提高。 新代价,而且不小:缓冲里存着一百万条转移,最老的那些是很多个版本之前的策略产生的。也就是说,经验回放让算法变得更加离策略——而离策略正是致命三要素里的第三条。 这是一个真实的张力:为了修「样本不 IID」,你加重了「离策略」。DQN 能跑通不是因为这个张力被解决了,而是因为在实践中前者的收益大于后者的代价。这是经验判断,不是定理。 第八集会把这笔账和另一个补丁一起算完。
42 / 66
主要是去相关省数据是顺带代价:更离策略
指名反驳:主要目的是去相关,而它的代价是让第三条三要素更重。
讲解
指名回去:经验回放主要是去相关,样本效率是顺带的。把两者搞反会让你在「数据够多时是否还需要回放」上判断错误——需要,因为问题出在采样顺序而不是数据量。 最后按约定标一处讲座里的实质性错误,不是字幕坏损。 她在介绍优先回放时说,新进来的转移优先级设为 0。这是反的。在 Schaul 等人的原始做法里,新转移被赋予当前最大的优先级,目的正是保证它至少被回放一次;若按比例规则把优先级设成 0,那条转移将永远不会被抽中,等于白存。 顺带把一个记号重叠也说破:α 在这一讲里被用了两次——它既是 SGD 的学习率,又是优先回放里 P(i) ∝ p_i^α 的那个指数。两者毫无关系,读的时候要按上下文分开。
43 / 66

知识点 6 · 总结

经验回放主要是去相关,样本效率是副产品

核心结论

缓冲约 10⁶ 条转移,训练时随机抽小批量。抽出的样本跨越不同时期与不同策略版本,相关性被打散。

底层机制

它把在线学习变回近似的监督学习:有一个固定数据集,从中独立抽样 —— 正是上一集坏掉的第一个前提。

常见误解

误解:「回放是为了省数据」。搞反的代价:以为数据够多就不需要它。问题在采样顺序,不在数据量。

与你的考试

新代价:缓冲里有很旧策略的数据 ⟹ 算法更加离策略,加重三要素第三条。能跑通是经验判断,不是定理。

44 / 66

知识点 6 · 检验

关于优先经验回放,新进入缓冲的转移应该被赋予什么优先级?

知识点 8

7 · 固定 Q 目标:把非平稳回归变回平稳回归

45 / 66
target=r+γmaxa′Q^(s′,a′;w)
标签里是同一个 w
你朝目标走一步,目标自己也移了一步 —— 这不是回归该有的样子。
讲解
第二个病理:回归的目标里含着你正在更新的那个 w。 监督学习里,标签是外部给的、固定的,所以「朝标签走」这件事有意义。这里不是——你每更新一次权重,所有状态的预测值都变,而目标又是用这些预测算出来的。你在追一个随你移动的东西。 这正是 L5 第七集那个半梯度问题在实践中的形态。那里的结论是「它不是任何函数的梯度」;这里的表现是训练不稳定、值估计震荡甚至爆掉。 补丁的思路和上一集一样直接:把「标签固定」这个前提修回去。
46 / 66
目标动一点没关系反正大家都在往好的方向走
「都在变好」是假设,不是保证 —— L5 第七集说过没有下降保证。
讲解
这个错误模型的直觉是:预测在变准,目标是用预测算的,所以目标也在变准,两者一起收敛。 它在表格下大体成立——那里有压缩性兜底。而在函数逼近下,L5 第七集已经明确说过:没有单调下降的保证,因为这条更新根本不是任何函数的梯度。 所以「都在往好的方向走」是一个假设,而且是一个在这个设定下失去了依据的假设。 更具体的坏处是一个正反馈回路:网络因为泛化而把某个状态的 Q 估高 → 目标里的 max 把这个高值取出来 → 下一步把它推得更高。这个回路的转速,正比于目标更新的频率。
47 / 66
target=r+γmaxa′Q^(s′,a′;w−)w− frozen
另一份冻结的权重每 C 步才同步一次
做法:另存一份权重 w⁻,只用来算目标,隔一段时间才同步。
讲解
做法同样只有两句:再存一份权重 w⁻,目标一律用它来算;主网络的 w 照常每步更新;每 C 步把 w 复制给 w⁻ 一次。 效果是:在这 C 步之内,目标完全不动。于是这段时间里你面对的是一个标准的、平稳的监督回归问题——有固定标签,可以放心地用 SGD。 代价是目标过时:它用的是 C 步之前的网络。所以 C 是一个真实的取舍——太小则退化回原来的不稳定,太大则学得慢。 按约定标一处记号:她在这一段反复把目标写成 r + γV(s′),但被冻结的对象其实是 max_{a′} Q̂(s′,a′;w⁻)。口语里 V 与 Q 混用无伤大雅,但这是一个控制算法,那个 max 是它的全部要害,不能省。
48 / 66
✓C 步之内标签固定 · 平稳回归✓每 C 步目标跳一次✕代价目标过时 C 步把连续漂移换成离散跳变
它没有消掉非平稳,只是把连续的漂移换成了偶尔的跳变。
讲解
要准确地说清它做了什么:它没有消掉非平稳性,只是改变了非平稳的形状。 原来目标是每一步都在漂;现在它在 C 步之内完全不动,然后跳一次。总的变化量没变,但被集中到了稀疏的几个时刻。 这为什么有用:SGD 在固定目标上的行为是被理解的,而在连续漂移的目标上不是。把漂移攒成跳变,就让绝大多数更新步落在「良定义的回归」里。 同时它掐断了上一镜那个正反馈回路——网络估高了一个值,这个高值不会立刻回到目标里,要等到下次同步。回路的转速被降到了 1/C。 这也解释了 C 的取舍为什么是真实的:C 控制的正是这个回路的转速。
49 / 66
仍然是半梯度只是目标暂时不动
指名反驳:它不把半梯度变成真梯度,只是让标签在一段时间里固定。
讲解
指名回去:目标在动不是无害的,它驱动着一个正反馈回路;而固定 Q 目标把这个回路的转速降到了 1/C。 但要同样清楚地说它没做什么:它不把半梯度变成真正的梯度下降。L5 第七集那条结论原封不动——求导时依然假装目标是常数,只不过现在这个假装在 C 步之内是真的。 所以它不是一个数学上的修复,是一个让「假装」成立得更久的工程手段。这个区分很重要,因为它决定了你该期待什么:你会得到更稳的训练,但不会得到收敛保证。 下一集把三要素逐条对账,看看两个补丁到底覆盖了多少。
50 / 66

知识点 7 · 总结

固定 Q 目标把连续漂移换成了偶尔跳变

核心结论

另存一份 w⁻ 只用来算目标,每 C 步同步一次。C 步之内标签固定 ⟹ 这是一个标准的平稳回归。

底层机制

它掐断了「估高 → 目标变高 → 推得更高」这个正反馈回路,把回路转速降到 1/C。C 控制的正是这个转速。

常见误解

误解:「目标动一点没关系,都在变好」。L5 第七集已说明没有单调下降保证,这只是假设。

与你的考试

它不把半梯度变成真梯度 —— 只是让「假装目标是常数」这件事在 C 步内成真。记号:被冻的是 max_{a′}Q̂(s′,a′;w⁻) 不是 V(s′)。

51 / 66

知识点 7 · 检验

固定 Q 目标(目标网络)做到了什么?

知识点 9

8 · 两个补丁各治三要素的哪一条 —— 以及哪一条没治

52 / 66
✓函数逼近卷积网络✓自举Q-learning 目标✓离策略max 与行为不一致DQN 三条全占
L5 说三条凑齐就可能发散。DQN 一条不少。
讲解
把 L5 第九集的三要素拿来对 DQN 逐条点名。 函数逼近:卷积网络,占。 自举:目标是 r + γ max Q̂,占。 离策略:学的是贪心策略,走的是 ε-greedy,而且经验回放让数据来自更旧的策略——占,而且比普通 Q-learning 更重。 三条一条不少。按 L5 的结论,这是最危险的组合,Baird 反例就是它的实验室版本。 那两个补丁到底覆盖了多少?这一集把账算完。
53 / 66
两个补丁解决了不稳定所以 DQN 是安全的
它们解决了两个病理,而三要素只被处理了两条半。
讲解
DQN 跑通了 50 个游戏,于是很容易得出「问题已解决」的结论。 这个结论有一个具体的危害:它让你在自己的问题上不稳定时无从下手。如果你以为补丁已经解决了根本问题,那么发散就成了「玄学」;而如果你知道哪一条没被覆盖,你就知道该往哪里看。 下面逐条算账。结论会是:三要素里有一条完全没被碰过,而另一条反而被加重了。
54 / 66
函数逼近 → 无补丁自举 → 目标网络,减速离策略 → 回放,加重
逐条对账:一条没治,一条减速,一条反而更重。
讲解
逐条对账。 函数逼近:两个补丁一个都没碰它。网络还是网络,投影还是那个可能扩张的投影。L5 第九集那个「Π∘B 未必是压缩」原封不动。 自举:目标网络没有取消自举,只是把自举的反馈回路减速到 1/C。病还在,转得慢了。 离策略:经验回放加重了它——缓冲里存着一百万条来自旧策略的转移,分布偏移比不用回放时更大。 所以准确的说法是:两个补丁缓解了三要素带来的两个可观察症状,但三要素本身一条都没被移除。
55 / 66
✓症状被压住了✕病因三条都还在✕保证一条都没有能跑通 ≠ 有保证
DQN 没有收敛保证。它把发散的概率压到了工程上可接受。
讲解
结论要说得干脆:DQN 没有收敛保证,一条也没有。它做到的是把发散的概率压低到工程上可以接受。 这不是贬低它。在三要素齐备的情况下,没有任何方法有保证——这是 L5 证明过的。DQN 的贡献是找到了两个便宜且有效的缓解手段,从而让这条路第一次真的走通。 但「走通」和「有保证」之间的距离必须记清楚,因为它有直接的实践后果: 你的训练可能在跑了很久之后突然发散,而这不是 bug。遇到时该做的不是找代码错误,而是回到这张对账表上问:是哪一条在起作用?分布偏移变大了?目标同步太频繁了?网络的泛化把不该关联的状态关联起来了? 这就是把补丁理解成「对具体病理的回答」的实际价值。
56 / 66
两个症状被压住三个病因都还在这是工程成果
指名反驳:补丁治的是症状,三要素这个病因一条都没被移除。
讲解
指名回去:两个补丁解决的是「样本不 IID」和「目标非平稳」这两个症状,而致命三要素这个病因一条都没被移除;其中离策略那一条还因为经验回放而加重了。 这么说不是要否定 DQN——它是一个了不起的工程成果,而且它诚实地承认了自己是工程成果。 它也给出了一个可迁移的判断方法:看到一个深度 RL 方法说自己「解决了不稳定」时,先问它移除了三要素里的哪一条。答案通常是「一条也没有,只是缓解了症状」——除非它真的换掉了自举(比如用纯蒙特卡洛回报)或者真的变成了在策略。 最后一集看三个后续改动,它们各自在修前面哪一讲留下的病。
57 / 66

知识点 8 · 总结

补丁治的是症状,三要素一条都没被移除

核心结论

逐条:函数逼近 — 无补丁;自举 — 目标网络只把回路减速到 1/C;离策略 — 经验回放反而加重。

底层机制

两个补丁对付的是「样本不 IID」与「目标非平稳」这两个症状,不是三要素这个病因。

常见误解

误解:「补丁解决了不稳定,所以 DQN 安全」。危害是:自己的问题发散时无从下手,只能当玄学。

与你的考试

DQN 没有收敛保证,训练可能在很久之后突然发散 —— 那不是 bug。判断方法:问它移除了三要素里的哪一条。

58 / 66

知识点 8 · 检验

经验回放对致命三要素里的「离策略」那一条起什么作用?

知识点 10

9 · 后续三个改动,各自回头修前面哪一集的病

59 / 66
Double DQN优先回放dueling
讲座末尾给了三个改动。它们不是并列的三个 trick。
讲解
讲座最后提了三个对 DQN 的改动:Double DQN、优先经验回放、dueling 网络。 它们通常被当作一个「改进清单」来记——每个都能提点分数,实现细节各不相同。 这一集用另一种方式组织它们:每一个都在回头修前面某一讲留下的一个已命名的病。这么看的话,三个改动不需要单独记,它们各自的动机在前面已经建立好了。
60 / 66
三个独立的工程改进各自提点分数,背下来就行
它们各自对应前面一集的一个具体病理 —— 不需要单独记。
讲解
把它们当成三个独立的技巧,是最省事也最没用的读法:你会记住名字和大致做法,但说不出什么时候该用哪一个。 更有用的读法是问每一个:它在修哪个病? 三个答案都在前面几讲里。下面逐个对上。
61 / 66
Double DQN ← 最大化偏差优先回放 ← 样本效率dueling ← Q = V + A
三个改动,三个已经讲过的病。
讲解
逐个对上。 Double DQN ← L4 第八、九集的最大化偏差。Q-learning 的目标里有 max,而 L4 实测过:每个 Q̂ 无偏,E[max Q̂] 却系统性乐观(n=10 时 +0.178,真值 0)。解法也是 L4 给过的:把选动作和评估动作解耦——用在线网络 w 选出 argmax 的动作,用目标网络 w⁻ 报告它的值。DQN 恰好已经有两份权重,所以这个改动几乎不要钱。 优先回放 ← 样本效率。均匀抽样浪费在已经学好的转移上;按 TD 误差的大小加权抽样,让「意外的」转移被多看几次。注意它修的是效率,不是稳定性。 dueling ← Q(s,a) = V(s) + A(s,a)。把网络拆成一条估 V(s) 的流和一条估优势 A(s,a) 的流,再合起来。
62 / 66
Q^(s,a)=V^(s)+A^(s,a)
多数状态下动作无关紧要V 那一路可共享学习
dueling 的理由:很多状态下选哪个动作都差不多,但 V(s) 差别很大。
讲解
dueling 的动机值得单独说,因为它是一个关于数据效率的结构性观察。 在很多状态下,选哪个动作几乎无所谓——比如赛车游戏里前方空旷时,左右微调都没区别。但这些状态的 V(s) 可以差很多(离终点远近不同)。 普通的 Q 网络必须为每个动作分别学出一个几乎相同的数;而 dueling 把共同的那部分抽出来放进 V(s) 这一路,所有动作共享它的学习,只有真正有区别的部分留给 A(s,a)。 按约定标一处字幕:优势那一路被转录成「Q of s. One minus V of s」,那其实是 Q(s,a₁) − V(s)、Q(s,a₂) − V(s) …… 被断错了句。 (实现上还需要对 A 做一个约束,例如减去它在动作上的均值,否则 V 与 A 可以任意平移——讲座没有展开,本片也只标出这一点。)
63 / 66
✓Double修偏差(L4)✓优先回放修效率✓dueling修数据利用三条都没碰函数逼近
指名反驳:三个改动各有对应的病 —— 但没有一个碰三要素。
讲解
指名回去:三个改动不是并列的 trick,它们各自对应一个已命名的病——最大化偏差、样本效率、数据利用。知道病是什么,就知道什么时候该用。 但要把上一集那条账接上:三个改动没有一个碰到致命三要素。它们让 DQN 更准、更快、更省数据,而收敛保证仍然是零。 这也是这一讲最该带走的一句话。深度强化学习的进展,很大一部分是这种形态:把已命名的病一个个压住,而不是移除那个根本的不可能性。知道哪些是压住的、哪些是解决的,是判断一篇论文该怎么读的基本功。 最后补两处出处,因为讲座这里的年份和名字都有点松:TD-Gammon 被放在 1994(Tesauro 的结果是 1992 与 1995);DeepMind 的 Atari 工作被反复说成「2014 年前后」,实际是 2013 年 12 月的工作坊论文与 2015 年 2 月的 Nature 论文——她后面自己correctly 引了 2015 那篇。另外字幕把 Atari 的动作数说成「80 个摇杆位置」,那是 18 的坏损,与她自己反复说的「4 到 18 个动作」一致。
64 / 66

知识点 9 · 总结

三个后续改动,各修前面一集的病 —— 但都没碰三要素

核心结论

Double DQN ← L4 的最大化偏差(用 w 选动作、用 w⁻ 报值,两份权重本来就有);优先回放 ← 样本效率(按 TD 误差加权);dueling ← Q=V+A,让多数状态下无差别的动作共享 V 的学习。

底层机制

把每个改动问成「它在修哪个已命名的病」,就不需要单独记 —— 动机在前面几讲已经建立好了。

常见误解

误解:「三个独立的工程改进,背下来就行」。这样你说不出什么时候该用哪一个。

与你的考试

三个都没有移除致命三要素。深度 RL 的进展常是这种形态:把已命名的病压住,而非移除根本的不可能性。

65 / 66

知识点 9 · 检验

Double DQN 相对 DQN 改的是什么,它修的是前面哪一讲的病?

知识点 11

完

66 / 66
讲解
回头看这九集,承重的是三件事。 第一,CNN 在这里的角色是参数削减,不是「更聪明」。1000×1000 的图像,一个全连接单元要 10⁶ 个权重;一个 5×5 的共享滤波器只要 25 个——四万倍的差距,而且顺带白送了平移不变性。这是一个关于图像结构的假设,不是关于智能的。 第二,两个补丁各自对着一个具体的病理。经验回放对付的是「连续样本高度相关、不是 IID」;固定 Q 目标对付的是「目标里含 w,每步都在动」——那正是 L5 第七集指出的半梯度问题。把它们当成调参就什么都学不到。 第三,也是最该记住的:三要素里的函数逼近那一条,两个补丁都没治。DQN 仍然没有收敛保证,它只是把发散的概率压低到工程上可接受。L5 结尾那句「稳定还不够」在这里要再加一句:能跑通也不等于有保证。 下一讲换一个方向。前六讲都假定奖励函数是给定的;L7 处理奖励本身很难写出来的情形——从示范里学,而那里的核心问题是误差怎么沿时域累积,与 L1 最后那一集是同一个形状。