跳到主要内容

混合求解器:小网络配差求解器

1. 这一章讲什么

三件事: 把第 09 章那个展开真的跑出来能拿到什么(一个四万参数的小网络 把一个粗糙求解器的误差压掉三分之二); 一个难度高得多的任务——只有序列末尾一个状态的约束,却要定一整片时空的力; 以及第 06 章记的那笔账:在深度学习里,「硬约束」到底是什么动作。

它在全书链条里的位置:这是第三档的收尾,也是全书前半的落点。 第 09 章说了为什么必须展开,这一章给出展开真的做出了什么。

2. 顶层全景

传统路线 这一章的混合路线

高保真求解器 低保真求解器(便宜,但会跑偏)
(细 4 倍的格子和时间步) │
│ 每一步:先让它推一步
▼ │
很准,很慢 再让一个小网络给一个加性修正

┌───────┴────────┐
47,330 个参数 梯度穿过 4 步
(比第 05 章 一路传回
那个小十二倍)


没见过的雷诺数上跑 100 步
相对误差 0.1086 → 0.0312

这张图在讲什么: 不换求解器,不做大网络—— 把一个便宜但不准的求解器和一个很小的网络拴在一起训, 拿到的精度接近高保真那一档。

这一章的所有数字都是书里那次真实运行的输出。

3. 问题设定:两套离散化,一个映射

先看这一章要解决的那件具体的事,它比「训个网络」清楚得多。

同一条 PDE,可以有两套离散化1:

特点
参考版高保真求解器空间和时间的离散度都细 4 倍;很准,很贵
源版低保真求解器格子粗、时间步大;便宜,会跑偏

还要一个映射:把参考解搬到源版那一边——这里就是下采样 (把细网格上的解平均到粗网格上)。

核心问题一句话:序列跑得越长,源版的状态就越偏离参考。

目标是训一个修正算子:它吃当前的(粗)状态,吐出一个同样大小的加性修正场, 使得「先修正、再让粗求解器推一步」的结果,比「不修正直接推一步」更接近参考1

这里有一个书自己点出的、极容易看漏的要点:

修正是作用在「被修改过的状态」上的。 这些状态是在训练过程中演化出来的,它们事先并不存在。2

这句话就是第 09 章那条因果链的落地版:你没法预先算出这些状态,所以必须把求解器搬进训练。

书还在这一章开头把「为什么非可微物理不可」写死了:

监督训练或者 PINN 训练做不到这种交互。 哪怕监督网络的推断误差很小,它也会随时间累积,导致数据分布偏离预计算数据的分布。 这种分布漂移会带来次优的结果,甚至让求解器炸掉。3

4. 场景:卡门涡街

先讲清楚这个场景,它是全书用得最多的测试台。

把一根柱子插在水流里,水绕过它——你以为水就是绕过去了,其实不是。 一定条件下,柱子后面会交替地甩出漩涡:先左边掉一个,再右边掉一个,再左边…… 这些漩涡排成两列往下游飘。

这个现象叫卡门涡街(Kármán vortex street)。 你见过它:桥墩后面水面上那一串旋涡,就是这东西。

为什么它是个好测试台: 它既不是完全规则的(有真正的动力学), 又是可重复的(同样的条件给同样的涡街); 而且低保真求解器在这个场景里会犯一个很典型的错——下面第 9 节会说是什么错。

这一章的具体设置4:

网格64 × 32,物理尺寸 200 × 100
网络输入3 个通道:横向速度、纵向速度、雷诺数当一个常数通道
网络ResNet(三层各 32 个通道),47,330 个参数
初始化Xavier 均匀初始化,增益缩到 0.1
展开步数4
训练数据10 个仿真里的第 0–5 号,每个 496 个样本

表里的 ResNet 第 04 章第 5 节挂过牌:一叠卷积层,每一层算完之后把结果加回自己的输入 (那条接线叫残差连接),所以每层只需要负责「差多少」。 这里的它只有三层,每层在每个格子上并排存 32 个数。

47,330 这个数要有参照物:第 05 章那个翼型网络有 585,027 个参数,这个小十二倍。 它能这么小,正是因为它只用给一个小修正——粗求解器已经把大部分活干了。

那个「增益缩到 0.1」值得单独说一句,因为它是一条实用经验: 把初始权重整体缩小,是为了避免训练开头的输出值过大; 有了它,才能一上来就直接开启多步展开——否则得先用短展开热身 (那种「先易后难」的训练安排叫课程学习)5

书还说了一句定位:展开步数是「最重要也最有趣的参数」6

5. 走查:训练与结果

主走查第 1 步(一次训练迭代): 取一个粗网格状态 → 求解器推一步 → 网络给一个加性修正,重复 4 次 → 和下采样后的高保真参考比,得到损失 → 梯度穿过这 4 步一路传回网络的 47,330 个参数。

这里有一个顺序上的细节,书特意点了:因为是「先求解器、后网络」, 第一步是不穿过求解器的; 但后面 3 步里,第一次网络调用会收到「它推断的那个修正有没有把后续 3 个状态推向正确方向」的反馈7

主走查第 2 步(训练): 5 轮共 4960 步,耗时 3 小时 11 分; 损失从 15.63 降到 0.2318

3 小时 11 分要有参照物:第 05 章那个监督训练只要 5 分 40 秒。 慢了三十四倍——而这就是「把求解器搬进训练环路」的价格: 每一次参数更新,里面都真的跑了 4 步流体仿真,外加 4 步的反传。

主走查第 3 步(测试): 换到第 6–9 号仿真——那是训练时没见过的雷诺数。 具体这一次是 Re = 73.24,让网络接着自己的输出连跑 100 步9

「让网络接着自己的输出往下跑很多步」这件事有个名字:rollout。 这是评价这类模型的正确方式——不是比一步的误差, 而是看误差在这一长串里怎么长。

主走查第 4 步(结果): 低保真求解器单独跑:相对 L2 误差 0.1086; 混合求解器:0.031210误差降到不到三分之一(约 3.5 倍的改善)。

⚠️ 这里有一处书内不一致,照实说: 书的正文写「典型能低 5 到 6 倍」, 而同一次运行的实际输出是 0.1086 对 0.0312,约 3.5 倍11我们以实际数字为准。

6. 误差是怎么随时间长的

这是本章最有价值的一张图,而它的读法只有两句话12:

  • 低保真求解器单独跑:相对误差随时间线性上升;
  • 混合求解器:上升慢得多。

书还加了一句:网络更大、训练更成功的时候,它「基本上能压住任何上升」, 把误差一直保持在很低的水平。

「线性上升」和「几乎不上升」的差别,比 0.1086 对 0.0312 这两个数更要紧: 前者意味着你跑得越久越不能用,后者意味着你可以一直跑下去。

7. 为什么保底求解器很重要

书在这里给了一句很实在的话,它解释了「为什么四万参数就够」12:

没有基础求解器的话,这活儿会难得多——那时网络得干全部的工作。 而现在它可以依赖耦合求解器的预测,通常一个小修正就够了。

摊开算这笔账: 让网络从头预测整个流场,它得学会平流、浮力、压力投影、 以及所有边界上该发生的事;这是第 05 章那个 58 万参数网络在干的事。 而这里,那些东西粗求解器都算了,只是算得糙——网络只需要补上「糙」的那部分。

这也是第 09 章那个「加性修正」为什么重要的最好例证: 一个只输出修正的网络,可以比一个输出完整状态的网络小一个数量级。

8. 最省事的一次对照:把展开步数设成 1

书在「读者可以自己试试」里给了一个实验,而它其实是全章最锋利的一处13:

把展开步数设成 1,就等于关掉了可微物理训练—— 因为不再有梯度需要流过求解器,它就变回了监督训练,而相对误差会大幅上升。

这一句的分量:它说明「展开」不是一个可以随便调的小超参数, 它是那个开关本身。 展开 = 1 和展开 = 4 之间,不是量的差别,是「有没有可微物理」的差别。

书还给了反方向的提醒:想试更大的展开(比如 8 或 16), 因为训练的循环性质,你多半得先加载一个预训练好的状态来稳住最初的几次迭代—— 这实际上就是加了课程学习13

9. 误差长什么样,以及一个度量学的警告

先说误差的样子。 书说:纯低保真版本系统性地低估了本该形成的那些涡; 学过的版本,误差分布均匀得多、幅度也小得多14

「系统性地低估涡」这句话值得记:粗网格会把涡抹平——这正是第 03 章那个 一阶平流「会搬糊」的直接后果。

然后是书自己给的一个警告,它比结果本身更值钱:

AI 驱动的混合求解器带来的改进,用平均绝对误差或 L2 这类简单的向量范数 很难可靠地测出来(「范数」就是把一整个误差场压成一个数的那种算法, 平均绝对误差和 L2 都是)。要衡量改进,得用领域专用的度量—— 书说这个案例里合适的是基于涡量和湍流性质的流体度量14

为什么这条警告重要:一个把所有涡都抹平的解,L2 误差可能并不难看 (它到处都「差不多对」); 而它在物理上是错的——那些涡本来就该在。 用错度量,你会误判一个坏结果为好结果。

10. 长程控制:全书难度最高的一个例子

换任务。这一次的约束极端地少,而自由度极端地多。

任务:算出一个高维的控制函数,在整个不可压流体仿真过程中施加力, 让一个被动跟着流走的标记密度,到达一个指定的目标状态15

约束只有序列末尾的一个状态
自由度控制力是一个时空函数,自由度和整个流场一样多

书把这个任务难在哪儿讲得很清楚,而且这一段是理解「为什么要梯度」的最好材料:

控制的长程性质是这个反问题难的原因之一:对物理系统状态的任何改动, 都可能在很久以后导致巨大的变化,所以控制器必须预判系统被影响之后会怎么走。 这意味着网络还得学会底层物理是怎么演化和变化的—— 而这正是可微物理训练的梯度进来引路的地方。15

11. 两个网络,分的是时间尺度

这一章最关键的设计:不是一个网络,是两个,而且它们分的不是「粗细」,是「远近」16:

网络它回答什么问题
预测器(书里叫 OP)长期规划:「从现在到目标的中点,场应该长什么样?」
执行器(书里叫 CFE)眼前一步:「这一步该往速度场上加多大的力?」

为什么必须拆开: 一个网络同时回答这两个问题, 它得在「16 步之后要到哪儿」和「这一步该使多大劲」之间做取舍; 拆开之后,预测器只管画路线图,执行器只管开车。

书还点出一个视角:这个设定说明强化学习也是一个可能的选项—— 第 17 章会做这个对比,而且强化学习输了。

12. 三阶段训练:每一阶段解掉上一阶段的一个毛病

这是书里唯一一个多阶段的训练流程,值得画出来17:

① 预测器先单独训一遍(这一步叫预训练:先把一个部件单独教会,再拼进大流程)
数据:另造的一个「移动方块」数据集
为什么要另造:预训练需要中间帧,而正经数据集里没有
怎么分层:按 2 的幂次 n ∈ {2, 4, 8, 16},每个 n 训 1000 步
得到:一个粗略的规划能力(此时完全没有仿真)


② 执行器单独预训练(可微物理,单步)
注意:这里根本没搭仿真序列 —— 只在成对的状态之间推断该施多大力
得到:一个会施力的执行器(此时完全没有序列)


③ 两者端到端联合训练
用 16 步的求解器,同时训执行器和四个尺度的预测器
得到:「力施下去之后物理会怎么走」终于被接进来了

这三步的逻辑很干净: ① 给规划,② 给动作,③ 才把「动作的长期后果」接上。 跳过任何一步,后面那步都缺一个能用的起点。

数据规模: 64 × 64 的域,16 步;1000 个样本(800 训练 / 100 验证 / 100 测试); 形状库里有 10 种不同形状,随机摆在域里当起点和终点18

13. 结果与书自己的赞叹

成绩:相对平均绝对误差 0.054519

这个数怎么读:超过 94% 的标记密度落到了正确的位置。

书自己写了一段评语,而这段评语值得原样传达:

看着挺简单,其实对神经网络是个棘手的任务:它得在 16 个时间积分步里 引导一整个二维 Navier-Stokes 仿真。施加的力只要稍有偏差或不协调, 流体就会开始打旋、混沌地运动。而网络学会了把运动维持在一起, 并把标记密度引导到目标位置。20

另起一处的走查(长程控制,和主走查那个卡门涡街不是同一个任务): 64×64 的域、16 步 → 只给「第 16 步该长什么样」这一个约束 → ① 预测器在另造的数据集上按 n ∈ {2,4,8,16} 分层各训 1000 步 → ② 执行器用单步可微求解器预训练 → ③ 两者用 16 步求解器端到端联合训练 1000 步 → 相对平均绝对误差 0.0545,即超过 94% 的密度落到了正确位置。

14. 为什么可微物理有效:全书最完整的一句解释

书在这一部分的结账里,给了「为什么这条路管用」的最完整表述21:

可微仿真让训练中的模型能够「探索并体验」物理环境, 在求解器的迭代过程中收到有方向的反馈。这解决了机器学习经典的数据漂移问题: 训练过程不再依赖一个事先指定的分布,而是通过即时展开生成新的轨迹, 并从中计算训练信号。这可以看作一种「后验」方法, 让训练出的网络对没见过的输入显著更有韧性。

「后验」(a-posteriori)这个词在这里的意思很具体: 训练信号不是事先备好的,是事后从「真的跑了一遍」里算出来的。

书还加了一句很重的话:「实际上很难用别的方法打败一个好的展开设置」21—— 细节留到第 15 章那组消融实验。

另有一条关于泛化的主张:混合方法让 PDE 求解器去处理数据分布上的大尺度变化, 从而让学到的模型专注于离散化没能捕捉的局部结构。 书给的理由一句话:物理模型泛化得非常好,而学到的模型常常专精于训练时见过的数据分布22

15. 硬约束长什么样(兑现第 06 章那笔账)

第 06 章说「软约束是优化尽力而为」,并记了一笔账:那么『硬』的长什么样? 答案在这里,而且它是一个具体的动作。

书的话是23:

通过可微物理训练,可以把完整的数值仿真整合进网络训练。 这实际上提供了硬约束,因为耦合进来的求解器能像经典求解器那样, 投影并强制满足约束。

关键词是「投影」,而第 03 章已经讲过这个动作: 求解器每一步的最后,把当前的速度场改成一个最接近它、但确实满足约束的速度场。

所以两档的分界可以写成一句话:

谁在管约束结果
第二档(软)优化器,通过损失里的一项尽量满足,大偏差可能一直留着
第三档(硬)求解器,通过每一步的投影动作被强制满足

这也解释了第 06 章那个 11.51 和 0.000 的差距: 那个网络在「尽量」,而求解器在「投影」。

16. 可微物理的账(书自己列的)

✅ 好处❌ 代价
用上了物理模型和数值离散方法不是所有仿真器都兼容——必须能提供梯度
所选数值方法的效率与精度直接转移到训练上需要更重的机械装置(框架支持)
可以做到物理模型和网络极紧的耦合
韧性和泛化都更好

(依据:书第 20 章自己列的清单24。)

书的展望:最后那条负面正在快速改善—— 流行的开源仿真框架和许多商业仿真器都在做与网络的紧密集成25

17. 主走查合起来看

发生了什么具体的数
1场景卡门涡街,64×32 格、物理尺寸 200×100
2输入3 通道:两个速度分量 + 雷诺数当常数通道
3网络ResNet,47,330 个参数(比第 05 章那个小十二倍)
4一次训练迭代求解器推一步 → 网络加一个修正,重复 4 次;梯度穿过全部 4 步
5训练5 轮共 4960 步,3 小时 11 分;损失 15.63 → 0.231
6测试训练时没见过的雷诺数(Re = 73.24),rollout 100 步
7结果低保真 0.1086 → 混合 0.0312(约 3.5 倍)
8误差怎么长低保真线性上升;混合慢得多,大网络下几乎压住
9关掉展开展开步数设成 1 = 关掉可微物理训练,退回监督训练,误差大幅上升

每个数都是书里那次运行的真实输出(逐条见脚注); 「小十二倍」「慢三十四倍」这两个比值是我们算的。

18. 作者的判断与证据

书里给了证据的:

说法证据
混合求解器比低保真准约 3.5 倍同一次 rollout 的两个数:0.1086 / 0.031210
误差随时间的走势不同一张误差-时间曲线图12
长程控制做得成相对平均绝对误差 0.054519
关掉展开会大幅变差书没有给这个实验的数——它写在「读者可以自己试试」里13

作者的判断:

说法为什么算判断
「典型能低 5 到 6 倍」和同一页的实测 3.5 倍对不上11
「大网络能压住任何上升」没有给那个大网络的实验12
「很难用别的方法打败一个好的展开设置」立场,证据推给第 15 章21
「物理模型泛化得非常好」一句领域经验,没有对照22

判断(我们的,不是书里的): 这一章最该被带走的数不是 0.0312,是 3 小时 11 分可微物理训练的真实成本是训练时间——每次参数更新里都真的跑了 4 步仿真加 4 步反传, 比第 05 章那个监督训练慢三十四倍。 而它换回来的是「训完之后运行时和别人一样快、但准三倍」。 所以这笔账成不成立,取决于这个训好的网络将来要被调用多少次如果错,会错在: 如果你只需要算几十次,那高保真求解器直接跑完可能更省事—— 训练那 3 小时都够跑很多遍了。 判据是:训练一次的成本 ÷ 每次推理省下的时间 = 多少次才回本? 这个数书全程没有算过。

19. 边界与局限

  • 主走查那个例子只有 64×32 格、二维。 三维和更大规模的表现书没有给;
  • 展开步数只试了 4。 更大的展开(8、16)书列成了「读者可以自己试试」, 没有给对照数据——那个空白第 15 章才补上;
  • 「关掉展开会大幅变差」没有具体的数,只有一句预告;
  • 正文和实测的倍数对不上(5–6 倍 vs 3.5 倍),我们照实标了;
  • 书自己承认这类改进用简单范数很难可靠测量,而这一章给的正是简单范数的数字;
  • 长程控制那部分的三阶段训练很复杂,书没有做消融—— 哪一阶段贡献最大、能不能省掉一阶段,都没有答案;
  • 训练一次要多少次推理才回本,书全程没有算过。

20. 可带走的

  1. 混合求解器 = 一个便宜但不准的求解器 + 一个只给修正的小网络, 两者在训练时交错,梯度穿过全部步骤;
  2. 修正是作用在「被修改过的状态」上的,而那些状态事先不存在—— 这是「必须把求解器搬进训练」最紧凑的一句表述;
  3. 网络可以很小。 四万参数就够,因为粗求解器已经把大部分活干了;
  4. rollout(让网络接着自己的输出跑很多步)才是正确的评价方式, 不是比一步的误差;
  5. 看误差怎么随时间长,比看最终那个数更重要。 线性上升意味着跑得越久越不能用;
  6. 展开步数不是一个可调的小参数,它是那个开关。 设成 1 就等于关掉了可微物理训练;
  7. 训练一上来就想直接开多步展开,就把初始权重缩小(这里用的增益是 0.1); 否则得先用短展开热身,那叫课程学习;
  8. 粗网格会系统性地抹平涡。 这是低保真求解器最典型的错;
  9. 改进很难用 L2 这类简单范数可靠地测出来。 要用领域专用的度量;
  10. 长程控制要拆成两个网络:一个管「中点该长什么样」,一个管「这一步使多大劲」—— 分的是时间尺度,不是精度;
  11. 可微物理为什么有效,一句话:它让模型能探索和体验物理环境, 从当场跑出来的新轨迹里算训练信号,不再依赖一份事先定死的数据;
  12. 硬约束是一个动作,不是一种态度:耦合进来的求解器每一步都把状态投影到 满足约束的那个集合上。 软约束靠优化器「尽量」,硬约束靠求解器「强制」。

21. 原文地图

主题原书章原文位置
为什么监督和 PINN 做不到18 Reducing Numerical Errorstext/09-p161-180.txt:64(搜「distribution shift」)
两套离散化、修正算子的目标18.1text/09-p161-180.txt:80(搜「correction operator」)
「修正作用在被修改过的状态上」18.1 同上text/09-p161-180.txt:88(搜「easy to overlook」)
卡门涡街的求解器18.2text/09-p161-180.txt:147(搜「KarmanFlow」)
3 个输入通道、雷诺数当常数通道18.3text/09-p161-180.txt:148(搜「Reynolds number」)
网络参数量 47,33018.3 同上text/09-p161-180.txt:266(搜「Total number of trainable parameters」)
Xavier 初始化、增益 0.1、课程学习18.3 同上text/09-p161-180.txt:218(搜「gain of 0.1」)
展开步数是「最重要也最有趣的参数」18.4text/09-p161-180.txt:353(搜「MSTEPS = 4」) · text/09-p161-180.txt:357(搜「most important and interesting parameter」)
顺序细节:第一步不穿过求解器18.5text/09-p161-180.txt:625(搜「solver first, then network」)
训练日志:15.63 → 0.231,3 小时 11 分18.5 同上text/09-p161-180.txt:605(搜「loss 15.62617」) · text/09-p161-180.txt:621(搜「loss 0.23079132」)
测试的雷诺数18.6text/09-p161-180.txt:738(搜「73.24219」)
相对 L2:0.1086 / 0.031218.7text/09-p161-180.txt:809(搜「Rel. L2 errors」)
「典型 5–6 倍」那句18.6text/09-p161-180.txt:761(搜「lower」)
误差随时间线性上升 vs 慢得多18.7 同上text/09-p161-180.txt:812(搜「rise linearly over time」)
「没有基础求解器会难得多」18.7 同上text/09-p161-180.txt:815(搜「would need to do all the work」)
系统性低估涡、度量学的警告18.7 同上text/09-p161-180.txt:875(搜「systematically underestimates」) · text/09-p161-180.txt:879(搜「domain-specific metrics」)
把展开步数设成 118.8 Next stepstext/09-p161-180.txt:885(搜「msteps=1」)
长程控制的任务与它为什么难19 Solving Inverse Problems with NNstext/09-p161-180.txt:913(搜「control function」) · text/09-p161-180.txt:917(搜「long-term nature」)
两个网络的分工19.1text/09-p161-180.txt:936(搜「CFE」)
三阶段训练19.3–19.5text/10-p181-200.txt:20(搜「supervised」) · text/10-p181-200.txt:15(搜「StaggeredSequence」)
数据规模19.2text/10-p181-200.txt:12(搜「shapes」) · text/10-p181-200.txt:109(搜「test」)
相对平均绝对误差 0.0545 与书的赞叹19.6text/10-p181-200.txt:328(搜「Relative MAE」) · text/10-p181-200.txt:311(搜「chaotic」)
为什么可微物理有效(最完整的一句)20.2 Reducing data shift via interactiontext/10-p181-200.txt:360(搜「explore and experience」)
泛化那一条主张20.3 Generalizationtext/10-p181-200.txt:373(搜「generalize very well」)
可微物理的账20.4text/10-p181-200.txt:388(搜「gradients」)
硬约束那一句20.5text/10-p181-200.txt:394(搜「hard constraints」)

Footnotes

  1. 出处:第 18.1 节(p.161)第 80 段(text/09-p161-180.txt:80,搜「correction operator」) 与第 144 段(text/09-p161-180.txt:144,搜「reference」)。 参考数据是空间和时间离散度都细 4 倍的高保真解,已经下采样进数据集。 2

  2. 出处:第 18.1 节(p.162)第 88 段 (text/09-p161-180.txt:88,搜「easy to overlook」)。 原文明说这些状态事先并不存在

  3. 出处:第 18 章开头(p.161)第 64 段(text/09-p161-180.txt:64,搜「distribution shift」)。 原文:即使监督网络的推断误差很小,它也会随时间累积,导致数据分布偏离预计算数据的分布, 这种分布漂移会带来次优结果,甚至让求解器炸掉。

  4. 出处:第 18.2 节(p.164)第 147 段(text/09-p161-180.txt:147,搜「KarmanFlow」); 网络输入见第 18.3 节第 148 段(text/09-p161-180.txt:148,搜「Reynolds number」); 分辨率见 text/09-p161-180.txt:409(搜「64」)。 「卡门涡街是什么、桥墩后面那一串旋涡」这个解释是我们补的 (补充,不在书里,来自通用知识);书直接用了这个求解器的名字。

  5. 出处:第 18.3 节(p.166)第 218 段(text/09-p161-180.txt:218,搜「gain of 0.1」)。 原文:把 Xavier 初始化的增益缩到 0.1,是为了避免开头的值过大; 有了它才能直接开启多步展开,否则需要课程学习先热身。

  6. 出处:第 18.4 节(p.169)第 357 段 (text/09-p161-180.txt:357,搜「most important and interesting parameter」)。 代码里 MSTEPS = 4(text/09-p161-180.txt:353,搜「MSTEPS = 4」)。

  7. 出处:第 18.5 节(p.173)第 625 段(text/09-p161-180.txt:625,搜「solver first, then network」)。

  8. 出处:第 18.5 节(p.172–173)第 605 段(text/09-p161-180.txt:605,搜「loss 15.62617」) 与第 621 段(text/09-p161-180.txt:621,搜「loss 0.23079132」)。 进度条显示「4960/4960 [3:10:57<00:00, 2.31s/it]」。 「慢三十四倍」这个比值是我们拿它和第 05 章那 5 分 40 秒算的。

  9. 出处:第 18.6 节(p.176)第 738 段(text/09-p161-180.txt:738,搜「73.24219」)。 测试用的是第 6–9 号仿真,那是训练时没见过的雷诺数。

  10. 出处:第 18.7 节(p.178)第 809 段(text/09-p161-180.txt:809,搜「Rel. L2 errors」)。 打印输出是「low-fidelity: 0.10863638424314559 corrected: 0.031211425131186844」。 2

  11. 出处:第 18.6 节(p.177)第 761 段(text/09-p161-180.txt:761,搜「lower」)。 ⚠️ 正文这句话和同一次运行的实测比值对不上,我们以实测为准并在正文里标明了。 2

  12. 出处:第 18.7 节(p.178)第 812 段(text/09-p161-180.txt:812,搜「rise linearly over time」) 与第 815 段(text/09-p161-180.txt:815,搜「would need to do all the work」)。 2 3 4

  13. 出处:第 18.8 节 Next steps(p.180)第 885 段(text/09-p161-180.txt:885,搜「msteps=1」)。 原文:「Turn off the differentiable physics training (by setting msteps=1) … This yields a supervised training, as no gradients need to flow through the solver anymore. The relative errors will be substantially larger.」 书没有给这个实验的数字。 2 3

  14. 出处:第 18.7 节(p.179)第 875 段(text/09-p161-180.txt:875,搜「systematically underestimates」) 与第 879 段(text/09-p161-180.txt:879,搜「domain-specific metrics」)。 原文:「the improved behavior of the AI-powered hybrid solver can be difficult to reliably measure with simple vector norms such as an MAE or L2 norm.」 2

  15. 出处:第 19 章 Solving Inverse Problems with NNs(p.180)第 913 段 (text/09-p161-180.txt:913,搜「control function」) 与第 917 段(text/09-p161-180.txt:917,搜「long-term nature」)。 2

  16. 出处:第 19.1 节(p.181)第 936 段(text/09-p161-180.txt:936,搜「CFE」)。 书里两个网络的名字是 OP(预测器)和 CFE(执行器); 同一段还点出这个视角说明强化学习也是一个可能的选项,并指向后面的对比章。

  17. 出处:第 19.3–19.5 节(p.185–189)第 20 段(text/10-p181-200.txt:20,搜「supervised」) 与第 15 段(text/10-p181-200.txt:15,搜「StaggeredSequence」)。 第一阶段用另造的「移动方块」数据集,按 2 的幂次 n ∈ {2,4,8,16} 分层各训 1000 步; 第二阶段执行器用单步可微求解器预训练(这里根本没有搭仿真序列); 第三阶段用 16 步求解器端到端联合训练。

  18. 出处:第 19.2 节(p.181–185)第 12 段(text/10-p181-200.txt:12,搜「shapes」) 与第 109 段(text/10-p181-200.txt:109,搜「test」)。 64×64 的域、16 步、dt = 1.0、1000 个样本(800 训练 / 100 验证 / 100 测试), 形状库里 10 种形状。

  19. 出处:第 19.6 节(p.192)第 328 段(text/10-p181-200.txt:328,搜「Relative MAE」)。 打印输出是 0.05450168251991272。「超过 94% 落到正确位置」是书自己的换算说法。 2

  20. 出处:第 19.6 节(p.191)第 311 段(text/10-p181-200.txt:311,搜「chaotic」)。

  21. 出处:第 20.2 节 Reducing data shift via interaction(p.201)第 360 段 (text/10-p181-200.txt:360,搜「explore and experience」)。 原文末尾那句是「it's actually hard to beat a good unrolling setup with other approaches」, 并把细节指向讲无条件稳定的那一章(我们的第 15 章)。 2 3

  22. 出处:第 20.3 节 Generalization(p.201)第 373 段 (text/10-p181-200.txt:373,搜「generalize very well」)。 2

  23. 出处:第 20.5 节(p.202)第 394 段(text/10-p181-200.txt:394,搜「hard constraints」)。 原文:「This effectively provides hard constraints, as the coupled solver can project and enforce constraints just like …」——「投影」这个动作第 03 章已经讲过。

  24. 出处:第 20.4 节(p.202)第 388 段(text/10-p181-200.txt:388,搜「gradients」)。

  25. 出处:第 20.4 节(p.202)第 310 段(text/10-p181-200.txt:310,搜「integration」)。 ⚠️ 书这里把一个流行的开源仿真框架的名字拼错了(写成了「OpenFoma」), 我们在正文里不复述那个拼写。