跳到主要内容

可微物理:让求解器交出梯度

1. 这一章讲什么

三件事: 「可微物理」这四个字具体是什么操作(答案:给求解器的每一步各配一个求导的办法); 一个真实的求解器步骤的梯度长什么样(书把它手写出来了,而且含义很朴素); 以及它在同一道题上凭什么比第 07 章那条路准三倍多。

它在全书链条里的位置:这是全书的第一个落点。 第 05 章说了第一档的死穴、第 06 和 07 章说了第二档的死穴; 这一章开始给正面方案。

这一章里根本没有神经网络。 这不是疏漏——书故意先在没有网络的情况下 把梯度这件事讲透,网络要到第 09 章才进来。

2. 顶层全景

第 03 章那条五步流水线
┌────┬────┬────┬────┬────┐
│ 平 │ 浮 │ 平 │ 扩 │ 压 │ 正向: 状态 u(t) ──▶ 状态 u(t+Δt)
│ 流 │ 力 │ 流 │ 散 │ 力 │
└────┴────┴────┴────┴────┘
▲ ▲ ▲ ▲ ▲
│ │ │ │ │ 反向: 每一步各交出一个
└────┴────┴────┴────┴─── 「输入变一点、输出变多少」

这就是「可微物理」

┌───────────┴───────────┐
① 有的步骤直接手写 ② 有的步骤不能傻算
(平流:两行公式) (解方程组:要用隐式梯度)

这张图在讲什么: 可微物理不是换掉求解器,是给已有的求解器每一步各配一个求导函数难点全在第 ② 类步骤上,而那正是这一章最有价值的一节。

这一章的数字都是书里的: 走查里那个密度场是我们编的(会当场声明), Burgers 那一组对比数字是书里真跑出来的。

3. 一句定义,和一个很硬的前提

可微物理(differentiable physics,书里缩写成 DP)的定义只有一句: 物理系统的可微数值仿真。 中心目标是用已有的数值求解器去增强和改进机器学习系统1

注意「已有」这两个字。 这不是要发明新的求解器, 是要给几十年积累下来的那些求解器装上一个新能力:回答「输入变一点,输出会变多少」。

前提书说得非常硬:你得先有一个连续的模型公式——「没有这个我们就完了」1这不是场面话,它划走了一整类问题: 你手上如果只有数据、没有方程,这条路从第一步就走不通。

第二个前提是结构上的。 第 03 章说过,一步仿真被拆成一串算子依次作用; 可微物理要求这串算子里的每一个,都能提供对它自己输入的梯度2

「一串算子每个都可导,整条链就可导」——这条规则叫链式法则: 一环套一环的时候,总的变化率就是各环变化率连乘起来。 训练神经网络靠的也是它,所以两边是同一件事。

这条定义一摆出来,第 06 章那处伏笔当场就揭晓了。 第 06 章那个变体一(在格子上算残差、拿一个可微的散度算子把梯度传回网络), 要求的正是「算子能提供对自己输入的梯度」这同一件事—— 书自己也这么说:变体一**「基本上是可微物理训练的一个子集」**3

差别只在这条链子有多长。 变体一那条链只有一环:网络出解 → 算子算残差 → 完事; 而这一章要接的链子是「一步仿真」整条流水线,下一章还要把它按时间接上十几遍。 所以不是两条路,是同一条路的短版和长版。

4. 雅可比:这里的导数不是一个数,是一整张表

先看现象。 第 01 章说「梯度 = 这个数增加一丁点,损失会变多少」,那时候两头都是数。 可这里,输入是一整个场(几千个数),输出也是一整个场。

于是「输出对输入的导数」不是一个数,是一整张表: 表里第 i 行第 j 列写着「第 j 个输入增加一丁点,第 i 个输出会变多少」。 这张表叫雅可比矩阵(Jacobian)2

它有多大? 拿第 03 章那个 32×40 的烟羽算:一个状态几千个数, 那张表就是几千 × 几千,上千万个格子。而这只是一步。

所以实践中永远不构造这张表。 用的是反向模式微分—— 只算「这张表的转置乘上一个向量」,一次得到一个和输入同样大小的结果; 这个操作叫雅可比-向量积4

这正是深度学习框架训练网络时在做的事,所以两边能无缝接上。 书的原话是:一旦求解器的算子支持雅可比-向量积的计算, 就可以像塞进一个全连接层、或者一道「把大于零的留下、小于零的压成零」这样的取舍那样(书里叫激活函数), 把它们塞进深度学习流水线4

5. 那为什么不用框架现成的算子把求解器搭出来?

这是书自己提的问题,而且它说这个问题「非常合理」: 大多数物理求解器都能拆成一串向量和矩阵操作, 所有主流深度学习框架都支持这些操作,那为什么不直接用它们搭一个求解器?5

书的回答分两步。

第一步:理论上确实可以。

第二步,问题出在存中间状态上。 框架里每一个向量矩阵操作都是单独计算的, 而且内部必须把当前正向求值的状态存下来,反传时要用可对一个典型的仿真来说,我们并不关心求解器产生的每一个中间结果—— 我们关心的是「从 u(t) 到 u(t+Δt)」这种有意义的更新5

所以书给的做法是:把求解过程拆成一串「有意义但整块的」算子 (meaningful but monolithic)。「整块」是关键—— 一个算子内部想怎么算就怎么算,只要它整体能交出梯度。

这么做的三个好处,书列得很清楚5:

  1. 省掉大量不必要的中间结果;
  2. 可以为每个算子各自挑最好的数值方法去算更新和导数;
  3. 能复用伴随方法领域几十年积累的技术—— 书举的例子是多重网格求解器求矩阵逆的那个线性运行时。

这里要留两个名字,因为你出门会撞见: 伴随方法(adjoint method)是几十年前就有的一套「怎么高效算出目标对参数的导数」的技术, 书说可微物理本质上等价于「伴随方法 + 深度学习」6; 多重网格(multigrid)是一类在粗细不同的几层网格之间来回跑、 从而把大方程组解得很快的方法。

书也写了这条路的反面,而且写得很有性格: 它要求你对手上的问题和数值方法有一定理解;而且现成的求解器往往不自带梯度计算。 书的原话是:如果我们连自己的模型都不真懂,那大概本来就该回去多学一学7

6. 走查:一维平流的梯度,手写出来

这是全书唯一一处把梯度真的算给你看的地方,值得逐步走。

任务: 有一片密度(比如染料),它在一个速度场里被搬运。 反问题是:找一个速度场,把初始的那片密度搬成我想要的目标形状8

先看那一步更新怎么写。 用的是一阶迎风格式(first-order upwinding)。 「迎风」的意思很朴素:算一格的变化时,只往流动的上游看,不看下游—— 因为东西是从上游飘过来的,下游的值和这一格这一步该变多少无关8

具体到公式,只有两行:

d_i(t+Δt) = d_i − Δt · [ u⁺_i · (d_{i+1} − d_i) + u⁻_i · (d_i − d_{i−1}) ]
其中 u⁺_i = min(u_i/Δx, 0) u⁻_i = max(u_i/Δx, 0)

这两个 min / max 就是「迎风」这个动作本身: 速度为负(往左流)时 u⁻ 是零,只有右边那个邻居起作用; 速度为正时反过来,只有左边那个邻居起作用8

主走查第 1 步(正向,一格): 挑五个相邻的格子,密度是 d₃ = 0.2、d₄ = 0.5、d₅ = 0.9、d₆ = 0.4、d₇ = 0.1, 格子宽 Δx = 1、时间步 Δt = 0.5,第 5 格的速度 u₅ = −0.4(往左流)。 这些数是为演示编的,不是书里的数值。 因为速度为负,u⁺₅ = −0.4u⁻₅ = 0,只有右邻起作用: d₅(新) = 0.9 − 0.5 × (−0.4) × (0.4 − 0.9) = 0.9 − 0.1 = 0.8右边比自己稀,东西往左流,所以这一格被稀释了一点。

现在求梯度。 把上面那个式子对 u_i 求导,书给出的结果是9:

∂𝒫/∂u_i = (Δt/Δx) · d_i − (Δt/Δx) · d_{i+1}

主走查第 2 步(反向,同一格): ∂𝒫/∂u₅ = 0.5 × 0.9 − 0.5 × 0.4 = 0.45 − 0.20 = 0.25含义:第 5 格的速度每增加 1,这一格下一步的密度就多 0.25。 (同样是按上面那些编的数算的。)

书对这个结果给的直觉一句话就够:速度 u_i 的变化,取决于密度的空间导数; 而因为用的是一阶迎风,只牵涉两个邻居——高阶方法会依赖更多的项9

这一步的意义:一个求解器算子的梯度不是黑魔法,它就是把那个更新式求一次导。 真正的工程量在于「求解器里的每一步都得这么办一遍」,以及下一节那种硬骨头。

7. 时间步怎么串起来

先看一个吓人的想法。 跑 20 步仿真,是把同一个函数套了 20 层。 那要求整条链的梯度,是不是得先把这个 20 层嵌套展开成一个巨大的表达式?

不用。书说每一步平流都可以当成一个独立的、模块化的操作; 靠雅可比的线性性质逐步往回倒,每一步给最终的梯度贡献一项,累加起来就是答案10

书的收尾把两个世界缝在了一起: 这个过程和普通的神经网络训练极其相似—— 从一串嵌套的函数调用里算雅可比-向量积,正是深度学习框架训练网络时做的事; 区别只在于那边的自由度是网络的权重,这边是速度场10

所以实践中我们要做的,只是给求解器的算子提供一个自定义的雅可比-向量积函数。

8. 隐式梯度:不要盲目地对正向计算反传

这是全书最有洞察力的一段之一,而且它有立刻能用的价值。

先看那个硬骨头。 第 03 章那个压力投影里,有一步是「解一个泊松方程」—— 写成矩阵的语言就是乘上一个矩阵的逆

外面那层梯度、里面那层散度都是线性算子,求导很容易。难的是那个矩阵的逆。

而实践中这个逆是用迭代求解器近似出来的(比如共轭梯度法,第 07 章提过)。

天真的做法:把这个迭代求解器拆成一步一步,对每一步反传。

书说:这当然做得到,但这不是个好主意。 理由有两条11:

  1. 会引入数值问题,而且非常慢;
  2. 框架默认会为每个可微算子存下内部状态, 于是内存里会攒下海量的中间状态—— 而这些状态对我们原本那条 PDE 毫无意义,它们只是求解器自己的中间状态。

正确的做法漂亮得出奇,只用一步观察。

「解方程组」这一步写成 p = (∇²)⁻¹ b,那么 ∂p/∂b 就是 ((∇²)⁻¹)ᵀ 而拉普拉斯算子 ∇² 是对称的——一个矩阵和它的转置相等—— 所以 ((∇²)⁻¹)ᵀ = (∇²)⁻¹,和正向那个逆一模一样12

结论:反向传播时,直接再调用一次同一个迭代求解器就行。 既不用把它拆开,也不用存任何中间状态; 而且只要正向那个求解器选得好,反向的性能和精度和正向完全一样12

主走查第 3 步(硬骨头那一步): 正向——把速度的散度交给迭代求解器,得到压力 p。 反向——把「损失对 p 的梯度」当成新的右端项,交给同一个迭代求解器再跑一遍, 得到的就是要往回传的东西。 中间状态:零个。

书自己加粗的带走点:

不要盲目地对正向计算做反向传播,要想清楚正向那些解析方程里, 哪些步骤该去算梯度。像上面这种情况,我们常常能找到更好的梯度解析表达式, 然后再去数值近似它。13

书还加了两个附注: ① 上面这套东西本质上是隐函数定理给出的隐式导数—— 不显式地把正向每一步都求导,而是利用「解满足某个方程」这个事实直接写出导数; ② 可以把迭代求解器的每一步当成虚拟的「时间」,对这些步反传; 这样网络就能和迭代求解器交互——书举的例子是训一个网络去给共轭梯度求解器出初始猜测14

9. 同一道题的正面对决

书拿第 07 章那个一模一样的 Burgers 反问题,换成可微物理再做一遍。

先说一件容易漏的事:这里根本没有神经网络。 因为离散化一旦定下来,系统的演化就完全由数值求解器决定,唯一的未知量就只剩初始状态; 而初始状态就是一堆浮点数,可以直接当变量优化。 于是整个问题退化成纯粹的基于梯度的优化15

这一点值得单独记住: 可微物理的第一步不需要网络。 书还给了一条工程箴言:像这样简单的直接重建问题,永远是测试一个可微求解器的好起点; 可以在牵扯网络之前独立测好。 如果直接优化都不收敛,那多半还有根本性的问题,把网络牵进来毫无意义16

成绩17:

PINN(第 07 章)可微物理(这一章)
优化10,000 次迭代50 步梯度下降
运行时间101 秒132 秒(书称「相当的运行时间」)
损失 起点 → 终点0.100 → 0.0290.383 → 0.0033
全序列平均绝对误差0.192980.06382

书的裁决一句话:PINN 的误差比可微物理的重建大了三倍多18

理由书也给了,而且只有一句:可微物理为整个解、包括它所有的离散点和所有时间步提供梯度, 而不是局部的更新17

摊开看这句话: 第 07 章那条路每次只在随机撒的 1000 个点上打分, 每个点各自往下压自己那一点的残差; 这一章这条路每一次更新,梯度都穿过 32 个时间步、128 个格子的整条演化传回来—— 它改的是「初始状态」,而每一步的改动都知道自己在 16 步之后造成了什么。

主走查第 4 步(整道题): 初始状态的 128 个浮点数(未知量)→ 用可微求解器往前跑 16 步 → 和 t = 0.5 的观测比,得到损失 → 梯度穿过那 16 步一路传回初始状态 → 挪一步 → 重复 50 次 → 损失 0.383 → 0.0033,全序列平均绝对误差 0.06382

可视化上的观察,书两边都写了: PINN 恢复出了解的整体形状、时间上的约束至少部分满足了, 但没能很好地捕捉真值的幅度; 可微物理这一版明显更接近——因为梯度在整个序列上流得更好, 而且正向和反向都用得上基于网格的离散化; 但它仍然缺了真值里某些更锐利的特征19

10. 正式对账:「不需要离散化」是个假象

第 15 章是第二档和第三档的总结算,其中最值得引的是这一段。

PINN 看起来「不需要离散化」,而书说这只是第一眼的优势20

理由是一条逻辑:PINN 最终不可避免要在计算机里给出解,所以必须把问题离散化。 它是在训练过程中构造这个离散化的—— 而这个构造过程听凭底层的非线性优化摆布,从外部很难控制。

一个具体的表现:书说 PINN 的解在「把信息往时间上游传播」这件事上有显著困难20—— 这正是第 07 章那个「t = 0 精度最差」的机制性解释。

效率上还有一条很硬的对比: PINN 想采样解上的一个点,就得完整过一遍整个网络的全部数值; 网络实质上要编码整个高维的解,它的大小同时也决定了求导的效率21而可微物理只需要在网格上算一个很局部的邻域,就能采样一个点。

11. 但可微物理也有它自己的贵

书这一节很诚实,而且它埋下了第 09 章的引子。

因为可微物理能覆盖大得多的解流形,这些流形的结构通常也更难学22

书给的具体例子就是下一章的主题:训练时展开的迭代数越多 (也就是往未来看得越远),这个信号就越难学。

后果有两条:每次网络迭代不但更费算力,而且往往需要更长时间才收敛。

书的辩护也在同一段:这看着又贵又慢,但通常是因为要学的信号本身更复杂22

这句话直接把第 09 章逼出来了:那个「往未来看几步」是什么、为什么非做不可、 做到什么程度会失控——全在下一章。

12. 主走查合起来看

发生了什么具体的数
1一步平流的正向d₅ = 0.9,u₅ = −0.4d₅(新) = 0.8(编的数)
2同一步的梯度∂𝒫/∂u₅ = 0.5×0.9 − 0.5×0.4 = 0.25(编的数);只牵动两个邻居
3硬骨头那一步解方程组:反向再调一次同一个迭代求解器,中间状态零个
4多步怎么串每步当独立模块,靠雅可比的线性性逐步回溯,每步贡献一项
5整道题128 个初始未知数 → 跑 16 步 → 损失 → 梯度穿过 16 步传回 → 50 次
6结果损失 0.383 → 0.0033,132 秒
7对照全序列平均绝对误差:PINN 0.19298 对可微物理 0.06382,差三倍多

第 1、2 步的密度和速度是我们为演示编的(公式和「只牵动两个邻居」这个结论是书里的); 第 5 到 7 步的每个数都是书里那次运行的真实输出。

13. 作者的判断与证据

书里给了证据的:

说法证据
可微物理在这道题上比 PINN 准三倍多同一套真值上的两个数:0.19298 对 0.0638217
隐式梯度可以直接复用正向求解器一个数学推导(拉普拉斯算子对称)12
迎风格式的梯度长什么样书自己推的,给了完整的式子9
展开越多信号越难学这一章只有断言,证据在第 09、10、15 章22

作者的判断:

说法为什么算判断
「PINN 在性能和兼容性上有明确的局限」书自己标了「as of this writing」,而且只测了一个例子23
「拆成整块算子是个非常好的主意」没有对照实验——书没有把「用框架算子逐个搭」的版本跑给我们看5
「贵是因为要学的信号本身更复杂」这是一句辩护,不是测量22

判断(我们的,不是书里的): 那个「三倍多」的对比,公平性只在任务上成立, 在方法配置上不成立。可微物理那一版用上了正确的离散化(128 个格子、32 步的真实求解器), 而 PINN 那一版只有 3021 个参数; 更要紧的是,可微物理那一版的未知量只有 128 个数,PINN 要用 3021 个参数去编码整个时空的解。 两边解的根本不是同一个规模的问题。 如果错,会错在: 如果你手上真的没有可用的离散化(书说的那个「没有连续公式就完了」), 那这个对比就不成立——因为可微物理那条路你压根走不了,PINN 是唯一选项。 判据是:你有没有一个能跑的数值求解器? 有,书的结论成立;没有,这一章对你没有用。

14. 边界与局限

  • 这一章没有神经网络。 它证明的是「梯度能算出来、而且算得好」, 不是「网络加上它会更好」——那是第 09、10 章的事;
  • 那个对决只有一个任务、一维、32 步。 结论的强度受这个规模限制;
  • 书没有给「实现一个可微求解器要花多少功夫」的量。 它承认「实现更复杂」,但没有说复杂到什么程度;
  • 隐式梯度那一招依赖矩阵对称。 拉普拉斯算子恰好对称, 换一个不对称的算子这一招就不成立,而书没有讨论那种情况该怎么办;
  • 梯度只手推了一个算子(一阶迎风平流)。五步流水线里另外四步的梯度,书没有展开;
  • 书自己说这条路要求你懂问题和数值方法——这是一条真实的门槛,不是谦辞。

15. 可带走的

  1. 可微物理 = 给已有的数值求解器装上「输入变一点、输出变多少」的能力。 它不是一种网络,也不是一种新求解器;
  2. 前提是硬的:你得先有一个连续的模型公式。 没有方程,这条路走不了;
  3. 这里的导数是一整张表(雅可比),但永远不要构造它—— 只算「它的转置乘一个向量」,一次得到一个和输入同样大小的结果;
  4. 别用框架的基础算子逐个搭求解器。 拆成「有意义但整块的」算子: 省中间结果、每块挑最好的数值方法、能复用伴随方法几十年的技术;
  5. 一个求解器步骤的梯度,就是把它的更新式求一次导。 一阶迎风平流的梯度含义是:速度的变化取决于密度的空间导数,只牵动两个邻居;
  6. 多步不用展开成一个大表达式。 每步当独立模块,靠雅可比的线性性逐步回溯;
  7. 最重要的一条:不要盲目地对正向计算反传。 对「解一个方程组」这种步骤,先想想有没有更好的梯度解析表达式;
  8. 拉普拉斯算子对称,所以反向那个逆和正向一模一样—— 直接再调一次同一个迭代求解器,零个中间状态;
  9. 可微物理的第一步不需要网络。 先做一个纯优化的重建问题当测试; 直接优化都不收敛,把网络牵进来毫无意义;
  10. 「不需要离散化」是个假象。 任何方法最终都要在计算机里给出解, 区别只在于你控不控制得了那个离散化;
  11. 它自己的代价是:解流形更大、更难学,展开得越远信号越难学—— 这直接逼出了下一章。

16. 原文地图

主题原书章原文位置
可微物理的定义、以及「没有连续公式就完了」13.1 Differentiable operatorstext/07-p121-140.txt:10(搜「differentiable numerical simulations」) · text/07-p121-140.txt:27(搜「we're in trouble」)
每个算子都要能提供梯度13.1 同上text/07-p121-140.txt:49(搜「Jacobian matrix」)
雅可比、反向模式、雅可比-向量积13.2text/07-p121-140.txt:91(搜「Jacobian-vector product」) · text/07-p121-140.txt:92(搜「like you would include a regular fully-connected layer」)
「为什么不用框架现成的算子」13.2 同上text/07-p121-140.txt:94(搜「why don't we just use these operators」) · text/07-p121-140.txt:101(搜「meaningful but monolithic」)
三个好处、伴随方法、多重网格13.2 同上text/07-p121-140.txt:104(搜「adjoint method optimizations」)
「连自己的模型都不懂就该回去多学学」13.2 同上text/07-p121-140.txt:110(搜「go back to studying it」)
迎风格式的更新式13.4text/07-p121-140.txt:188(搜「first order upwinding scheme」) · text/07-p121-140.txt:200(搜「one-sided finite-difference stencil」)
梯度的推导与直觉13.4 同上text/07-p121-140.txt:213(搜「the change of the velocity」)
时间步靠雅可比的线性性逐步回溯13.4 同上text/07-p121-140.txt:238(搜「modular」) · text/07-p121-140.txt:267(搜「very similar to」)
隐式梯度:天真做法为什么不好13.5 Implicit gradientstext/07-p121-140.txt:294(搜「certainly possible, but not」)
对称性、直接复用同一个求解器13.5 同上text/07-p121-140.txt:300(搜「symmetric matrix」)
「不要盲目地反传」这个带走点13.5 同上text/07-p121-140.txt:311(搜「not to blindly backpropagate」)
隐函数定理、把迭代步当虚拟时间13.5 同上text/07-p121-140.txt:315(搜「Implicit Function Theorem」)
这一章没有网络、未知量只剩初始状态14 Burgers Optimization with a DP Gradienttext/07-p121-140.txt:345(搜「the only real unknown is the initial state」)
50 步优化、132 秒、损失曲线14.4text/07-p121-140.txt:598(搜「Optimization step 45」) · text/07-p121-140.txt:105(搜「Runtime」)
「梯度覆盖整个解」这个原因14.4 同上text/07-p121-140.txt:602(搜「comparable runtime」)
两边的平均绝对误差14.5text/07-p121-140.txt:711(搜「MAE PINN」)
「大三倍多」的裁决、工程箴言14.5 同上text/08-p141-160.txt:1(搜「more than 3 times larger」) · text/08-p141-160.txt:5(搜「good initial test for a DP solver」)
「不需要离散化」是假象15.2 Discretizationtext/08-p141-160.txt:48(搜「discretization-less」) · text/08-p141-160.txt:54(搜「significant difficulties propagating」)
效率对比15.3 Efficiencytext/08-p141-160.txt:70(搜「encode the full high-dimensional solution」)
可微物理自己的贵15.4 Efficiency continuedtext/08-p141-160.txt:75(搜「much larger solution manifolds」)
书的最终裁决15.5 Summarytext/08-p141-160.txt:102(搜「as of this writing」)

Footnotes

  1. 出处:第 13.1 节 Differentiable operators(p.111)第 27 段 (text/07-p121-140.txt:27,搜「we're in trouble」)。 原文:「we need a continuous formulation as model for the physical effect that we'd like to simulate – if this is missing we're in trouble」。 定义那一句在第 13 章开头(text/07-p121-140.txt:10,搜「differentiable numerical simulations」)。 2

  2. 出处:第 13.1 节(p.112)第 49 段(text/07-p121-140.txt:49,搜「Jacobian matrix」)。 原文把一个时间步写成一串算子的复合 u(t+Δt) = 𝒫_m ∘ … ∘ 𝒫₁(u(t), ν), 并要求每个 𝒫ᵢ 都能提供对其输入的梯度 ∂𝒫ᵢ/∂u; 并说明这个量是一个雅可比矩阵而不是一个数,因为 u 是向量值函数。 2

  3. 出处:第 8.2 节(p.77)第 196 段(text/05-p81-100.txt:196,搜「basically a subset」)。 原文:「this variant 1 has a lot in common with differentiable physics training (it's basically a subset)」。 这句话第 06 章第 7 节引过一次,那里当伏笔埋着;这里是它的兑现。 「差别只在链子有多长」是我们的说法,书没有这么展开。

  4. 出处:第 13.2 节(p.113)第 91 段(text/07-p121-140.txt:91,搜「Jacobian-vector product」) 与第 92 段(text/07-p121-140.txt:92,搜「like you would include a regular fully-connected layer」)。 原文说实践中依靠反向模式微分,只计算雅可比转置与向量的积,不构造完整矩阵, 否则内存开销巨大、训练变慢。 2

  5. 出处:第 13.2 节(p.114)第 94 段(text/07-p121-140.txt:94,搜「why don't we just use these operators」)、 第 101 段(text/07-p121-140.txt:101,搜「meaningful but monolithic」) 与第 104 段(text/07-p121-140.txt:104,搜「adjoint method optimizations」)。 原文把这个提问标为「very valid」。 2 3 4

  6. 出处:第 3.2.1 节 Naming(p.24)第 419 段 (text/02-p21-40.txt:419,搜「equivalent to using the adjoint method」)。 原文:可微物理等价于使用伴随方法并把它和深度学习流程耦合起来, 也等价于把反向传播 / 反向模式微分用到数值仿真上。 「伴随方法」和「多重网格」这两个词的解释是我们补的(补充,不在书里,来自通用知识)。

  7. 出处:第 13.2 节(p.115)第 110 段(text/07-p121-140.txt:110,搜「go back to studying it」)。 原文:「if we don't really understand our model, we probably should go back to studying it a bit more anyway…」

  8. 出处:第 13.4 节(p.118)第 188 段(text/07-p121-140.txt:188,搜「first order upwinding scheme」) 与第 200 段(text/07-p121-140.txt:200,搜「one-sided finite-difference stencil」)。 任务是被动标量密度在速度场里的平流,反问题是找一个速度场把初始密度变形成目标密度。 「迎风 = 只往上游看」这个说法是我们的转述,书的原话是 「takes into account the direction of the motion」。 2 3

  9. 出处:第 13.4 节(p.119)第 213 段(text/07-p121-140.txt:213,搜「the change of the velocity」)。 原文:「∂𝒫/∂u_i gives (Δt/Δx)d_i − (Δt/Δx)d_{i+1}. Intuitively, the change of the velocity u_i depends on the spatial derivatives of the densities. Due to the first order upwinding, we only include two neighbors」。 走查里那五个密度值、速度 −0.4、Δx = 1、Δt = 0.5,以及由它们算出的 0.8 和 0.25, 全都是我们为演示编的,不是书里的数值。 公式和结论是书里的。 2 3

  10. 出处:第 13.4 节(p.120)第 238 段(text/07-p121-140.txt:238,搜「modular」) 与第 267 段(text/07-p121-140.txt:267,搜「very similar to」)。 原文说这个过程和普通的神经网络训练极其相似——从嵌套的函数调用里算雅可比-向量积 正是深度学习框架训练网络时做的事,只不过那边的自由度是权重、这边是速度场; 所以实践中我们要做的只是给 𝒫 提供一个自定义的雅可比-向量积函数。 2

  11. 出处:第 13.5 节 Implicit gradients(p.122)第 294 段 (text/07-p121-140.txt:294,搜「certainly possible, but not」)。 原文:「This is certainly possible, but not a good idea: it can introduce numerical problems, and will be very slow … we'd organize and keep a potentially huge number of intermediate states in memory. These states are completely uninteresting for our original PDE, though. They're just intermediate states of the CG solver.」

  12. 出处:第 13.5 节(p.122)第 300 段(text/07-p121-140.txt:300,搜「symmetric matrix」)。 原文接着说明反向那一次调用的右端项是「损失对 p 的梯度」, 并说只要正向选了个好求解器,反向的性能和精度完全一样 2 3

  13. 出处:第 13.5 节(p.123)第 311 段(text/07-p121-140.txt:311,搜「not to blindly backpropagate」)。 原文:「The main take-away here is: it is important not to blindly backpropagate through the forward computation, but to think about which steps of the analytic equations for the forward pass to compute gradients for.」

  14. 出处:第 13.5 节(p.123)第 315 段(text/07-p121-140.txt:315,搜「Implicit Function Theorem」)。 原文把这两条放在一个提示框里,并说第二条让网络能和迭代求解器交互—— 举的例子是学共轭梯度求解器的初始猜测(引 [UBH+20])。 「隐函数定理是什么」这一句解释是我们补的(补充,不在书里,来自通用知识)。

  15. 出处:第 14 章 Burgers Optimization with a Differentiable Physics Gradient(p.125)第 345 段 (text/07-p121-140.txt:345,搜「the only real unknown is the initial state」)。 原文接着说未知的初始状态就是那些物理场的采样点,可以直接表示成浮点变量, 所以即使是初始状态也不需要一个网络

  16. 出处:第 14.5 节(p.141)第 5 段(text/08-p141-160.txt:5,搜「good initial test for a DP solver」)。 原文:「If the direct optimization does not converge, there's probably still something fundamentally wrong, and there's no point involving an NN.」

  17. 出处:第 14.4 节(p.139)第 598 段(text/07-p121-140.txt:598,搜「Optimization step 45」)、 第 105 段(text/07-p121-140.txt:105,搜「Runtime」)、 第 602 段(text/07-p121-140.txt:602,搜「comparable runtime」) 与第 14.5 节第 711 段(text/07-p121-140.txt:711,搜「MAE PINN」)。 日志:optimization step 0 是 0.382915,step 45 是 0.003263,运行时间 132.33 秒; 两个平均绝对误差是「MAE PINN: 0.19298」「MAE DP: 0.06382」。 书自己的说法是误差「下降得强得多(约两个数量级),而运行时间相当」。 2 3

  18. 出处:第 14.5 节(p.141)第 1 段(text/08-p141-160.txt:1,搜「more than 3 times larger」)。 原文:「That's a pretty clear result: the PINN error is more than 3 times larger than the one from the Differentiable Physics (DP) reconstruction.」

  19. 出处:第 14.5 节(p.140)第 693 段(text/07-p121-140.txt:693,搜「overall shape」) 与第 699 段(text/07-p121-140.txt:699,搜「sharper features」)。

  20. 出处:第 15.2 节 Discretization(p.142)第 48 段(text/08-p141-160.txt:48,搜「discretization-less」) 与第 54 段(text/08-p141-160.txt:54,搜「significant difficulties propagating」)。 原文:「They construct this discretization over the course of the training process, in a way that lies at the mercy of the underlying nonlinear optimization, and is not easily controllable from the outside.」 2

  21. 出处:第 15.3 节 Efficiency(p.143)第 70 段 (text/08-p141-160.txt:70,搜「encode the full high-dimensional solution」)。

  22. 出处:第 15.4 节 Efficiency continued(p.143)第 75 段 (text/08-p141-160.txt:75,搜「much larger solution manifolds」)。 原文:「while they may seem costly and slow to converge at times, this is usually caused by the the more complex signal that needs to be learned.」 (原文这里有一处重复的「the the」,是书里的排印。) 2 3 4

  23. 出处:第 15.5 节 Summary(p.147)第 102 段(text/08-p141-160.txt:102,搜「as of this writing」)。 原文:「as of this writing, the PINN approach has clear limitations when it comes to performance and compatibility with existing numerical methods」。