跳到主要内容

physics-based-deep-learning 拆解大纲(20 章)

这是节级大纲,不是正文。 一节一行,每行写成「进来时以为…… → 出去时知道……」; 两头是同一件事的行已经在起草时合掉了(合并记录见文末自查)。

切分口径:按新词密度切,不按原书章序抄。 原书 49 章 / 9 部 / 461 页 / 76 万字符, 重组为 20 章。每章仍按标准的七段结构写(讲什么 / 顶层全景 / 核心原理 / 作者判断与证据 / 边界与局限 / 可带走的 / 原文地图);下面列的是每章核心原理那一段里的节, 外加这一章的主走查承重词

这本书的特殊情况:出处只能用页码锚(text/xx-pNNN-NNN.txt:行号),不能用章节锚。 章→文件对照表在 notes/reading-notes-2.md 末尾,写每一章之前必查


篇幅口径(这一条要主人裁决,不许装作达标)

标准说「拆解不该比原书短」,样板书的比例是 2.15 倍。这本达不到,而且我认为不该硬凑。

  • 原书 76 万字符里,粗估四成以上是 Python 代码与训练日志(每章配一个可执行 notebook, 正文里大段贴着 for 循环和逐 epoch 的打印);
  • 重写时这些代码只保留数字和关键的三五行,其余全部化成散文;
  • 20 章 × 14k ≈ 28 万字符,约 0.37 倍

建议按 0.37 倍走,并在总纲里明说这本书为什么例外。 若主人认为必须更厚, 加厚的地方只能是「书没讲透而读者需要的物理与数值前置」(见文末缺口表),不是复述代码。


全书一条主线(总纲第 3 节的骨架)

一句话:一条抛物线发出三问。 开篇那个「求平方的反函数」的玩具例子暴露出一个缺口, 全书三大块各回答由它逼出的一问:

落在我们哪几章原书
① 物理该在学习过程的哪一层进来05(第一档)/ 06–07(第二档)/ 08–10(第三档)Part II–IV
② 网络该吐一个答案,还是一整个分布11–16Part V
③ 更新量本身该怎么算18–19Part VII

另有两条线不在这三问里,主线必须当场交代它们的位置,否则读者以为读完三档就读完全书: 强化学习(17 章,原书 Part VI)是被拿来比的对照组,而且输了; Part VIII 那三个老话题(20 章)是书自己说「只做简短介绍、不配代码」的收尾。

下面十三步,每一步都是被上一步的结论逼出来的。

  1. 一个输入,两个都对的答案。 求平方的反函数在同一个 x 上有 +√x 和 −√x 两个同样合法的解; 而按「离标准答案差多远」训练的网络,只能吐出两者的平均 —— 一个物理上根本不存在的解。 书用烛火上方的烟羽证明这不是玩具:完美对称的条件下烟也会朝随机一侧摆, 把两边平均得到的是一股笔直的、现实里不存在的流。
  2. 所以问题不是「网络够不够大」。 书把出路按「物理和网络耦合得多紧」分成三档: 物理只当数据生产车间 / 物理写进损失 / 求解器整个搬进训练环路。 原书 Part II 到 IV 就是这三档(我们的 05 / 06–07 / 08–10 章); 而 Part V 之后书换了另一把刀,见第 7 步。
  3. 第一档能走多远,以及它的天花板。 一个 58 万参数的网络在训练时没见过的翼型上 做到 2.5% 的误差。但书自己拆穿:「就是在插值,而且也没别的可做」; 更要命的是,只要网络将来要和某个求解器配合工作,不把这个求解器包进训练,分布就会漂。
  4. 第二档想治的不是第 3 步那两个病。 分布漂移它治不了(要等第 6 步),插值它也治不了。 它治的是另一件事:第一档必须先花几小时算出一堆标准答案才能开训, 而物理定律本来就写在那儿,拿去当数据车间用完就扔,太浪费。
  5. 第二档的做法:把解代回方程,左右两边的差当分数。 好处是可以一条标注数据都不要; 坏处是它只是软约束 —— 优化尽力而为,大的残差可能一直留着。 其中最出名的那一支(PINN)在同一个反问题上误差是可微物理的三倍多,没有泛化可言, 而且和几十年积累的数值方法基本不兼容。书的原话:相比第一档「我们退了一步」。 所以第 3 步埋下的分布漂移,到这里还欠着。
  6. 第一个落点:让求解器自己交出梯度,搬进训练环路。 关键不是「可微」这个形容词,而是展开 —— 误差在迭代中指数增长,单步训练里根本看不见; 只有让网络在训练时看到自己的修正在往后好几步造成了什么,它才学得会。 效果:一个 47,330 参数的小网络配一个粗糙的低保真求解器, 在没见过的雷诺数上跑 100 步,误差从 0.109 降到 0.031。 这一步同时把第 3 步欠的分布漂移还上了: 网络见到的输入正是它自己和求解器一起造出来的。
  7. 但这一整档仍然是确定性的,于是第 1 步那个缺口原封不动地留着: 一个输入只吐一个答案,拿哪一支由随机初始化决定。
  8. 第二问因此是概率:让网络学的不是一个答案,而是一整个分布。 书不直接给最终算法,而是一步步走出来:归一化流(必须可逆、层数固定)→ 神经 ODE(任意架构、连续时间,但训练要解完整的 ODE,扩不到高维)→ 分数(只学「往哪个方向概率更大」,从此不必操心归一化)→ 加噪与退火 → 去噪扩散(训练塌缩成一行 L2)→ 流匹配(规定直线路径,20 步赶上去噪的 200 步)。
  9. 这换来了什么: 数据里两成的解往左旋、八成往右旋,训练好的网络会按这个比例把两种都生成出来; 而且它被自回归地调用二十万步之后仍然不发散 —— 这是别的训练方法很难拿到的性质。 代价是推理要反复调用网络。
  10. 但概率模型又缺了物理: 训练时没有任何反馈回路,没法保证误差压到指定阈值。 于是书把第一问的答案装回来 —— 不在训练时,而在推理时, 用一个只有一成参数的控制网络接收仿真器的反馈。天体物理的强引力透镜上, 这套做法比最好的经典求解器又准(χ² 1.48 对 1.74)又快约 35 倍。
  11. 走到这里,前两问都答完了,但有一件事从头到尾没被查过: 从第 3 步的翼型、到第 6 步的展开、到第 8 步的扩散,每一次训练用的都是梯度下降。 而第 6 步已经露过马脚 —— 展开得越长,信号越难学、越容易梯度爆炸。 第三问因此是:那个「往哪挪一丁点」的量,本身算得对吗?
  12. 答案是:梯度下降丢掉了求逆。 它是牛顿法一路退化的产物,退到最后丢的正是这一步; 而涉及 PDE 时,不同分量的缩放差异必然存在,常规更新施加的还是这个缩放的平方。 补回求逆有两条路:用定制的逆求解器只反演物理,或者把网络和物理的雅可比一起做「半个逆」。 在一个四自由度的振子上,后者的精度比常规做法好约四个数量级。
  13. 三问在书里被显式缝在一起: 逆求解器那套「其实很像监督训练」, 只是更新在训练时即时算出、并且避开了多模态解的平均 —— 也就是第 1 步那个抛物线。 书最后的判断:深度学习不取代数值方法,而是增强它们; 神经网络应该被当成又一个数值工具,和传统仿真一样可解释。

那个对照组的位置(第 17 章,原书 Part VI): 强化学习在书里是被拿来比的,而且输了 (施加的力更大、收敛慢得多)。差别在于长期依赖由谁来管 —— 可微物理把梯度穿过仿真步传回去, 强化学习把环境当成没有梯度的黑箱、靠一个价值网络去追踪。


章节切分

01-parabola-and-mode-averaging.md 一个抛物线看穿全书(原书 ch1–2,p.5–20)

  • 现象起头:进来以为「一道题只有一个正确答案,机器学的就是那个」→ 出去知道求平方的反函数 在同一个 x 上有两个同样合法的答案,而「一个输入对多个合法输出」在物理里是常态。
  • 神经网络与训练是什么(就地补深度学习前置,走书架锚):进来以为神经网络是个黑箱魔法 → 出去知道它就是一大堆可调的数,训练是「看它答得离参考差多远,再把每个数朝差少一点的方向挪一丁点」。
  • 承重词一节 · 损失:进来以为「训练不收敛是网络太小或训练不够」→ 出去知道把「差多远」 写成平方之后,两个合法答案之间的唯一最优就是它们的平均,loss 卡在 0.1002 不是没训好,是训到头了。
  • 承重词一节 · 模态:进来以为「答案糊」是精度问题 → 出去知道解流形上有几支彼此分开的答案, 这几支叫模态,平均它们得到的东西可以完全不在解流形上。
  • 换一种损失:进来以为要学得准就得给更多标准答案 → 出去知道可以一个答案都不给, 改成「把网络的输出送回那个物理过程,看结果离观测差多远」,loss 掉到 0.000002,差五万倍。
  • 但它只拿得到一支:进来以为上一步解决了问题 → 出去知道确定性网络一个输入只吐一个数, 拿上面那支还是下面那支由随机初始化决定 —— 这个缺口一直悬到全书后半。
  • 第三条路的预告:进来以为「一个输入两个答案」没法用一个网络表示 → 出去知道可以让网络学 「往哪个方向挪一步」,反复迭代把噪声推成解,两支都抓得到,代价是糊。
  • 这不是人造问题:进来以为抛物线是教科书玩具 → 出去知道烛火上方的烟羽在完美对称条件下 也会朝随机一侧摆,平均两支得到一股不存在的笔直的流;很多方程的解流形里都有多个模态, 而且往往不知道有几个、在哪儿。
  • 收口(一):进来以为「监督 vs 把物理放进训练」是一刀两断 → 出去知道这一刀后面会被切成三档 (物理只当数据源 / 物理写进损失 / 求解器进环路),02 章给这三档的坐标系。
  • 收口(二):进来以为上面那一刀就是全书唯一的分法 → 出去知道还有一把和它正交的刀 —— 「确定一个答案 vs 生成一整个分布」,前十章一律走确定那边,11 章才回来拿另一边。

主走查: 输入 x = 0.36 这一个数,三种做法各给出什么 —— 监督给 ≈0(两支的平均,loss 0.100203)、 可微物理给 +0.6 或 −0.6(跑两遍可能换支,loss 0.000002)、流匹配两支都给。 ⚠️ 0.36 这个输入是我们挑的,要在正文里说明;两个 loss 和 ±√x 是书里的。

承重词 · 单开一节(从现象讲起): 损失 · 模态。 承重词 · 就地一段话: 神经网络与权重 · 训练 · 求解器 · 解流形 · 分岔(bifurcation) · 流匹配(只给一句「学往哪挪、反复迭代」,正式定义留 13 章)。


02-where-physics-enters.md 这本书的坐标系:物理该在哪一层进来(ch3.1–3.5)

  • 一个必须先立的记号,否则整本书读岔:进来以为「模型」当然指训练出来的网络 → 出去知道这本书里的 model 专指物理方程(和主流机器学习用法相反),网络一律叫 NN。 这一条管全书,所以放最前面;另外两个记号约定各自挪到真正要用它们的地方 (* 上标 → 06 章残差;测试集必须分布外 → 05 章天花板)。
  • 承重词一节 · 离散化:进来以为「物理模型」是一段代码 → 出去知道它是一条描述 「场在每一点怎么随时间变」的方程(PDE),而仿真是把连续的场切成有限个格子、 把时间切成小步、一步步往前推 —— 从此「求解器」是一个具体的东西,「离散格式」是一个具体的选择。
  • 先答那个人人都问的问题:进来以为 AI 会取代传统仿真(已有工作显示网络在翼型上快好几个数量级)→ 出去知道作者判它「没有根据」,理由是上一节那个「离散格式」里看似微不足道的改动, 就决定某个关键现象出不出得来。
  • Burgers 方程:进来以为方程越复杂越难 → 出去知道最简单的非平凡方程里就有两个相反的机制 (把东西搬走的平流 / 把东西抹平的扩散),而缺了额外约束就会撞出激波。
  • Navier-Stokes 多的那一条:进来以为多一条约束是小事 → 出去知道「散度为零」(散度就地解释: 一格里净流出多少)防住了激波,却给数值方法引入了一个每步都必须强制满足的硬约束 (它有多贵,第 03 章走查)。
  • 承重词一节 · 反问题:进来以为「预测」和「反推」是同一件事的两个方向 → 出去知道反问题的约束往往只在序列末尾一个状态,自由度却和整个场一样多,难在完全不同的地方。
  • 三档耦合:进来以为「用 AI 做仿真」是一种做法 → 出去知道它至少是三种 (物理只当数据源 / 物理写进损失 / 求解器整个进训练环路),原书 Part II–IV 就是这三档, 但书还有另外两条线不在这三档里(概率、改进梯度),那是 11 章之后的事。
  • 书自己划的边界:进来以为这是一本入门书 → 出去知道它明说不提供深度学习与数值仿真的入门、 不是研究综述、不含粒子式的拉格朗日方法、真实实验数据只作展望。

主走查: 「一团烟从烛火升起」这一个场景贯穿全章 —— 写成方程(平流 + 扩散 + 浮力 + 不可压)→ 切成格子和时间步 → 正问题是「给初始状态算 20 步之后」、反问题是「给末状态反推初速度」→ 三档耦合各会怎么处理它。这团烟第 03、09 两章还要接着用。

承重词 · 单开一节: 离散化 · 反问题。 承重词 · 就地一段话: PDE(偏微分方程) · 场 · 平流 · 扩散 · 激波 · 散度 · 边界条件 · 初始条件 · 前向问题 vs 反问题 · 三档耦合的三个名字(supervised / loss-terms / hybrid)。


03-running-a-simulation.md 先把仿真跑起来:激波与烟羽(ch3.6–3.7)

  • 一维 Burgers 走一遍:进来以为「解方程」是解析地求个公式 → 出去知道每一步只是两个算子轮流作用, 128 个格子上的数被反复更新 32 次,中间鼓出一个陡坎。
  • 半拉格朗日平流:进来以为搬运是「把这一格的东西挪到隔壁」→ 出去知道做法是反过来问 「这一格现在的值,上一步是从哪儿飘过来的」,回溯采样,这样才稳定。
  • 二维浮力烟羽一步里的五件事:进来以为一步仿真是一个公式 → 出去知道它是一条流水线 (平流烟雾 → 加浮力 → 平流速度 → 扩散 → 压力投影)。
  • 交错网格:进来以为所有量都存在同一个地方 → 出去知道速度采样在格子的面上、密度在格心, 散度才算得准。
  • 承重词一节 · 压力投影与泊松方程:进来以为「不可压」只是一句物理性质 → 出去知道它每一步都要解一个牵动全场所有格子的方程,这是整条流水线里最贵的一步, 也正是后面所有混合方法要下手的地方。
  • 十帧真数:进来以为烟会直着上升 → 出去知道入流偏左的烟羽撞到顶壁之后往右弯, 而这一切只是那五个算子反复作用出来的。
  • 这一章的位置:进来以为这是一段工具教程 → 出去知道后面所有「把求解器放进训练环路」 说的就是这条流水线,「让求解器交出梯度」说的就是给这五步各配一个求导函数。

主走查: 32(x)×40(y) 格、物理域 x∈[0,80] / y∈[0,100]、DT=1.5 的浮力烟羽 —— 入流是半径 10、位置 (30,15) 的球,逐帧最大速度 0.463 → 0.897 → 1.410 → 2.041 → 2.928 → 3.839 → 4.527 → 4.868 → 5.131 → 5.484。 另起一处:Burgers 在 t=1.0 时前五个速度值 0.0057 / 0.0172 / 0.0286 / 0.0401 / 0.0515。

承重词 · 单开一节: 压力投影(泊松方程) · 交错网格。 承重词 · 就地一段话: 时间步 · 显式扩散与中心差分 · 半拉格朗日平流 · 布森涅斯克浮力近似 · 椭圆型 PDE · 周期边界与狄利克雷边界。


04-choosing-architecture.md 选架构:局部还是全局(ch5)

  • 承重词一节 · 代理模型(整节从原 05 章行 1 前移到这里,因为 04 章每一行都以它为前提): 进来以为「用网络算物理」是个模糊的说法 → 出去知道它有个明确目标 —— 一次高保真仿真要跑几小时,而设计一个机翼要试几千种形状,所以拿一个网络去顶替求解器, 输入是场、输出是场;代理模型 / 模拟器 / 神经算子是同一件事的三个名字,读者出门三个都会撞见。 这一节立完,下面「选哪种网络」才有得可选。
  • 先问一个问题,而不是先列一张表:进来以为选网络是「哪个更先进用哪个」→ 出去知道第一刀切在「一个点的变化会牵动多远」,这来自 PDE 的老分类 (双曲型是波状的局部传播,椭圆型瞬间牵动全场)。
  • 第二刀:进来以为数据就是数据 → 出去知道样本在空间上怎么排(没有空间排列 / 规则网格 / 不规则网格 / 无连接的点)先砍掉一半选项 —— 没有空间排列时只剩全连接网络。 ⚠️ PINN 的名字和「全书对它最重的一句评价」整体挪到 07 章,这一行不提 —— 否则一个还没定义的词就要承担一句重判决。
  • 承重词一节 · 卷积核就是数值方法的模板:进来以为卷积是图像处理的技巧 → 出去知道一维拉普拉斯算子的经典模板 [1, −2, 1] 可以原样写成一个 kernel=3 的卷积权重, 网络的一层和差分格式是同一种东西。
  • 承重词一节 · 感受野:进来以为「网络深一点就什么都看得见」→ 出去知道一层卷积只看得见三格, 要看见全场有两条路:逐级下采样的 U-Net(采样点数对数级减少,靠 skip connection 把细节接回去) 和空洞卷积(采样点拉开距离、实现极简但访存慢);书裁 U-Net,多花的力气在部署时回本。
  • 选错的两种后果:进来以为「选大点的架构总没错」→ 出去知道全局架构用在局部问题上, 最坏会拿平滑掉的全局模态去近似局部效应;而用有限感受野去做全局影响是个无解的任务。
  • FNO:进来以为「能超出训练分辨率」是白拿的好处 → 出去知道二维要 M⁴ 个参数、三维 M⁶, 而 M 必须随域尺寸增长,所以书判它在三维上不可行;而且函数空间通常是截断的,那个承诺常常存疑。
  • 注意力与 Transformer:进来以为注意力是必然更强的新范式 → 出去知道它算的那个 N×N 矩阵 「离直接上一个全连接层其实不远」,对 token 数是二次的,而且对已知空间结构的问题 它把这个结构信息丢掉了;线性注意力用更近似的注意力换掉了那个平方。
  • 网格不规则或根本没有网格时:图网络与点卷积各落在选型表的哪一格(细节留第 20 章,记账)。
  • 一条容易漏的实践建议:进来以为数据的结构决定了架构 → 出去知道把数据搬到另一种结构上 (比如把点云投到变形的规则网格上)可能精度和性能都更好。

主走查: 一维五个格子上的场 [0, 0, 1, 0, 0] —— ① 要算它的二阶导,用 [1, −2, 1] 卷一遍就够, 一层、三个权重(局部);② 要算它对应的压力(牵动全场),一层卷积永远不够, U-Net 要几级、空洞卷积要几层、FNO 要几个参数,逐个算给读者看; ③ 注意力也要在这五格上占一步: 5×5 的注意力矩阵长什么样、25 个数怎么来的、 算完和「直接上一个 5×5 的全连接层」差在哪、以及它把「哪两格相邻」这个已知结构丢在了哪里 —— 这一步正好兑现「离全连接层其实不远」那句话。 ⚠️ 这个五格输入是我们挑的,注意力矩阵里的具体数值也是为演示编的; 模板 [1, −2, 1]、FNO 的 M⁴/M⁶ 和那张选型表是书里的。

承重词 · 单开一节: 代理模型 · 感受野。 承重词 · 就地一段话: 卷积核=模板(stencil) · 双曲型 vs 椭圆型 · 全连接网络(MLP) · U-Net 与 skip connection · 空洞卷积 · 傅里叶变换与频域 · FNO · token · 自注意力(Q/K/V) · Transformer block · 层归一化 · 线性注意力 · 图网络 · 点卷积。


05-supervised-baseline-and-its-ceiling.md 监督基线:能做到多好,天花板在哪(ch4 + ch6 + ch7)

  • 一句回指(不重讲):04 章那个代理模型,这一章第一次真的把它训出来。
  • 用仿真造训练数据:进来以为数据总是越真越好 → 出去知道仿真数据没有测量噪声、不用人工标注, 代价是模型要有足够表达力、数值误差要足够小,否则再好的网络也没戏。
  • 一个具体的内存账:进来以为网络大小只关乎参数量 → 出去知道 128 通道的卷积层作用在 128² 的输入上 会产生两百多万个中间值,而且全都得暂存 —— 显存主要是被中间结果吃掉的。
  • 翼型走查:进来以为「预测流场」是个模糊任务 → 出去知道它是三张 128² 的图进、三张出, 58 万参数、200 轮、5 分 40 秒,在训练时没见过的翼型上平均相对误差 2.5%。
  • 归一化不是可选项:进来以为归一化是个例行的预处理 → 出去知道压力大致按速度的平方缩放, 不归一化的话求和时某个分量会压倒其他分量,网络就把资源全花在大的那个上。 ⚠️ 书内自相矛盾(一处写平方、一处写三次方),照实写并按平方讲。
  • 黄金法则六条:进来以为该先把复杂设置搭好 → 出去知道第一步永远是「在 1 个样本上过拟合」, 因为单样本都收敛不了就是代码或数据有根本问题,而复杂设置只会让它更难被找到。
  • 「魔法在哪儿?」:进来以为深度学习能从数据里抽出普遍原理 → 出去知道书直接说 「这不是当前技术水平下发生的事」,它就是在插值,而且也没别的可做; 可验证的判据是:拿 [0…1] 训的别指望在 [27…39] 上还能用。
  • 天花板长什么样:进来以为误差是均匀分布的 → 出去知道缺的恰恰是高压尖峰和大速度的口袋, 因为 L2 有平均化倾向、偏爱大结构。
  • 测试集必须是分布外的(兑现 02 章记号那一节挪出来的第三条):进来以为「留一成数据当测试集」 就够 → 出去知道同分布的那份只配叫验证集;要看泛化必须换分布,而「多外算外」没有金标准 —— 这一章用的是「换一批全新翼型」。
  • 承重词一节 · 分布漂移:进来以为「训练好就能接进任何系统用」→ 出去知道一旦网络要和某个求解器 轮流工作,它见到的输入就是它自己造出来的、和预计算数据不一样的东西 —— 所以必须把这个求解器包进训练过程。全书最重的伏笔在这里埋下。

主走查: 一个训练时没见过的翼型在给定雷诺数与攻角下的一次推断 —— 输入 [f_x, f_y, mask] 各 128², 585,027 个参数的 U-Net,验证 loss 从 0.2 降到 0.02,平均相对误差 0.0263,而压力尖峰被抹平。

承重词 · 单开一节: 分布漂移。 承重词 · 就地一段话(领域词在翼型走查之前一次讲完,这是本章最要紧的一段): 翼型 · 攻角 · 雷诺数(流动里惯性与黏性的比值,决定同一个形状是层流还是乱流) · 湍流 · RANS(把湍流按时间平均掉、只解平均场的那套经典方程) · 伯努利关系(压力约按速度平方缩放,这是归一化那一节的依据) · 归一化 · 过拟合 · epoch(轮) · 验证集 vs 测试集 · L1/L2 损失。


06-physics-in-the-loss.md 把物理写进损失:残差与软约束(ch8 + ch9 + ch10)

  • 问题意识:进来以为上一章的做法很自然 → 出去知道那里的物理模型只是个外部的数据生产车间, 用完就扔,而书觉得这很可惜。
  • 承重词一节 · 残差:进来以为判断一个解对不对必须跟标准答案比 → 出去知道可以把解代回方程, 左右两边的差就是残差,正确的解让它等于零 —— 于是没有标准答案也能给分。
  • 两项加权和:进来以为两个损失项加起来就更好 → 出去知道各自单独用会怎样 —— 只用监督项会把多个模态平均掉、采样点之间很差;只用残差项会在局部满足、全局对不上, 因为同一条方程可以有一整族都满足它的解,不同的局部采样点会各自收敛到不同的一支。 (这一族解的名字叫零空间,留到本章末那条真实观察处再给 —— 那里它才有具体的样子。)
  • 承重词一节 · 软约束:进来以为「把物理写进损失」等于物理被保证满足 → 出去知道非线性优化只是尽量减小它,大的非零残差可能一直留着,这叫软约束。 那么「硬」的长什么样?要等求解器真的进到训练里(10 章末),这里先记账。
  • 两个变体的分岔:进来以为「物理损失」是一种做法 → 出去知道有两种截然不同的做法 —— 在事先定好的网格上离散地算导数(v1,本章下半场), 还是让网络本身当解、用自动微分求导(v2,07 章整章讲,那里才给它的名字和定义)。
  • 不用一条监督数据的样板:进来以为没有标注就没法训 → 出去知道网络吃散度、吐压力, 损失是「修正后速度的散度」、目标是零,数据是当场算出来的;书特意澄清这可以叫无监督, 但这个标签有误导性。
  • 承重词一节 · 零空间(放在这里才有具体的样子):进来以为学到的压力就该和求解器的一样 → 出去知道两者量级常差 10 倍 —— 因为这个方程只管压力的导数,整体加一个常数不改变导数, 所以「所有加了常数的版本」都是同样合法的解;这一整族叫零空间,而损失对绝对值没有任何约束, 网络就随手用了随机初始化碰巧给它的那个偏移(书里的求解器则被约束成零均值)。
  • 零样本泛化到障碍物:进来以为没见过障碍物就处理不了障碍物 → 出去知道只见过随机噪声流场的网络, 接进带障碍物的烟羽仿真里跑 50 步仍和纯求解器非常相似;而边界的处理靠在调用网络前后 各强制一次边界条件。

主走查: 32×32 周期网格上一个随机的、有散度的流场 —— 初始散度 L2 = 195.28(单格最大 1.897)→ 未训练的网络 390.22 → 83,521 参数、15 轮、16 秒 → 0.679;换成噪声翻倍的分布外场: 2059.14 → 网络 11.51(求解器 0.000)。 另起一处:同一个网络接进带方形障碍物的浮力烟羽,跑 50 步与纯求解器对比(零样本泛化)。

承重词 · 单开一节: 残差 · 软约束 · 零空间。 承重词 · 就地一段话: * 上标的记号约定(从 02 章挪来,这里第一次真的要区分理想解与离散解) · 算子分裂 · 亥姆霍兹分解 · 无散 vs 无旋 · 有限差分算子 · 「无监督」这个标签为什么有误导性 · 零样本泛化 · 边界条件的强制施加。


07-pinn-accounting.md PINN 的账(ch11 + ch12)

  • 承重词一节 · PINN 到底是什么(全书这个名字第一次出现在这里):进来以为网络的输入总是一个物理场 → 出去知道这里输入只是坐标 (x, t)、输出是那一点的解值 —— 网络本身就是那个解, 而不是一个从输入算输出的映射;它属于神经场家族(同族的还有 NeRF、学到的符号距离函数)。 定义给完,当场把 04 章记账的那句挪过来:书说 PINN「经过多年研究仍然解决不了真实世界的问题, 这指向了这条路线的根本性问题」—— 这是全书对它最重的一句,不要软化,但也要标成作者的判断。
  • 承重词一节 · 自动微分:进来以为求导要靠差分近似 → 出去知道框架能顺着网络的计算过程 精确地算出输出对输入的导数,高阶导就多查几次;代价是每算一次导数都要过一遍完整的网络反传。
  • 反问题走查:进来以为「给一串观测反推整段解」需要海量数据 → 出去知道它只用了 边界 100 个点 + 内部 1000 个点、3021 个参数,靠残差把解撑起来。
  • 结果好在哪:进来以为要么对要么错 → 出去知道整体形状恢复了、时间约束至少部分满足了。
  • 结果差在哪:进来以为误差会均匀分布 → 出去知道中心的激波没被表示、 t=0 的初始状态精度最差,而那恰恰是最有价值的部分(给了第一个状态,其余基本由方程推得出来), 两端的边界条件甚至没被满足。
  • 泛化在这里失去了意义:进来以为训练/验证/测试的划分总是成立 → 出去知道这里测试和约束的位置 就是我们关心的位置,三者没有真正区别,这更像经典优化;想要另一个解就得从头训。
  • 与经典数值方法不兼容:进来以为「反正结果是个解,后面可以再修」→ 出去知道学到的表示 没法用共轭梯度这类迭代求解器去细化,几十年积累的技术在这里用不上。
  • 书的裁决,以及我们必须补的一句:进来以为这是领域共识 → 出去知道这是作者的判断, 而且全书没有系统评估近年为 PINN 提出的修补(自适应权重、域分解、causal training、硬约束边界)。

主走查: 和第 08 章共用同一个 Burgers 反问题 —— N=128、32 步、t=0.5 处有观测、两侧 u=0; 这一章的成绩是 10,000 次迭代、101 秒、loss 0.100 → 0.029、重模拟 16 步的平均绝对误差 0.01136。 ⚠️ 书正文写「约 1.5·10⁻²」而代码输出是 0.01136,以代码为准并说明。

承重词 · 单开一节: PINN(神经场式的解表示) · 自动微分。 承重词 · 就地一段话: 神经场 · 狄利克雷边界条件 · 配点(collocation point) · 迭代次数与收敛速度 · 共轭梯度(读者出门会撞见,这里只需知道它是一类经典迭代求解器) · 病态问题(ill-posed)。


08-differentiable-physics.md 可微物理:让求解器交出梯度(ch13 + ch14 + ch15)

  • 一句定义与它的前提:进来以为「可微物理」是一种新网络 → 出去知道它是「给数值求解器装上 对输入求梯度的能力」,前提是先得有连续的模型公式 —— 书说没有这个就完了。
  • 承重词一节 · 雅可比:进来以为求导是「一个数对一个数」→ 出去知道这里是「一整个场对一整个场」, 那张表叫雅可比;而实践中永远不构造它,只算「它的转置乘一个向量」,否则内存吃不消。
  • 主走查的第一步:进来以为求解器的梯度要靠框架自动搞定 → 出去知道一阶迎风格式的梯度 可以手写出来,而且它的含义很朴素:速度的变化取决于密度的空间导数,一阶格式只牵动两个邻居。
  • 时间步怎么串:进来以为多步要展开成一个巨大的表达式 → 出去知道每步当成独立模块、 靠雅可比的线性性逐步回溯,每步给答案贡献一项 —— 这和训练神经网络做的是同一件事, 只是自由度从权重换成了速度场。
  • 为什么不直接用框架自带的算子搭求解器:进来以为「都是可微算子,拼起来就行」→ 出去知道每个小操作都要为反传存状态,而我们并不关心求解器的中间结果; 正确做法是拆成「有意义但整块的」算子,好处有三(省中间结果 / 每个算子挑最好的数值方法 / 复用伴随方法几十年的技术)。
  • 承重词一节 · 隐式梯度:进来以为反传就是把正向每一步倒着走一遍 → 出去知道对「解一个方程组」 这种步骤,天真地对迭代求解器的每一步反传会攒下海量与 PDE 无关的中间状态; 而拉普拉斯算子是对称的,所以反向那个逆和正向一模一样 —— 直接再调用一次同一个求解器就行。 带走点:不要盲目地对正向计算反传,先想清楚哪些步骤该去算梯度。
  • 同一个反问题的可微物理版:进来以为这一章会出现神经网络 → 出去知道这里根本没有网络, 离散化定下来之后未知量就只剩初始状态那一堆浮点数,问题退化成纯粹的梯度优化。
  • 正面对决:进来以为两条路各有千秋 → 出去知道同一个任务上 PINN 的误差是可微物理的三倍多, 原因是后者为整个解、所有离散点和时间步提供梯度,而不是局部的更新。
  • 正式对账:进来以为 PINN 的「不需要离散化」是真优势 → 出去知道它最终仍要在计算机里给出解, 只是把离散化的构造交给了非线性优化,从外部很难控制;而且它采样一个点就要过一遍整个网络。
  • 可微物理自己的贵:进来以为它更快 → 出去知道它覆盖的解流形大得多,展开越多信号越难学, 每次迭代更费算力、也更慢收敛 —— 书的辩护是「因为要学的信号本身更复杂」。

主走查: 一维密度场在速度场里的平流 —— 给出几个格子上的具体密度值,走一遍迎风更新式, 再手算 ∂𝒫/∂u_i = (Δt/Δx)(d_i − d_{i+1});然后换成第 07 章那个 Burgers 反问题的可微物理版: 50 步梯度下降、132 秒、loss 0.383 → 0.0033、全序列平均绝对误差 0.06382,对上 PINN 的 0.19298。

承重词 · 单开一节: 雅可比 · 隐式梯度。 承重词 · 就地一段话: 可微物理(DP) · 反向模式微分 / 雅可比-向量积 · 迎风格式(upwinding) · 差分模板的单边取法 · 拉普拉斯算子的对称性 · 隐函数定理 · 多重网格 · 伴随方法 (必须留名:书说可微物理等价于「伴随方法 + 深度学习」,读者出门会撞见)。


09-unrolling.md 展开:把求解器搬进训练环路(ch16 + ch17)

  • 先看一个更难的没有网络的例子:进来以为反问题就是「改哪儿就调哪儿」→ 出去知道这里 观测的是烟雾密度、可它完全不能碰,唯一能改的是 t=0 的初速度,而目标在 20 步之后。
  • 结果与它诚实的边界:进来以为优化收敛就是 loss 单调下降 → 出去知道这次 loss 从 298.29 掉到 169.94 但中途在震荡;而烟羽的茎部始终留着一圈黑晕,因为入流位置改不了,优化只能去对齐上部。
  • 网络与求解器的三种接法:进来以为「结合」只有一种意思 → 出去知道有三种 —— 网络产生求解器的输入、求解器当即时数据生成器(此时没有梯度流过它,它可以被换成一个加载函数)、 以及两者交错。
  • 承重词一节 · 展开:进来以为「训练时每次预测一步、预测得准就行」→ 出去知道误差在迭代中 对某些模态指数增长,单次求值里根本发现不了;而且这些中间状态没法预计算, 因为它们依赖训练中一直在变的网络本身。
  • 网络的输出怎么并进求解器:进来以为网络该直接产出完整的下一个状态 → 出去知道更好的做法是 产出一个加性修正,理由和 skip connection、残差连接是同一条:别让网络把力气花在本来就对的部分上。
  • 展开的梯度式怎么读:进来以为那个公式看不懂 → 出去知道它只有四层 (批内求和 → 每个时间步 → 从末状态回溯的雅可比连乘 → 在该步分岔到网络权重), 以及为什么步数一大就必须防梯度爆炸,而反传的代价通常和正向同量级。
  • 承重词一节 · 修正任务:进来以为「用网络算物理」是一类问题 → 出去知道它分两类 —— 推理时有求解器在场的叫修正任务,没有的叫预测任务;而修正任务这个目标在流体、材料、气候 三个学科里各自被重新发明过一遍(闭合问题 / 均匀化 / 参数化)。
  • 一个决定性的实证(湍流那几个词在这一行之前一次讲完:湍流 / 涡量 / 雷诺应力 / 湍动能 / 直接数值模拟 DNS):进来以为「展开多步」本身就够了 → 出去知道对照组同样展开 10 步、 唯一区别是梯度流不流过求解器,而带求解器的那版明显更贴近参考的湍流统计; 要让常规仿真达到同样的精度,需要长 14 倍以上的时间。
  • 加噪声那条替代路的位置:进来以为加噪声也能防漂移 → 出去知道噪声是无方向的, 不如用真实的仿真演化;能做到就把真求解器放进环路(生成式方法后来给了更有根据的路,第 15 章)。

主走查: 20 步的浮力烟雾仿真,只允许改 t=0 的初速度 —— 四个入流位置 (12,4) / (13,6) / (14,5) / (16,5),最后一个是参考;80 步优化 loss 298.29 → 169.94(含中途震荡)。

承重词 · 单开一节: 展开(unrolling) · 修正任务(correction task)。 承重词 · 就地一段话: 自回归 · 加性修正与残差连接 · 梯度爆炸/消失 · 湍流 · 涡量 · 雷诺应力 · 湍动能(TKE) · 直接数值模拟(DNS) · 闭合问题 / 均匀化 / 参数化(三个学科别名)。


10-hybrid-solvers-and-control.md 混合求解器:小网络配差求解器(ch18 + ch19 + ch20)

  • 问题设定:进来以为「提高精度就得用更细的网格」→ 出去知道另一条路是把同一个 PDE 的 高保真解当参考,训一个修正算子,让「粗糙的求解器 + 修正」逼近它。
  • 一个容易看漏的点(纯对照式,不重述 09 章那句):进来以为「监督训练多训几步、 多喂几对状态,也能学到同样的修正」→ 出去知道它结构上就拿不到这些状态 —— 监督那边的数据是事先算好的、跟网络无关,PINN 那边推理时根本没有求解器在场; 只有把求解器拴进训练环路,修正才可能作用在「被它自己改过」的状态上。
  • 承重词一节 · 卡门涡街:进来以为流体绕过障碍物就是绕过去 → 出去知道一定条件下障碍物后面 会交替甩出漩涡、排成两列(桥墩后面的水面就是这样),这是全书用得最多的测试场景。
  • 承重词一节 · rollout:进来以为「测一下准不准」就是比一步的误差 → 出去知道要让网络自己 接着自己的输出往下跑很多步,这叫 rollout,而误差在这个过程里怎么长才是真正的考题。
  • 数字:进来以为要压住误差得靠大网络 → 出去知道 47,330 个参数的小网络,在训练时没见过的 雷诺数上跑 100 步,把相对误差从 0.1086 压到 0.0312;低保真求解器的误差线性上升, 混合的慢得多。⚠️ 书正文说「典型 5–6 倍」而这次运行是 3.5 倍,以实际数字为准并说明。
  • 最省事的一次对照:进来以为「展开」是个可调的小参数 → 出去知道把展开步数设成 1 就等于关掉了可微物理训练(不再有梯度流过求解器),它就退回成监督训练,误差大幅上升。
  • 为什么保底求解器很重要:进来以为网络越强越好 → 出去知道没有基础求解器时网络得干全部的活, 而现在它只需要给出一个小修正。
  • 一个度量学的警告:进来以为误差就用 L2 量 → 出去知道混合求解器带来的改进, 用这类简单范数很难可靠地测出来,得用领域专用的度量(这里是涡量和湍流性质)。
  • 长程控制(一)· 为什么一个网络不够:进来以为「控制」就是每步纠一下 → 出去知道这个任务 只在序列末尾一个状态上有约束,而能动的自由度和整个流场一样多 —— 每一步施的力都会在十几步之后引出完全不同的流动,所以控制器必须先会预判物理怎么演化。
  • 长程控制(二)· 两个网络各管什么:进来以为分工是「一个粗一个细」→ 出去知道分的是时间尺度 —— 预测器 OP 只回答「从现在到目标的中点,场应该长什么样」,执行器 CFE 只回答「这一步该加多大的力」。
  • 长程控制(三)· 三阶段为什么是三阶段:进来以为端到端一步到位最好 → 出去知道每一阶段 解掉上一阶段的一个毛病 —— ① OP 用另造的数据集监督预训练(按 2 的幂次 n∈{2,4,8,16} 分层, 各训 1000 步),先有个粗略的规划;② CFE 用单步可微求解器预训练,先会施力(此时没有序列); ③ 两者用 16 步求解器端到端联合训练,才把「力施下去之后物理怎么走」接进来。
  • 长程控制(四)· 结果与它的边界:进来以为这种任务多半只能勉强收敛 → 出去知道相对平均绝对误差 0.0545,也就是九成四以上的标记密度落到了正确位置;而书自己说这看着简单、 实则只要力稍有不协调流体就会打旋。 ⚠️ 这四行合起来记为本章的「另起一处」走查(和主走查卡门涡街不是同一个任务: 那是预测,这是末状态约束的反问题)。
  • 为什么可微物理有效(全书最完整的一句解释):进来以为它只是「梯度更准」→ 出去知道它让训练中的 模型能探索和体验物理环境、从即时展开的新轨迹里算训练信号,不再依赖事先指定的分布 —— 这是一种后验方法,所以对没见过的输入更有韧性。
  • 硬约束长什么样(兑现 06 章记的那笔账,这里第一次给出具体动作):进来以为「硬」只是「更严」→ 出去知道它是一个动作 —— 耦合进来的求解器每一步都会把状态投影到满足约束的那个集合上 (03 章那个压力投影就是这个动作),所以约束是被强制满足的,不是被优化「尽力接近」的。

主走查: 卡门涡街 —— 64×32 格、物理尺寸 200×100,3 通道输入(两个速度分量 + 雷诺数当常数通道), 47,330 参数的 ResNet,展开步数 4,5 轮共 4960 步、3 小时 11 分,loss 15.63 → 0.231; 测试在 Re=73.24 上 rollout 100 步,相对 L2 0.1086 → 0.0312。

承重词 · 单开一节: 卡门涡街(涡脱落) · rollout。 承重词 · 就地一段话: 高保真 vs 低保真 · 下采样与映射算子 𝒯 · 修正算子 𝒞 · ResNet · Xavier 初始化与 gain · 课程学习 · 投影(projection) · 领域专用度量 · 控制问题里的预测器/执行器分工 · 后验(a-posteriori)方法。


11-learning-distributions.md 怎么让网络学一个分布:目标函数 → 归一化流 → 神经 ODE(ch21 + ch22)

  • 为什么现在要改口:进来以为前面十章讲的就是全部 → 出去知道前面一直假定一个输入唯一一个解, 书自己说这是「一个巨大的简化」,而第 01 章那个缺口从没被补上。
  • 两种不确定性:进来以为不确定性就是「不太准」→ 出去知道它至少分两种(数据里的、模型里的), 而书立刻警告这两者会叠加、实践中可能极难分清。
  • 承重词一节 · 后验分布:进来以为「学一个分布」很玄 → 出去知道要的就是「给定观测, 各种输入分别有多大可能」这张图;而它的分母要对所有看不见的中间变量积分、通常算不出来, 经典办法都贵、都要专家知识、都受维数灾难之苦。
  • 训练目标是怎么来的:进来以为这需要很重的数学 → 出去知道只有三步 —— 用 KL 散度量两个分布的差、 展开后有一项与参数无关可以直接扔掉、剩下的就是最小化负对数似然; 而条件版只需要「从先验采样」和「抽一个观测」这两件我们本来就会做的事。
  • 一个接回前面的桥:进来以为概率学习是另起炉灶 → 出去知道高斯假设下的负对数似然训练 实际上就等价于最小化 L2 误差 —— 前十章一直在做的事,是这里的一个特例。
  • 归一化流:进来以为「变换一个分布」需要特殊结构 → 出去知道它用一串可逆映射当层, 雅可比行列式给出缩放;采样极方便,但架构必须可逆(而最高效的架构都不可逆)、层数还固定。
  • 一个有意思的观察:进来以为中间层应该逐步靠近目标 → 出去知道中间分布可以保持相当任意的形状, 因为网络只收到关于最终分布的梯度。
  • 神经 ODE:进来以为「层数固定」没法绕开 → 出去知道可以把一串映射换成对一个学到的速度场积分, 于是只有一个函数在不同时刻被反复求值 —— 书说这看似微不足道,却是通往扩散模型的关键一步; 顺带它本身就是可微物理求解器的一个漂亮例子。
  • 死穴:进来以为连续版更优雅所以更好 → 出去知道训练要把整条 ODE 从头解到尾, 网络求值次数巨大,扩不到高维数据和大网络。 主走查: 一个二维高斯混合(峰 A 均值 [0,0]、标准差 1;峰 B 均值 [3,2]、标准差 0.5)—— RealNVP 六个 block、hidden 256、50000 个样本、50 轮,loss 2.64 → 1.92; 换成连续版 FFJORD 之后样本数从 50000 减到 5000(这个减法本身就是「死穴」那一节的证据), loss 4.86 → 1.95。这个混合分布 12、13 两章还要接着用。

承重词 · 单开一节: 后验分布 · 归一化流。 承重词 · 就地一段话: 数据不确定性 vs 模型不确定性(aleatoric / epistemic) · 先验 · 潜变量 · 似然与边缘似然 · 证据(分母) · 维数灾难 · 基于仿真的推断(SBI) · 贝叶斯神经网络(书劝退) · KL 散度 · 负对数似然 · 雅可比行列式 · 仿射耦合 · 神经 ODE / 连续归一化流(CNF)。


12-score-and-langevin.md 分数:只学「往哪个方向概率更大」(ch23)

  • 为什么还要再换一次口:进来以为神经 ODE 已经够好 → 出去知道它的死穴是「训练要把整条 ODE 从头解到尾」,而这一章换的是学什么,不是换架构 —— 于是那个死穴才有救。
  • 承重词一节 · 分数:进来以为要学分布就得学「每个点有多可能」→ 出去知道可以只学 「往哪个方向走概率更大」,也就是对数似然的梯度;因为它只依赖局部信息,所以再也不用操心归一化, 网络学起来容易得多。
  • 怎么把分数学出来:进来以为需要真值梯度 → 出去知道真值拿不到,做法是给样本加高斯噪声, 把一堆离散的点变成一个能求梯度的连续函数;而加噪之后的分数出奇地简单,就是「负的噪声除以 σ²」。 ⚠️ 这个实验的 loss 看起来完全不降,因为目标本身量级就在 100 上下;书没解释,我们要点破。
  • 朗之万动力学:进来以为有了分数还要另一套采样算法 → 出去知道就是「沿分数走一步、 再加一点随机」反复迭代;书特意从一个规则网格出发,让读者看见每个点被领向哪个密度峰。
  • σ 的两难与退火:进来以为噪声越小越好 → 出去知道太小就没有梯度、太大就把细节淹掉, 解法是从大到小逐级退火,并把噪声尺度当成网络的一个额外输入。
  • 结账:进来以为分数方法已经够用 → 出去知道还剩三个洞(噪声尺度序列怎么定不清楚 / 能采样但算不了似然 / 推理要多次求值,很贵)。

主走查: 11 章那个同一个二维高斯混合 —— 分数匹配 σ=0.1 训一遍; 朗之万从 35×35 的规则网格(1225 个起点)出发走 501 步,看每个起点分别落进哪个峰; 退火用 [4.0, 2.0, 1.0, 0.5, 0.2, 0.01] 六级、每级 150 步,看两个峰怎么一级级分开。

承重词 · 单开一节: 分数(score)。 承重词 · 就地一段话: 对数似然的梯度 · 归一化常数为什么是麻烦 · 加噪把离散点变成连续密度 · 分数匹配的目标「负的噪声除以 σ²」 · 朗之万动力学 · 噪声尺度 σ 的两难 · 退火 · 把 σ 当成网络的额外输入。


13-denoising-and-flow-matching.md 去噪扩散与流匹配(ch24 + ch25 + ch26)

  • 从退火到扩散的一步:进来以为扩散模型是全新的东西 → 出去知道它就是把上一章那串噪声尺度 变成一条连续的时间轴(一头是纯噪声、一头是干净样本);因为高斯叠加还是高斯, 可以一步跳到任意时刻。
  • 承重词一节 · 去噪扩散:进来以为它的训练很复杂 → 出去知道只有四行(抽一个样本、抽一个时刻、 抽一份噪声、按权重混起来),然后让网络回答「你身上叠的是哪一份噪声」; 预测噪声比预测信号容易,而减掉它同样能得到信号。书说这个极简的 L2 损失才是它能突破的真正原因。
  • 它到底带来了什么:进来以为概率模型只是「输出会抖一下」→ 出去知道数据里两成的解往左旋、 八成往右旋时,训练好的网络会按这个比例把两种都生成出来;网络本身仍然是确定性的, 变的只是那份初始噪声。
  • 代价与三条待办:进来以为它可以直接用 → 出去知道推理必须串行调用网络上千次(降一个数量级 也还有上百次),而书自己列了三条待办:更快的推理、怎么条件化、怎么把物理约束带回来。
  • 承重词一节 · 流匹配:进来以为这是又一种新模型 → 出去知道把朗之万更新里的随机项去掉, 剩下的那一项本身就是一个速度 —— 于是训练目标从「预测噪声」换成「学一个速度场」, 而我们对这条路径的形状有很大的自由。
  • 关键的自由度:进来以为路径是学出来的 → 出去知道最好的选择是规定它是直线, 因为直线意味着理论上一个欧拉步就能到,而弯曲的去噪路径可能要走几百步; 现实中路径并不完美笔直,但迭代次数大幅减少,而推理时间与步数直接成正比。
  • 澄清一个像是倒退的地方:进来以为这不就是退回归一化流吗 → 出去知道它摆脱了保持密度的约束, 而且可以单步训练、不必从头到尾反传整条链。
  • 一个容易漏的机制差别:进来以为两者只是损失不同 → 出去知道去噪在每一步会重新加入噪声, 而流匹配只用初始噪声,之后沿学到的向量场走,不再加噪。
  • 同台对比:进来以为「更快」通常意味着更差 → 出去知道 20 步的流匹配和 200 步的去噪精度可比, 实际快 10 倍;而 1 步的流匹配均值大致对、标准差彻底失败 —— 均值容易,分布才是难的。
  • 外推区的诚实观察:进来以为外推一定更差 → 出去知道低雷诺数一侧高估了方差 (训练数据里根本没有静态的情形),而看着更难的高雷诺数一侧处理得非常好。
  • ⚠️ 记号的坑:这一章偏离了前一章的视角,做的是前向问题,输入输出的角色是反过来的。

主走查: 翼型 RANS 在较大雷诺数下从稳态转成振荡解的那个分布 —— 125 个训练 case、32×32 的场、 同一个 1,185,218 参数的 U-Net、50,000 次迭代,去噪 30 分 40 秒 / 流匹配 30 分 44 秒; 6 个雷诺数各采 100 个样本,比均值场和标准差场;推理耗时 1 步 1 秒 / 5 步 6 秒 / 20 步 25 秒 / 100 步 2 分 9 秒,对上去噪 200 步的 3 分 40 秒。 另起一处(承接第 11 章):高斯混合上的去噪训练 —— 加噪约 200 步后两个峰消失成一个单峰, loss 0.153 → 0.062;流匹配版 loss 2.83 → 2.04。

承重词 · 单开一节: 去噪扩散 · 流匹配。 承重词 · 就地一段话: 扩散时间轴 · 前向加噪的一步跳(高斯叠加还是高斯) · 预测噪声 vs 预测信号 · 采样步数与推理成本 · 直线路径与欧拉步 · 向量场 · 条件化(只给一句,正式讲在 15 章) · RANS 的振荡解 · 均值场与标准差场。


14-physics-back-into-diffusion.md 把物理弄回扩散里(ch27 + ch28)

  • 扩散模型缺什么:进来以为它已经很强了 → 出去知道训练时网络、观测和样本之间没有直接的反馈回路, 所以没有任何机制能纳入 PDE 这类约束;而科学应用常常要求误差能压到任意指定的阈值以下。
  • 承重词一节 · 推理时引导:进来以为「加物理约束」当然是加进训练 → 出去知道书的裁决相反 —— 经典仿真有精度旋钮(残差阈值调小就更准),而网络的步数加到一定程度只会在 「模型能力给定的那个精度」上拍平,只有一个外部的物理过程能继续往下压。
  • 最朴素的做法及其两个问题:进来以为「在每步去噪后按仿真误差的梯度推一把」就行 → 出去知道样本此刻是有噪的(可以用一步预测解决),而更麻烦的是那个梯度步会扭曲分布采样, 最坏情况把后验里不同的点全拉向仿真器偏爱的那一个解。
  • 正确的做法:进来以为要改主网络 → 出去知道加第二个「控制网络」,参数只有主网络的一成, 主网络可以冻结,于是不必反传穿过它。
  • 技术要点(一)· 先把样本擦干净再问仿真器:进来以为把当前这个带噪样本直接丢给仿真器就行 → 出去知道仿真器很不喜欢噪输入,在噪样本上算出来的梯度更糟;做法是先用网络一步预测出 「它认为的干净样本」,再拿这个去算仿真误差。
  • 技术要点(二)· 控制信号从哪来:进来以为一定要仿真器可微 → 出去知道可微时控制信号直接给 「离目标多远 + 往哪走」,不可微时改用一个编码器把「离目标多远」学成一个信号。
  • 技术要点(三)· 什么时候才开始控制:进来以为从第一步就该管住它 → 出去知道早期样本几乎还是纯噪声、 控制无从谈起,实践中只在流匹配过程较晚的时刻(t ≥ 0.8)才启用控制,之前直接用预训练的流。
  • 为什么这样才理论上站得住:进来以为这是个工程 trick → 出去知道近似只影响控制信号, 而控制信号是网络的输入,损失还是原味流匹配的损失 —— 理论性质保住了; 这和「在推理时拿一个近似当引导项」形成对比,后者不在原始理论的覆盖范围内。
  • 实例(承重词以外的领域词就地讲):进来以为这只是又一个基准 → 出去知道强引力透镜是 「一个星系的引力把它背后星系的光掰弯,于是我们看到同一个源的好几个像」, 传统方法建模单个系统要几分钟到几天。
  • 承重词一节 · 概率流(ODE 与 SDE):进来以为另一条路 SMDP 只是换个说法 → 出去知道它把扩散时间 和物理时间合并,结构是「一个近似的反向物理仿真器 + 一个修正网络」; 推理可以带噪声项(随机)也可以去掉(确定性),而这两种走法用的是同一组权重。
  • 两个指标打架:进来以为确定性版当然更好 → 出去知道去掉噪声的版本重建误差最好但谱误差高 (解太平滑,缺了必要的小尺度结构),带噪声的反过来 —— 噪声在这里是熵源。
  • 玩具实现的诚实观察:进来以为训练好的网络在整个区间都可靠 → 出去知道靠近末端会出现符号翻转、 内容基本随机,因为网络主要只在训练数据附近被训练过。
  • 展开长度是怎么调上去的(原书 28.6 滑动窗口,补上,它是全书唯一一处讲「怎么把展开加长」): 进来以为展开步数是个定死的超参、一开始设多少就是多少 → 出去知道可以渐进地加 —— 从 4 步起步,每若干轮 +2,加 18 次;这也正是 15 章那个「m ≥ 8 才稳」的分水岭在实践里怎么跨过去的。
  • 全章的经验法则:进来以为扩散越用越好 → 出去知道只有当解是一个「用均值表示不好」的分布时 才该用它;而这种把物理纳进来的方式,基本上和第 08 章的可微物理是一回事。

主走查: 强引力透镜的反问题 —— 流匹配 + 可微仿真器给出平均 χ² 1.48、建模 19 秒; 最好的经典基线 AIES 是 1.74、慢约 35 倍;纯流匹配只和经典求解器持平;理论最好可能值 1.17。 另起一处:随机热方程(32×32、扩散系数 1、噪声强度 0.1)上确定性推理与随机推理的两个指标打架。

承重词 · 单开一节: 推理时引导(控制信号) · 概率流(ODE / SDE 两种走法)。 承重词 · 就地一段话: 冻结主网络 · 控制网络 · 一步预测 · 强引力透镜 · χ²(卡方,衡量 「模型给出的像和望远镜拍到的像差多远」) · 谱误差与小尺度结构 · 熵源 · 随机微分方程(SDE) · 随机热方程 · 滑动窗口训练。


15-temporal-prediction-and-stability.md 时间预测与无条件稳定(ch29 + ch30)

  • 为什么时间序列也要概率化:进来以为时间演化是确定的(一个状态决定下一个状态)→ 出去知道即使空间平均后的状态里有极微小的歧义,随时间也会导向截然不同的结果; 更现实的视角是我们只观测到系统的一部分,还有一部分在暗中影响它。
  • 书的「没什么可失去」论证:进来以为概率化会牺牲准确度 → 出去知道最坏情况下 未观测部分的影响可以忽略,那就得到一个均值状态、方差实际为零 —— 没什么可失去的。
  • 承重词一节 · 条件化:进来以为条件是输入、目标是输出,当然要区别对待 → 出去知道正确做法 反直觉:所有用于条件化的输入都要和输出被同样对待、一起加噪一起去噪;两条理由是 「逼网络真正用上条件」和「最初几步条件很噪、于是那几步基本是无条件的,条件里的误差 不会立刻进入预测」。推理时因为知道条件的真值,每步之后重算它,保证零漂移。
  • 记号的坑:进来以为时间就是时间 → 出去知道这里有两个时间(去噪时间和物理时间), 它们完全正交。
  • 现代 U-Net(兑现第 04 章的许诺):进来以为 U-Net 就是第 05 章那个 → 出去知道现在的版本 把 skip 上换成注意力、激活换成 GELU、每层加组归一化,并用正弦位置嵌入把去噪时刻接进各层; 而且常规注意力只用在瓶颈层(对输入尺寸是二次的),skip 上用线性注意力。
  • 承重词一节 · 无条件稳定:进来以为「一步步接着自己的输出往下跑,迟早会跑飞」是宿命 → 出去知道扩散过程逼网络学会处理状态里的扰动和累积误差,可以被自回归调用任意多次而不炸; 书在 20 万步 rollout 上没见到发散,但明确说这不构成证明。
  • 到底要什么成分:进来以为这要靠特殊的损失函数或技巧 → 出去知道书的判断是「没什么特别的」—— 合适的超参、足够大的模型、足够的数据就行,而且架构似乎不太要紧。
  • 最重要的判据:进来以为展开步数是个可以随便调的参数 → 出去知道它是分水岭 —— 展开 4 步以内一致地拿不到稳定的 rollout,8 步以上就够。
  • 三个不要紧的因素:进来以为稳定性这么难的事,一定对每个设计选择都敏感 → 出去知道有三样几乎不影响 —— 预测范式(输出残差还是直接输出下一状态)、把训练数据减到八分之一 (前提是仍保留完整的涡脱落周期)、以及换骨干架构;真正管用的只有展开步数。
  • 批大小与展开长度的裁决:进来以为小批次能替代展开 → 出去知道它能帮忙但不能免掉展开, 而且更长的展开比更小的批次更划算 —— 每轮的更新次数可以补偿回来,大批次反而更慢。
  • 什么时候扩散不划算:进来以为它到处都更好 → 出去知道输入输出关系唯一时它不更准,只更贵。

主走查(走查之前必须先讲清 马赫数 与 跨音速:速度与声速之比;接近 1 时流场里会出现激波): 跨音速尾流(雷诺数 10,000,训练马赫数 0.53–0.9,测试 0.50 / 0.51 / 0.52, 含大量与流动交互的激波)—— 三种稳定化手段各训 3 次、每次 rollout 展开 200,000 步, 谁稳谁不稳;三个「单步 + 训练噪声」的网络里有一个在头几千步内就退化成没有涡的均值流。

承重词 · 单开一节: 条件化 · 无条件稳定。 承重词 · 就地一段话: 马赫数 · 跨音速 · 去噪时间 vs 物理时间(两个正交的时间) · GELU · 组归一化 · 正弦位置嵌入 · 瓶颈层 · 消融实验 · 批大小与每轮更新次数。


16-graph-diffusion-and-benchmark.md 图上的扩散,以及七种方法的横评(ch31 + ch32 + ch33)

  • 换舞台:进来以为规则网格哪儿都能用 → 出去知道绕一个三维机翼要十万个以上的单元, 而只关心表面时七千个节点就够 —— 于是要在网格(图)上做扩散。
  • 一个必须点破的架构问题:进来以为图上的网络就是卷积换个说法 → 出去知道它靠邻居之间 一轮轮传消息,而这对大尺度现象失效(全局特征的去噪被消息能传到的距离卡住); 解法是在图的多个粗化版本上做 U-Net 式的传递。
  • 承重词一节 · 自编码器(整节从原 20 章移到这里,因为「潜空间」要靠它才讲得清): 进来以为压缩就是降分辨率 → 出去知道它是两个网络串起来 —— 编码器把一整个场压成几十个数、 解码器再把这几十个数还原成场,训练目标就是「还原得像」;瓶颈处那几十个数就是整个状态的压缩表示。 而传统的主成分分析这类办法构造上是线性的,表示不了有意思的解流形。
  • 承重词一节 · 潜空间:进来以为「在潜空间里做」只是省算力的技巧 → 出去知道它还是一次分工 —— 自编码器负责高频细节(小涡、空间梯度),扩散只管中到大尺度的模式(尾流、涡街); 解耦这两件事简化了学习,而且解码器还顺带清掉残余噪声。收益:更准、快 8 倍,训练只多约 55%。
  • 两个新主张:进来以为训练数据不完整就学不到完整的分布 → 出去知道跨许多不同 case 的全局视角 能把每个 case 的片面视野补全;而且扩散模型可以跳过冗长的瞬态热身,直接产生平衡态的样本。
  • 训练数据的关键限制:进来以为 250 个状态听起来不少 → 出去知道那只占「达到统计稳定所需」的 约一成,模型是在对每个 case 只有很片面的视野下训练的 —— 这正是上一条要证明的东西。
  • 承重词一节 · Wasserstein 距离:进来以为比较两个分布就是比均值和方差 → 出去知道要量的是 「把一堆土搬成另一堆要花多少功」;而且逐点算和在整张图上联合算是两回事 —— 前者不惩罚错误的空间相关性,后者会。
  • 横评那张表:进来以为不同方法差别在小数点后 → 出去知道所有方法的均值 R² 都在 0.97 以上、 几乎分不出高下,而标准差的 R² 从 0.98 一路掉到 −0.65(比预测一个常数还差)—— 学均值谁都会,学分布才是分水岭。
  • 逐条读表:进来以为贝叶斯网络和高斯混合是稳妥的老办法 → 出去知道它们的问题在分布图上一眼可见; 自编码器那一支有模态坍缩;而流匹配以零头的成本产生这些分布,因此一般更可取。
  • 这一部分的结账与最后的推荐:进来以为「更新的方法总更好」→ 出去拿到一条二选一的判据 —— 同一个输入有多个都对的答案时,用流匹配形式的扩散建模; 有可靠的一一对应的输入输出对时,用更简单的确定性训练(它不更准,只更贵)。

主走查(走查之前就地讲清 分离涡模拟:近壁面按 RANS 那样平均掉、远离壁面的大涡直接算, 是介于 DNS 与 RANS 之间的折中): 三维湍流里机翼表面的压力分布 —— 表面网格约 7,000 个节点(对比规则网格要 10⁵ 个以上单元), 训练数据是分离涡模拟里统计平衡刚达成后的 250 个状态;图上的 Wasserstein 距离 潜空间版 1.95 ± 0.89 / 物理空间版 2.12 ± 0.90 / 高斯混合基线 4.32 ± 0.86; 时间是真值求解器 2,989 分钟对上潜空间版在 8 个 CPU 线程上 49 分钟、单 GPU 上 2.43 分钟。 另起一处:椭圆柱表面压力上的七法横评表(真值分布是双峰的,由反复的涡脱落造成)。

承重词 · 单开一节: 自编码器 · 潜空间 · Wasserstein 距离。 承重词 · 就地一段话: 消息传递与图粗化 · 主成分分析(为什么不够) · 分离涡模拟 · 统计平衡与瞬态热身 · R² · 模态坍缩 · 贝叶斯神经网络基线 · 高斯混合基线。


17-reinforcement-learning-comparison.md 强化学习为什么输了(ch34 + ch35)

  • 换一套设定(一)· 没有标准答案,只有事后打分:进来以为训练总要先有一份「正确输出」→ 出去知道这里没有。拿 10 章那个卡门涡街改写成强化学习的说法:每一步允许往流场里施一个力, 但没人告诉你这一步该施多大;一整条跑完之后才给一个分数。 这三个词就是这么来的 —— 会变的那个流场叫状态,你每步能做的那件事叫动作, 接收动作、把流场往前推一步、再回给你新状态的那整套东西叫环境
  • 换一套设定(二)· 目标是一整条,不是一步:进来以为目标就是「每一步都别做错」→ 出去知道要最大化的是一整条轨迹(从头到尾那一串「状态-动作」)上所有分数加起来的总和, 所以为了后面拿更多分,现在故意少拿一点是对的。
  • 承重词一节 · 奖励:进来以为训练总要有标准答案 → 出去知道这里没有,只有事后打分, 而怎么打分完全是设计者定的 —— 这一章的奖励设计和可微物理那边的损失几乎一一对应 (每步给「施加力的负平方」,末尾给「离目标多远」)。
  • 两大类算法(一)· 策略梯度:进来以为要先学会评估好坏才能行动 → 出去知道有一条路根本不评估 —— 直接学一个「看到这个状态就输出这个动作」的函数,再按「这条轨迹总分高不高」去推它。
  • 两大类算法(二)· 值函数与 actor-critic:进来以为总分只能等跑完才知道 → 出去知道可以再训一个网络 专门估「处在这个状态、做这个动作,预计最终能拿多少分」;把「负责动」和「负责估分」 两个网络接起来,就是 actor-critic。
  • PPO 为什么存在:进来以为它只是当红算法 → 出去知道 actor 依赖 critic 的评分、 critic 又依赖 actor 探索出的状态,这种相互依赖会让学习崩掉;PPO 就是专门去限制 单个状态的价值估计能对行为造成多大改变。
  • 承重词一节 · 免模型:进来以为「用不用物理」是程度问题 → 出去知道这里是本质分界 —— 可微物理把损失的梯度穿过仿真步传回之前的时间步,而强化学习把环境当成没有梯度的黑箱, 长期依赖改由一个价值网络去追踪。
  • 为什么「施加的力有多大」才是对的指标:进来以为该比谁更接近目标 → 出去知道这个任务 在最后一步猛加一个巨大的力就能平凡地解决,所以理想解会顺着方程的动力学尽量少施力 —— 力的大小度量的是网络对物理学到了多少。
  • 三条结果:进来以为免模型的方法更通用所以不会差太多 → 出去知道三项全输 —— 视觉上更噪、施加的力更大、收敛显著更慢(墙钟时间和迭代数都是)。
  • 书给的解释与公平的另一面:进来以为输了就是这条路不行 → 出去知道两件事都成立 —— 数值求解器提供的梯度确实比强化学习那种无方向的探索好得多; 但强化学习不受训练集大小限制(样本是同策略现生成的:每换一版策略就重新采一批数据), 代价是训练时多了仿真开销,而且它根本不要求仿真器可微。

主走查: Burgers 控制 —— 32 个格子、粘性 0.003、32 步、dt=0.03、1000 个 case (800 训练 / 100 验证 / 100 测试),和第 10 章那个可微物理版同样的规模; 强化学习这边预训练的智能体已经训了 3500 次迭代,再微调 500 次约 2 小时,从头训将近 18 小时。

承重词 · 单开一节: 奖励 · 免模型(model-free)。 承重词 · 就地一段话: 智能体 · 状态 · 动作 · 环境 · 轨迹 · 回报总和 · 策略 · 策略梯度 · 值函数 · actor-critic · PPO · 同策略(on-policy) · 墙钟时间。


18-why-plain-gradients-fall-short.md 常规梯度为什么不够用(ch3.8 + ch36 + ch37)

位置说明: 原书把优化器那一节放在第 3.8 节,但它自己标了「deep-dive、可以先跳过, 强烈建议在读尺度不变与求逆之前读」。我们按它的建议把这一节移到这里, 和它真正服务的那一章合并。这是全书唯一一处对原书章序的实质改动,交稿时要说明。

  • 先看现象,不先讲理论:进来以为梯度当然指向目标 → 出去知道从 [3, 3] 出发要去原点, 梯度却是 [6, 108] —— 一个方向压倒性地大,一点都不对角。
  • 承重词一节 · 曲率(Hessian):进来以为「往下坡走」就够了 → 出去知道坡度只说了方向、 没说走多远;而曲率说的是「坡度自己变得多快」—— 知道了它就能一步跳到谷底, 这就是牛顿法。代价是曲率是一整张表(每对参数一个数),深度学习里根本拿不到。
  • 那条退化链:进来以为优化器是一堆并列的选项 → 出去知道它们是同一条链上依次丢东西的产物, 而每一档丢的是什么才是重点(中间三档只需挂名,力气全给两头): ① 完整曲率(牛顿法)→ ② 拿不到,就用历史步长去猜(Broyden、BFGS)→ ③ 限定成平方损失,曲率退化成「雅可比的近似逆」(Gauss-Newton)→ ④ 连这个也太贵,只留对角线 —— 这一档得到的就是读者天天在用的 Adam → ⑤ 连对角线也当成 1,就是梯度下降。
  • 每退一步丢了什么:进来以为这些近似只是精度打折 → 出去知道牛顿法二次收敛但系数一大就发散; 加自适应步长后能证明收敛,而证明需要的那个常数在深度学习里根本不知道, 所以那个保证「实践中帮不上忙」。
  • 丢掉的那个东西叫求逆:进来以为梯度的转置就够用 → 出去知道它的形状虽然对得上, 但它「活在 1/x 的空间里,而不是 x 本身」。
  • 承重词一节 · 尺度不变性:进来以为不同分量量级不同,归一化一下就好 → 出去知道物理过程 几乎总是给不同分量不同的缩放(有些方向一动就天翻地覆,有些几乎没影响), 而常规更新实际施加的是这个缩放的平方;尺度不变的意思是:同一个问题换一种参数化, 优化轨迹应当一模一样。并且澄清一个必然的误读:求逆不等于取负。
  • 四种更新的对账:进来以为选优化器是调参 → 出去知道有一张四行四列的表(梯度下降 / 拟牛顿 / 逆梯度 / 逆仿真器),分别在单位对不对、对函数敏感度的反应、接近最优时会怎样、 以及函数复合时中间空间的变化能不能提前知道这四件事上是对是错,各自的代价也不一样。
  • 局部逆:进来以为求逆要求函数全局可逆 → 出去知道「求平方」没有全局逆(每个值有两个解), 但可以从当前猜测出发选最近的那个 —— 这正是避免多模态解被拉平的关键(呼应第 01 章)。
  • 一个漂亮的物理论证:进来以为逆仿真器多半写不出来 → 出去知道仿真器的逆通常就是时间反演, 而只要物理过程不销毁信息,雅可比就非奇异 —— 所以期待它能被写出来并非不合理; 限制是累积的数值误差、刚性系统,以及低阶格式不够准。
  • 实测:进来以为这些差别很微妙 → 出去知道同一个起点走 10 步,梯度下降还剩 2.63、 牛顿法 0.93、逆仿真器 0.51,而第一步与理想对角线的贴合度分别是 1.05 / 1.26 / 1.36。
  • 全章最有洞察力的一段:进来以为轨迹好坏只能看结果 → 出去知道要去中间那个空间里看 —— 只有逆仿真器的轨迹是笔直朝原点的对角线;梯度下降之所以次优,是因为在真正做完这次更新之前, 我们根本不知道自己会落在中间空间的哪个点上,而牛顿法也没好到哪儿去。
  • 没有解析逆怎么办:进来以为这套东西只在「能手写出逆」的玩具上成立 → 出去知道拿不到解析逆时, 可以用 BFGS 数值地求那个局部逆,结果与解析版只差在浮点精度上。

主走查: y(x) = [x₀, x₁²]、损失 L = y₀² + y₁²、起点 [3, 3]、目标是原点 —— 起点梯度 [6, 108];三种方法各走 10 步的落点 [2.451, 0.962] / [0.052, 0.924] / [0.084, 0.504] 与到原点的距离 2.63 / 0.93 / 0.51(步长是特意选的,让第一步幅度大致相同以便公平比较)。 退化链必须在同一个起点上看得见: 在 [3, 3] 这一个点上,把每一档各走第一步、并排列出更新量 —— 梯度下降拿到什么、Gauss-Newton 拿到什么、Adam「只留对角线」之后那一步是多少、牛顿法是多少。 ⚠️ 书只给了三种方法的 10 步落点;Adam 与 Gauss-Newton 在这个点上的具体更新量是我们为演示算的, 要当场写明(算法本身是书里的)。

承重词 · 单开一节: 曲率(Hessian) · 尺度不变性。 承重词 · 就地一段话: 牛顿法 · 二次收敛 · 自适应步长 · Lipschitz 常数 · Broyden · BFGS · Gauss-Newton · Adam(必须留名) · 求逆 vs 取负 · 局部逆 · 逆仿真器 · 时间反演 · 非奇异 · 刚性系统。


19-inversion-sip-and-hig.md 求逆的两条路:反演物理,还是连网络一起反演(ch38–ch42)

  • 第一条路的三段式:进来以为「用上求逆」要重写整个训练 → 出去知道只有三步 —— 对损失做一个牛顿步得到中间空间的目标,对物理部分用逆求解器换算回输入空间, 网络那一半还是用常规梯度更新;两个学习率相乘才是权重的有效学习率。
  • 承重词一节 · 病态(接近奇异):进来以为「反推」只是正推的镜像 → 出去知道热扩散把细节抹平之后, 正向对高频是指数级压制,反过来就要指数级放大 —— 雅可比接近奇异,信息淹在噪声里。
  • 全书最反直觉的一处观察:进来以为可微仿真器的梯度总是往「撤销物理」的方向走 → 出去知道它等于把正向物理再施加到梯度上一次:正向在扩散,反传又做了更多扩散。 后果是拟合完粗结构后收敛极慢、高频细节恢复不了 —— 不是信息没了,是梯度下降处理不了。
  • 那要怎么修:进来以为直接用解析逆就行 → 出去知道那会炸(高频乘上指数级大的因子), 正确做法是假设观测里含一定量的噪声,用贝叶斯定理估计「这个观测值来自信号的概率」, 据此阻尼逆物理的放大,得到一个稳定的逆。
  • 一个要紧的对照:进来以为改进来自更好的网络训练 → 出去知道两个变体用的是同一套 基于反向传播的权重更新,改进纯粹来自逆求解器在中间空间算出的那一步。
  • 限制(一)· 它要一个前提:进来以为这套更新对任何求解器都能用 → 出去知道它需要一个 「近似尺度不变」的物理求解器 —— 也就是逆得写得出来、而且不会把某些方向放大到失控。
  • 限制(二)· 它只反演了一半:进来以为「装上求逆」之后整条链都高阶了 → 出去知道它只反演物理, 网络那一半仍然是普通的一阶更新;所以「连网络一起求逆」被书当成一个明确的待办 —— 那正是本章后半那条路(半逆)要做的事。
  • 限制(三)· 它对所有样本一视同仁:进来以为一视同仁总是公平的 → 出去知道在曲率过小或过大的区域, 一视同仁反而扭曲了样本的相对重要性 —— 有些任务(比如控制)传统训练反而更好。
  • 那个把全书缝起来的回收:进来以为这是一个孤立的优化技巧 → 出去知道它「其实很像监督训练」, 只是更新在训练时即时算出、并且避开了多模态解的平均(第 01 章那个抛物线); 同时它点破了第 08 章可微物理的困难 —— 那里的梯度没有被正确地求逆, 所以会带来第 18 章说的缩放问题和梯度消失/爆炸。
  • 承重词一节 · 半逆:进来以为求逆要么做要么不做 → 出去知道可以做「半个」—— 把整个雅可比做奇异值分解,把小于阈值的奇异值直接设成零(不是夹到一个小值, 因为那些方向恰恰最不可靠),剩下的取 −1/2 次方;灵感来自 Adam 的开方, 但 Adam 那是被对角近似逼出来的妥协,这里用的是完整的雅可比。
  • 一个隐藏的重点:进来以为批大小越大越平庸 → 出去知道这条路把一批里每个样本的雅可比拼起来, 求的是使损失最小的最优方向,而不是对方向做平均 —— 所以它反而受益于更大的批。
  • 最终排名:进来以为更贵的方法总该赢 → 出去知道在一个只有两个质点、四个自由度的振子上, 半逆那条路的精度比另外两种好约四个数量级;而反演物理那条在这个线性物理上没赢过 Adam (跑更久会反超)。⚠️ 三条曲线开头的台阶包含框架初始化时间,书自己说明了。
  • 三者的分工与这一部分的带走点:什么都不反演(一阶)/ 只反演物理(高阶)/ 网络与物理一起反演(一阶但用完整雅可比);账怎么算得回来 —— 训练更贵, 但训练好的网络运行时和别人完全一样,精度却显著更好, 当它被当代理模型执行大量次时省下的算力更多。

主走查: 二维反向热传导 —— 域是 64×64 个格子,扩散强度 t·ν = 8(大部分细节被抹平、 只留大尺度结构),从末状态恢复初始状态;两个变体的唯一区别是那一步逆求解器。 另起一处:耦合线性振子(两个质点、四个自由度、24 步四阶 Runge-Kutta、4 个全连接层、 4000 个随机位置)上三种方法的最终精度排名。

承重词 · 单开一节: 病态(接近奇异) · 半逆(奇异值分解)。 承重词 · 就地一段话: 中间空间(y 空间) · 逆求解器 · 有效学习率 · 反向热传导 · 高频与低频成分 · 贝叶斯定理与阻尼 · 奇异值 · 截断阈值 · Runge-Kutta · 一阶 vs 高阶更新。


20-side-roads-and-outlook.md 书没走的两条老路,以及它最后想说的话(ch43–ch47)

  • 这一章为什么和前面读起来不一样:进来以为每个主题都会像前面那样走到具体数字 → 出去知道这三个主题在原书里本来就只有散文、没有可执行代码,书自己说只做较短的介绍、 指向已有的开源实现;所以这一章的重点是判据(什么时候该用、什么时候不该),不是数字。
  • 降阶模型(一句回指 + 只讲它独有的那半):16 章已经讲过自编码器和潜空间是什么, 这里只补降阶模型独有的一条 —— 进来以为「加条捷径总没坏处」(U-Net 就靠 skip 接细节)→ 出去知道这里编码器和解码器之间绝不能有任何连接,否则两半就没法拆开单独用, 而「能单独用」正是降阶模型的全部意义。
  • 潜空间里的时间预测:进来以为压缩完就省事了 → 出去知道预测天然是递归的,所以照样必须 为多于一步的过程训练(又回到第 09 章的展开);而潜空间向量没有空间结构、只能用全连接层, 参数量涨得快,所以潜空间维度必须小。
  • 非结构网格与无网格方法(兑现第 04 章的许诺):进来以为网格总能画出来 → 出去知道 材料在动、连接关系很快过时的时候,更好的做法是只看「半径 R 以内的邻居」; 连续卷积靠一个「把单位球映到单位立方体」的映射,让卷积核里的未知量可以用一个简单的网格表示, 再加一个径向权重保证影响平滑地降到零 —— 权重比图网络少得多,求值也更快。
  • 一个诚实的失败案例:进来以为「让水静止下来」是最简单的情形 → 出去知道它恰恰最难 —— 训练数据里这类样本少,而且真正静止要走的步数远多于训练时展开的步数, 网络根本没被显式训练去再现它。
  • 一个意外的好处:进来以为学出来的求解器只能正着用 → 出去知道它本身就构造性地提供了 一个可微求解器,于是可以拿它去优化粘性这类输入参数。
  • 承重词一节 · 判别器:进来以为对抗生成网络已经不必了解 → 出去知道它的做法很有意思 —— 不直接训练生成器,而是拿第二个网络当损失,让它去分辨「这是生成的还是真的」; 难训的原因是两个耦合的优化问题要维持脆弱平衡,一旦一方坍缩就完了。
  • GAN 到底是为了解决什么(原书 46.5「Ambiguous solutions」,补上 —— 少了它,全书主线在这里收不了口): 进来以为 GAN 只是被扩散淘汰掉的旧模型 → 出去知道它是扩散之前唯一能躲开平均的办法: 拿超分辨率举例,一张低分辨率的图对应无穷多张合法的高分辨率图,按 L2 监督训练必然学到它们的均值 (糊);而判别器不问「像不像那一张」,只问「像不像真的」,于是允许网络挑其中一支。 这正是第 01 章那条抛物线在图像上的样子,书自己就是这么回指的。
  • 书对它的最终判断:进来以为它和可微物理可以叠加 → 出去知道有可微物理时, 可微物理训练很可能比「用判别器去近似 PDE 模型」更好,两者组合也注定不会更好; 但黑箱求解器给不出梯度时,它仍然有吸引力。
  • 结语:进来以为结论是「AI 会接管仿真」→ 出去知道书的判断是深度学习不取代传统数值方法而是增强它们, 而且「神经网络是不可穿透的黑箱」这个观念已经过时 —— 它应该被当成又一个数值工具, 在被正确使用时和传统仿真同样可解释。三个被点名的未来方向:化学反应 PDE 的实时智能控制、 等离子体与聚变、天气与气候。

主走查: 「一容器晃动的液体最终静止下来」这一个场景 —— 用降阶模型怎么做 (编码成低维、在潜空间里推进时间、解码回来)、用无网格粒子法怎么做(每个粒子只看半径 R 内的邻居), 以及它为什么恰恰是这套方法最容易失败的 case;对抗生成那一节则问「判别器分不分得出 这桶水是仿真出来的还是真的」。⚠️ 这个贯穿场景是我们的编排,失败案例本身是书里的。

承重词 · 单开一节: 判别器(GAN)。 承重词 · 就地一段话: 降阶模型(ROM) · 连续卷积 · 单位球到单位立方体的映射 · 径向权重 · 拉格朗日/粒子表示 · 超分辨率 · 多模态解与均值坍缩(回指 01 章) · 模态坍缩 · 生成器与判别器的脆弱平衡。


自查:任意两章的「出去时知道」不得是同一件事

容易看着像同一件事的两章它们分别落在哪主走查是不是同一个输入
02 与 0302 是坐标系(方程、正反问题、三档耦合、记号);03 是一步仿真到底在算什么、哪一步最贵同一团烟,但 02 停在「写成方程和格子」,03 走完十帧真数 —— 有意为之,03 是 02 的兑现
06 与 0706 是残差与软约束(v1:在网格上算导数);07 是 v2 这一支的实际表现与结构性缺陷不同(散度场 / Burgers 反问题)
07 与 0807 的出去是「PINN 差在哪、为什么」;08 的出去是「求解器怎么交出梯度、凭什么准三倍」有意共用同一个 Burgers 反问题 —— 这是书自己的对照实验,拆开讲会失去对比
08 与 0908 是梯度怎么来的(单步、隐式梯度、纯优化);09 是为什么单步不够、必须展开不同(迎风平流 / 烟雾入流优化)
09 与 1009 是为什么展开、梯度式怎么读;10 是展开真的做出了什么、以及长程控制不同(烟雾入流 / 卡门涡街)
11 与 1211 的出去是「怎么把一个分布的密度学出来」(归一化流、神经 ODE);12 的出去是「不学密度、只学方向」—— 换的是学什么,不是换架构同一个二维高斯混合(有意的,书自己就这么排);11 停在 FFJORD 只敢用 5000 个样本,12 才走朗之万与退火
12 与 1312 是分数本身与怎么采样;13 是分数被封装成两个成品(去噪扩散 / 流匹配)之后的对决高斯混合从 12 延续到 13(另起一处),但 13 的主走查换成翼型 RANS
14 与 1514 是「怎么把物理约束弄回扩散」;15 是「时间上一直跑下去为什么不炸」不同(引力透镜 / 跨音速尾流)
15 与 1615 的出去是长期稳定性要什么成分;16 的出去是分布学得对不对怎么量、谁学得对不同(跨音速尾流 / 三维机翼表面)
09 与 15都提展开步数。09 讲为什么要展开,15 给要几步才稳(m ≥ 8),14 讲怎么从 4 步加到几十步(滑动窗口)—— 三者是同一条线上的不同问题不同
18 与 1918 是诊断(缺的是求逆,有哪四种候选);19 是把求逆真的装进训练的两条实现路线与代价不同(二维玩具函数 / 反向热传导)
16 与 2016 讲自编码器与潜空间是什么(它服务于图上的扩散);20 只讲降阶模型独有的那一条(编解码之间绝不能有捷径,否则两半拆不开)不同(三维机翼表面 / 晃动的液体)

合并掉的行(起草时两头是同一件事):

  • 原计划 02 章的「记号约定」和 05 章的「归一化」各占一节讲「量纲/缩放」—— 合并逻辑改为:02 只留「model 专指物理方程」这一条(它管全书), * 上标挪到 06 章残差、测试集必须分布外挪到 05 章天花板; 缩放问题一律留到 05(归一化)和 18(尺度不变性),避免讲三遍。
  • 原计划 09 章有一节「分布漂移」——但它在 05 章已经单开一节从现象讲起, 09 章改为兑现那处伏笔(一句回指 + 直接进入「所以必须展开」),不重新解释。
  • 原计划 10 章和原书 ch20 各有一节「硬约束 vs 软约束」——合并进 10 章末一处; 而 06 章只到「软约束」为止、不许提前给出分界线,否则 10 章那一节就没有新东西了。
  • 原计划把原书 Part VIII 单独立三章,合并成一章 20(三个主题各一节), 因为它们在书里本来就只有散文、没有实操,分成三章会出现三个 5k 字符的薄章。
  • 原计划 04 章直接开讲架构 —— 改为把原 05 章的「代理模型」整节前移当 04 章第一节, 否则 04 章每一行都建立在一个还没立起来的前提上;05 章那里改成一句回指。
  • 原计划自编码器单开一节在 20 章 —— 前移到 16 章「潜空间」之前,因为潜空间要靠它才讲得清; 20 章改成回指 + 只讲降阶模型独有的部分。

兑现承诺候选(写正文时逐条记账,完稿在总纲兑现表逐行核)

许诺在哪应兑现在哪
01 章「这个缺口一直悬到全书后半」(只拿一个模态)11–13 章(学整个分布)
01 章 收口(一)「监督 vs 把物理放进训练这一刀会被切成三档」02 章三档耦合一节
01 章 收口(二)「还有一把正交的刀:一个答案 vs 一整个分布」11 章开篇 + 13 章「它到底带来了什么」
02 章「不可压那个硬约束有多贵,下一章走查」03 章压力投影一节
02 章「三档耦合各是什么,后面各有整块」05(第一档)/ 06–07(第二档)/ 08–10(第三档)
04 章「粒子与无网格怎么做,第 20 章」20 章连续卷积一节
04 章「现代化的 U-Net」15 章现代 U-Net 一节
05 章「必须把仿真器包进训练,否则分布漂移」09、10 章
06 章「v2 这一支,07 章整章讲(名字和定义都留在那里)」07 章第 1 节
06 章「那么硬约束长什么样?要等求解器真的进来」10 章末「硬约束长什么样」一节
02 章「* 上标的约定挪到真要用它的地方」06 章残差一节
02 章「测试集必须分布外的约定挪到真要用它的地方」05 章天花板一节
04 章「PINN 的名字和那句重评价留到 07 章」07 章第 1 节
06 章「零空间这个名字留到本章末」06 章「两条诚实的观察」一节
08 章「可微物理自己的贵:展开越多越难学」09 章展开的梯度式 + 15 章 m ≥ 8
09 章「生成式方法给了纳入噪声更有根据的路」15 章无条件稳定
10 章「很难用别的方法打败一个好的展开设置」15 章消融实验
13 章三条待办(更快推理 / 条件化 / 物理约束)13 章自答第一条 · 15 章第二条 · 14 章第三条
17 章「强化学习与可微物理的对比」17 章自答(和第 10 章同规模的任务)
14 章「展开长度怎么从 4 加到几十」(滑动窗口)14 章自答 + 15 章 m ≥ 8
20 章「GAN 是扩散之前唯一能躲开平均的办法」20 章自答 + 回指 01 章抛物线
18 章「梯度下降丢掉的是求逆」19 章两条实现路线
19 章「回收第 01 章的抛物线与第 08 章的困难」19 章自答 + 总纲第 3 节收口

每章要走的书架锚(② 类来源;书自己划出去的入门层,我们书架完整覆盖)

走哪几条
01神经网络与训练:shelf=ai-book-reference/nndl-2e#11-backprop-and-autodiff.md
04卷积 nndl-2e#13-convolution.mddeep-learning-crash-course#05-convolutions.md;U-Net deep-learning-crash-course#07-u-net.md;注意力 nndl-2e#20-attention.md#21-transformer.md;图网络 nndl-2e#23-graph-message-passing.md#24-classic-gnn.md
05优化器与 Adam nndl-2e#17-optimization.mddive-into-deep-learning#14-optimization.md
07自动微分 nndl-2e#11-backprop-and-autodiff.md
11KL 散度与概率基础 nndl-2e#03-math-probability-and-information.md
12分数与朗之万 nndl-2e#38-diffusion-and-flow.md
13扩散与流匹配 nndl-2e#38-diffusion-and-flow.mddeep-learning-crash-course#12-diffusion.md
16自编码器 nndl-2e#37-vae-and-gan.md;图网络 nndl-2e#23-graph-message-passing.md
17PPO 与策略梯度 reinforcement-learning-sutton-barto#13-policy-gradient.md
20自编码器与对抗生成 nndl-2e#37-vae-and-gan.mddeep-learning-crash-course#11-gan.md

上表 16 个章文件已逐条核实存在(2026-08-29)。 引用时仍要打开对应那一章、 写清 事实= 你依赖它的哪一句,不能只挂地址。

书架上没有、只能走 ④ 类通用知识 + 少量 ③ 类核实的(这是拆解成败所在)。 每一个都必须落到一章一行,落不下的写进「本书不讲」——下表就是认领账,不许再有无主的词:

谁认领(章 · 位置)
PDE、场、平流、扩散、激波、散度、边界条件02 章「离散化」一节与「Navier-Stokes 多的那一条」
有限差分与模板(stencil)、椭圆型 vs 双曲型02 章离散化一节起头,04 章「卷积核就是模板」讲透
交错网格、半拉格朗日平流、泊松方程、压力投影03 章(各占一节或一段)
雷诺数、攻角、翼型、RANS、伯努利关系05 章「就地一段话」那一组,放在翼型走查之前
湍流、涡量、雷诺应力、湍动能、DNS09 章「一个决定性的实证」那一行之前
共轭梯度07 章(PINN 与经典方法不兼容那一节)
多重网格、伴随方法08 章「为什么不直接用框架自带的算子」一节
涡脱落与卡门涡街、投影10 章(单开一节 + 硬约束一节)
布朗运动与随机微分方程、朗之万动力学12 章
Wasserstein 距离分离涡模拟、R²16 章
马赫数、跨音速15 章主走查之前
引力透镜、χ²14 章「实例」一行
奇异值分解、病态19 章
拉格朗日/粒子表示、连续卷积20 章
本书不讲(明确写进「不覆盖什么」): 谱方法的数学、湍流模型的分类学、有限元、实验流体测量——

必须抓一手页面核对、不许凭记忆写的(书只给了编号或干脆没引): Transformer(书把注意力讲得很完整,但全书没有引 2017 年那篇原论文)、 去噪扩散(书推了整套算法,却没给正式引用编号)、U-Net、Adam、FNO、流匹配、rectified flow。 一次抓一个,同一地址失败两次立刻换源。


一条要先说清的门禁情况(不是误报,是漏报)

book-jargon 的词表里,这本书的承重词一个都没有:PDE、雷诺数、马赫数、激波、湍流、 散度、平流、泊松、伴随、朗之万、雅可比、有限差分、求解器、仿真、网格、微分方程、奇异值、 后验、分数、扩散、展开 —— 逐个查过,命中数全是 0

所以这本书跑 book-jargon 会近乎全绿,而那不说明任何事:它查不出的正是最会把读者挡在门外的词。

按规矩不许改脚本(改尺子不是改书),这条写在这里上报。 写正文时的实际做法: 红线三照常执行,承重词的首现解释靠上面每章的「承重词」行和逐节的「进来→出去」自己盯, 不依赖机器

立场与利益相关(总纲第 2 节必须写)

  • 书里几乎所有「我们的方法赢了」的对比,被比的都是作者组自己的工作 —— 逆仿真器那套、半逆那套、solver-in-the-loop、图上的扩散、自回归条件扩散、 合并扩散时间与物理时间的那条路、以及全书用的仿真框架,全部出自同一个组,参考文献里自引占大头。 这不是问题,但必须点明。
  • 书对 PINN 的判断极重(「多年研究仍然解决不了真实世界的问题,这指向了这条路线的根本性问题」), 而全书没有系统评估近年为它提出的修补。拆解里标成「作者的判断」并说明反面工作存在。
  • 对 FNO 的否定只基于参数规模,没提后来的分解式变体。