跳到主要内容

换一把刀:让网络学一整个分布

1. 这一章讲什么

三件事: 书自己承认前十章立在一个巨大的简化上,而这一章把那个简化拆掉; 「学一个分布」的训练目标推导只有三步,而且它和前十章一直在用的平方误差是同一件事; 以及走向今天那些生成式做法的第一级台阶——归一化流,和它被卡死在哪儿。

它在全书链条里的位置:这是第二把刀落下的地方。 第 01 章末尾埋了一句:三档耦合换的都是「物理在哪一层进来」, 而「一个输入只出一个答案」这个缺口,三档一档都补不了。 这一章开始补它,而且要花六章(11 到 16)。

2. 顶层全景

前十章(确定性) 这一章开始(概率)

输入 x 输入 x
│ │
▼ ▼
网络吐一个 y 网络描述「哪些 y 分别有多大可能」
│ │
▼ ▼
两个都对的答案 → 被平均 抽一次得一支,抽一百次两支按比例都在

怎么把「一整张可能性图」学出来?

第 1 级:归一化流 ── 用一串可逆的层,把标准高斯掰成目标形状
卡在:层必须可逆 · 层数固定

第 2 级:神经 ODE ── 把「一串层」换成「对一个速度场积分」
两个限制都没了,但训练要把整条积分从头解到尾
卡在:扩不到高维


第 12 章换掉「学什么」

这张图在讲什么: 上半是这一章要换的那把刀,下半是这一章走的两级台阶。 书没有直接给最终算法,而是一级一级走出来的—— 每一级都是被上一级的毛病逼出来的,这条路一直走到第 13 章那两个人人都在说的名字1

3. 书自己承认的那个简化

结论先行:前十章的每一个结果,都建立在一句没被验过的假设上。

那句假设是:给一个输入 x,有唯一一个解 y。 书在这一部分开头亲口说,这「当然是一个巨大的简化」2

它列了这个简化不成立的两种情形: 解本身就有歧义(同一个输入确实对应好几个都对的答案), 以及训练出来的网络自己搞混了——而且这两件事还会叠在一起出现

所以要换的东西一句话说得清: 以前一个输入对一个 y,现在一个输入对一大把从某个分布里抽出来的 y, 每个 y 带一个概率。抽出来的样本要服从这个概率,这样罕见的情形和常见的情形才分得开。

4. 不确定性至少分两种,而且分不干净

先说清「不确定性」在这本书里指哪几件事,否则后面每句话都会读岔。

书列了四个源头:测量与观测带来测量误差;方程只覆盖系统的一部分, 剩下的那部分成为不确定性;数值仿真不可避免地引入离散化误差; 训练出来的网络自己也带一份误差。这四份加起来叫预测不确定性3

书用一个专门的框把它归成两类,而这两个名字外面到处都在用:

叫法指什么例子
数据里的不确定性(aleatoric)数据本身就带的测量噪声
模型里的不确定性(epistemic)我们用来描述它的那个东西带的训练出来的网络

书紧接着自己泼了一句冷水,这句比上面那张表更值得记4:

这个区分看着界限分明,但两种效应会叠在一起,而且可能很难分清。

它给了一个具体的例子:面对离散化误差时,一个不确定的结果, 可能是数据里有未知的歧义造成的,也可能是格子切得不够好造成的。 书的原话是,这些方面在实践中可能极难拆开。

5. 我们真正要的那张图:后验分布

结论先行:这一部分要算的东西只有一个,书从头到尾管它叫后验。

先把话说人话:你手上有一份观测(比如一张望远镜拍到的像、一次风洞里量到的压力), 你想知道「什么样的输入才会产生这个观测」。 答案通常不是一个输入,而是一批——有些输入很可能,有些不太可能。

「给定这份观测,各种输入分别有多大可能」,这张图就叫后验分布。

这一段里要立三个记号,它们后面每一章都在用5:

名字记法是什么
先验p(x)还没看到任何观测时,输入本身长什么样、什么值常见
似然p(y丨x)给定一个输入,产生某份观测的可能性
后验p(x丨y)我们真正要的:给定观测,反推输入的可能性

它们三个之间的关系不用记公式,记一句话就够:后验 ∝ 似然 × 先验。 这条关系有个名字:贝叶斯定理。 它说的就是这一句,没有别的内容。 也就是:一个输入之所以可信,既要它本身常见(先验),又要它真能解释你看到的东西(似然)。

这里也是第 02 章那两个轴的正下方: 从观测反推输入,这正是反问题。 这一部分讲的就是反问题的概率版本。

6. 为什么这张图算不出来

结论先行:后验的公式写得出来,分子分母两头都算不动。

先说分子那头的麻烦,它来自一样东西:潜变量。 系统里总有一部分是我们不知道、也控制不了的—— 书举的例子是不可观测的随机量、仿真过程里的中间步、甚至仿真程序内部走了哪条分支6这一部分统称潜变量。

麻烦在于:似然按定义不该依赖这些看不见的东西。 所以真正要算的是把所有可能的潜变量取值全部积掉之后的那个似然,书叫它边缘似然。

而这个积分书直说了:常常算不出来7理由很实在:那些看不见的量可能很难采样,有些情况下我们根本没法以合理的方式控制它。

已有的经典算法呢?书的评价是三连否定: 它点名了其中最有名的一个(近似贝叶斯计算,ABC),然后说所有这类办法都非常昂贵、 都需要大量专家知识才搭得起来、而且都受维数灾难之苦。

「维数灾难」这个词得当场讲清,它是这一部分的背景音: 自由度一多,要覆盖的空间就大得离谱,于是采样和积分的代价爆炸式地涨。 书给的判据很朴素——面对更多自由度时,这些方法会变得非常昂贵。

再说分母那头。 后验的分母是一个把分子对所有可能输入积一遍的量,书管它叫证据8它的作用只是把整张图归一化(让所有可能性加起来等于 1)。 书说它通常比似然好算,但仍然是个难对付的项。

7. 深度学习的切入点,以及一条被劝退的老路

上一节把死路走完了,这一节说活路在哪。

书用一个专门的框给出切入点,这句话是整个第二把刀的立足点9:

我们可以用深度学习训练一个「条件密度估计器」去逼近后验: 它支持采样,而且只靠「从仿真里抽 y」就能训出来。

拆开看这句话为什么值钱: 它绕开了第 6 节那个算不动的积分——不去算那张图长什么样,而是训一个能按那张图抽样的东西。 要的数据也不稀奇:给一个输入,让仿真跑一遍,记下输出。这件事我们本来就会做。

这条思路有个名字,书拿它当整个第五部分的红线:基于仿真的推断(SBI)。 它的账书自己列了10:

✅ 好处❌ 代价
训好之后推理快前期训练很贵
受维数灾难影响较小缺少严格的理论保证
能表示任意的先验

还有一条老路,书专门开了一个框把它劝退,而且劝得很硬。

那条路叫贝叶斯神经网络: 给网络的每一个参数,都不再给一个定死的数, 而是给一整个分布——具体说是一口高斯钟,而这口钟由两个数定住: 中心在哪(均值),以及张得多开(方差)。

于是训练时调的不再是参数本身,而是这两个数; 用的时候先按这两个数「抽」出一套具体的参数,得到一个普通网络,再照常用11

书的裁决原样传达:

纸面上是个很好的想法,但这个方法在学习复杂分布上出了问题, 而且需要仔细调涉及的超参数。所以如今强烈建议改用流匹配,至少也要用扩散那一类。

⚠️ 这里有一处书内的小毛病,照实说: 书说想看细节可以去看「PBDL 的 v0.3 版」, 但这本书自己就是 v0.3;它给的那个网址指向的是更早的一个预印本版本。 我们不复述这个自指的说法11

8. 训练目标只有三步

结论先行:把「学一个分布」变成一个能写进代码的损失,只用三步, 而且这三步里没有一步需要新的数学工具。

第一步:拿什么量「两张图差多远」。 书用的是 KL 散度——把「真实那张图」和「我们训出来的那张图」放在一起, 给出一个数,衡量后者当前离前者有多远12它有两条我们要用到的性质:恒不小于零;而且当且仅当两张图完全一样时才等于零。

第二步:把它展开,扔掉一项。 KL 散度展开之后是两项相减:前一项只跟「真实那张图」有关,和我们要调的参数完全无关。 优化时它是个常数,直接扔掉。

第三步:剩下的那一项就是训练目标。 它长这样:从真实分布里抽样本,然后让「我们这张图给这个样本的可能性」尽量大。 取个负号变成越小越好,这个量的名字叫负对数似然12

所以整件事化成一句话:

抽一个真样本,问自己训的那张图「你认为这个样本有多可能」, 然后把参数往「让它认为更可能」的方向挪一点。

唯一的附加条件是:你训出来的那张图必须是一张合法的可能性图—— 所有取值上的可能性加起来必须正好是 112怎么保证这一条,就是第 10 节那个归一化流要解决的全部问题。

9. 条件版,以及一座接回前十章的桥

上一节学的是「输入本身长什么样」,可我们要的是「给定观测之后输入长什么样」。

书用贝叶斯定理换了一下形式,结论出奇地干净13: 条件版的训练目标只需要两件事——从先验里抽一个 x,再让仿真给出一个对应的观测 y。

书自己加了一个感叹号:这两件事我们都知道怎么做。

然后是这一章最该被记住的一句话,它把新旧两半缝在了一起13:

在高斯假设下,负对数似然训练实际上等价于最小化平方误差。

这句话的分量: 第 05 到 10 章一直在做的「让输出离标准答案更近」, 不是一件和概率无关的事,它是这一章这个训练目标的一个特例—— 特例在于它默认「答案的分布是一个高斯」,而高斯只有一个峰。

于是第 01 章那盆冷水有了更精确的说法: 平方误差不是「错的目标」,它是「假设只有一个峰的目标」。 一旦真实答案有两个峰,这个假设就塌了,而塌下来的样子正是取中间值。

10. 归一化流:用一串可逆的层搬运一个分布

结论先行:第一个能真正跑起来的办法,靠的是「每一层都能倒着走」。

先看它要解决的那件具体的事:第 8 节最后那个附加条件—— 网络吐出来的必须是一张合法的可能性图,总和正好是 1。 一个普通网络吐出来的一堆数没有这个性质,而且没法便宜地检查。

归一化流的办法是换一个角度:不去直接描述目标那张图,而是描述「怎么把一张已知的图搬成它」14

起点那张图取标准高斯(中间高、四周低的那口钟),因为它随手就能抽样、也随手就能算可能性。 然后用一串映射把它一层层地掰,掰到最后长成目标的样子。

关键的约束只有一条:每一层都必须可逆—— 给一个输出,能唯一地倒推回它的输入。 这条约束换来的好处是:目标那张图的可能性,可以由起点那张图的可能性直接算出来。

中间要乘一个东西,它是这一节唯一的数学名词:雅可比行列式。 它的意思很具体——一次映射会把空间局部地拉伸或者压缩, 而这个数说的就是「这一点附近被拉伸了多少倍」。 图被拉开,同一份可能性摊在更大的地方,每一点的高度就得按这个倍数降下来。

多层的时候,把每一层的这个倍数连乘起来就行14采样也简单:从标准高斯抽一个点,顺着这串层正着走一遍,出来的就是目标分布的一个样本。

11. 走查:六层仿射耦合把一口钟掰成两个峰

主走查第 1 步(造数据): 目标是一个二维高斯混合—— 平面上的两团点(「标准差」就是这一团摊得有多开,数越大越松散): 峰 A 中心在 (0, 0)、标准差 1; 峰 B 中心在 (3, 2)、标准差 0.5(更靠边、更紧)。 抽 50,000 个点当训练数据15

这个二维高斯混合是接下来三章共用的靶子: 第 12 章拿它走朗之万采样, 第 13 章拿它走去噪扩散。同一个靶子换三种打法,差别才看得出来。

主走查第 2 步(起点): 一口标准高斯——中心在 (0, 0)、标准差 1 的一团任务:把这一团掰成上面那两团。

主走查第 3 步(一层长什么样): 书用的这种层叫仿射耦合,动作只有三下16: ① 把这个点的两个坐标劈成两半(这里一半就是一个数); ② 用一个三层的小全连接网络,从第一半算出两个数:一个平移量、一个缩放量; ③ 只改第二半:乘上缩放量,再加上平移量。第一半原样放行。 下一层之前把两半交换一次,好让刚才没被改的那一半也轮到。

为什么这么设计:因为它倒着走一目了然。 第一半没动过,所以拿到输出就能重算出那两个数; 知道了平移和缩放,第二半除一下、减一下就回去了。 「可逆」这条硬约束,就是靠「每次只改一半」换来的。

而那个雅可比行列式在这里便宜得离谱:只改了第二半、而且只是乘了一个数, 所以拉伸倍数就是那个缩放量本身,连乘起来即可。

主走查第 4 步(网络规模): 6 个这样的耦合层串起来, 每层里那个小全连接网络的中间宽度是 25615

主走查第 5 步(损失是什么): 代码里那一行是 loss = (-prior - ldj).mean()17—— 拆成人话就是两块相加再取负: ① prior:把这个真样本倒着走回起点那口钟,看它落在钟的哪儿、那儿有多高; ② ldj:这一路上被拉伸了多少倍(取对数)这两块加起来正是第 8 节推出来的负对数似然。推导落到代码,就是这一行。

主走查第 6 步(训练): 50 轮,Adam,学习率 2e-4; 损失从 2.6399 掉到 1.921318它掉得极快:第 2 轮就已经到 1.9512,后面 48 轮只再挪了 0.03。

主走查第 7 步(采样): 从起点那口钟抽一个点,顺着 6 层正着走一遍, 出来的点就落在两个峰里的某一个上。抽一百次,两个峰按各自的分量都会出现。 第 01 章那个「只拿得到一支」的毛病,在这里第一次被真的治好了。

12. 一个反直觉的观察:中间层可以长得很任意

书在这里插了一句观察,它对理解后面几章很有用19:

网络到达目标的「路线」并不直观:起点那张图被以相当任意的方式扭曲, 但这些扭曲一步一步地靠近目标。因为对中间的那些形状没有任何约束, 它们强烈依赖随机初始化。网络只收到关于「最终那张图」的梯度, 所以只要最终状态对得上,中间可以保持它们任意的形状。

为什么这条值得单列:它是一条可以拿去检查自己理解的判据。 如果你以为「六层就是逐步靠近、第三层应该长得像半成品」,那你理解错了。 训练信号只在终点,中间怎么走完全没人管。

这一条到第 13 章会变成一个真正的设计手柄: 既然中间的路没人管,那不如自己规定一条最省事的路——那就是流匹配的全部主意。

13. 神经 ODE:把「几层」换成「积多久」

结论先行:归一化流有两个死限,而它们其实是同一个东西的两面。

书把这两条并排列出来20:

死限为什么要命
架构必须可逆深度学习里最高效的那些架构都不可逆——等于自断一大半选择
层数是固定的想多掰几下就得重新搭网络

书接下来那一步换的不是网络,是看问题的角度。

换法是:别把「从起点掰到目标」看成六次动作,把它看成一个连续的过程。 于是引入一根人造的时间轴:t = 0 时是起点那口标准高斯,t = 1 时是目标那两个峰。

那么每一层做什么就变成了:在时间轴的每一点上,告诉每个点「此刻该往哪个方向、 以多快的速度移动」。 换句话说,网络学的不再是一层映射,而是一个速度场21从起点走到终点,就是对这个速度场做一次积分。

这个东西叫神经 ODE,也叫连续归一化流。 (ODE 就是常微分方程,这里指的就是「知道每一时刻的速度,把位置积出来」这类问题。)

两个死限一起消失了: 速度场用什么架构都行(不需要可逆,因为倒着走就是把时间反着积一遍); 「层数」也不再固定,它变成了「积分时用多少步」,可以按算力现场选。

书还特意点了一句和前十章的关系,这句很值得记21:

一次 ODE 求解,它反向传播路径的梯度有解析形式。 这是可微物理求解器的一个漂亮例子。

读法:第 08 章那个「让求解器交出梯度」,在这里换了个身份又出现了一次—— 只不过这一次被搬进训练环路的不是流体求解器,而是一个积分器。

书自己挑出来的、看似最不起眼的那个变化,才是它认为最要紧的22:

现在我们只有一个函数,在时间区间上的不同点被反复求值。 乍看是个微不足道的改动,但这是通往更强大的概率式做法(比如扩散那一类)的关键一步。 事实证明,「能复用一个学到的函数」而不是「手工搭出许多带大量参数的层」,是很重要的。

参照物摆出来就清楚了:上一节是 6 个各有自己参数的层,这里是 1 个函数被求值很多次。 参数不随「掰的次数」增长——这是后面所有扩散类做法的共同底座。

主走查第 8 步(换成连续版): 同一个二维高斯混合, 换成一个叫 FFJORD 的实现,速度场用一个中间宽度 128 的网络, 积分器用 dopri5(一种自动调步长的常用积分法)23损失从 4.8563 掉到 1.9453。 和上面那个 1.9213 几乎打平——但训练数据只用了 5,000 个点,是上面的十分之一。

14. 死穴:训练要把整条积分从头解到尾

上一步那个「5,000」不是随手选的,它就是这一节的证据。

代码里那一行的注释写得明明白白:样本用得更少,因为训练要慢得多23同一个靶子,样本数掉到十分之一——这个减法本身就是账单。

书把原因讲清楚了24:

为了训练连续版,我们需要把整条 ODE 从 t=1 一路解回 t=0, 把目标分布的样本运回高斯分布,才能高精度地算出它们的可能性。 这需要大量的网络求值,计算上非常昂贵。 因此神经 ODE 很难扩展到高维数据和大网络。

摊开看这笔账为什么必然: 训练目标(第 8 节那个负对数似然)要求你算得出一个样本的可能性; 而在这套框架里,算可能性的唯一办法就是把它一路运回起点、并把沿途的拉伸倍数全部累积起来。 「一路运回去」= 反复调用那个速度场网络几十上百次,而这只是为了给一个样本打一次分。

判断(我们的,不是书里的): 这条死穴的真正病根不在「ODE 贵」, 在于训练目标要求「算得出可能性」这件事本身。 只要你还坚持用负对数似然训练,你就必须有一条能精确回溯的路, 而精确回溯的代价随维度直线上升。 所以第 12 章那一步换的不是架构、不是积分器,而是「学什么」—— 它干脆不学可能性了。 如果错,会错在: 如果后来出现了一种能在高维上便宜地估计可能性的办法, 那么这条路并没有死,只是当时缺工具。判据是: 一次训练迭代里,那个网络被求值了几次? 如果这个数不随维度涨,这条路就还活着。

15. 主走查合起来看

发生了什么具体的数
1靶子二维高斯混合:峰 A (0,0) 标准差 1、峰 B (3,2) 标准差 0.5
2数据50,000 个点
3起点一口标准高斯
4一层怎么动仿射耦合:劈成两半 → 从第一半算出平移与缩放 → 只改第二半 → 交换
5网络6 个耦合层,每层内部宽度 256
6损失(-prior - ldj).mean() = 倒推回起点的高度 + 一路的拉伸倍数,取负
7训练50 轮,2.6399 → 1.9213(第 2 轮已到 1.9512)
8采样抽一个点 → 正着过 6 层 → 落进两个峰之一;抽一百次两峰都在
9换连续版FFJORD + dopri5,4.8563 → 1.9453
10代价样本从 50,000 减到 5,000——注释写明「因为训练更慢」

每个数都是书里那次运行的真实输出(逐条见脚注); 「十分之一」这个比值是我们算的。

16. 一处记号的坑:这一部分的「模型」换了意思

第 02 章立过一条全书通行的约定:这本书里的「模型」指物理方程,不指网络25这条约定在这一部分被书自己破掉了。

书在这一章里说,接下来要讲的这一族做法「可以概括为扩散模型」1—— 这里的「模型」是机器学习圈的用法,指的是训练出来的那个网络。

我们的处理:

场合我们怎么写
说物理那一侧一律说「方程」或「物理模型」,和前十章一致
说训出来的网络一律说「网络」
「扩散模型」「代理模型」这类外面到处都在用的固定名字原样保留,因为读者出门会撞见它们

判据就是第 02 章那一条:说到「模型」两个字单独出现时,它指方程。 带前缀的固定名字是一个整体的名字,不拆开读。

17. 作者的判断与证据

书里给了证据的:

说法证据
六层仿射耦合能学出一个双峰分布训练日志 2.6399 → 1.9213,外加采样图18
连续版把分布变形得更平滑一组沿时间轴的可视化,书自己的描述是「平滑得多」26
连续版训练更贵代码注释里那句「因为训练更慢」和 50,000 → 5,000 的样本削减23
KL 散度可以化简成负对数似然三行推导,完整给出12

作者的判断(书里没有给对照实验):

说法为什么算判断
「如今强烈建议改用流匹配,至少也要用扩散那一类」(劝退贝叶斯神经网络)没有给任何对照数字,是一条领域经验11
「深度学习里最高效的那些架构都不可逆」一句断言,没有列举也没有反例20
「能复用一个学到的函数是很重要的」事后回看的归因,不是这一章的实验结论22
SBI 那张账表里的「受维数灾难影响较小」定性,没有给随维度变化的曲线10

判断(我们的,不是书里的): 这一章真正的价值不是归一化流本身 ——归一化流在今天基本已经不是首选了—— 而是第 9 节那座桥:平方误差是负对数似然在「只有一个峰」假设下的特例。 这一句让前十章和后六章不再是两本书,而是同一个目标在两种假设下的两个样子。 如果错,会错在: 这个等价关系依赖「高斯」这个前提; 如果你的损失不是平方误差(比如是绝对值误差),那它对应的是另一种分布假设, 上面那句话不能照搬。判据是: 你的损失函数取负指数之后,长得像哪一种分布? 那就是它默认的假设。

18. 边界与局限

  • 这一章所有实验都是二维的。 两个坐标、两个峰—— 书自己承认连续版扩不到高维,而这一章没有任何高维的证据;
  • 归一化流那一支书讲了做法,没有讲它的失效样子。 什么样的目标分布会让六层耦合学不出来,书没给;
  • 「层数固定」被列成死限,但书没有说层数不够时具体会差成什么样;
  • 贝叶斯神经网络被一句话劝退,没有对照实验,而且指向的参考版本自相矛盾(第 7 节已标);
  • SBI 那张账表里的「缺少严格的理论保证」书没有展开—— 缺的是哪一类保证、缺了会在什么场合咬人,全书没有回头补;
  • 两次训练的损失数值不能互相比较。 2.6399 → 1.9213 和 4.8563 → 1.9453 用的样本数不同,书也没有给两者在同一批测试数据上的可比指标;
  • 条件版(给定观测反推输入)这一章只推了公式,没有跑例子。 真正的条件化怎么做,要等到第 15 章。

19. 可带走的

  1. 前十章立在一句假设上:一个输入唯一一个解。书自己管它叫「一个巨大的简化」;
  2. 「学一个分布」要的东西只有一个:后验——给定观测,各种输入分别有多大可能;
  3. 后验算不动的原因是潜变量: 系统里有一部分看不见也控制不了, 把它积掉的那个积分常常没法算;
  4. 深度学习的切入点是绕过去,不是算出来: 训一个能按那张图抽样的东西,训练数据只需要「给输入、跑仿真、记输出」;
  5. 训练目标推导只有三步: 用 KL 散度量差距 → 扔掉与参数无关的那一项 → 剩下的就是负对数似然;
  6. 平方误差是它的特例。 在「答案的分布是一个高斯」这个假设下, 两者等价——这就是第 01 章那盆冷水更精确的说法:平方误差默认只有一个峰;
  7. 归一化流的主意是「搬运」而不是「描述」: 拿一口现成的标准高斯, 用一串可逆的层把它掰成目标形状;
  8. 可逆是靠「每次只改一半」换来的(仿射耦合),而这也让拉伸倍数便宜到可以直接连乘;
  9. 中间层可以长得很任意。 训练信号只在终点,没人管中间那几层像不像半成品 ——这个空白到第 13 章会被拿来当设计手柄;
  10. 神经 ODE 把「一串层」换成「一个速度场 + 一次积分」, 可逆和层数固定这两个限制一起消失;而且它本身就是可微物理求解器的一个例子;
  11. 代价是训练要把整条积分从头解到尾,网络求值次数巨大—— 证据就是样本数从 50,000 掉到 5,000;
  12. 所以下一步换的不是架构,是「学什么」。 只要还坚持「算得出可能性」, 这条路就贵得没法上高维。

20. 原文地图

主题原书章原文位置
「一个巨大的简化」21 Introduction to Probabilistic Learningtext/10-p181-200.txt:411(搜「massive simplification」)
四个误差源头、预测不确定性21.1 Uncertaintytext/10-p181-200.txt:426(搜「predictive uncertainty」)
两类不确定性与「很难分清」21.1 同上text/10-p181-200.txt:434(搜「Aleatoric uncertainty denotes」) · text/10-p181-200.txt:439(搜「difficult to disentangle」)
先验、潜变量21.3 Simulation-based Inferencetext/10-p181-200.txt:472(搜「latent variables」) · text/10-p181-200.txt:482(搜「prior distribution X」)
边缘似然、算不出来、ABC、维数灾难21.3 同上text/10-p181-200.txt:485(搜「marginal likelihood」) · text/10-p181-200.txt:486(搜「often intractable」) · text/10-p181-200.txt:489(搜「the curse of dimensionality」)
证据(分母)21.3 同上text/10-p181-200.txt:494(搜「called the evidence」)
深度学习的切入点21.3 同上text/10-p181-200.txt:503(搜「conditional density estimator」)
SBI 的账21.3 同上text/10-p181-200.txt:518(搜「Lacks rigorous theoretical」)
贝叶斯神经网络被劝退21.3 同上text/10-p181-200.txt:530(搜「Bayesian Neural Networks」) · text/10-p181-200.txt:535(搜「strongly recommended to use flow matching」)
KL 散度到负对数似然22.1 Fundamentals: A Training Objectivetext/10-p181-200.txt:551(搜「Kullback-Leibler」) · text/10-p181-200.txt:574(搜「negative log-likelihood for」)
条件版只需要两件事22.2 From Unconditional to Conditionaltext/10-p181-200.txt:602(搜「how to do them」)
高斯下等价于平方误差22.2 同上text/10-p181-200.txt:605(搜「negative log-likelihood training for Gaussian densities」)
归一化流、雅可比行列式22.3 Learning Distributions with Normalizing Flowstext/10-p181-200.txt:613(搜「sequence of invertible and differentiable」) · text/10-p181-200.txt:618(搜「the Jacobian of」)
靶子:二维高斯混合22.4 Practical Exampletext/11-p201-220.txt:10(搜「[0, 0]」) · text/11-p201-220.txt:18(搜「starting point for the following code examples」)
仿射耦合、6 个 block22.5 A Simple Normalizing Flow based on Affine Couplingstext/11-p201-220.txt:24(搜「6 in our example」) · text/11-p201-220.txt:186(搜「steps = 6」)
损失那一行代码22.5 同上text/11-p201-220.txt:165(搜「-prior - ldj」)
训练日志 2.6399 → 1.921322.5 同上text/11-p201-220.txt:197(搜「Loss: 2.6399」) · text/11-p201-220.txt:220(搜「Loss: 1.9213」)
中间层形状任意22.5 同上text/11-p201-220.txt:371(搜「does not take a very intuitive」)
两个死限22.6 Neural ODEstext/11-p201-220.txt:381(搜「needs to be invertible」)
速度场、ODE 是可微物理的例子22.6 同上text/11-p201-220.txt:390(搜「learned velocity predictor」) · text/11-p201-220.txt:398(搜「differentiable physics solver」)
「看似微不足道其实关键」22.6 同上text/11-p201-220.txt:406(搜「trivial change at first」)
FFJORD、5000 个样本22.6.1、22.6.3text/11-p201-220.txt:412(搜「Free-form Jacobian」) · text/11-p201-220.txt:576(搜「use fewer samples because training」)
训练日志 4.8563 → 1.945322.6.3text/11-p201-220.txt:599(搜「Loss: 4.8563」) · text/11-p201-220.txt:622(搜「Loss: 1.9453」)
「平滑得多」22.6.3 同上text/11-p201-220.txt:697(搜「much more smoothly」)
死穴:要把整条 ODE 解完22.7 Summary of Normalizing Flowstext/11-p201-220.txt:706(搜「solve the entire ODE」)

Footnotes

  1. 出处:第 21.3 节(p.185)第 520 段(text/10-p181-200.txt:520,搜「summarized as diffusion models」)。 原文说本可以直接给出最终算法(而且那个算法「出奇地简单」), 但看看它是从哪儿来的其实非常有意思,而且这条路径「为讨论过去几年的开创性论文 提供了一条漂亮的红线」。这一章到第 13 章就是在走这条红线。 2

  2. 出处:第 21 章开头(p.183)第 411 段(text/10-p181-200.txt:411,搜「massive simplification」)。 原文:解可能有歧义,我们学到的网络也可能搞混,而且两种效应还会一起出现。

  3. 出处:第 21.1 节 Uncertainty(p.183)第 426 段 (text/10-p181-200.txt:426,搜「predictive uncertainty」)。 同一段还点出量化这份不确定性是「不确定性量化(UQ)」这个相邻领域的事。

  4. 出处:第 21.1 节的 Note 框(p.183–184)第 434 段 (text/10-p181-200.txt:434,搜「Aleatoric uncertainty denotes」) 与第 439 段(text/10-p181-200.txt:439,搜「difficult to disentangle」)。 aleatoric / epistemic 这两个英文名我们保留了,因为读者在别处的文档里会撞见它们。

  5. 出处:第 21.3 节(p.184)第 482 段(text/10-p181-200.txt:482,搜「prior distribution X」) 与第 484 段(text/10-p181-200.txt:484,搜「the likelihood function」)。 后验的定义与贝叶斯定理的关系见第 494 段(text/10-p181-200.txt:494,搜「called the evidence」)。 「后验 ∝ 似然 × 先验」这个便于记忆的说法是我们的写法 (补充,不在书里,来自通用知识);书给的是完整的分式。

  6. 出处:第 21.3 节(p.184)第 472 段(text/10-p181-200.txt:472,搜「latent variables」)。 原文举的三个例子是:不可观测的随机变量、中间仿真步、以及仿真器的控制流。

  7. 出处:第 21.3 节(p.184)第 485 段(text/10-p181-200.txt:485,搜「marginal likelihood」)、 第 486 段(text/10-p181-200.txt:486,搜「often intractable」) 与第 489 段(text/10-p181-200.txt:489,搜「the curse of dimensionality」)。 原文点名的算法是 Approximate Bayesian Computation(ABC)。

  8. 出处:第 21.3 节(p.184)第 494 段(text/10-p181-200.txt:494,搜「called the evidence」)。 书还说这个量可以用马尔可夫链蒙特卡洛这类随机方法算,通常比似然好拿,但仍然难对付。

  9. 出处:第 21.3 节的「Leveraging Deep Learning」框(p.185)第 503 段 (text/10-p181-200.txt:503,搜「conditional density estimator」)。

  10. 出处:第 21.3 节(p.185)第 512–518 段 (text/10-p181-200.txt:518,搜「Lacks rigorous theoretical」)。 书把这张表写成 ✅ Pro / ❌ Con 两栏,我们照搬了内容,没有增删条目。 2

  11. 出处:第 21.3 节末尾的「Historic Alternative」框(p.185–186)第 530 段 (text/10-p181-200.txt:530,搜「Bayesian Neural Networks」) 与第 535 段(text/10-p181-200.txt:535,搜「strongly recommended to use flow matching」)。 ⚠️ 书让读者去看「PBDL 的 v0.3 版」找细节,而本书自己就是 v0.3; 它给的网址指向的是更早的预印本版本。这处自指我们照实标出,没有复述。 2 3

  12. 出处:第 22.1 节 Fundamentals: A Training Objective(p.187)第 551 段 (text/10-p181-200.txt:551,搜「Kullback-Leibler」) 与第 574 段(text/10-p181-200.txt:574,搜「negative log-likelihood for」)。 「必须是一张合法的可能性图」那个条件在第 559–560 段: 非负,且在整个空间上积分等于 1。 2 3 4

  13. 出处:第 22.2 节 From Unconditional to Conditional(p.187–188)第 602 段 (text/10-p181-200.txt:602,搜「how to do them」) 与第 605 段(text/10-p181-200.txt:605,搜「negative log-likelihood training for Gaussian densities」)。 原文那句是「negative log-likelihood training for Gaussian densities is actually equivalent to minimizing an L2 error」,并明说这是通往前面监督训练那些章节的一座概念桥 2

  14. 出处:第 22.3 节 Learning Distributions with Normalizing Flows(p.188)第 613 段 (text/10-p181-200.txt:613,搜「sequence of invertible and differentiable」)、 第 618 段(text/10-p181-200.txt:618,搜「the Jacobian of」) 与第 634 段(text/10-p181-200.txt:634,搜「Sampling is also very convenient」)。 「被拉开之后每一点的高度要按倍数降下来」这个说法是我们补的解释 (补充,不在书里,来自通用知识);书给的是那个行列式的公式。 2

  15. 出处:第 22.4 节(p.190)第 10 段(text/11-p201-220.txt:10,搜「[0, 0]」) 与第 11 段(text/11-p201-220.txt:11,搜「[3, 2]」); 样本数与网络规模见第 180 段(text/11-p201-220.txt:180,搜「generate_2d_gaussian_mixture(50000」)、 第 186 段(text/11-p201-220.txt:186,搜「steps = 6」) 与第 187 段(text/11-p201-220.txt:187,搜「hidden_dim = 256」)。 书自己写了一句「我们会把这个分布当作后面这些代码例子的起点」 (text/11-p201-220.txt:18,搜「starting point for the following code examples」)。 2

  16. 出处:第 22.5 节(p.191)第 22–24 段 (text/11-p201-220.txt:24,搜「6 in our example」)。 原文说用一个三层、ReLU 激活的全连接网络当积木,把它变成一个可逆的层; 代码里那两个输出的名字是 shiftlog_scale

  17. 出处:第 22.5 节(p.193)第 165 段(text/11-p201-220.txt:165,搜「-prior - ldj」)。 同一段上方两行算的是 prior(把样本变回去之后在标准高斯下的对数密度), ldj 是 log-determinant of the Jacobian 的缩写。

  18. 出处:第 22.5 节(p.193–194)第 197 段(text/11-p201-220.txt:197,搜「Loss: 2.6399」) 与第 220 段(text/11-p201-220.txt:220,搜「Loss: 1.9213」)。 第 2 轮的 1.9512 见第 198 段(text/11-p201-220.txt:198,搜「Loss: 1.9512」)。 2

  19. 出处:第 22.5 节(p.197)第 371 段 (text/11-p201-220.txt:371,搜「does not take a very intuitive」)。

  20. 出处:第 22.6 节 Neural ODEs(p.198)第 381 段 (text/11-p201-220.txt:381,搜「needs to be invertible」)。 原文两句:架构必须可逆;而深度学习里最高效的架构大多不可逆。层数固定见同段之后一句。 2

  21. 出处:第 22.6 节(p.198)第 390 段(text/11-p201-220.txt:390,搜「learned velocity predictor」) 与第 398 段(text/11-p201-220.txt:398,搜「differentiable physics solver」)。 原文把这次 ODE 求解称作可微物理求解器的一个「neat example」, 并把它和讲尺度不变与求逆的那一部分(我们的第 18–19 章)挂上了钩。 2

  22. 出处:第 22.6 节(p.198)第 406 段(text/11-p201-220.txt:406,搜「trivial change at first」)。 2

  23. 出处:第 22.6.1 节(p.199)第 412 段(text/11-p201-220.txt:412,搜「Free-form Jacobian」) 与第 22.6.3 节(p.201)第 576 段 (text/11-p201-220.txt:576,搜「use fewer samples because training」)。 那句「因为训练更慢所以样本用得更少」是代码里的注释,不是正文。 dopri5 是 torchdiffeq 里默认的自适应步长积分法 (补充,不在书里,来自通用知识);书只在代码里写了它的名字。 2 3

  24. 出处:第 22.7 节 Summary of Normalizing Flows(p.205)第 706 段 (text/11-p201-220.txt:706,搜「solve the entire ODE」)。 原文结论是:因此神经 ODE 很难扩展到高维数据和大网络, 接下来要讲的是「更可扩展、能配很大的网络和高维数据」的方法。

  25. 出处:第 3.5 节 Models and Equations(p.28)第 468 段 (text/02-p21-40.txt:468,搜「avoid using model to denote」)。 这条约定第 02 章讲过:书用「模型」专指物理方程,并明说要避免拿它指网络。

  26. 出处:第 22.6.3 节(p.204)第 697 段 (text/11-p201-220.txt:697,搜「much more smoothly」)。 书给的是一组图,没有给量化的「平滑度」指标。