跳到主要内容

回头质疑梯度本身

1. 这一章讲什么

三件事: 一个两行的例子,让你亲眼看到梯度指错了方向; 所有优化器其实是同一条链上依次丢东西的产物,而丢到最后丢掉的那样东西有名字; 以及把它补回来之后,同一个起点走十步能走多近。

它在全书链条里的位置:这是第三问,也是全书最后一次「回头质疑」。 第 05 章的翼型、第 09 章的展开、第 13 章的扩散——每一次训练用的都是同一套梯度下降, 而这件事从头到尾没有被查过。

⚠️ 一处对原书章序的改动,交代清楚: 原书把优化器那一节放在第 3.8 节(全书前面),但它自己在开头标了 「这是一章深入探讨,可以先跳过,不过强烈推荐在读尺度不变与求逆之前读」1我们按书自己的建议,把那一节移到这里,和它真正服务的内容合并。 这是我们对原书章序唯一的一处实质改动。

2. 顶层全景

现象:从 [3, 3] 出发要去原点,梯度是 [6, 108]
一个方向压倒性地大,一点都不对角


诊断:常规更新对不同分量的缩放不但没补偿,施加的还是这个缩放的平方


把所有优化器排成一条退化链(每一档比上一档少一样东西):

① 完整曲率 ──────────────────────── 牛顿法
│ 拿不到(曲率是一整张表,按参数量平方增长)

② 拿历史步长去猜 ─────────────────── 拟牛顿(BFGS 是代表)
│ 限定成平方损失,曲率就能用一阶量近似

③ 曲率 ≈ 雅可比的平方 ────────────── Gauss-Newton
│ 这个矩阵还是太大,只留对角线

④ 只留对角线,再开个方 ───────────── Adam ← 你天天在用的那个
│ 连对角线也当成 1

⑤ 梯度下降

丢到最后丢掉的那样东西:求逆


补回来的最彻底一档:逆仿真器
而仿真器的逆通常就是「把时间倒过来跑」

这张图在讲什么: 中间那条链是这一章的骨架。 它的读法不是「有五种优化器可选」,而是「它们是同一个东西被削了四刀之后的五个截面」—— 每一刀削掉的都是求逆的一部分。

3. 先看现象:梯度指的方向不对角

结论先行:不讲任何理论,先看一个数。

书造了一个尽可能简单的例子2:

一个二维的输入,一个假装是物理的函数,再加一个平方误差。 那个函数只做一件事:把第二个分量平方。第一个分量原样放行。 起点取 [3, 3],目标是原点。

对我们人来说答案一目了然:沿着对角线直走到 [0, 0]。 那梯度指哪儿?

书打印出来的结果:∂L/∂x = [6, 108]3

这个数要有参照物:第二个分量是第一个的十八倍。 而理想的方向是 [−1, −1] —— 两个分量一样大。

书自己的话3:

虽然我们知道该沿对角线朝原点走,但这个梯度一点都不对角 ——它沿第二个方向有一个强烈占优的分量,值是 108。

这就是全章要解释的那件事:梯度没有错(它确实指向损失下降最快的方向), 但它被两个分量之间的尺度差扭曲了。

4. 为什么物理问题一定会撞上这件事

结论先行:上一节那个「把第二个分量平方」不是人为刁难,它是物理的常态。

书用一个更简单的版本讲了机理:让那个函数给第二个分量乘一个倍数4

倍数损失的地形长什么样梯度指哪儿
= 1径向对称,两个分量行为一样直指原点
变大远离最小值的地方,沿第二个方向变陡沿第二个方向的分量疯长

倍数变大之后会发生什么,书讲得很具体: 为了不让优化炸掉,只能选一个更小的步长;而这又拖慢了沿第一个方向的进展。 结果是:先沿第二个方向冲到接近坐标轴,然后极其缓慢地往左爬4

然后是那句最重的话4:

更糟的是,常规更新实际上施加的是这个缩放的平方!

这句话的推导书也给了,一行就说清5: 更新量按倍数走,而损失的变化按「导数的平方」走——所以倍数进来一次,平方一次。

后果被书写成一对症状,而这对症状读者多半听过名字:

函数类型会发生什么名字
敏感的(输入动一点,损失变很多)更新量反而,损失变化更大梯度爆炸
不敏感的(输入动很多,损失几乎不变)更新量,优化停住梯度消失

为什么这一条在物理问题上躲不掉,书给的理由一句话4:

物理过程几乎总是给不同分量引入不同的缩放: 物理状态里有些变化很敏感、会产生巨大的响应,另一些几乎没有影响。

书还堵死了一条常见的出路5: 深度学习里可以靠归一化和调步长在一定程度上对抗这件事, 但这些工具在优化物理仿真时用不上—— 在最后一个求解器步之外的任何地方做归一化,都会破坏仿真的状态。

5. 曲率:坡度只说了方向,没说走多远

结论先行:要修这件事,需要一个梯度里没有的信息。

梯度告诉你的是坡度:往哪边下降最快,以及有多陡。 它没告诉你的是:这个坡还要下多远才到底。

「坡度自己变得多快」这件事,叫曲率(书里的记号是 Hessian)。

为什么知道了曲率就够:任何一个最小值,凑近了看都长得像一条抛物线。 而一条抛物线,只要知道当前的坡度和曲率,就能一步算出谷底在哪6

这个「一步跳到谷底」的做法就是牛顿法,它是书这条链的起点。

它有多好:书证明了它是二次收敛的—— 离最优点足够近之后,每走一步,到最优点的距离会按「上一次距离的平方」缩小6(平方缩小的意思:差 0.1 的话,下一步差 0.01,再下一步差 0.0001。)

但书紧接着给了一个警告,而这个警告本身就是下一节的动机6: 这个二次收敛前面还挂着一个系数,那个系数要是大于 1,它就会发散。

6. 加一个可调的步长,能证明收敛——但那个证明帮不上忙

结论先行:这是全章最典型的一次「理论上成立、实践中没用」。

修法很直接:别一步跳到底,给这一步乘一个可调的比例。 书管它叫自适应步长7

书完整证明了:牛顿法配上自适应步长可以证明收敛。 ⚠️ 但那个证明需要一个前提:损失函数的曲率满足一个「变化不能太快」的条件, 而那个条件里带着一个常数(书用的名字是 Lipschitz 常数)7

判断(我们的,不是书里的): 这个证明在深度学习里帮不上忙, 因为那个常数在实践中根本不知道。 收敛保证的形式是「只要步长小于某个由这个常数决定的值就一定收敛」, 而你算不出那个值,就只能回去手调步长——保证等于没有。 如果错,会错在: 如果某类网络的那个常数可以被便宜地估出上界 (有些工作在做这件事),那这个保证就变成可用的了。 判据是:你能不能在训练前算出一个具体的步长上限? 算不出,这个保证就只是纸面的。

书自己给出的、真正致命的那一条是别的7:

它要求曲率作为核心配料。而不幸的是,曲率在实践中极难拿到。 这是一个真正的拦路虎,也正是接下来那些方法的动机。

为什么难拿:曲率不是一个数,是一整张表——参数两两之间各要一个数。 所以它的规模按参数量的平方增长;求值贵,求逆更贵8

7. 那条退化链:每一档丢掉了什么

结论先行:接下来这几个名字不是并列的选项,是同一个东西被依次削薄的结果。

书自己的定位很明确:它从最经典的牛顿法出发,推出几个广泛使用的变体, 最后绕回深度学习的优化器9

第一刀:拿不到曲率,那就猜。

做法是从一个最粗的猜测出发(把曲率当成单位矩阵), 然后每走一步,用「这一步实际走了多远、坡度实际变了多少」去修正这个猜测10这一族叫拟牛顿方法,书点了两个名字:Broyden 方法,以及在它基础上加了几处重要改进的 BFGS。

它的好处书也说了:永远不必算完整的曲率表10

第二刀:限定成平方损失,曲率就能用一阶量算出来。

如果损失恰好是「某个东西的平方」(而机器学习里它经常是), 那么曲率里有一项可以直接扔掉,剩下的那一项只用到一阶导数11这个做法叫 Gauss-Newton。

书对它的读法最要紧11:

这个更新本质上是「拿雅可比的近似逆去走一步」。 这个逆让所有参数得到大致相等的步长, 也因此提供了一块我们后面还会回来的积木。

⚠️ 记住这半句:「雅可比的近似逆」。它是第 8 节那个答案的第一次露面。

第三刀:那个矩阵还是太大,只留对角线——这一档得到的就是 Adam。

书讲得非常直白12: 即使是 Gauss-Newton 那个最简单的近似,也要求把一个可能巨大的矩阵求逆; 对神经网络的参数量来说不可行。那怎么再简化?Adam 的答案是:只留对角线。

书还点了一个容易被忽略的细节:Adam 并不真的做完整的求逆, 它取的是逐分量的平方根12结果是:它的更新大致就是「梯度的符号」—— 也就是沿所有维度走一个固定大小的步**。**

第四刀:连对角线也当成 1,就是梯度下降13

四刀砍完的对照表:

名字这一档手上还有什么
牛顿法完整的曲率表
拟牛顿(BFGS)用历史步长猜出来的曲率
Gauss-Newton雅可比的近似逆(只在平方损失下成立)
Adam上一档只留对角线、再开个方
梯度下降什么都不剩,曲率当成 1

8. 丢掉的那样东西叫求逆

结论先行:这一节是全章的题眼,而书把它写成了一句很短的话。

书的原话13:

有意思的是,没有任何形式的求逆,梯度本身的形状虽然刚好能加到参数上, 但它「活在 1/x 的空间里,而不是 x 本身」。

这句话得摊开讲,否则会被当成修辞。

想一想单位。 假设你要优化的两个量一个是长度(米),一个是时间(秒)。 损失对长度的导数,单位是「损失 / 米」;对时间的导数,单位是「损失 / 秒」。 你把它们直接加到「米」和「秒」上——单位对不上,而且两个还对不上得不一样。

书正是这么论证的14:梯度下降的更新按这些单位的倒数缩放; 一个学习率能修正一次这种偏差,但两个参数单位不同时, 不存在一个学习率能同时给两者正确的单位。

而上一节那条链里,每一档「classic」的方法,都以某种形式带着雅可比的逆。 梯度的转置和雅可比的逆形状一样、意义完全不同——这就是那句「活在 1/x 空间里」。

书给这一条的定位很重13:

这个缺少求逆的问题,在涉及物理的问题上尤其突出, 因此也是这一章最关键的带走点之一。

9. 尺度不变性,以及一个必然的误读

结论先行:先给目标一个名字,再堵掉一个坑。

书用一个专门的框给了定义15:

一个尺度不变的优化,对同一个函数的不同参数化(也就是不同的缩放),会给出相同的结果。

落到第 4 节那个玩具上:不管那个倍数取多少,优化的轨迹都应该一模一样。 这就是要的性质。

然后是那个必然的误读,书自己怕人读岔,特意写了一句15:

求逆当然不等于取负。取负的梯度肯定会往错的方向走。 我们要的更新仍然要指向损失下降的方向,只是要顾及不同尺度的维度。

读法:我们不是要反着走,是要换一把尺子再走。

10. 四种更新的对账

书把四种更新放在同一张表上比,而这张表是这一部分的骨架16⚠️ 中间两档只需要挂名,力气全在两头。

梯度下降拟牛顿逆梯度逆仿真器
单位对不对❌ 参数在分母,单位是反的✅ 步长可以无量纲自动和参数同单位,不需要任意的学习率
对函数敏感度的反应❌ 损失按导数的平方变;敏感的爆炸,不敏感的消失✅ 逆曲率把缩放抵消掉✅ 更新按缩放的倒数
接近最优时变慢(梯度趋零)更快(地形越平,步子越大)✅ 仍能推进
函数复合时,中间空间的变化能不能提前知道复合函数的曲率带非线性项(至少到一阶)
主要代价便宜曲率按参数量平方增长;接近不可逆时数值不稳;要求二阶可微(而 ReLU 的二阶导是零)需要雅可比的逆——只对方阵有定义,而且方的也可能不可逆需要写出一个局部逆求解器

第四行是这张表最容易被略过、也最要紧的一行,书专门解释了它17:

拟牛顿之所以做不到,是因为一个复合函数的曲率里带着内层雅可比的平方**; 所以在整条链算完之前,任何一个中间空间的更新量都是未知的。** 而逆梯度那一档做得到:中间空间的变化和它们各自的依赖无关(至少到一阶)。

最后一档「逆仿真器」是书自己称的「理想设定」18:

应用这个更新时,它会精确地产生我们想要的输出变化, 尽管那个物理函数可能是高度非线性的。

它和逆梯度的关系:到一阶两者相等,但逆仿真器多带了非线性项18

11. 局部逆:「求平方」没有全局逆,但有局部逆

结论先行:上一节那个「需要逆」听起来像天方夜谭,这一节说它没那么难。

先说为什么「全局逆」不现实。 书举的例子正是第 01 章那条抛物线: 「求平方」这个函数没有全局逆,因为每个输出对应正负两个解19

做法是换一个更弱的要求:局部逆。 它只需要在当前这个点附近成立,不需要对所有取值都成立19

对「求平方」来说,局部逆就是:从当前的猜测出发,选离它最近的那个解。

书为什么强调这一条,理由直接连回第 01 章20:

在 x 空间里可能有非常不同的位置,产生非常相似的输出。我们要找的是离当前猜测最近的那个。 这对在多模态的设定里得到行为良好的解很重要—— 我们不希望解流形变成一堆散落的点。

读法:这是全书第三次处理「一个输入多个答案」这件事,而且这一次的处理方式最直接—— 不平均(第 01 章那种失败),不采样(第 13 章那种做法),而是每次都挑最近的那一支**。**

还有一条让人安心的保证: 对可微函数,只要雅可比非奇异(也就是它可逆、没有被压扁的方向), 逆函数定理就保证局部逆存在21书还补了一句很实用的:逆雅可比本身就是一个局部逆函数——只是它只到一阶,不是最准的那个。

12. 一个漂亮的物理论证:仿真器的逆就是时间反演

结论先行:这一节回答「逆仿真器凭什么写得出来」,而书给的论证很物理。

书的话22:

仿真器的逆函数,通常就是时间反演的物理过程。 有些情况下,把正向仿真器的时间轴翻过来,就能给出一个够用的全局逆仿真器。

然后是那个更漂亮的论证23:

只要物理过程不销毁信息,雅可比就是非奇异的。 事实上人们相信,我们宇宙里的信息不会被销毁—— 所以只要我们对状态有完美的知识,任何物理过程理论上都可以被反演。 因此,期待逆仿真器在许多场景里能被写出来,并非不合理。

但书立刻给了三条限制,而这三条是这个论证的边界22:

限制具体是什么
累积的数值误差仿真器实践中会销毁信息
刚性系统系统里不同部分的变化速度差得太远,反着推会失控
格式不够准第 03 章那种一阶、二阶的离散格式,对多时间步的流体仿真不够用

第三条最实在:它说的是「这条路要求你的正向仿真器本身足够精确」, 而书前面用的那些简单格式达不到。

13. 主走查:同一个起点上,五种更新各走第一步

主走查第 1 步(设定): 第 3 节那个例子—— 第一个分量原样放行,第二个分量平方;损失是两者的平方和;起点 [3, 3]2算出来:中间那个量是 [3, 9],损失 90,梯度 [6, 108]3

主走查第 2 步(退化链的五档,在同一个点上并排看):

这一步的更新量读法
⑤ 梯度下降(步长 0.01)[−0.06, −1.08]第二个分量是第一个的 18 倍
③ Gauss-Newton(「雅可比的近似逆」)[−0.167, −0.0093]反过来了:第一个分量是第二个的 18 倍
④ Adam(再只留对角线、开个方 → 走符号)[−0.01, −0.01]完全对角
① 牛顿法(步长 1/3)[−1, −0.333]曲率是 [2, 108],把 108 那一档压掉了
逆仿真器(同样的步长)[−1, −0.551]走到 [2, 2.449] —— 直接从「想要的输出」倒推回来的

⚠️ 这里只有梯度下降那一行的步长和牛顿法那一档是书给的; Gauss-Newton 和 Adam 在这个点上的具体更新量,是我们照书里的算法为演示算的, 书没有报这两个数。逆仿真器那一行也是我们照书给的更新式算的。

Adam 那一行有一个陷阱,必须当场说破: 它在这个点上恰好完全对角,看起来像是最理想的——但那是巧合。 因为「走符号」抹掉了全部的尺度信息,而这个起点恰好在对角线上。 换一个起点(比如 [3, 1]),理想方向不再是等分量的,而 Adam 仍然走等分量。

主走查第 3 步(各走 10 步之后落在哪)24:

方法10 步后的位置到原点的距离
梯度下降[2.451, 0.962]2.63
牛顿法[0.052, 0.924]0.93
逆仿真器[0.084, 0.504]0.51

⚠️ 步长是特意选的,让三者的第一步幅度大致相同,好公平地比轨迹25

主走查第 4 步(第一步和理想对角线贴得多近): 书量了一个「和对角线的贴合度」,越大越好—— 梯度下降 1.054,牛顿法 1.265,逆仿真器 1.35626逆仿真器最大,确认了它的第一步最接近理想方向。

14. 全章最有洞察力的一段:去中间那个空间里看

结论先行:同样的三条轨迹,换一个地方看,差别的原因才露出来。

书的提醒27:

要理解这些方法的行为和差别,关键是记住: 我们面对的不是一个直接从输入映射到损失的黑箱,中间还有一些空间在起作用。 这里只有一个中间空间,但在深度学习里我们可能有大量潜空间, 而我们对它们有一定的控制权。

主走查第 5 步(把三条轨迹画到中间那个空间里)28:

方法在中间空间里的轨迹
梯度下降很次优
牛顿法好一些,但仍然明显是弯的
逆仿真器一条笔直的、朝原点的对角线

为什么梯度下降在这里必然次优,书给的解释是这一章最该被带走的一句29:

我们拼接的是雅可比,走的是局部上应该降低损失的方向; 但中间空间的位置由输入决定—— 所以在真正拿到更新之后的那个点之前,我们不知道自己会落在中间空间的哪里。

书还补了一句更一般的: 对一般的神经网络来说,在真正做完一次梯度下降更新之前, 我们不知道会落在哪些潜空间的点上。

而牛顿法也没好到哪儿去,理由同源29: 一阶导数和二阶导数都是近似,所以一次更新实际产生的中间状态, 在整条链算完之前仍然是未知的。

书最后点了一句适用范围,它把这件事从数学拉回工程28: 中间空间的行为尤其重要——当它们不只是抽象的潜空间、而是有真实物理含义的时候。

15. 没有解析逆怎么办

结论先行:这套东西不只在「能手写出逆」的玩具上成立。

书给的答案很朴素:拿不到解析的逆,就用优化的办法数值地求那个局部逆30它用了一个现成的 BFGS 实现来演示。

结果:和解析逆那一版的差别在浮点精度的量级上。

这一节的分量:它把第 10 节那张表里「需要写出一个局部逆求解器」这条代价, 从「不可能」降级成了「更贵」。

16. 主走查合起来看

发生了什么具体的数
1设定第二个分量平方,损失是平方和,起点 [3, 3]
2现象中间量 [3, 9],损失 90,梯度 [6, 108]——第二个分量是第一个的 18 倍
3梯度下降走一步[−0.06, −1.08]
4Gauss-Newton 走一步[−0.167, −0.0093](我们算的)——比例反过来了
5Adam 走一步[−0.01, −0.01](我们算的)——完全对角,但那是这个起点的巧合
6牛顿法走一步[−1, −0.333];曲率是 [2, 108]
7逆仿真器走一步[−1, −0.551],落到 [2, 2.449]
810 步后梯度下降 2.63 / 牛顿法 0.93 / 逆仿真器 0.51
9第一步的贴合度1.054 / 1.265 / 1.356(越大越好)
10中间空间里的轨迹梯度下降很次优;牛顿法仍然弯;逆仿真器笔直的对角线

第 2、8、9 行的数是书里的输出;第 3 到 7 行里, 梯度下降和牛顿法的步长是书给的,Gauss-Newton 和 Adam 那两步是我们照书里的算法算的—— 这两个数不是书里的数值,算法本身是书里的。

17. 作者的判断与证据

书里给了证据的:

说法证据
梯度在这个例子上不对角打印出来的 [6, 108]3
三种方法的差距10 步后的 2.63 / 0.93 / 0.5124
逆仿真器的第一步最接近对角线贴合度 1.054 / 1.265 / 1.35626
牛顿法二次收敛一段完整的推导(用拉格朗日展开,没有截断)6
自适应步长可证收敛一段完整的推导7
数值求逆和解析逆几乎无差一次 BFGS 求逆的实验30

作者的判断:

说法为什么算判断
「物理过程几乎总是给不同分量不同的缩放」一句领域经验,没有统计4
「期待逆仿真器能被写出来并非不合理」一个物理直觉论证,不是构造性的证明23
「即使雅可比奇异,我们通常也能找到好的局部逆」一句「通常」,没有给方法也没有给条件21
Adam 那一档在这条链上的位置书自己的重构,不是 Adam 原作者的推导路径12
「这个缺少求逆的问题在物理问题上尤其突出」立场,证据推给这一章之后的实验13

判断(我们的,不是书里的): 这一章最该被带走的不是「用逆仿真器」这条建议 ——大多数人手上根本没有可逆的仿真器—— 而是那条链本身:你用的优化器处在链的第几档,决定了你丢掉了什么。 知道 Adam 是「Gauss-Newton 只留对角线再开方」之后, 「Adam 在物理问题上为什么调不好」就不再是玄学:它对每个参数只保留了一个标量的缩放估计, 而物理问题的缩放差异是跨参数耦合的。 如果错,会错在: 如果某个问题的缩放差异恰好是逐参数独立的(不同参数之间没有耦合), 那么对角线近似就够用了,Adam 不会比完整求逆差多少。 判据是:把雅可比算出来,非对角元素的量级和对角元素比,差多少?

18. 边界与局限

  • 全章的实验只有一个二维的玩具函数。 真实的物理系统上这些差距有多大,这一章没有给;
  • 那条退化链是书的重构。 它读起来非常顺,但历史上这些算法不是按这个顺序被提出的, 书也没有声称是;
  • 逆梯度那一档全书只有理论,没有实验——它被明确定位成「一个中间步骤」31;
  • 牛顿法那个收敛证明依赖凸性和光滑性,而深度学习的损失地形两条都不满足;
  • 「曲率难拿」只给了「按参数量平方增长」这一条理由, 没有给任何具体规模下的实测代价;
  • 局部逆「即使雅可比奇异通常也能找到」这句没有下文;
  • 时间反演那个论证只对「不销毁信息」的过程成立, 而书自己列的三条限制(数值误差、刚性系统、格式不够准)恰好覆盖了大部分真实仿真;
  • 这一章没有任何网络。 把这套更新装进网络训练是下一章的事。

19. 可带走的

  1. 现象先记住:从 [3, 3] 出发要去原点,梯度是 [6, 108] ——一个方向压倒性地大,一点都不对角;
  2. 病因不是梯度算错了,是不同分量的尺度差没有被补偿; 而常规更新施加的还是这个缩放的平方;
  3. 两个症状有名字:敏感的方向得到过大的更新(梯度爆炸), 不敏感的方向得到过小的更新(梯度消失);
  4. 物理问题躲不掉这件事,因为物理过程几乎总是给不同分量不同的响应强度;
  5. 深度学习那套解法在这里用不上: 在最后一个求解器步之外做归一化,会破坏仿真的状态;
  6. 曲率是「坡度自己变得多快」。 知道了它就能一步跳到谷底,这就是牛顿法;
  7. 它二次收敛,但曲率是一整张表,规模按参数量的平方增长——拿不到;
  8. 所有优化器是同一条链上依次丢东西的产物: 完整曲率 → 用历史步长猜 → 限定成平方损失(得到雅可比的近似逆)→ 只留对角线(这一档就是 Adam)→ 连对角线也当成 1(梯度下降);
  9. 丢到最后丢掉的那样东西叫求逆。 梯度的形状能加到参数上,但它「活在 1/x 的空间里」——单位就对不上;
  10. 求逆不等于取负。 取负会往错的方向走;要的是换一把尺子再往下走;
  11. 尺度不变的意思是:同一个问题换一种参数化,优化轨迹应当一模一样;
  12. 不需要全局逆,局部逆就够:从当前猜测出发,选最近的那个解。 这也正是避免多个答案被拉平的关键;
  13. 仿真器的逆通常就是时间反演; 只要物理过程不销毁信息,雅可比就非奇异——所以写得出来并非不合理;
  14. 同一个起点走 10 步:梯度下降还剩 2.63,牛顿法 0.93,逆仿真器 0.51;
  15. 梯度下降次优的真正原因要去中间空间里看: 在真正做完这次更新之前,我们不知道自己会落在中间空间的哪个点上;
  16. 拿不到解析逆时,可以数值地求局部逆,结果和解析版只差在浮点精度上。

20. 原文地图

主题原书章原文位置
这一节是深入探讨、建议在读求逆之前读3.8 Optimization and Convergence 的 Note 框text/03-p41-60.txt:315(搜「Deep-dive Chapter」)
从牛顿法出发,绕回深度学习优化器3.8 同上text/03-p41-60.txt:307(搜「most classic optimization algorithm」)
牛顿法与二次收敛3.8.3 Newton's methodtext/03-p41-60.txt:359(搜「approximating the function we」) · text/03-p41-60.txt:393(搜「quadratic convergence」)
自适应步长、可证收敛、曲率难拿3.8.4 Adaptive step sizetext/03-p41-60.txt:354(搜「Lipschitz-continuity」) · text/03-p41-60.txt:485(搜「provably converges」)
Broyden 与 BFGS3.8.6–3.8.7text/03-p41-60.txt:495(搜「very rough guess」) · text/03-p41-60.txt:523(搜「BFGS algorithm」)
Gauss-Newton 与「雅可比的近似逆」3.8.8 Gauss-Newtontext/03-p41-60.txt:543(搜「restricting」) · text/03-p41-60.txt:564(搜「approximate inverse of the Jacobian」)
Adam 只留对角线、再开方3.8.10 Adamtext/03-p41-60.txt:579(搜「with a diagonal approximation」) · text/03-p41-60.txt:592(搜「component-wise square root」)
梯度下降与「活在 1/x 空间里」3.8.11 Gradient Descenttext/03-p41-60.txt:605(搜「we now take the final step」) · text/03-p41-60.txt:609(搜「lives」)
玩具例子、缩放、「施加的是平方」36.1 The crux of the mattertext/19-p361-380.txt:457(搜「toy」) · text/19-p361-380.txt:481(搜「apply the square of the scaling」)
求逆不等于取负、尺度不变的定义36.1 同上text/19-p361-380.txt:485(搜「does not mean negation」) · text/19-p361-380.txt:491(搜「A scale-invariant optimization」)
梯度下降的单位、敏感度、接近最优36.3 Gradient descenttext/19-p361-380.txt:537(搜「different physical units」) · text/19-p361-380.txt:559(搜「exploding gradients」) · text/19-p361-380.txt:568(搜「necessarily becomes flat」)
拟牛顿的账与它的死角36.4 Quasi-Newton methodstext/19-p361-380.txt:596(搜「much faster convergence」) · text/19-p361-380.txt:601(搜「still depends on all functions before」) · text/19-p361-380.txt:621(搜「twice-differentiable」)
逆梯度的定义与好处36.5 Inverse gradientstext/19-p361-380.txt:636(搜「inverse gradients」) · text/19-p361-380.txt:657(搜「same units as the parameters」)
逆仿真器、局部逆、「理想设定」36.6 Inverse simulatorstext/20-p381-400.txt:18(搜「local inverse」) · text/20-p381-400.txt:29(搜「potentially highly nonlinear function」) · text/20-p381-400.txt:7(搜「ideal」)
「求平方」没有全局逆但有局部逆36.8.2text/20-p381-400.txt:97(搜「Non-injective functions can be inverted」) · text/20-p381-400.txt:100(搜「inverse function theorem」)
时间反演与「信息不被销毁」36.8.3 Time reversaltext/20-p381-400.txt:107(搜「time-reversed physical process」) · text/20-p381-400.txt:60(搜「does not destroy information」)
问题设定与起点37.1 Problem formulationtext/20-p381-400.txt:163(搜「two-dimensional input space」)
梯度 [6, 108]37.2text/20-p381-400.txt:260(搜「Gradient for full」) · text/20-p381-400.txt:264(搜「strongly dominant component」)
梯度下降 10 步后 2.6337.4text/20-p381-400.txt:304(搜「still has a fair distance」)
牛顿法 10 步后 0.92537.5text/20-p381-400.txt:371(搜「Newton」)
逆仿真器 10 步后 0.5137.6 Inverse simulatorstext/20-p381-400.txt:444(搜「distance of only 0.51」) · text/20-p381-400.txt:476(搜「Diagonal lengths」)
中间空间里的三条轨迹37.7 y Spacetext/20-p381-400.txt:563(搜「very sub-optimal trajectory」) · text/20-p381-400.txt:567(搜「actual physical meanings」)
结论四条37.8 Conclusionstext/20-p381-400.txt:574(搜「unbalanced」)
数值地求局部逆37.9 Approximate inversionstext/20-p381-400.txt:583(搜「not readily available」)

Footnotes

  1. 出处:第 3.8 节的 Note 框(p.38)第 315 段 (text/03-p41-60.txt:315,搜「Deep-dive Chapter」)。 原文说这一章会跳过评测和源码、只讲理论,强烈推荐把它当作讲尺度不变与求逆那部分的基础, 但对「开始用可微物理训练」不是必须的。 我们按这条建议把它移到了这里;这是这组拆解对原书章序唯一的实质改动。

  2. 出处:第 37.1 节 Problem formulation(p.375)第 163 段 (text/20-p381-400.txt:163,搜「two-dimensional input space」)。 原文说这个函数只把第二个分量平方,损失是简单的平方和; 书还说明:虽然这个函数很简单,但因为那个平方,它是非线性的。 2

  3. 出处:第 37.2 节(p.377)第 260 段(text/20-p381-400.txt:260,搜「Gradient for full」) 与第 264 段(text/20-p381-400.txt:264,搜「strongly dominant component」)。 同一段代码还打印了中间那两个雅可比:[6, 18] 和 [[1,0],[0,6]]。 2 3 4

  4. 出处:第 36.1 节 The crux of the matter(p.365–366)第 457 段 (text/19-p361-380.txt:457,搜「toy」)、 第 474 段(text/19-p361-380.txt:474,搜「different scaling behavior」) 与第 481 段(text/19-p361-380.txt:481,搜「apply the square of the scaling」)。 原文那句是「Even worse, as we'll show below, regular updates actually apply the square of the scaling!」 2 3 4 5

  5. 出处:第 36.3 节 Gradient descent(p.367)第 550 段 (text/19-p361-380.txt:550,搜「the expansion around」) 与第 565 段(text/19-p361-380.txt:565,搜「normalization to a simulation anywhere」)。 原文明说:在最后一个求解器步之外的任何地方做归一化,都会破坏仿真的状态。 2

  6. 出处:第 3.8.3 节 Newton's method(p.39–40)第 359 段 (text/03-p41-60.txt:359,搜「approximating the function we」) 与第 393 段(text/03-p41-60.txt:393,搜「quadratic convergence」)。 原文的说法是「几乎每一个最小值,凑近了看都长得像一条抛物线」; 同一段末尾指出那个前置系数大于 1 时会发散。 「二次收敛就是差 0.1 → 0.01 → 0.0001」这个换算是我们补的 (补充,不在书里,来自通用知识)。 2 3 4

  7. 出处:第 3.8.4 节 Adaptive step size(p.41–42)第 354 段 (text/03-p41-60.txt:354,搜「Lipschitz-continuity」) 与第 485 段(text/03-p41-60.txt:485,搜「provably converges」)。 原文明说这个证明「本质上要求我们能自由选择步长,所以它不适用于固定步长的情形」, 而且它「只」要求曲率满足那个连续性条件,不要求梯度或损失本身满足。 ⚠️「那个常数在深度学习里根本不知道」是我们的判断,书没有这么说。 2 3 4

  8. 出处:第 36.4 节(p.369)第 614 段 (text/19-p361-380.txt:614,搜「grows with」)。 原文:曲率随参数量的平方增长,所以对大系统而言求值和求逆都非常昂贵。

  9. 出处:第 3.8 节开头(p.38)第 307 段 (text/03-p41-60.txt:307,搜「most classic optimization algorithm」)。 原文说它的主要目标是把深度学习放进这些经典方法的脉络里。

  10. 出处:第 3.8.6 节 Broyden's method(p.42)第 495 段 (text/03-p41-60.txt:495,搜「very rough guess」) 与第 3.8.7 节(p.43)第 523 段(text/03-p41-60.txt:523,搜「BFGS algorithm」)。 原文说 Broyden 的好处是永远不必算完整的曲率表; BFGS 这个名字来自四位作者的姓氏首字母。 2

  11. 出处:第 3.8.8 节 Gauss-Newton(p.43–44)第 543 段 (text/03-p41-60.txt:543,搜「restricting」) 与第 564 段(text/03-p41-60.txt:564,搜「approximate inverse of the Jacobian」)。 原文明说这个逆「让所有参数得到大致相等的步长,因而提供了一块后面还会回来的积木」, 同时也承认这仍然要对一个大矩阵求逆,而那个矩阵可能根本不可逆。 2

  12. 出处:第 3.8.10 节 Adam(p.44)第 579 段 (text/03-p41-60.txt:579,搜「with a diagonal approximation」) 与第 592 段(text/03-p41-60.txt:592,搜「component-wise square root」)。 原文的总结是:Adam 用的是「带对角 Gauss-Newton 曲率近似做归一化的一阶更新」, 外加动量来稳住。 ⚠️ 这条链是书自己的重构,不是这些算法历史上被提出的顺序。 2 3

  13. 出处:第 3.8.11 节 Gradient Descent(p.44–45)第 605 段 (text/03-p41-60.txt:605,搜「we now take the final step」) 与第 609 段(text/03-p41-60.txt:609,搜「lives」)。 原文那句是「𝐽^T by itself has the right shape to be added to 𝑥, but it "lives" in the wrong space 1/𝑥, rather than 𝑥 itself」, 并说这个缺少求逆的问题在涉及物理的问题上尤其突出。 2 3 4

  14. 出处:第 36.3 节(p.367)第 537 段 (text/19-p361-380.txt:537,搜「different physical units」)。 原文承认「有人会说单位对神经网络的参数来说不那么重要」, 但从物理的角度看这仍然令人不安。 那个「米和秒」的例子是我们补的(补充,不在书里,来自通用知识); 书用的是抽象的「不同物理单位」。

  15. 出处:第 36.1 节(p.366)第 485 段 (text/19-p361-380.txt:485,搜「does not mean negation」) 与那个专门的定义框第 491 段 (text/19-p361-380.txt:491,搜「A scale-invariant optimization」)。 2

  16. 出处:第 36.3 到 36.6 节(p.367–371),分项依据: 梯度下降的单位与敏感度见第 537、558 段 (text/19-p361-380.txt:559,搜「exploding gradients」); 接近最优时变慢见第 568 段(text/19-p361-380.txt:568,搜「necessarily becomes flat」); 拟牛顿的收敛更快见第 596 段(text/19-p361-380.txt:596,搜「much faster convergence」); 它对曲率的依赖与二阶可微的要求见第 621 段 (text/19-p361-380.txt:621,搜「twice-differentiable」); 逆梯度的定义与单位见第 636、657 段 (text/19-p361-380.txt:657,搜「same units as the parameters」)。 这张表是我们把书里分散在五节里的逐条讨论汇总的;书没有把它排成一张表。

  17. 出处:第 36.4 节(p.369)第 601 段 (text/19-p361-380.txt:601,搜「still depends on all functions before」)。 原文:复合函数的曲率带着内层雅可比的平方,所以任何一个中间潜空间的更新量, 在算梯度的过程中都是未知的。

  18. 出处:第 36.6 节 Inverse simulators(p.371)第 29 段 (text/20-p381-400.txt:29,搜「potentially highly nonlinear function」) 与第 36.7 节第 7 段(text/20-p381-400.txt:7,搜「ideal」)。 两者到一阶相等、逆仿真器多带非线性项这一点见第 137 段 (text/20-p381-400.txt:137,搜「equal to the IG from the section above」)。 2

  19. 出处:第 36.8.2 节(p.372)第 97 段 (text/20-p381-400.txt:97,搜「Non-injective functions can be inverted」)。 原文举的例子正是「求平方」:它没有全局逆,因为每个输出有正负两个解; 但从一个初始猜测出发选最近的那个解,就能轻松构造一个局部逆。 2

  20. 出处:第 36.6 节(p.371)第 18 段(text/20-p381-400.txt:18,搜「local inverse」)。 原文明说这对多模态设定里得到行为良好的解很重要, 否则解流形会变成一堆散落的点。

  21. 出处:第 36.8.2 节(p.372)第 100 段 (text/20-p381-400.txt:100,搜「inverse function theorem」)。 原文还说即使雅可比是奇异的(函数不单射、混沌或含噪), 「我们通常也能找到好的局部逆函数」——这句没有给方法,也没有给条件。 2

  22. 出处:第 36.8.3 节 Time reversal(p.372)第 107 段 (text/20-p381-400.txt:107,搜「time-reversed physical process」) 与第 111 段(text/20-p381-400.txt:111,搜「sufficient accuracy」)。 原文点名说:对多时间步的流体仿真, 前面正向仿真那一章用的一阶、二阶格式是不够的。 2

  23. 出处:第 36.8 节(p.371)第 60 段 (text/20-p381-400.txt:60,搜「does not destroy information」)。 原文:人们相信我们宇宙里的信息不会被销毁, 所以只要对状态有完美的知识,任何物理过程理论上都可以被反演。 2

  24. 出处:第 37.4 节(p.378)第 304 段 (text/20-p381-400.txt:304,搜「still has a fair distance」)、 第 37.5 节(p.379)第 371 段(text/20-p381-400.txt:371,搜「Newton」) 与第 37.6 节(p.381)第 444 段(text/20-p381-400.txt:444,搜「distance of only 0.51」)。 牛顿法那个距离书写的是 0.925,我们在正文里取了 0.93。 2

  25. 出处:第 37.3 到 37.5 节的代码(p.377–379), 梯度下降的步长见 text/20-p381-400.txt:5(搜「eta」), 牛顿法的步长见 text/20-p381-400.txt:342(搜「eta = 1./3.」)。 ⚠️ 主走查第 2 步里,Gauss-Newton 和 Adam 那两行的更新量是我们照书里给的算法算出来的, 书没有报这两个数;逆仿真器那一行也是我们照第 36.6 节那个更新式算的。 算法本身全部来自书。

  26. 出处:第 37.6 节(p.382)第 476 段 (text/20-p381-400.txt:476,搜「Diagonal lengths」)。 打印输出是「GD 1.053930, Nt 1.264911, PG 1.356443」,书说越大越好。 2

  27. 出处:第 37.7 节 y Space(p.383–385)第 525 段附近 (text/20-p381-400.txt:525,搜「are unknown until the full chain is evaluated」)。

  28. 出处:第 37.7 节(p.385)第 563 段 (text/20-p381-400.txt:563,搜「very sub-optimal trajectory」) 与第 567 段(text/20-p381-400.txt:567,搜「actual physical meanings」)。 2

  29. 出处:第 37.7 节(p.385)第 564 段 (text/20-p381-400.txt:564,搜「Newton (in orange) does better」) 与第 37.8 节(p.385)第 574 段(text/20-p381-400.txt:574,搜「unbalanced」)。 书自己的四条结论是:梯度下降容易给出「不平衡」的更新并卡住;牛顿法更好但远非最优; 逆仿真器的高阶信息胜过两者(哪怕只被部分地用上); 而优化器的选择强烈影响潜空间里的进展。 2

  30. 出处:第 37.9 节 Approximate inversions(p.385–386)第 583 段 (text/20-p381-400.txt:583,搜「not readily available」)。 书用的是一个现成的 BFGS 实现,并说这个话题和「比较不同优化方法」是正交的。 2

  31. 出处:第 36.5 节 Inverse gradients(p.369)第 636 段 (text/19-p361-380.txt:636,搜「inverse gradients」)。 原文明说它们「带着自己的一套问题,所以只代表一个中间步骤」, 并预告后面会以更实用的形式再回来。