跳到主要内容

监督基线:能做到多好,天花板在哪

1. 这一章讲什么

三件事: 三档里最省事的那一档能做到多好(答案是 2.5%,而且只训了 5 分 40 秒); 书自己怎么拆穿它(「是啊,就是插值」); 以及它真正的死穴在哪——不是精度,是它见到的输入和它将来要待的世界不是一回事。

它在全书链条里的位置:这是第一档的全部,也是全书最重的一处伏笔的埋点。 第 02 章立了三档,这一章把第一档从头训到尾。 第 09、10 章之所以要做那么麻烦的事,理由就写在这一章的最后两节。

第 04 章那个代理模型,这一章第一次真的把它训出来。

2. 顶层全景

整章围着同一个东西转:一个训练时没见过的机翼形状。

输入: 三张 128×128 的图 输出: 三张 128×128 的图
┌──────────────────┐ ┌──────────────────┐
│ ① 来流速度横向分量│ │ ① 压力 │
│ (铺满整张图的 │ ┌──────────────┐ │ ② 气流速度横向 │
│ 常数) │──▶│ U-Net │──▶│ ③ 气流速度纵向 │
│ ② 来流速度纵向分量│ │ 585,027 参数 │ └──────────────────┘
│ ③ 机翼形状(遮罩)│ └──────────────┘ │
└──────────────────┘ │

训练: 320 个样本 · 200 轮 · 5 分 40 秒 平均相对误差 2.5%
(但高压尖峰被抹平了)

这张图在讲什么: 三张图进、三张出,中间是一个网络,整条链子里没有任何求解器。 求解器只在更早的时候出现过一次——用来生成那 320 个样本,然后就被扔掉了。 这就是「第一档」的全部含义。

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

3. 用仿真造训练数据:好处和它的两个前提

结论先行:拿仿真造数据有两个别的地方拿不到的好处,和两个必须先满足的前提。

好处:没有测量噪声——真实设备测出来的数总是带着抖动,仿真不会; ② 不需要人工标注——你要多少「题目和答案」就跑多少遍,不用请人一条条标1

前提有两条,而且它们是硬的:

  1. 选的那组方程本身得有足够的表达力,能预测你关心的那个现象;
  2. 数值误差得足够小——书的原话是,否则**「哪怕最好的网络也没机会给出有用的答案」**1

第 2 条值得停一下:你的网络精度上限,是造数据那个求解器的精度。 它是天花板,不是起跑线。

4. 这一章的任务:机翼周围的空气

先把三个领域词讲掉,不然后面每句话都会卡住。

翼型(airfoil)就是机翼的横截面形状——把一只机翼横着切一刀, 看到的那个前圆后尖的轮廓。不同的翼型,飞起来的表现天差地别。

攻角(angle of attack)是机翼相对于迎面来的气流,倾斜了多少度。 同一个翼型,把它抬高一点,托举力就变大;抬得太多,气流会从上表面剥离,飞机会失速。

雷诺数(Reynolds number)是流动里「惯性」和「黏性」的比值—— 说人话就是「这股流有多爱乱来」。它小的时候流动是一层一层平顺滑过去的; 它大的时候流动会碎成一团团乱转的涡。同一个机翼形状,雷诺数不同,气流的样子完全不同。

任务因此是:给定这三样东西(翼型形状、雷诺数、攻角),直接算出机翼周围的气流和压力2

5. 为什么算的是「时间平均」的场:湍流与 RANS

上一节说雷诺数大的时候流动会碎成一团团乱转的涡,那种状态叫湍流(turbulence)。

湍流的麻烦在于它根本停不下来。 那些涡在不停地生、不停地散、不停地互相撕扯, 每一个瞬间的流场都不一样。要把它们全都算出来,格子必须细到能分辨最小的那个涡, 计算量大到工业上根本负担不起。

所以工程上用一个折中:不算每个瞬间,只算「时间平均之后的样子」。 把方程整个做一次时间平均,得到的那组方程叫 RANS (Reynolds-Averaged Navier-Stokes,雷诺平均 Navier-Stokes 方程)。

书说这至今仍是工业界 Navier-Stokes 求解器最广泛的应用之一2—— 所以这不是一个学术玩具任务,它是真的有人靠它吃饭。

这一章要做的事因此可以一句话说清:训一个网络,完全绕过那个 RANS 求解器2

6. 走查:一个没见过的机翼,从输入到输出

输入是三张 128 × 128 的图3:

通道装什么
来流速度的横向分量——铺满整张图的一个常数,机翼内部填 0
来流速度的纵向分量——同上
机翼形状,栅格化成一张遮罩图(机翼内部是一个值,外面是另一个)

雷诺数和攻角藏在哪儿?就藏在前两个通道里。 这两个数被折算成来流速度的两个分量,再铺成两张常数图—— 这是一个很实用的技巧:把标量条件变成和场同样大小的常数通道,网络就能一视同仁地吃进去。

输出也是三张 128 × 128 的图:压力、气流速度的横向分量、纵向分量。 所以输入和输出的形状完全一样,都是 3 × 128 × 128,一共约 49000 个数3

网络是第 04 章那个 U-Net,有 585,027 个可训练参数4

这个数要有参照物:训练样本只有 320 个5参数比样本多一千八百倍——所以「网络会不会把 320 个样本硬背下来」是个真问题, 下面第 11 节会回到它。

训练:200 轮(一轮就是把 320 个样本全过一遍,英文叫一个 epoch), 用 L1 损失(把差值取绝对值再平均,而不是像第 01 章那样取平方), 总共 5 分 40 秒,平均每轮 1.61 秒6

结果:验证误差从大约 0.2 降到大约 0.02——降到十分之一7

主走查第 1 步: 一个训练时没见过的翼型 + 一组给定的雷诺数和攻角 → 编成 3 张 128×128 的图 → 送进 585,027 参数的 U-Net → 吐出 3 张 128×128 的图。 全程没有调用任何求解器。

7. 归一化不是可选的预处理,它是这个任务成立的前提

先看会出什么事。 输出的三个场里,两个速度分量脾气差不多,但压力不是

压力大致按速度的平方缩放——这来自流体里一条基本关系 (伯努利关系:流速快的地方压力低,而且大致是速度平方的量级)8

平方意味着量级会拉开。 速度是 2 的地方,压力大致是 4 的量级; 速度是 10 的地方,压力大致是 100 的量级。

而损失是把三个场的误差加起来求平均的。 于是: 压力那一项天然就大,它会主导整个和; 网络看到「压低压力误差最划算」,就把资源全花在压力上,别的分量随它去8

解法就是归一化:训练之前,把每个场各自缩放到差不多的范围里。 缩放之后三项在损失里的分量才可比,网络才会公平地对待它们。

这里有一处书内自相矛盾,必须照实说: 书在讲归一化的地方写「压力大致按速度的平方缩放」, 而在讲测试结果的地方又写「压力对来流速度是三次方缩放」9我们按平方讲——因为伯努利关系给的就是平方,而书自己在前一处也是这么写的、还点了伯努利的名。

8. 黄金法则:第一步永远是「在 1 个样本上过拟合」

这是书自己标为「golden rules」的一段,值得整段带走10:

  1. 永远从「1 个样本的过拟合测试」开始;
  2. 检查网络有多少可训练参数、数据有没有正确归一化;
  3. 确保网络能收敛;
  4. 然后慢慢增加训练数据量(以及网络参数和深度);
  5. 调超参数,尤其是学习率(每次朝正确方向挪多大一步);
  6. 最后才引入可微求解器、扩散训练这类部件。

第 1 条需要解释两个词。 过拟合(overfitting)通常是个贬义词——网络把训练数据背下来了,换个输入就废。 但这里是故意要它过拟合:只给一个样本,让它把这一个样本背得死死的。 上面第 5 条那个学习率,是训练里最要紧的一个旋钮:挪得太小学不动,太大会把参数推飞。

理由书说得很硬:如果网络在单个样本上都不能快速收敛、给出很好的表现, 那就是代码或数据里有根本性的问题; 而更复杂的设置只会让这些根本问题更难被找到11

这条规则的实用价值:它把「网络学不动」和「我写错了」这两件事分开了。 单样本都过不了,就别去调超参数——那是在给一个 bug 调参。

9. 「魔法在哪儿?」——全书最重要的一段祛魅

书自己提了那个所有人都会问的问题:「这不就是在插值数据吗?」

书的回答:

「是啊,就是插值!而这正是神经网络该做的事。某种意义上,也没别的可做了。 这就是所有深度学习方法的全部内容。」12

接着是几条更硬的:

  • 因为炒作,不熟悉这一行的人常以为深度学习像人脑一样,能从数据里抽取根本的、普遍的原理书直接说:这不是当前技术水平下发生的事;
  • 神经网络之所以好用,恰恰是因为它们能非常准确地贴合训练时收到的信号; 但和其他学到的表示相比,它们其实很不擅长外推—— 也就是不擅长处理落在训练数据范围之外的输入13

然后书给了一条可以当场验证的判据,这一条建议背下来:

如果你总是拿 0 到 1 范围的输入训练它,别指望它在 27 到 39 的输入上还能用。13

书的经验法则:确保你训练用的输入,和推理时要用的输入尽可能相似。

这里的「推理」有个很窄的意思,和日常说的「推论、演绎」不是一回事: 它指的是「拿训好的网络算一次、出一个结果」那一下。 训练是调参数的那段时间——喂数据、算误差、改权重,反复几万次; 推理是训完之后每次真正用它的那一下——输入进去、输出出来,参数一个都不动。 这个词后面几章会反复出现,而且到第 14 章会变成一整章的支点 (「物理约束该加在训练时还是推理时」),所以现在就把它钉住。

回到那条法则:它听起来像废话,但它是全书后半的起点——因为下一节说的正是: 在很多情况下,你根本不知道推理时的输入会长什么样。

10. 天花板长什么样:缺的恰恰是尖峰

测试成绩:在训练时完全没见过的一批新翼型上,平均相对误差 0.0263,大约 2.5%14

这个数要读对:因为输入是归一化过的,所以 2.5% 是相对于每个量各自的最大值而言的14书自己的评语是:对全新形状来说不算差,但显然还有改进空间。

更值得记的是误差长什么样。 书说输出里缺了高压尖峰和较大纵向速度的口袋, 原因有两条15:

  1. 网络太小,没有足够的资源去重建细节;
  2. 损失函数有平均化的倾向,偏爱大结构(周围那一大片环境)而不是局部的尖峰。

第 2 条和第 01 章是同一件事的另一个样子。 第 01 章里,平方误差把两个模态平均成一个 0; 这里,它把一个尖峰平均成一片平缓。「取平均」这个倾向从头到尾都在。

主走查第 2 步: 那个没见过的翼型的输出图 → 整体形状对了、大片区域的流动对了 → 平均相对误差 0.0263但机翼前缘那个高压尖峰被抹平了,纵向速度里几个局部的口袋也不见了。

11. 测试集必须是分布外的

这是第 02 章记的一笔账,这里第一次真的要用。

书把数据分成三份,而且三份的地位不一样:

从哪来用来干什么
训练集(320 个)一批翼型形状 × 一批工况调参数
验证集(80 个)同样的翼型形状,不同的工况训练途中盯着,看有没有在背答案
测试集全新的翼型形状看泛化

书特意说明:验证集用的是和训练集同样的形状,只换了工况5; 而测试要看泛化,必须换成网络在任何训练样本里都没见过的形状—— 书的原话是「验证数据不足以对泛化下结论」14

「换到多远才算分布外」没有金标准。 第 02 章记过这句: 从微小的改动(几乎肯定能用)到完全不同的输入(几乎肯定失败),中间是一条连续的谱16这一章挑的那一档是「换一批全新翼型」——同一类物理、同一个量程,只是形状没见过。

12. 分布漂移:这一章真正的死穴

结论先行:第一档的问题不在 2.5% 这个数,在别的地方。

先看现象。 假设你训好了这个网络,然后要把它接进一个流程里干活—— 网络改一下、求解器推一步、网络再改一下,来回交替(第 09、10 章就是干这个的)。

这时候网络见到的输入是什么?是它自己刚刚造出来的东西。 第一步它输出了一个稍微有点偏的场,求解器拿这个偏的场往前推了一步, 推出来的新状态,和当初预先算好的那批干净数据不一样。 第二步它就在这个不一样的东西上工作,偏得更多。

这个现象叫分布漂移(distribution shift): 你训它用的那批输入,和它将来实际会见到的那批输入,不是同一个分布。

书的原话是一句直白的因果:

如果想让网络和某个仿真环境配合工作,就必须把这个仿真器包进训练过程。 否则网络会专门去适应那些预计算好的数据——而那和「网络与求解器合在一起时产生的数据」 是不一样的。17

为什么它比 2.5% 严重得多: 精度不够可以加数据、加参数; 而分布漂移是加多少数据都补不上的,因为你没法预先算出「网络自己会造出什么」—— 那取决于训练中一直在变的网络本身。

全书最重的伏笔在这里埋下。第 09 章讲为什么必须展开,第 10 章给出真实数字。

13. 监督训练的账(书自己列的)

✅ 好处❌ 代价
训练非常快需要大量数据(数据加载本身会变成瓶颈)
稳定而简单精度和泛化可能次优
极好的起点和外部「过程」(比如嵌进一个求解器)的交互很困难

(依据:书第 7.2 节自己列的清单18。)

第三条代价就是上一节那件事,书把它排在最后,而全书后面十几章都在处理它。

14. 主走查合起来看

发生了什么具体的数
1造数据用一个 RANS 求解器算出 320 + 80 个样本,然后把求解器扔掉
2编码输入3 张 128×128:来流横向、来流纵向、翼型遮罩
3归一化把三个场各自缩放,否则压力那一项会主导损失
4网络U-Net,585,027 个参数(是训练样本数的 1800 倍)
5训练200 轮 × 320 个样本,L1 损失,5 分 40 秒(每轮 1.61 秒)
6训练结果验证误差 0.2 → 0.02(降到十分之一)
7分布外测试换一批全新翼型 → 平均相对误差 0.0263
8误差落在哪高压尖峰和大纵向速度的口袋被抹平
9真正的天花板一旦要和求解器交替工作,输入分布就漂了

上面每一个数都是书里那次运行的真实输出(逐条见脚注)。

15. 作者的判断与证据

书里给了证据的:

说法证据
监督基线能做到 2.5%真实测试输出 0.02628814
训练很快真实计时 5 分 40 秒 / 200 轮6
缺的是高压尖峰可视化对比,书自己指出来的15
压力最难学书给了理由(缩放 + 局部尖峰),没给分场的误差数9

作者的判断、没有实验支撑的:

说法为什么算判断
「就是插值,也没别的可做」这是一句立场式的断言,书没有论证12
「网络其实很不擅长外推」书没有给外推的实验,那句 [0…1] 对 [27…39] 是举例说明,不是实验13
「必须把仿真器包进训练,否则会分布漂移」这一章只是断言;真正的证据在第 09、10 章17
「用更多数据和改动可以做到高精度」引的是别人的工作 [CT22],不是书自己跑的14

判断(我们的,不是书里的): 这一章的 2.5% 不该被当成「第一档的上限」, 它是这个规模下的成绩。网络只有 58 万参数、样本只有 320 个、训练只花了 5 分 40 秒—— 三个都是刻意压小的教学配置。书自己也引了一篇工作说加数据加改动能做到高精度。 所以真正区分三档的不是精度数字,是第 12 节那件事如果错,会错在: 如果有人拿这个 2.5% 去和后面第 08 章那个「可微物理准三倍」直接比, 那是在比两个不同任务上的数,结论会是错的。 判据是:两个数是不是同一个任务、同一个规模跑出来的? 这里不是。

16. 边界与局限

  • 这一章的任务是「时间平均之后」的流场,不是瞬时流场。 那些乱转的涡在这个任务里 从一开始就被平均掉了——难度比后面那些逐帧预测的任务低一个量级;
  • 数据是怎么生成的,书跳过了。 它直接用了一份现成的数据集, 只说是用某个 RANS 模型算的19;所以造数据那一步的成本这一章看不到;
  • 书没有做「换更大的网络会怎样」的对照。 它把这些列成了「读者可以自己试试」;
  • 归一化那一处书内自相矛盾(平方 vs 三次方),我们照实标了;
  • 「分布漂移」在这一章只有断言,没有一个实验。它的证据全在第 09、10 章;
  • 本章那六条黄金法则是经验总结,书没有给出支撑它们的实验。

17. 可带走的

  1. 第一档 = 用求解器造一批数据,训完就把求解器扔掉。 整条链子上没有一处物理;
  2. 拿仿真造数据的好处:没有测量噪声、不用人工标注。 代价是你的精度上限就是造数据那个求解器的精度;
  3. 把标量条件(雷诺数、攻角)铺成和场同样大的常数通道—— 这是个可以到处用的实用技巧;
  4. 归一化不是可选项。 量级大的那个场会主导损失,网络就把资源全花在它身上;
  5. 第一步永远是「在 1 个样本上过拟合」。 过不了就是代码或数据有根本问题, 别去调超参数;
  6. 「它就是在插值」——书自己承认,而且说这正是它该做的。 别指望网络从数据里悟出普遍原理;
  7. 可以当场验的判据:拿 0 到 1 训的,别指望它在 27 到 39 上还能用;
  8. 平均化的倾向会抹掉尖峰。 误差不是均匀撒开的,缺的恰恰是局部的极值;
  9. 验证集(同分布)只用来盯训练;测试集必须换分布,否则看不出泛化;
  10. 真正的死穴是分布漂移:一旦网络要和求解器交替工作, 它见到的输入就是它自己造出来的,和训练数据不是一回事。 这是全书后半存在的理由。

18. 原文地图

主题原书章原文位置
用仿真造数据的好处与两个前提4.1 Problem settingtext/03-p41-60.txt:672(搜「measurement noise」) · text/03-p41-60.txt:676(搜「numerical errors」)
任务定义:形状 + 雷诺数 + 攻角 → 速度场与压力场6.1 Overviewtext/04-p61-80.txt:259(搜「angles of attack」) · text/04-p61-80.txt:262(搜「most widely used applications」)
输入输出的三个通道6.2 Formulationtext/04-p61-80.txt:281(搜「mask」)
归一化与伯努利(平方缩放)6.2 同上text/04-p61-80.txt:285(搜「squared scaling」)
320 / 80 的划分与验证集的性质6.3 Code coming up…text/04-p61-80.txt:309(搜「same airfoil shapes」)
参数量 585,027 与「必须时刻盯着」6.5text/04-p61-80.txt:525(搜「Trainable params」) · text/04-p61-80.txt:529(搜「definitely has to be matched」)
训练:200 轮、L1、5 分 40 秒6.6 Trainingtext/04-p61-80.txt:537(搜「EPOCHS = 200」) · text/04-p61-80.txt:589(搜「loss train: 0.01113」)
验证误差 0.2 → 0.026.6 同上text/04-p61-80.txt:595(搜「initial value of around 0.2」)
压力是最难推断的量(三次方那处)6.7 Test evaluationtext/04-p61-80.txt:641(搜「cubic scaling」)
测试要用分布外数据6.7 同上text/04-p61-80.txt:637(搜「out-of-distribution」)
平均相对测试误差 0.02636.7 同上text/04-p61-80.txt:675(搜「Average relative test error」) · text/04-p61-80.txt:678(搜「around 2.5%」)
缺的是高压尖峰与大 y 速度的口袋6.7 同上text/04-p61-80.txt:680(搜「high-pressure peaks」)
黄金法则六条7.1.1 Natural starting pointtext/05-p81-100.txt:22(搜「golden rules」) · text/05-p81-100.txt:16(搜「fundamentally wrong」)
「是啊,就是插值」7.1.4 Where's the magic?text/05-p81-100.txt:59(搜「Isn't it just interpolating」)
不擅长外推、[0…1] 对 [27…39]7.1.4 同上text/05-p81-100.txt:71(搜「not very good at extrapolation」) · text/05-p81-100.txt:75(搜「27 … 39」)
分布漂移那句伏笔7.1.4 同上text/05-p81-100.txt:84(搜「distribution shift」)
监督训练的账7.2 Supervised training in a nutshelltext/05-p81-100.txt:94(搜「Lots of data needed」)

Footnotes

  1. 出处:第 4.1 节 Problem setting(p.49)第 672 段(text/03-p41-60.txt:672,搜「measurement noise」) 与第 676 段(text/03-p41-60.txt:676,搜「numerical errors」)。 原文那句硬话是:数值近似有数值误差,必须小到足以支撑选定的应用, 「otherwise even the best NN has no chance to be provide a useful answer later on」。 2

  2. 出处:第 6.1 节 Overview(p.59)第 259 段(text/04-p61-80.txt:259,搜「angles of attack」) 与第 262 段(text/04-p61-80.txt:262,搜「most widely used applications」)。 原文:这类问题经典上用 RANS 模型近似,而这仍然是工业界 Navier-Stokes 求解器最广泛的应用之一; 这一章的目标是训一个代理模型,完全绕过数值求解器「翼型 / 攻角 / 雷诺数 / 湍流」这四个词的解释是我们补的 (补充,不在书里,来自通用知识),书把它们当读者已知。 2 3

  3. 出处:第 6.2 节 Formulation(p.59)第 281 段(text/04-p61-80.txt:281,搜「mask」)。 原文:输入输出维度相同,都是 ℝ^(3×128×128);输入是 [f_x, f_y, mask],输出是 [p, u_x, u_y]; 雷诺数和攻角以自由来流速度 f 的两个分量的形式给出,表示成同样大小的常数场,机翼区域填零。 2

  4. 出处:第 6.5 节(p.66)第 525 段(text/04-p61-80.txt:525,搜「Trainable params」)。 打印出来的原话是「Trainable params: 585027 -> crucial! always keep in view...」; 书接着说参数量必须和训练数据量匹配、也应当随网络深度缩放,但三者具体怎么配是问题相关的 (text/04-p61-80.txt:529,搜「definitely has to be matched」)。

  5. 出处:第 6.3 节(p.60)第 309 段(text/04-p61-80.txt:309,搜「same airfoil shapes」)。 原文:数据加载器把数据切成 320 个训练样本和 80 个验证样本, 验证样本用的是和训练样本同样的翼型形状,只是工况不同 2

  6. 出处:第 6.6 节 Training(p.67)第 537 段(text/04-p61-80.txt:537,搜「EPOCHS = 200」) 与第 589 段(text/04-p61-80.txt:589,搜「loss train: 0.01113」)。 进度条那一行是「loss train: 0.01113, loss val: 0.01996: 100%| 200/200 [05:40<00:00, 1.61s/it]」。 ⚠️ 书的散文里写「runs over all 320 samples 100 times」,而代码里 EPOCHS = 200 且日志显示 200/200 —— 我们按代码和日志写。 L1 损失(nn.L1Loss())见 text/04-p61-80.txt:522(搜「nn.L1Loss()」)。 2

  7. 出处:第 6.6 节(p.68)第 595 段(text/04-p61-80.txt:595,搜「initial value of around 0.2」)。

  8. 出处:第 6.2 节(p.60)第 285 段(text/04-p61-80.txt:285,搜「squared scaling」)。 原文:压力场的行为和速度不同,大致按速度的平方缩放(cf. Bernoulli); 因此简单求和要小心,必须归一化,否则某个分量会主导、 网络会把更多资源花在大的那个分量上。 2

  9. 出处:第 6.7 节 Test evaluation(p.69)第 641 段(text/04-p61-80.txt:641,搜「cubic scaling」)。 这里写的是「Due to it's cubic scaling w.r.t. the input freestream velocity and localized peaks, it is the toughest quantity to infer」——和 6.2 节的「squared scaling」对不上。 两处都是书里的原话,我们按 6.2 节那处(平方,且点了伯努利的名)讲,并在正文里说明了这处矛盾。 2

  10. 出处:第 7.1.1 节 Natural starting point(p.71)第 22 段(text/05-p81-100.txt:22,搜「golden rules」)。 书把这六条放在一个「Best practices」框里。

  11. 出处:第 7.1.1 节(p.71)第 16 段(text/05-p81-100.txt:16,搜「fundamentally wrong」)。

  12. 出处:第 7.1.4 节 Where's the magic?(p.72)第 59 段 (text/05-p81-100.txt:59,搜「Isn't it just interpolating」)。 原文接着说:「Well, yes it is! And that's exactly what the NN should do. In a way - there isn't anything else to do. This is what all DL approaches are about.」 2

  13. 出处:第 7.1.4 节(p.72)第 71 段(text/05-p81-100.txt:71,搜「not very good at extrapolation」) 与第 75 段(text/05-p81-100.txt:75,搜「27 … 39」)。 同一段还有那句「That's not what happens with the current state of the art」, 针对的是「深度学习能像人脑一样抽取普遍原理」这个印象。 2 3

  14. 出处:第 6.7 节(p.69–70)第 675 段(text/04-p61-80.txt:675,搜「Average relative test error」) 与第 678 段(text/04-p61-80.txt:678,搜「around 2.5%」)。 打印出来的数是 0.026288176793605088;书说因为输入是归一化过的, 这意味着三个场的平均相对误差约为各自最大值的 2.5%。 「验证数据不足以对泛化下结论」见 text/04-p61-80.txt:637(搜「out-of-distribution」)。 末尾那句「with additional changes and more data, this setup can be made highly accurate」 引的是 [CT22],不是书自己的实验 2 3 4 5

  15. 出处:第 6.7 节(p.70)第 680 段(text/04-p61-80.txt:680,搜「high-pressure peaks」)。 原文两条原因:网络太小、没有足够资源重建细节;以及 L2 有平均化行为、 偏爱较大的结构(周围环境)胜过局部的尖峰。 ⚠️ 这里书说的是 L2,而这次训练用的损失是 L1——书在解释误差成因时用了通用说法。 2

  16. 出处:第 3.5.1 节(p.25)第 490 段(text/02-p21-40.txt:490,搜「out of distribution」)。 这是第 02 章记的那笔账,这一章兑现。

  17. 出处:第 7.1.4 节(p.73)第 84 段(text/05-p81-100.txt:84,搜「distribution shift」)。 原文:「if we want an NN to work in conjunction with a certain simulation environment, it's important to actually include the simulator in the training process」。 2

  18. 出处:第 7.2 节 Supervised training in a nutshell(p.73)第 94 段 (text/05-p81-100.txt:94,搜「Lots of data needed」)。

  19. 出处:第 6.3 节(p.60)第 293 段(text/04-p61-80.txt:293,搜「Spalart-Almaras」)。 书只说数据是用某个 RANS 湍流模型在一个开源求解器里生成的,并把细节指向了另一份代码库。