Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

8.4 偏微分方程与仿真加速

流体、结构、电磁、传热、量子演化——科学里最贵的一类计算都归结为解偏微分方程(partial differential equation, PDE)。传统数值方法(有限差分、有限元、谱方法)经过几十年打磨,精度可信、误差可分析、守恒性可以做到离散意义下的严格成立;它们的问题只有一个,但很致命:每次改参数、改几何、改初始条件,都要重算一遍。在需要反复迭代优化的场合(形状优化、反演成像、控制、集合预报),这个成本无法承受。

深度学习在这里分担两类工作,必须分开讨论:① 加速单次求解(把解算快,用于反复调用);② 让求解过程可微、可优化(把梯度拿到手,用于设计)。这两件事经常被混为一谈,但它们的评价标准完全不同:前者看「误差与速度」,后者看「梯度是否可信」。

这一节先把四类做法(代理模型、降阶模型、神经算子、PINN)放进同一张对照表,讲清它们各自在优化什么;然后重点讲 PINN 的适用边界——这是本节最有教学价值的部分,因为公开的失败分析已经把「什么时候不该用 PINN」讲得相当清楚;最后处理可微分仿真的代价,以及一次仿真代理模型必须过的三类评测。

三类做法与一个更本质的视角

8.4.1 四类做法:它们学的其实是不同的东西

定义 8.4.1 · 解算子与四类逼近对象

设 PDE 带参数 aa(系数、初值、边界、几何),其解为 u=G(a)u=\mathcal G(a)。解算子(solution operator)G\mathcal G 把输入函数映到输出函数。

四类做法分别在逼近不同的东西:

做法 学什么 训练数据 推理时的输入 典型失效
① 代理模型(surrogate) 固定参数下的解:a0↦u(⋅; a0)a_0\mapsto u(\cdot;\,a_0) 该参数下的若干解样本 同一参数族内的查询 换参数 / 换分辨率就要重训;外推差
② 降阶模型(reduced-order model, ROM) 解的低维子空间与子空间上的动力学 若干解快照(snapshot) 同一族内的新参数 子空间选不好 → 高梯度 / 激波附近丢信息
③ 神经算子(neural operator) 算子本身:Gθ≈G\mathcal G_\theta\approx\mathcal G,函数到函数 多组 (ai,ui)(a_i,u_i) 函数对 任意函数 aa(含新分辨率) 训练分布外的算子行为(如未见过的高频 / 强非线性)
④ PINN 解函数 uθ(x,t)u_\theta(\boldsymbol x,t),用方程残差当监督 可以不需要解数据(只需方程 + 边界 / 初值) 任意查询点 训练病态、收敛慢、正向高精度不如传统求解器

读法:① 与 ② 是「在某个参数点上算得快」,③ 是「对整族问题都算得快」,④ 是「连解数据都不要,只要方程」。它们不是替代关系,而是四个不同的接口。

用一个例子把四者区分开

考虑一维扩散方程 ut=αuxxu_t=\alpha u_{xx},你想做「给定 α\alpha 求温度分布」这件事:

  • 代理模型:固定 α=0.1\alpha=0.1,训练一个网络输入 (x,t)(x,t) 输出 uu。换 α\alpha 就废了。
  • 降阶模型:把几百个不同时刻的解快照做低秩分解,得到几个主模态,然后在这几个模态上推演动力学。快,但对突变(如带激波的解)模态效率低。
  • 神经算子:把 α(⋅)\alpha(\cdot)(甚至初值 u0(⋅)u_0(\cdot))当输入函数,让网络学会「输入函数 → 解函数」的整体映射。训练一次,可以对任意 α\alpha 与新分辨率使用——这是它与前两者的本质差别。
  • PINN:不训练映射,直接「长」出一个函数 uθ(x,t)u_\theta(x,t) 让它同时满足方程与边条件。不需要任何解数据,但要解一次非线性优化问题,而且这个优化问题常常比传统求解器更贵、更不稳(8.4.3)。

因此第一个工程判断是:你到底需要「某个参数下的一次解」,还是「一族问题的解算子」,还是「没有数据只有方程」? 三类需求对应完全不同的方法。

定义 8.4.2 · 神经算子与「离散无关性」

神经算子(neural operator)用参数化映射 Gθ\mathcal G_\theta 逼近解算子,并希望它在函数意义下接近真解,而不是只在一套固定网格上接近: Gθ:a(⋅)↦u(⋅),Gθ[a]≈G[a]  (在函数空间范数意义下).\mathcal G_\theta:a(\cdot)\mapsto u(\cdot),\qquad \mathcal G_\theta[a]\approx\mathcal G[a]\ \ (\text{在函数空间范数意义下}). 「离散无关(discretization-invariant)」的意思是:训练时在一种分辨率 / 采样点集上拟合,推理时可以换另一种,输出仍近似同一函数(只是被采样得更粗或更密)。两个公开代表:

傅里叶神经算子(Fourier Neural Operator, FNO;2020,arXiv:2010.08895) 在频域做线性变换,并截断高频模式: (Kθv)(x)=∑k∈KRk v^k e2πi⟨k,x⟩,v^=F(v),K={k:∣k∣≤kmax⁡},(K_\theta v)(x)=\sum_{k\in\mathcal K}R_k\,\hat v_k\,e^{2\pi i\langle k,x\rangle},\qquad \hat v=\mathcal F(v),\quad \mathcal K=\{k:\lvert k\rvert\le k_{\max}\}, 其中 RkR_k 是可学的复权重(按模式组织)。实践中通常把这一层与一个局部线性项相加:v↦σ(Kθv+Wv)v\mapsto \sigma\bigl(K_\theta v+W v\bigr)。取 kmax⁡k_{\max} 有限是设计选择而非近似缺陷:它表达「解的低频结构比高频结构更主导」这一先验,同时把参数与计算量压住。

DeepONet(2019,arXiv:1910.03193) 用两路网络组合:分支网(branch)编码输入函数得到一个系数向量 b(a)b(a),主干网(trunk)编码查询点 yy 得到一组基函数 t(y)t(y),二者内积给出解在任意点的值: Gθ[a](y)=∑k=1pbk(a) tk(y)+b0.\mathcal G_\theta[a](y)=\sum_{k=1}^{p}b_k(a)\,t_k(y)+b_0 . 它的好处是天然支持「任意查询点」(主干网吃坐标),坏处是每个查询点都要算一次主干(工程上通常批量查询)。

例 8.4.1 · 手算 FNO 一层的参数量与复杂度

考虑二维问题(空间维 d=2d=2),一层 FNO 的谱卷积配置为:输入通道 cv=32c_v=32、输出通道 cw=32c_w=32、每个空间维保留 kmax⁡,1=kmax⁡,2=12k_{\max,1}=k_{\max,2}=12 个模式、复数权重按两个实数张量实现(实部与虚部)。网格分辨率 N=64×64N=64\times64。

  1. 计算这一层谱卷积的可学参数量;
  2. 与「等效感受野」的 3×33\times3 卷积层对比:参数量与达到全局感受野所需层数;
  3. 说明为什么这个对比不能用「谁参数少」来简单下结论。
解

① 参数量。 复权重张量的形状为 cv×cw×kmax⁡,1×kmax⁡,2c_v\times c_w\times k_{\max,1}\times k_{\max,2},按实部与虚部两个实数张量存: #参数=32×32×12×12×2=294,912≈2.95×105.\#\text{参数}=32\times32\times12\times12\times2=294{,}912\approx2.95\times10^{5}. (每个空间维独立截断,模式总数 12×12=14412\times12=144。)

② 与 3×33\times3 卷积对比。

项 3×33\times3 卷积(32→3232\to32 通道) FNO 谱卷积(本配置)
参数量 32×32×9=9,216≈9.2×10332\times32\times9=9{,}216\approx9.2\times10^{3} ≈2.95×105\approx2.95\times10^{5}(约 32 倍)
单层感受野 3×33\times3(局部) 全局(每个输出点都由所有位置经 FFT 汇总)
覆盖 64×6464\times64 全局所需层数 约 64/2=3264/2=32 层(每层扩 2 像素) 1 层
达到全局覆盖的总参数 32×9,216≈2.95×10532\times9{,}216\approx2.95\times10^{5} 2.95×1052.95\times10^{5}
单层计算复杂度 O(N)O(N)(NN 为格点数) O(Nlog⁡N)O(N\log N)(FFT)+ O(Nkmax⁡2)O(N k_{\max}^2)

③ 为什么不能简单下结论。 有趣的是两者达到全局覆盖的总参数量几乎相同(约 2.95×1052.95\times10^{5}——上表最后一个数字与 ① 的巧合来自「32 层 × 9,216」)。真正的差别不在参数量,而在三件事:

  • 深度带来的优化与误差传播:32 层局部卷积要一层层把信息传遍全图,梯度路径长、误差逐层累积;FNO 用一次全局变换完成信息混合。
  • 分辨率的行为:局部卷积的「全局覆盖」依赖层数与网格步长的比例,换分辨率后这个比例变了,覆盖范围随之改变(同一模型在不同分辨率上行为不同);FNO 的谱参数按模式(频率)组织,换分辨率时同一批模式仍对应同一批频率——这才是「离散无关」的实际含义。
  • 先验的匹配:对光滑解,少量低频模式就能表达大部分能量,FNO 的参数效率极高;对含激波 / 间断的解,高频模式才是主角,硬性截断 kmax⁡k_{\max} 会把关键结构抹掉——此时 FNO 的失效是结构性的,不靠堆数据解决(这类解通常需要专门的激波处理或自适应方法)。

结论:这一层参数量 ≈ 2.95×1052.95\times10^{5},与「32 层 3×33\times3 卷积」相当,但参数花在完全不同的地方——一个花在「频率」,一个花在「深度」。选择依据是解的光滑性与分辨率泛化需求,不是参数量。■\blacksquare

∎
方法-数据-指标对照表(用于选方法与定验收)
你的条件 首选 必须报告的指标 典型失败
单一参数、需要大量重复求解 代理模型 / 降阶模型 相对 L2L^2 误差、推理延迟、加速比 参数或几何一变就失效
一族参数、需要在多分辨率上用 神经算子(FNO / DeepONet) 多分辨率下的相对 L2L^2;分布外参数上的误差 高频 / 强非线性 / 间断解
有稀疏观测、参数未知(反问题) PINN 或经典反演(视条件) 参数估计误差、对噪声的稳健性、残差水平 多解性、观测覆盖不足导致的不可辨识
无任何解数据、只有方程 PINN(先做可行性试验) 残差(相对量级)、边界满足度、与低精度参照对比 训练病态、收敛不到、精度上限低
需要优化设计参数 可微分仿真(8.4.4) 梯度与数值扰动的一致性、优化后设计的验证 不可微点上的误导梯度

PINN:把方程写进损失

8.4.2 定义与一个可手算的例子

定义 8.4.3 · 物理信息神经网络(PINN)

设 PDE 写作 N[u](x,t)=0\mathcal N[u](\boldsymbol x,t)=0(N\mathcal N 含空间 / 时间导数),并带初条件与边条件。用网络 uθ(x,t)u_\theta(\boldsymbol x,t) 逼近解,把方程残差作为损失的一项: L(θ)=Ldata⏟观测拟合+λr1N∑k=1N∥N[uθ](xk,tk)∥2⏟PDE 残差+λb Lbc⏟初 / 边条件,\mathcal L(\theta)=\underbrace{\mathcal L_{\text{data}}}_{\text{观测拟合}}+\lambda_r\underbrace{\frac1N\sum_{k=1}^{N}\bigl\lVert\mathcal N[u_\theta](\boldsymbol x_k,t_k)\bigr\rVert^2}_{\text{PDE 残差}}+\lambda_b\,\underbrace{\mathcal L_{\text{bc}}}_{\text{初 / 边条件}}, 其中残差项里出现的所有导数(∂tuθ,∂xuθ,∂x2uθ,…\partial_t u_\theta,\partial_x u_\theta,\partial_x^2u_\theta,\dots)全部由自动微分对网络输入求得,采样点 (xk,tk)(\boldsymbol x_k,t_k) 可在区域内随机取或按启发式放置;λr,λb\lambda_r,\lambda_b 平衡三项。

关键特征:网络本身是一个普通 MLP(或任意可微结构),「物理」只体现在损失里;这使它实现简单、易与稀疏观测融合,也决定了它的失效方式(8.4.3)。

「软约束」是什么意思

传统数值方法把 PDE 离散化后硬性求解:离散方程被精确满足(到求解器容差),误差集中在离散化与求积上。PINN 则把「遵守方程」变成一条要尽量降低的损失——违反方程就罚分。

好处:几乎不需要网格(采样点可以任意取)、天然融合稀疏观测(数据项与残差项可以共存)、高维问题不受网格爆炸限制(传统方法的网格数随维数指数增长)。

代价:约束是软的。权重 λr\lambda_r 没调好,网络可能为了拟合观测而牺牲方程,或者为了满足方程而偏离观测;而且「残差小」只是「在采样点上小」——采样点之外的区域没有被检查。必须把残差水平与边条件满足度当作验收指标来报告,而不是只看损失曲线下降。

例 8.4.2 · 手算热方程的 PINN 残差

一维热方程 ut=αuxxu_t=\alpha u_{xx}(α>0\alpha\gt0)。对下面两个候选函数,分别算出残差 rθ=ut−αuxxr_\theta=u_t-\alpha u_{xx},并解释残差不为零的物理原因:

  1. u(1)(x,t)=e−αtsin⁡xu^{(1)}(x,t)=e^{-\alpha t}\sin x
  2. u(2)(x,t)=e−αtsin⁡2xu^{(2)}(x,t)=e^{-\alpha t}\sin 2x
  3. (补充)修改 u(2)u^{(2)} 的衰减率,使残差为零。
解

① u(1)=e−αtsin⁡xu^{(1)}=e^{-\alpha t}\sin x。 ut=−αe−αtsin⁡x,uxx=−e−αtsin⁡x ⟹ αuxx=−αe−αtsin⁡x.u_t=-\alpha e^{-\alpha t}\sin x,\qquad u_{xx}=-e^{-\alpha t}\sin x\ \Longrightarrow\ \alpha u_{xx}=-\alpha e^{-\alpha t}\sin x . 故 rθ=ut−αuxx=0r_\theta=u_t-\alpha u_{xx}=0:它是精确解(空间频率 k=1k=1 的模式,衰减率应为 αk2=α\alpha k^2=\alpha,恰好匹配)。

② u(2)=e−αtsin⁡2xu^{(2)}=e^{-\alpha t}\sin 2x。 ut=−αe−αtsin⁡2x,uxx=−4e−αtsin⁡2x ⟹ αuxx=−4αe−αtsin⁡2x,u_t=-\alpha e^{-\alpha t}\sin 2x,\qquad u_{xx}=-4e^{-\alpha t}\sin 2x\ \Longrightarrow\ \alpha u_{xx}=-4\alpha e^{-\alpha t}\sin 2x, rθ=−αe−αtsin⁡2x+4αe−αtsin⁡2x=3α e−αtsin⁡2x ≠0.r_\theta=-\alpha e^{-\alpha t}\sin2x+4\alpha e^{-\alpha t}\sin2x=3\alpha\,e^{-\alpha t}\sin 2x\ \ne 0 .

物理原因(这是本例的重点):对纯扩散,每个空间模式 sin⁡(kx)\sin(kx) 的衰减率必须与 kk 匹配。把 u=sin⁡(kx)f(t)u=\sin(kx)f(t) 代入方程得到 f′(t)sin⁡(kx)=−αk2f(t)sin⁡(kx) ⟹ f(t)=e−αk2t.f'(t)\sin(kx)=-\alpha k^2 f(t)\sin(kx)\ \Longrightarrow\ f(t)=e^{-\alpha k^2 t}. 即高频模式衰减更快(k2k^2 依赖)。u(2)u^{(2)} 用了 k=1k=1 的衰减率 e−αte^{-\alpha t} 去配 k=2k=2 的空间模式,衰减得太慢,于是残差正比于 sin⁡2x\sin 2x。这正是 PINN 的残差项要做的事:强制时间衰减与空间频率自洽——如果没有残差项,网络完全可以输出一个在采样点上「好看」但在物理上自相矛盾的函数。

③ 修正:取 u=e−4αtsin⁡2xu=e^{-4\alpha t}\sin 2x,则 ut=−4αe−4αtsin⁡2xu_t=-4\alpha e^{-4\alpha t}\sin2x,αuxx=−4αe−4αtsin⁡2x\alpha u_{xx}=-4\alpha e^{-4\alpha t}\sin2x,残差为零。

⑷ 补充:残差损失怎么写。 在采样点上 Lres=1N∑k=1N(∂uθ∂t(xk,tk)−α ∂2uθ∂x2(xk,tk))2,\mathcal L_{\text{res}}=\frac1N\sum_{k=1}^{N}\Bigl(\frac{\partial u_\theta}{\partial t}(x_k,t_k)-\alpha\,\frac{\partial^2 u_\theta}{\partial x^2}(x_k,t_k)\Bigr)^2, 其中 ∂2/∂x2\partial^2/\partial x^2 就是对输入求两次导(自动微分的二阶导,可用 torch.autograd.grad 链式调用或高阶函数),不需要任何差商。■\blacksquare

∎
例 8.4.3 · 反问题:从稀疏观测识别扩散系数

同一个热方程,但这次 α\alpha 未知:你只有 6 个位置的温度观测(带噪声),要估计 α\alpha。请写出可优化的目标与梯度来源,并说明为什么这个问题比「正向求解」更适合 PINN。

解

① 把未知参数变成可学变量。 令 α=eϕ\alpha=e^{\phi}(保证正性,也让尺度更均匀),与网络参数一起优化: min⁡θ,ϕ ∑k=1K(uθ(xk,tk)−ukobs)2⏟数据项(K=6) + λr1N∑j(∂uθ∂t−α(ϕ)∂2uθ∂x2)2∣(xj,tj)⏟残差项.\min_{\theta,\phi}\ \underbrace{\sum_{k=1}^{K}\bigl(u_\theta(x_k,t_k)-u^{\text{obs}}_k\bigr)^2}_{\text{数据项($K=6$)}}\ +\ \lambda_r\underbrace{\frac1N\sum_{j}\Bigl(\frac{\partial u_\theta}{\partial t}-\alpha(\phi)\frac{\partial^2u_\theta}{\partial x^2}\Bigr)^2\Bigr|_{(x_j,t_j)}}_{\text{残差项}}.

② 梯度从哪来。 对 ϕ\phi 的梯度有两条路径:显式项 ∂α/∂ϕ=α\partial \alpha/\partial\phi=\alpha(乘在残差项里),以及 uθu_\theta 对 ϕ\phi 的依赖(由残差项经自动微分传回)。因此一次反向传播即可同时更新网络与物理参数——这是「把物理当损失」的直接收益(对照 8.1 的可微分推断框架)。

③ 为什么反问题更适合 PINN。 反问题的典型困难是数据稀疏导致不可辨识(6 个观测点信息量有限)。纯数据驱动的反演只能靠这 6 个点外推,容易得到多组都能拟合观测的 (θ,ϕ)(\theta,\phi)。加进残差项后,方程本身成为约束:它把「在观测点之间必须满足的物理关系」也变成信息,于是可行解集合被显著缩小。这就是 PINN 在科学界最先被认可的用途——稀疏数据 + 未知物理参数 / 未知边界 / 未知场。

④ 必须做的验证:① 用合成数据实验确认「已知 α\alpha 时能否恢复」;② 对噪声水平做敏感性扫描(噪声大到某个程度,估计会失效,这个阈值要报出来);③ 检查残差水平(若残差下不去,说明优化失败,而不是 α\alpha 估计得准)。■\blacksquare

∎
物理约束不只是「PINN 的专利」

把「残差项」当成 PINN 的专属技巧是一个误解。同一件事在别处有不同名字:

  • 在分子动力学里,它就是「力必须等于能量的负梯度」(例 8.3.1);
  • 在守恒律数值格式里,它表现为「离散通量必须满足散度形式」,从而保证质量守恒;
  • 在可微分仿真里,它是「梯度必须穿过物理过程」(8.4.4);
  • 在预报模型里,它是「多步 rollout 必须稳定」(8.5)。

因此读本节时可以把 PINN 看成「用自动微分实现物理约束」的一个实例,而不是一类独立技术。判断是否值得用,应当回到同一个问题:你缺少的是数据,还是求解器? 若缺数据、有方程,残差项值得试;若只是想把已有的成熟求解器算得更快,残差项帮不上忙——那时该看代理模型与神经算子(8.4.1)。

8.4.3 PINN 的适用边界:并列证据与机制解释

PINN 何时值得用(把「有效 / 无效」写成条件)

公开文献给出的经验边界相当一致(两方证据并列如下):

A. 支持「有效」的证据与条件(多为反问题与稀疏数据场景):

场景 报告的效果 条件
反问题(未知系数 / 边界 / 源项) 在稀疏、带噪观测下能同时估计场与参数(例 8.4.3) 方程形式已知;观测覆盖关键区域
稀疏数据融合 少量观测 + 方程约束优于纯数据拟合 残差项权重与数据项可比
高维问题 不受网格指数增长限制 维度高且解较光滑;采样成本可接受
复杂域 / 移动边界 无需生成网格,只需在域内采样 边界条件采样充分(含边界的强约束处理)

B. 支持「有边界」的证据(多来自正向高精度求解的对照实验):

  • 正向问题的精度通常不敌成熟求解器。 在标准基准(如一维 / 二维的 Burgers、Allen–Cahn、Schrödinger 等)上,PINN 的精度常落在「几个数量级劣于谱方法 / 有限差分」的区间,且训练时间更长(具体数字随设置差异极大,需核实)。
  • 损失项之间的梯度病态:数据项、残差项、边条件项的梯度尺度差异可以跨越若干数量级,导致优化在某一项上「卡住」(Wang, Teng & Perdikaris, Understanding and mitigating gradient pathologies in physics-informed neural networks, 2020,arXiv:2001.04536;该文用梯度统计提出自适应权重)。
  • 从神经正切核(NTK)视角看训练失败:不同损失项对应的 NTK 特征值衰减速度不同,导致网络优先降低某一项而忽略其它项;论文给出据此的权重调整策略(Wang, Yu & Perdikaris, When and why PINNs fail to train: A neural tangent kernel perspective, 2022,Journal of Computational Physics;预印本 arXiv:2007.14527)。
  • 谱偏差(spectral bias):网络天然优先学低频成分(这与 第 2 讲 讨论过的频率学习难度同源),因此对含激波、尖锐层、强对流的问题,PINN 需要额外的结构或权重设计。
为什么「正向高精度」输了,而「反问题」赢了

两条原因可以分开理解,合起来解释了这张经验地图:

正向求解输在哪里。 传统求解器把方程的结构与离散格式耦合设计(例如把守恒律写成通量形式,从而在离散层面严格守恒,误差可分析、可随网格细化系统下降)。PINN 把方程降级成一条光滑的软损失,于是:① 它无法保证离散守恒(残差小不等于守恒);② 它要靠一个通用优化器在参数空间里同时满足多项约束,而不同项的梯度尺度差几个数量级(上面 A/B 两条证据的机制);③ 它没有「网格细化 → 误差下降」这条可靠路径——想提升精度只能改网络容量、采样策略与权重,收益不确定。

反问题赢在哪里。 反问题里稀缺的是信息而非求解器:观测只有几个点,而方程把「点与点之间必须成立的关系」也变成信息。此时 PINN 提供的正是别人无法轻易提供的东西——把方程与数据放进同一个可微目标里(例 8.4.3 的 ③)。传统反演方法(如伴随法 + 正则化)也能做,但需要为每个新问题写不同的求解器与伴随代码;PINN 用一套自动微分流程覆盖多种方程形式。

一句话总结:PINN 的优势在「信息融合的便利」,不在「求解精度」。 想把求解做准,用成熟求解器(或神经网络算子学一个);想在有方程、缺数据、缺参数时把信息凑起来,PINN 是一个容易上手的工具——但要先在小规模上做可行性试验,并同时报告残差与边条件满足度。

「PINN 是被高估还是被低估」——两方立场都写出来

这类争论容易变成站队,因此把两方各自的可检验主张写清楚更有用:

  • 「被高估」一方的可检验主张:在标准正向基准上,PINN 的精度与成本都不如成熟数值方法;它的宣传常来自「无需网格、无需数据」的吸引力,而在实际工程里「无需网格」不是瓶颈(网格生成早已自动化),「无需数据」也不成立(边界条件与方程仍是输入)。因此应把它限制在有明确优势的反问题与稀疏数据场景。
  • 「被低估」一方的可检验主张:PINN 的价值不在「替代求解器」,而在提供一个统一的、可微的、可与其它模块串联的物理约束接口:它让「方程约束」可以像损失项一样被加进任意端到端系统(图像重建、控制、参数辨识),这种可组合性在传统数值框架里代价很高。因此用「正向求解精度」评判它是不公平的口径。

两者的分歧其实是一个口径问题:用「替代求解器」的标准评估 → 结论是边界明显;用「物理约束接口」的标准评估 → 结论是有独特价值。在写下结论时说明你用的是哪个口径,就不会把工具误用在它不擅长的位置。

可微分仿真的代价

8.4.4 把仿真器当成一层网络:显存、不可微点与梯度校验

可微分仿真的三个接口与三个代价

把仿真器(分子动力学、流体、刚体 / 柔性体、渲染)当成一个(近似)可微模块 y=Sim(θ)\boldsymbol y=\mathrm{Sim}(\boldsymbol\theta),θ\boldsymbol\theta 是设计参数(几何、材料、控制量),于是 ∇θJ=∂J∂y⋅∂y∂θ,θ←θ−η∇θJ.\nabla_{\boldsymbol\theta}\mathcal J=\frac{\partial\mathcal J}{\partial\boldsymbol y}\cdot\frac{\partial\boldsymbol y}{\partial\boldsymbol\theta},\qquad \boldsymbol\theta\leftarrow\boldsymbol\theta-\eta\nabla_{\boldsymbol\theta}\mathcal J . 关键在于 ∂y/∂θ\partial\boldsymbol y/\partial\boldsymbol\theta 由穿过仿真器的反向传播给出,而不是用有限差分逐个扰动参数(例 8.1.2 给出的正是这条路线必要性的量化理由)。

代价 来源 缓解做法 剩余风险
显存 反向传播要保存中间状态(每个时间步的场量) 检查点重算(时间换显存)、伴随法(adjoint)、可逆积分器 长时仿真下显存仍是硬约束;重算增加时间
不可微点 碰撞接触、相变、激波、离散求解分支、if 判断、排序与最近邻 光滑化(软化接触力)、松弛(relaxation)、代理梯度 梯度不再精确,优化可能被引向错误方向
梯度可信度 上述两者叠加 与数值扰动做一致性校验(例 8.4.4) 强不连续处校验也会失败 → 退回无梯度方法
时间成本 每次梯度都要一次仿真 只在关键迭代上算梯度;用代理模型做粗筛 端到端优化的收益被抵消

工程建议:可微分仿真的第一条纪律不是「让一切都可微」,而是明确哪些环节不可微、并为它们选择处理策略(光滑化 / 松弛 / 退回无梯度);第二条纪律是任何梯度在用于优化前先做校验。

例 8.4.4 · 梯度校验的精度下限:最优步长怎么算

用中心差分估计梯度 gi≈f(θi+h)−f(θi−h)2h,g_i\approx\frac{f(\theta_i+h)-f(\theta_i-h)}{2h}, 设函数在数值上以双精度(ϵ≈2.2×10−16\epsilon\approx2.2\times10^{-16})计算,三阶导数量级 M=∣f′′′∣∼1M=\lvert f'''\rvert\sim1。

  1. 写出总误差的两项来源(截断误差与舍入误差);
  2. 求最优步长 h⋆h^\star 与可达到的最低误差;
  3. 由此说明:判定「反传梯度与数值梯度一致」时,相对容差应该定在什么量级。
解

① 两项误差。

  • 截断误差(来自差分公式本身的泰勒展开):h26f′′′(ξ)∼Mh26\dfrac{h^2}{6}f'''(\xi)\sim\dfrac{M h^2}{6}。
  • 舍入误差:每个 ff 值有约 ϵ∣f∣\epsilon\lvert f\rvert 的误差,相减后绝对值误差仍约 ϵ∣f∣\epsilon\lvert f\rvert(最坏情况),除以 2h2h 放大:ϵ∣f∣2h∼ϵh\dfrac{\epsilon\lvert f\rvert}{2h}\sim\dfrac{\epsilon}{h}(取 ∣f∣∼1\lvert f\rvert\sim1)。

总误差量级: E(h)≈Mh26+ϵh.E(h)\approx\frac{M h^2}{6}+\frac{\epsilon}{h}.

② 最优步长。 令 dEdh=Mh3−ϵh2=0\dfrac{dE}{dh}=\dfrac{M h}{3}-\dfrac{\epsilon}{h^2}=0,得 h3=3ϵM ⟹ h⋆=(3ϵM)1/3≈(3×2.2×10−16)1/3≈8.7×10−6.h^3=\frac{3\epsilon}{M}\ \Longrightarrow\ h^\star=\Bigl(\frac{3\epsilon}{M}\Bigr)^{1/3}\approx(3\times2.2\times10^{-16})^{1/3}\approx8.7\times10^{-6}. (量级写作 h⋆∼ϵ1/3≈10−5h^\star\sim\epsilon^{1/3}\approx10^{-5}。)此时 E(h⋆)≈h⋆26+ϵh⋆≈1.3×10−11+2.5×10−11≈3.8×10−11  (量级 ϵ2/3≈10−10).E(h^\star)\approx\frac{h^{\star2}}{6}+\frac{\epsilon}{h^\star}\approx1.3\times10^{-11}+2.5\times10^{-11}\approx3.8\times10^{-11}\ \ (\text{量级 }\epsilon^{2/3}\approx10^{-10}).

③ 容差该怎么定。 中心差分的可达精度在 10−10∼10−1110^{-10}\sim10^{-11} 量级(这已经是最好的情况;若函数数值噪声更大、或 hh 选得不好,误差会显著上升)。因此:

  • 「反传梯度与数值梯度相对误差 <10−6&lt;10^{-6}」是一个可达且合理的验收门槛;
  • 「相对误差 <10−12&lt;10^{-12}」在双精度下不可达(连数值差分本身都到不了这个精度);
  • 若两者差到 10−310^{-3} 以上,说明梯度路径有问题(不可微点、权重未参与、实现错误),必须排查——这正是可微分仿真里最该先跑的一条检查,因为它能在花掉大量算力之前暴露梯度链路错误。■\blacksquare
∎

评测:分辨率泛化、误差累积、守恒律违反

8.4.5 三类必须报告的指标

仿真代理模型的三类评测(缺一不可)
评测 怎么测 指标 为什么必须报告
分辨率泛化 训练用粗网格(如 64×6464\times64),测试用更细 / 更粗网格(1282128^2、2562256^2)与不同采样点集 相对 L2L^2 误差 ∥u^−u∥2∥u∥2\dfrac{\lVert \hat u-u\rVert_2}{\lVert u\rVert_2},逐分辨率列出 「与离散无关」是神经算子的核心主张(定义 8.4.2);不测就无法区分「学会了函数」与「背下了网格」
误差累积 自回归 rollout(用预测当下一时刻输入)跑 TT 步,每步与真值对比 误差—步数曲线;误差翻倍时间;是否有发散 单步精度高不等于多步可用;误差可能被动力学放大(8.5 会给出气候版的同一问题)
守恒律违反 对守恒系统(如无粘流的质量 / 能量、孤立体系的能量)逐时刻积分总量 总质量 / 总能量漂移率(相对初始值的百分比 / 每步) 守恒律违反不需要真值即可计算,是免费的体检;漂移会随时间线性累积
(附加)边界与对称性 检查边条件满足度、检查预测在整体旋转 / 平移下的行为 边界残差;等变误差 物理合法性的底线检查

误差累积的示意式:设单步映射为 yt+1=F(yt)\boldsymbol y_{t+1}=\mathcal F(\boldsymbol y_t),误差 et=y^t−yte_t=\hat{\boldsymbol y}_t-\boldsymbol y_t 的一阶传播是 et+1≈JF et+δt,e_{t+1}\approx J_{\mathcal F}\,e_t+\delta_t, 其中 JFJ_{\mathcal F} 是雅可比矩阵、δt\delta_t 是单步模型误差。若 ∥JF∥>1\lVert J_{\mathcal F}\rVert\gt1(扩张方向),误差被逐步放大并可能指数增长;若 ∥JF∥<1\lVert J_{\mathcal F}\rVert\lt1(耗散方向),误差衰减。这正是「同一个模型在稳定系统上表现好、在混沌系统上表现差」的数学根源——与模型好坏无关,是任务的动力学性质。

为什么「守恒律违反」是最便宜也最有价值的一项

它便宜,因为不需要真值:无粘流的离散质量、孤立体系的能量、闭合域的电荷,这些量的目标值你是知道的(守恒),模型预测是否守恒可以立刻算出来。它有价值,因为守恒性的破坏往往先于精度的崩塌出现:一个模型可能在短期内看起来误差很小,但它每一步都在凭空制造或销毁质量,漂移会随时间线性堆积,最终主导结果。

因此建议把它放在评测顺序的第一位:如果守恒漂移率已经超过可接受阈值(例如每千步总能量漂移若干百分比,阈值随问题而定,需凭物理尺度设定),那么后续的精度指标都只是「记录失败过程」。这与 8.3 势函数的长时漂移检查是同一件事的两个场景。

本节的六个常见误解
  1. 「PINN 是通用求解器,不需要数据也不需要网格」:「不需要解数据」是它的卖点,但方程、边界条件、采样策略、权重与优化预算都要人给;而正向高精度求解上它常不敌成熟求解器(8.4.3)。先问「我缺的是数据还是求解器」。
  2. 「残差损失下降就说明解对了」:残差是在采样点上算的。采样覆盖不足、权重失衡、或解在采样点之间剧烈变化时,损失可以很低而解很错。必须同时报告边条件满足度、守恒性、以及(若有)与参照解的对照。
  3. 「神经算子天然与分辨率无关」:这是需要验证的主张,不是自动属性。要在训练分辨率之外的网格上做(仿真代理模型的三类评测 的第一项)——很多实现在换分辨率后误差明显上升,尤其是解含高频成分时。
  4. 「可微分仿真给出的梯度就是真梯度」:在碰撞、相变、激波、离散分支处梯度不存在或只是近似 / 次梯度。必须先用数值扰动做一致性校验(例 8.4.4),并把不可微环节显式列出(可微分仿真的三个接口与三个代价)。
  5. 「加速和可微是一件事」:目标不同。加速关心「反复调用时快不快」(代理模型 / 算子),可微关心「能不能拿到可信梯度」(伴随法 / 可微求解器)。一个又好又快又可信的仿真器是理想,实践中要在精度、稳定、可微、算力之间取舍(可微分仿真的三个接口与三个代价 的第三列)。
  6. 「误差累积是模型不够好的问题」:一部分是。误差累积的放大率由动力学决定(JFJ_{\mathcal F} 的特征值,仿真代理模型的三类评测),混沌系统上任何模型都有可预报性上限。把「模型误差」与「系统可预报性」分开报告,才能判断哪里还有改进空间。
即时自测 · 8.4

Q1 用一句话分别说清代理模型、降阶模型、神经算子、PINN 各自「学的东西」,并指出哪一种在换分辨率时最可能仍可用、为什么。

Q2 写出热方程 ut=αuxxu_t=\alpha u_{xx} 的 PINN 残差损失,并判断 uθ(x,t)=e−2αtsin⁡(2 x)u_\theta(x,t)=e^{-2\alpha t}\sin(\sqrt{2}\,x) 的残差是否为零(给出计算)。

Q3 一个团队要用可微分仿真优化一个含接触的机械结构。他们的反传梯度与数值差分在若干次试验中相对误差达到 10−110^{-1}。请给出两条最可能的原因与两条处置动作。

Q4 某神经算子在训练分辨率 64×6464\times64 上相对 L2L^2 误差为 10−310^{-3},报告「与离散无关」。请写出你会要求补充的三项测试。

参考要点

Q1 ① 代理模型:学「固定参数(族)下解在一个区域上的值」(a0↦ua_0\mapsto u)。② 降阶模型:学「解的低维子空间与子空间上的动力学」。③ 神经算子:学算子本身(函数到函数,Gθ≈G\mathcal G_\theta\approx\mathcal G)。④ PINN:学「一个满足方程与边条件的解函数」,用残差当监督。换分辨率时最可能仍可用的是神经算子,因为它的参数按模式(频率)或函数基组织,而不是与网格点绑定;代理模型与 PINN 的参数化按坐标 / 网格组织,换分辨率通常要重训或表现明显退化。

Q2 损失: Lres=1N∑k(∂uθ∂t(xk,tk)−α ∂2uθ∂x2(xk,tk))2.\mathcal L_{\text{res}}=\frac1N\sum_k\Bigl(\frac{\partial u_\theta}{\partial t}(x_k,t_k)-\alpha\,\frac{\partial^2u_\theta}{\partial x^2}(x_k,t_k)\Bigr)^2 . 判断 u=e−2αtsin⁡(2x)u=e^{-2\alpha t}\sin(\sqrt2 x):ut=−2αe−2αtsin⁡(2x)u_t=-2\alpha e^{-2\alpha t}\sin(\sqrt2x);uxx=−2e−2αtsin⁡(2x)u_{xx}=-2e^{-2\alpha t}\sin(\sqrt2x),故 αuxx=−2αe−2αtsin⁡(2x)\alpha u_{xx}=-2\alpha e^{-2\alpha t}\sin(\sqrt2x),于是残差 =0=0。一般规律:u=e−αk2tsin⁡(kx)u=e^{-\alpha k^2 t}\sin(kx) 对任意 kk 都是精确解(衰减率必须等于 αk2\alpha k^2)。

Q3 最可能原因:① 接触环节不可微 / 分段光滑(法向力在穿透量为零处不连续),反传给出的是次梯度或松弛后的近似梯度;② 梯度链路实现问题(某些参数未参与计算图、时间步被 detach、或用了不可微的排序 / 最近邻操作)。处置动作:① 对接触力做光滑化(软化刚度、用惩罚式接触)后重跑校验,若误差降到 10−610^{-6} 量级则确认原因一;② 逐段排查计算图(对可疑模块单独做小规模梯度校验),确认没有意外的 detach 或数值截断;若某环节确认不可微且无法光滑化,则该环节改为无梯度方法(局部搜索 / 代理优化),并把可微部分保留用于其余参数。

Q4 三项测试:① 上采样分辨率:在 128×128128\times128、256×256256\times256 上加细网格测试,报告误差是否随分辨率上升(应与解的光滑性可比,而非爆炸);② 下采样 / 不规则采样:在更粗网格或随机采样点上测试,确认不是「靠网格对齐」;③ 分布外参数与高频成分:在训练参数范围之外与含更陡梯度的输入上测试,确认「与离散无关」不是在训练分布内才成立的巧合。报告时应当同时给出「训练分辨率内」与「跨分辨率」两组数字,而不是只报前者。

延伸阅读
  • Raissi, Perdikaris & Karniadakis, Physics-informed neural networks: a deep learning framework for solving forward and inverse problems involving nonlinear partial differential equations(2019,Journal of Computational Physics;预印本 arXiv:1711.10561)——PINN 的原始工作(正问题与反问题的并列实验)。
  • Wang, Teng & Perdikaris, Understanding and mitigating gradient pathologies in physics-informed neural networks(2020,arXiv:2001.04536)——损失项梯度尺度不平衡的分析与自适应权重方法。
  • Wang, Yu & Perdikaris, When and why PINNs fail to train: A neural tangent kernel perspective(2022,Journal of Computational Physics;预印本 arXiv:2007.14527)——用 NTK 解释训练失败,是本节 8.4.3 「适用边界」的主要机制来源。
  • Li 等, Fourier Neural Operator for Parametric Partial Differential Equations(2021,ICLR;预印本 arXiv:2010.08895)——FNO 原始论文(频域截断、分辨率泛化实验)。
  • Lu 等, DeepONet: Learning nonlinear operators for identifying differential equations based on the universal approximation theorem of operators(2019,arXiv:1910.03193)——分支-主干结构来源。
  • Karniadakis 等, Physics-informed machine learning(2021,Nature Reviews Physics;素材标注 arXiv:2108.08481,编号需核实)——把物理约束与机器学习结合路线的综述。
  • 开源实现:DeepXDE(PINN / 反问题工具库)、neuraloperator(FNO 等实现)、FEniCS / OpenFOAM(传统求解器,用于生成对照与标签)。接口与版本需核实。

本节小结:PDE 任务先分清四类做法学的东西不同——代理模型学某个参数下的解、降阶模型学低维子空间、神经算子学算子本身(FNO 频域截断 / DeepONet 分支-主干,定义 8.4.2)、PINN 用方程残差当监督。PINN 的边界由公开证据划定:在反问题与稀疏数据上有效(例 8.4.3)、在正向高精度求解上常不敌成熟方法,机制是损失项梯度病态与 NTK 特征值不平衡(8.4.3)。可微分仿真的代价是显存、不可微点与梯度可信度,必须先用数值扰动校验(最优步长 h⋆∼ϵ1/3h^\star\sim\epsilon^{1/3}、可达精度 ϵ2/3\epsilon^{2/3},例 8.4.4)。评测上永远报告三件事:分辨率泛化、误差累积、守恒律违反(仿真代理模型的三类评测)。下一节把这些工具带到最大的那个仿真对象上——地球系统。