想象你是一位老刑警,深夜接到报案:一根金属棒正在冷却,需要你还原“棒上每个位置、每个时刻的温度”。现场没有监控,你手里只有两条线索:棒两端的温度永远固定(一端 100°C、一端 0°C),以及一条铁一般的自然法则——热量总是从高温流向低温。这条法则在数学里就是一条偏微分方程(PDE)。老派侦探的做法是拿粉笔把金属棒划成几百个小格,一格一格推理,最后拼出全场答案——这就是有限元法。而今天的主角 PINN(物理信息神经网络)是个更“野”的新侦探:他不划格子,直接画出覆盖全场的连续曲线当“猜测”,然后带着猜测去现场各处“蹲点”检验——每到一个点,就把猜测代入物理法则,左右对不上就产生“残差”,于是回头修改猜测。猜、查、改,循环往复,直到整条曲线在任何蹲点都挑不出毛病。 这台“猜-查-改”机器就是 PINN 求解 PDE 的全部秘密:神经网络负责猜,方程残差负责查,优化器负责改。本文将带你从零看懂:不同类型的 PDE 怎么构建惩罚项、配点撒在哪里最划算、边界与初值如何写进模型、和有限元比谁更强、怎样加速收敛、多个方程互相耦合时又如何“联合办案”。

岗位关联

掌握 PINN 求解偏微分方程,是 AI 从业者进入 AI for Science、数字孪生、计算物理等高价值领域的核心能力——它让你能用神经网络这把新工具,解决传统仿真算不动、算不了的复杂问题。

目录
  1. 可视化演示
  2. PINN基本原理:侦探的猜-查-改循环
  3. PDE类型与损失:三种案件三种查法
  4. 配点采样策略:警力往哪里投
  5. 边界与初值:警戒线与监控录像
  6. 与有限元对比:老侦探与新侦探的较量
  7. 收敛加速技巧:让侦探少走弯路
  8. 多方程耦合:连环案要联合办案
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

演示PINN求解PDE的损失构建、配点采样与收敛求解,理解无网格方式求解连续解。

本节配有交互动效(进入视口后自动加载,约 3KB)。

损失构建:残差惩罚 损失 残差 PDE 方程残差惩罚项

PINN基本原理:侦探的猜-查-改循环

老刑警断案有一个朴素模式:先凭经验给出猜测,再拿证据检验,最后修正猜测。别人问他为什么能破案,他说:“我不是神探,我只是特别擅长被证据打脸然后改口。” PINN 干的就是这件事——只不过它的“证据”不是脚印指纹,而是物理法则本身。

假设你要解一个偏微分方程,未知函数是 u(x,t),比如温度场。PINN 的做法是:用一个神经网络 u_θ(x,t) 来代表“猜测”,θ 是网络里所有可调的权重参数。网络本身只是一个万能函数逼近器——给它坐标 (x,t),它吐出一个数值。它原则上能逼近任何连续函数,这正是侦探需要的“灵活口才”:什么形状的猜测都编得出来。

光有猜测不够,还要拿法则检验。把猜测代入 PDE 的左端得到 N[u_θ](x),再减去右端 f(x),得到的差叫“配点残差”,残差不为零说明这个点上的猜测违反了物理。于是把所有配点的残差平方取平均,再加上边界条件的偏离惩罚,构成总损失。训练让损失下降,就是在“改口”——直到整个猜测在每个配点都让残差趋近于零。

侦探就是这样破案的:先凭直觉画一条曲线,到每个蹲点拿法则的量尺去量,发现哪里不对就改哪里。反复几万轮之后,他的“猜测曲线”已经和真实物理场几乎重合——从头到尾他没划过一格网格,手里握着的是一整条连续、处处满足物理法则的函数。

L(θ)=1N∑i=1N∣N[u^θ](xi)−f(xi)∣2+λ LBC(θ)\displaystyle \mathcal{L}(\theta) = \frac{1}{N}\sum_{i=1}^{N} \left| \mathcal{N}[\hat{u}_\theta](\mathbf{x}_i) - f(\mathbf{x}_i) \right|^2 + \lambda \, \mathcal{L}_{BC}(\theta)
这是一个“扣分系统”:前半项是在 N 个蹲点位置上,猜测违反物理法则的总扣分;后半项是在边界上违背已知线索的扣分,λ 决定边界纪律有多严。
  1. 神经网络猜测$\hat{u}_\theta(\mathbf{x})$ 是网络在位置 $\mathbf{x}$ 处输出的预测物理量,$\theta$ 是全部可训练参数——可以理解为侦探的“临场发挥”。
    u^θ(x)=NNθ(x)\hat{u}_\theta(\mathbf{x}) = NN_\theta(\mathbf{x})
  2. 法则检验算子$\mathcal{N}[\cdot]$ 是偏微分算子,负责对猜测求导、组合,生成“法则要求的表达式”,比如 $\frac{\partial \hat{u}}{\partial t} - \alpha \frac{\partial^2 \hat{u}}{\partial x^2}$。
    N[u^θ](x)=∂u^θ∂t−α∂2u^θ∂x2\mathcal{N}[\hat{u}_\theta](\mathbf{x}) = \frac{\partial \hat{u}_\theta}{\partial t} - \alpha \frac{\partial^2 \hat{u}_\theta}{\partial x^2}
  3. 配点残差$\mathcal{N}[\hat{u}_\theta](\mathbf{x}_i) - f(\mathbf{x}_i)$ 是第 $i$ 个蹲点上“法则左侧减右侧”的冲突量,物理合法的解应使它对所有点都等于零。
    ri=N[u^θ](xi)−f(xi)r_i = \mathcal{N}[\hat{u}_\theta](\mathbf{x}_i) - f(\mathbf{x}_i)
  4. 均方平均$\frac{1}{N}\sum_{i=1}^{N} r_i^2$ 对 $N$ 个配点的冲突取平方平均,算出一个数字衡量“整体违法程度”。
    LPDE(θ)=1N∑i=1Nri2\mathcal{L}_{PDE}(\theta) = \frac{1}{N}\sum_{i=1}^{N} r_i^2
  5. 边界加权惩罚$\lambda \mathcal{L}_{BC}(\theta)$ 把边界条件的违背也纳入总分,$\lambda$ 控制边界纪律的严格程度。
    L(θ)=LPDE(θ)+λLBC(θ)\mathcal{L}(\theta) = \mathcal{L}_{PDE}(\theta) + \lambda \mathcal{L}_{BC}(\theta)

PDE类型与损失:三种案件三种查法

老刑警经验丰富,知道案子要分类:有的现场已经“冻住”了——所有线索静止不动,查一次就够;有的现场像墨水在清水中慢慢晕开,每过一秒分布都在变,必须盯着时间看;还有的现场像水波一圈圈荡开,信息以波的形式跑得飞快。物理里这三种“案件”分别叫椭圆型、抛物型、双曲型偏微分方程。

椭圆型方程(如泊松方程)描述稳态问题,解只依赖空间坐标;抛物型方程(如热传导方程)描述扩散过程,含一阶时间导数;双曲型方程(如波动方程)描述振动与传播,含二阶时间导数。它们的共同特点是“局部规则决定全局形态”,因此都能用同一种侦探流程——猜、查、改——来破案。

PINN 面对不同类型的 PDE,损失构建思路一致:把方程移项成“左边减右边等于零”,再对残差平方取平均。区别只在于算子 N 里包含的导数不同。对含时间的方程,PINN 把时间 t 当作和空间 x 平起平坐的普通坐标,在 (x,t) 的高维时空域里撒配点,一次训练就把整个时空的解学了出来。

三类案件招式不同,心法一致。椭圆型是一次性全面排查,抛物型是连续蹲守看变化,双曲型是追着波头跑。PINN 不问案件类型,只按同一个扣分表办事——方程长什么样,残差就照什么样构造,剩下的交给训练。

∂u∂t=α∂2u∂x2\displaystyle \frac{\partial u}{\partial t} = \alpha \frac{\partial^2 u}{\partial x^2}
热传导方程:左边是温度随时间的变化速度,右边是热量在空间上从高温向低温的搬运强度,α 是热扩散率——物料的“传热天赋”。
  1. 时间变化项$\dfrac{\partial u}{\partial t}$ 表示某一点上温度随时间的变化率——侦探要盯住“每个时刻的现场”。
    ∂u∂t=lim⁡Δt→0u(x,t+Δt)−u(x,t)Δt\frac{\partial u}{\partial t} = \lim_{\Delta t \to 0} \frac{u(x, t+\Delta t) - u(x, t)}{\Delta t}
  2. 空间扩散项$\alpha \frac{\partial^2 u}{\partial x^2}$ 表示温度曲线的“弯曲程度”,二阶导描述热量在该点是汇聚还是散开。
    α∂2u∂x2=αlim⁡Δx→0u(x+Δx)−2u(x)+u(x−Δx)(Δx)2\alpha \frac{\partial^2 u}{\partial x^2} = \alpha \lim_{\Delta x \to 0} \frac{u(x+\Delta x) - 2u(x) + u(x-\Delta x)}{(\Delta x)^2}
  3. 方程整体把左边减右边就是 PINN 的配点残差,训练目标就是让残差处处为零。
    r(x,t)=∂u∂t−α∂2u∂x2=0r(x,t) = \frac{\partial u}{\partial t} - \alpha \frac{\partial^2 u}{\partial x^2} = 0

配点采样策略:警力往哪里投

现场很大,警力有限,侦探不可能检查每一寸土地。经验丰富的刑警会把警力投在最可能出事的地方:现场中央疑似有打斗痕迹,就多派几个人;边缘平静如水,就少放两个哨。这“蹲点位置”的选择,对应到 PINN 里就是配点采样策略。

配点(collocation points)是 PINN 用来计算残差的样本点。理论上希望检查所有位置,但现实只能抽样。最朴素的做法是均匀撒点——像在网格纸上等距打洞;但真实解往往在局部变化剧烈,比如边界层、激波,均匀撒点会“平均用力、重点失守”。

提高效率的关键是“哪里残差大,就往哪里补点”。训练一段时间后,先算当前所有位置的残差,再按残差平方的分布去抽样新配点:残差大的区域被抽中的概率高,相当于把警力重新部署到最可疑的地方。此外,边界附近常因约束剧烈变化而出现小尺度结构,所以在边界带主动加密采样通常能稳定提升精度。

第一轮均匀撒点相当于例行巡逻,等侦探心里有了初步判断,第二轮就按可疑度重新布防,第三轮再基于更新的残差继续调整。如此“巡逻—评估—重部署”循环,用同样的配点数量,破案精度却能上一个台阶。

p(x)=∣r(x)∣2∫Ω∣r(x)∣2 dx\displaystyle p(\mathbf{x}) = \frac{|r(\mathbf{x})|^2}{\int_{\Omega} |r(\mathbf{x})|^2 \, d\mathbf{x}}
这是“可疑度分布”:分子是某点的违法程度平方,分母是全场违法总量,比值越大说明该点越可疑,越值得布点。
  1. 可疑度分子$|r(\mathbf{x})|^2$ 是位置 $\mathbf{x}$ 处残差的平方,代表这里“违反物理的程度”。
    r(x)=N[u^θ](x)−f(x)r(\mathbf{x}) = \mathcal{N}[\hat{u}_\theta](\mathbf{x}) - f(\mathbf{x})
  2. 归一化分母$\int_{\Omega} |r(\mathbf{x})|^2 d\mathbf{x}$ 把全现场的可疑度加起来,使 $p(\mathbf{x})$ 成为一个总和为 1 的概率分布。
    Z=∫Ω∣r(x)∣2 dxZ = \int_{\Omega} |r(\mathbf{x})|^2 \, d\mathbf{x}
  3. 抽样意义$p(\mathbf{x})$ 作为抽样密度,残差大的区域被抽到的概率高——新配点自动向“案件高发区”聚集。
    新配点∼p(x)\text{新配点} \sim p(\mathbf{x})

边界与初值:警戒线与监控录像

案发现场外围拉着警戒线,线外是已知信息——金属棒两端的温度读数就是“边界条件”;而案发那一刻的监控录像,则告诉侦探起点状态,对应“初始条件”。这两类是侦探手里仅有的铁证,怎么把它们写进破案流程,直接决定推理靠不靠谱。

PINN 处理边界条件有两种流派。软约束:把“边界上预测值与已知值的差”作为惩罚加进损失,让网络尽量满足边界。硬约束:从网络结构上动手脚,把输出改造成一个天然满足边界条件的数学形式,让违规在结构上就不可能发生。

软约束简单通用,但边界误差不会严格为零,权重 λ 需要调;硬约束虽然精巧,却要求能写出贴合边界的 g(x) 与 d(x),对复杂几何较难。初始条件本质上是时间维度的“边界条件”——把 t=0 的超平面当成一块特殊边界,用同样方法嵌入即可。常见的 Dirichlet 边界(指定边界上的值)在两种流派里都最直观。

软约束像口头叮嘱——侦探再三强调别越警戒线,但偶尔还是会跨出去一步;硬约束像物理隔离——警戒线直接焊死在结构里,想越也越不过去。实战中,能用硬约束就用硬约束,用不了就用软约束加足权重,两条路都能把铁证写进推理。

u^(x)=g(x)+d(x)⋅NNθ(x),d(x)∣∂Ω=0\displaystyle \hat{u}(\mathbf{x}) = g(\mathbf{x}) + d(\mathbf{x}) \cdot NN_\theta(\mathbf{x}), \quad d(\mathbf{x})|_{\partial\Omega} = 0
硬约束配方:g 是满足边界的骨架,d 是一把在边界处自动归零的安全锁,网络部分负责在骨架基础上自由发挥,两者相乘相加后,边界上无论如何都等于给定值。
  1. 边界骨架$g(\mathbf{x})$ 是预先构造的、完全满足边界条件的简单函数——比如边界值是 0 和 1 时,可以取 g(x)=x。
    g(x)=uB(x) 在边界 ∂Ω 上成立g(x) = u_B(x) \text{ 在边界 } \partial\Omega \text{ 上成立}
  2. 零化安全锁$d(\mathbf{x})$ 是“距离函数”,在边界上取值为 0、内部取正值,保证任何函数乘以它都在边界处消失。
    d(x)=dist(x,∂Ω),d∣∂Ω=0d(\mathbf{x}) = \text{dist}(\mathbf{x}, \partial\Omega), \quad d|_{\partial\Omega} = 0
  3. 组合输出$\hat{u} = g + d \cdot NN_\theta$ 在边界上退化为 $g$,自动等于给定边界值;在内部则完全由网络自由表达。
    u^∣∂Ω=g∣∂Ω=uB\hat{u}|_{\partial\Omega} = g|_{\partial\Omega} = u_B

与有限元对比:老侦探与新侦探的较量

老侦探(有限元法 FEM)破案讲究“网格化”:把现场用粉笔划成密密麻麻的小格子,在每个格子里做局部推理,最后拼成全局答案。格子越细答案越准,但格子一多,计算量像滚雪球一样膨胀。新侦探(PINN)不划格子,上来就对全场做整体猜测,再用物理法则逐点检验。

有限元把求解域离散成网格单元,在每个单元上用多项式近似,通过组装线性方程组求解;PINN 则用神经网络在整个定义域上做全局近似,通过优化损失函数求解。网格是 FEM 的核心资产也是最大负担——复杂几何体的网格剖分本身就极其耗时。

精度上,FEM 在规则区域、光滑解的问题上非常成熟,误差随网格加密以多项式阶收敛;PINN 因为是全局逼近,误差由网络容量和优化效果共同决定,在低维简单问题上未必比得过精心剖分的 FEM,但在高维问题、复杂几何、以及需要解本身是连续函数的场合(如反问题、参数化仿真),PINN 的“无网格 + 连续解”优势就显现出来了。

老侦探胜在功力扎实、按部就班,但碰上没有墙角的圆形大厅(复杂几何)就犯了难——粉笔线不知怎么划;新侦探虽然起步毛躁、训练耗时,但胜在不挑现场、全局掌控,而且他的推理结论是一整张连续地图,随时可以查询任意位置的答案。聪明的办案单位通常两条腿走路:先用 FEM 提供可靠参照,再用 PINN 做高维扩展与快速重算。

∥u−uh∥L2(Ω)≤C hk+1\displaystyle \| u - u_h \|_{L^2(\Omega)} \le C \, h^{k+1}
有限元的误差上界:u 是真实解,u_h 是 FEM 解,h 是网格最大边长,k 是单元多项式阶数——格子越细、单元越高级,误差下降越快;PINN 没有这个“网格红利”,它的精度完全靠训练磨出来。
  1. 误差度量$\|u - u_h\|_{L^2(\Omega)}$ 是真实解与数值解在整个区域上的“平均差距”。
    ∥u−uh∥L2=∫Ω(u−uh)2 dx\| u - u_h \|_{L^2} = \sqrt{\int_\Omega (u - u_h)^2 \, d\mathbf{x}}
  2. 网格尺寸$h$ 是网格中最大单元的边长,h 越小代表格子划得越细。
    h=max⁡K∈Thdiam(K)h = \max_{K \in \mathcal{T}_h} \text{diam}(K)
  3. 收敛阶$h^{k+1}$ 表示误差随网格加密以 $k+1$ 阶速度衰减,$C$ 是与网格无关的常数。
    ∥u−uh∥L2≤Chk+1\| u - u_h \|_{L^2} \le C h^{k+1}

收敛加速技巧:让侦探少走弯路

新侦探天赋再好,也要讲方法。老刑警带徒弟有三个口诀:“抓大放小、先粗后细、节奏要稳”。翻译成神经网络的语言,就是损失加权、渐进式训练和学习率调度——它们共同决定训练是快速逼近真相,还是在原地打转。

PINN 训练最常见的烦恼是“损失打架”:PDE 残差和边界损失量纲不同、数量级悬殊,一个压过另一个,模型顾此失彼。解决思路是给每个损失项分配合理权重,就像给不同线索标注可信度。权重可以人工调,也可以按训练过程中的损失大小自动更新。

学习率调度讲究“节奏”:训练前期损失大、梯度猛,适合较大学习率快速探索;后期接近收敛,再用小学习率精细打磨,余弦退火是常用方案。渐进式训练则“先粗后细”:先让网络学会低频、平滑的大尺度结构,再逐步加入高频细节,避免一上来就被复杂局部结构带偏。预训练策略更直接——先用粗网格 FEM 或上一轮结果给网络一个“大致方向”,再做 PINN 精调。

三个口诀合起来就是一套完整的“带徒弟方案”:权重调度确保各条线索都被认真对待,学习率调度控制步伐节奏,课程式安排让徒弟先易后难。再加上预训练这种“先跟师傅学个大概再自己练”的策略,PINN 收敛速度往往能翻几倍——侦探不靠蛮力,靠方法。

αt=αmin⁡+12(αmax⁡−αmin⁡)(1+cos⁡πtT)\displaystyle \alpha_t = \alpha_{\min} + \frac{1}{2}(\alpha_{\max} - \alpha_{\min}) \left(1 + \cos \frac{\pi t}{T}\right)
余弦学习率衰减:t 是当前训练步,T 是总步数,学习率从 α_max 平滑滑向 α_min,像侦探的节奏——前期大步流星,后期蹑手蹑脚。
  1. 训练进度$\frac{t}{T}$ 是当前训练步占总步数的比例,取值从 0 到 1。
    进度比=tT∈[0,1]\text{进度比} = \frac{t}{T} \in [0, 1]
  2. 余弦因子$\cos(\pi t / T)$ 从 1 平滑下降到 -1,塑造一条先缓后陡再缓的衰减曲线。
    cos⁡(π⋅0)=1,cos⁡(π⋅1)=−1\cos(\pi \cdot 0) = 1,\quad \cos(\pi \cdot 1) = -1
  3. 线性插值前后两项把学习率从 $\alpha_{\max}$ 平滑映射到 $\alpha_{\min}$,构成一条余弦形的衰减轨迹。
    α0=αmax⁡,αT=αmin⁡\alpha_0 = \alpha_{\max}, \quad \alpha_T = \alpha_{\min}

多方程耦合:连环案要联合办案

最难的案子不是单案,而是连环案:温度场的变化会影响化学反应速度,化学反应又反过来释放热量改变温度场——两个案件互相纠缠,谁也不能单独破。物理里这种情形遍地都是,比如流体的速度场与压力场、反应扩散系统中的温度与浓度。

处理耦合 PDE 系统,直觉做法是分别训练两个网络各自解一个方程,但这会让两个网络各说各话,丢失物理上必须满足的耦合关系。PINN 的正确姿势是联合办案:一个神经网络拥有多个输出头,同时输出 u(x,t) 和 v(x,t),把两个方程的残差以及它们之间的耦合项残差全部加进同一个损失函数,一起优化。

多输出结构带来“参数共享”的天然好处:两个物理量共享底层的特征提取层,各自拥有独立的输出通道,训练中互相借力。损失函数分为三项:方程 u 的残差、方程 v 的残差,以及耦合关系残差。需要注意的是,不同方程可能量纲不同、损失尺度差异大,要给各自设置合理权重,否则一个方程会被另一个带偏。

联合办案的精髓是情报共享、统一指挥:底层网络是共享的情报中心,两个输出头是各自的办案小组,总损失是统一的目标考核表。这样破出来的两个解,不但各自满足物理法则,还天然满足彼此间的耦合关系——这才是连环案的正确打开方式。

∂u∂t=Du∂2u∂x2+f(u,v),∂v∂t=Dv∂2v∂x2+g(u,v)\displaystyle \frac{\partial u}{\partial t} = D_u \frac{\partial^2 u}{\partial x^2} + f(u,v), \qquad \frac{\partial v}{\partial t} = D_v \frac{\partial^2 v}{\partial x^2} + g(u,v)
反应-扩散系统:u、v 是两种相互作用的物理量(如温度与浓度),各自扩散,又通过反应项 f、g 互相影响。PINN 用“一个网络多输出 + 三项损失”同时破这两个连环案。
  1. 双变量输出$(\hat{u}, \hat{v}) = NN_\theta(x,t)$ 由一个网络的两个输出头同时给出,底层共享特征。
    (u^,v^)=NNθ(x,t)(\hat{u}, \hat{v}) = \text{NN}_\theta(x, t)
  2. 各自扩散项$D_u \frac{\partial^2 u}{\partial x^2}$ 和 $D_v \frac{\partial^2 v}{\partial x^2}$ 表示两个量各自独立地在空间扩散,扩散系数不同。
    扩散项u=Du∂2u∂x2,扩散项v=Dv∂2v∂x2\text{扩散项}_u = D_u \frac{\partial^2 u}{\partial x^2}, \quad \text{扩散项}_v = D_v \frac{\partial^2 v}{\partial x^2}
  3. 耦合反应项$f(u,v)$ 与 $g(u,v)$ 描述两个量之间的相互影响——比如消耗一种物质生成另一种。
    f(u,v)=−k u v,g(u,v)=k u vf(u,v) = -k\, u\, v, \quad g(u,v) = k\, u\, v
  4. 联合损失三个残差(方程 u、方程 v、耦合关系)同时加进总损失,反向传播时共享参数一起更新。
    L=Lu+Lv+Lcouple\mathcal{L} = \mathcal{L}_u + \mathcal{L}_v + \mathcal{L}_{\text{couple}}

AI 应用场景

计算化学:反应-扩散过程的耦合模拟

阶段:正向仿真与数据生成

解决的问题:传统有限元处理不规则催化颗粒与多物理场耦合时,网格剖分困难、反复求解成本高;PINN 用一个多输出网络同时给出浓度场与温度场,天然满足耦合方程约束,且无网格、解连续。

具体案例:新型催化反应器中,催化剂颗粒形状不规则,传统网格剖分费时费力。工程师用 PINN 求解温度-浓度耦合的反应扩散方程,一次训练即可得到整个时空的连续场,随后可直接查询任意位置、任意时刻的状态,换个工况只需重新训练或微调。

计算物理:流场仿真的快速代理模型

阶段:仿真加速与代理建模

解决的问题:空气动力学高保真仿真(如飞行器外形优化)需上万次 CFD 计算,每次耗时数小时;PINN 把 PDE 残差作为先验知识加入训练,让网络在数据稀疏时依然满足物理规律,可充当毫秒级响应的代理模型。

具体案例:翼型设计中,用少量 CFD 数据结合 PINN 训练一个满足纳维-斯托克斯方程的代理模型。外形参数一变,秒级就能预测新的流场分布,替代原来一整晚的高保真计算,让设计师能在一小时内遍历上百个候选方案。

工业逆向设计:从观测反推物性参数

阶段:反问题求解与参数辨识

解决的问题:传统反演参数需要反复正算,代价极高;PINN 把未知参数也当作可训练变量,在损失中加入观测数据误差项,边解场边辨识参数,一步到位。

具体案例:地热勘探中,从地表温度观测反推地下热扩散率分布。传统方法每次迭代都要完整求解一次正问题,PINN 则把热扩散率设为可学习参数,训练结束时不仅得到温度场,还直接输出物性参数分布,大幅压缩反演周期。

Python 演示

python75 行
import numpy as np  def make_net(hidden=8, seed=42):    rng = np.random.default_rng(seed)    return {        'w1': rng.normal(0.0, 0.6, (1, hidden)),        'b1': np.zeros((1, hidden)),        'w2': rng.normal(0.0, 0.6, (hidden, 1)),        'b2': np.zeros((1, 1)),    }  def forward(net, x):    # x 形状为 (N,1),单隐藏层 tanh 网络直接输出对 u 的猜测    h = np.tanh(x @ net['w1'] + net['b1'])    return h @ net['w2'] + net['b2']  def pde_residual(net, x):    # 一维泊松方程 u'' = -pi^2 sin(pi x),中心差分近似二阶导    dx = 1e-3    uxx = (forward(net, x + dx) - 2.0 * forward(net, x) + forward(net, x - dx)) / (dx * dx)    target = -np.pi ** 2 * np.sin(np.pi * x)    return uxx - target  def pde_loss(net, xs):    r = pde_residual(net, xs.reshape(-1, 1))    return float(np.mean(r ** 2))  def bc_loss(net, xb):    u = forward(net, xb.reshape(-1, 1))    return float(np.mean(u ** 2))  def total_loss(net, xs, xb):    return pde_loss(net, xs) + 10.0 * bc_loss(net, xb)  def train(epochs=400, lr=0.05, hidden=8, n_colloc=24):    net = make_net(hidden)    xs = np.linspace(0.02, 0.98, n_colloc)   # 内部配点(模拟蹲点)    xb = np.array([0.0, 1.0])                 # 边界点(两端铁证)    eps = 1e-4    for epoch in range(epochs):        for key in net:            flat = net[key].ravel()           # ravel 返回视图,可就地修改            for i in range(flat.size):                orig = flat[i]                flat[i] = orig + eps                lp = total_loss(net, xs, xb)                flat[i] = orig - eps                lm = total_loss(net, xs, xb)                flat[i] = orig - lr * (lp - lm) / (2.0 * eps)        if epoch % 100 == 0:            loss0 = total_loss(net, xs, xb)            print("epoch", epoch, "loss", loss0)    return net  def predict(net, x):    return float(forward(net, np.array([[x]]))[0, 0])  def exact_solution(x):    return np.sin(np.pi * x)  if __name__ == "__main__":    net = train(epochs=400)    print("x    PINN     精确解")    for x in [0.0, 0.25, 0.5, 0.75, 1.0]:        print("%.2f  %.5f  %.5f" % (x, predict(net, x), exact_solution(x)))
目的:用纯 NumPy 实现一个极简 PINN,求解一维泊松方程 u'' = -π²sin(πx)(边界 u(0)=u(1)=0),通过数值梯度下降把“方程残差 + 边界惩罚”压到最小,展示“猜-查-改”全流程。
  1. h = np.tanh(x @ net['w1'] + net['b1'])隐藏层:把坐标映射成高层特征,tanh 给网络非线性表达能力。
  2. return h @ net['w2'] + net['b2']输出层:把特征合成一个数值,即侦探对物理量的猜测。
  3. uxx = (forward(net, x + dx) - 2.0 * forward(net, x) + forward(net, x - dx)) / (dx * dx)中心差分求二阶导,相当于拿“法则量尺”检验猜测。
  4. target = -np.pi ** 2 * np.sin(np.pi * x)方程右端项 f(x),本案要匹配的“法则参照系”。
  5. return float(np.mean(r ** 2))配点残差平方的平均,即“违法总扣分”。
  6. return pde_loss(net, xs) + 10.0 * bc_loss(net, xb)PDE 惩罚加边界惩罚,权重 10 表示边界铁证优先。
  7. flat = net[key].ravel()取参数视图以便就地修改,省去拷贝开销。
  8. flat[i] = orig - lr * (lp - lm) / (2.0 * eps)数值梯度下降:沿损失下降方向更新参数。生产环境应改用 PyTorch 的 autograd 自动求导。

常见误区

误区学会了 PINN 之后,感觉有限元这种传统方法就该被淘汰了,以后所有物理仿真都用神经网络,又快又好。

正解PINN 在简单、低维问题上训练成本高,精度未必比精心剖分的 FEM 高;在复杂工程结构、多尺度问题上,成熟的 FEM 软件依然是工业标准。两者的正确定位是互补:FEM 提供可靠基准与预训练数据,PINN 擅长高维、复杂几何、反问题与快速重算。新侦探再厉害,也不能开除所有老刑警。

为何常见:因为看到 PINN 论文在多个示例上“秒杀”了 FEM,容易以偏概全,忽略论文中问题规模与真实工程问题的巨大差距。

误区配点就是随机均匀生成一大堆点就够了,反正神经网络万能,点多了总能把方程学会。

正解均匀配点在光滑解上够用,但真实问题常在边界层、激波、拐角处出现小尺度剧烈变化。均匀撒点等于平均用力,关键区域反而兵力不足。实践表明,残差驱动或边界加密的自适应采样,往往能用更少的配点获得更高的精度。

为何常见:均匀采样实现最简单、看起来“公平”,而且早期 PINN 开源代码默认就是均匀采样,容易形成惯性思维。

误区我把边界误差写进损失函数,模型为了降低损失自然会把边界学好,所以边界条件肯定能满足。

正解软约束只是“尽量满足”,边界点上的误差永远不会严格为零,而且权重 λ 过小会被 PDE 残差淹没,过大又会让网络牺牲内部精度。若边界条件必须精确满足,应优先考虑硬约束结构(g + d·NN),或使用足够大的权重并配合边界加密采样。

为何常见:把“优化目标”和“硬约束”混为一谈——训练 loss 下降不等于所有约束都被满足,低估了多目标竞争的影响。

误区训练结束后配点上的残差已经很小,网络输出应该就是精确解,可以直接拿去用。

正解残差小只能保证“检查过的蹲点”合法,配点之间的区域是无人查验的盲区。网络可能在配点处巧合格线、在缝隙处严重失真,尤其数据少时。正确做法是增加验证配点、观察解的平滑性与物理合理性,必要时配合少量真值数据监督。

为何常见:监督学习里“训练误差小约等于模型好”的印象深入人心,忽略了 PINN 的损失只覆盖了有限采样点这一关键事实。

面试题

Q1. PINN 训练中“配点残差”指的是什么?

单选题 · easy

  • A.网络输出与真实标签之差
  • B.预测代入 PDE 后左右之差← 正确答案
  • C.训练损失函数本身的数值
  • D.相邻两个配点间的距离

答案:B。配点残差是把网络预测 u_θ 代入偏微分方程后,左端减右端的差值,物理上代表“违反法则的程度”。A 是监督学习的误差概念,C 是残差的聚合结果,D 与物理无关。

Q2. 以下哪项是 PINN 相对有限元的核心优势?

单选题 · easy

  • A.不需要任何物理先验知识
  • B.无网格地得到连续函数解← 正确答案
  • C.训练速度必然快于有限元
  • D.完全不依赖优化与迭代过程

答案:B。PINN 把解表示为连续函数,可在任意坐标求值,无需网格。A 错——PDE 残差正是物理先验;C 过于绝对;D 错——训练本质就是优化迭代。

Q3. “硬约束”处理边界条件的正确做法是?

单选题 · mid

  • A.把边界点误差加入损失函数
  • B.网络输出乘零化函数再加骨架← 正确答案
  • C.调大学习率让边界快速收敛
  • D.删掉边界配点避免干扰训练

答案:B。硬约束构造 û = g + d·NN,d 在边界处为零,使输出自动满足边界。A 是软约束;C、D 都无法保证边界被精确满足。

Q4. 自适应配点采样的核心思想是?

单选题 · mid

  • A.让配点全部堆在区域角落处
  • B.在残差较大的区域多布置点← 正确答案
  • C.完全随机撒点不参考任何信息
  • D.只用边界点不使用内部配点

答案:B。自适应采样按残差分布重新部署配点,残差大的地方概率高,等于把警力集中到可疑区。A 过度集中角落,C 忽略了残差信息,D 无法刻画内部物理场。

Q5. 一维热传导方程属于哪类 PDE 方程?

单选题 · easy

  • A.椭圆型方程如泊松方程
  • B.抛物型方程如热传导方程← 正确答案
  • C.双曲型方程如波动方程
  • D.常微分方程或纯代数方程

答案:B。热传导方程含一阶时间导数与二阶空间导数,描述扩散过程,属于抛物型。椭圆型只有空间项,双曲型含二阶时间导数,D 与事实不符。

Q6. 以下属于 PINN 收敛加速技巧的有哪些?

多选题 · mid

  • A.对各损失项进行加权平衡← 正确答案
  • B.学习率余弦式衰减调度← 正确答案
  • C.把全部损失权重设为零值
  • D.从粗到细的课程式渐进训练← 正确答案

答案:ABD。损失加权协调量纲冲突,学习率调度控制节奏,课程式训练先易后难,都是经典加速手段。C 把所有权重清零会使模型完全失去物理约束,必然失败。

Q7. 关于有限元法与 PINN 的对比,正确的是?

单选题 · hard

  • A.有限元法的解天然无网格
  • B.PINN 的解是连续闭式函数← 正确答案
  • C.PINN 精度一定高于有限元
  • D.有限元不需要任何边界条件

答案:B。PINN 输出是定义在全域上的连续函数,任意坐标可求值。FEM 依赖网格剖分(A 错),精度高低取决于问题与网格(C 过于绝对),FEM 必须施加边界条件才能定解(D 错)。

Q8. 多方程耦合 PINN 的正确做法包括哪些?

多选题 · hard

  • A.单网络多输出共享底层参数← 正确答案
  • B.将耦合项残差也加入总损失← 正确答案
  • C.每个方程单独训练互不通信
  • D.按量纲差异设置合理权重← 正确答案

答案:ABD。耦合问题应联合办案:一个网络多输出共享底层特征,把两个方程的残差与耦合项残差一起优化,并按量纲差异配权。C 分开训练会丢失物理耦合关系。

Q9. 波动方程 u_tt = c²u_xx 描述的物理现象是?

单选题 · easy

  • A.稳态温度场的空间分布
  • B.振动信号在介质中的传播← 正确答案
  • C.溶质分子在溶液中的扩散
  • D.静电场中的电势分布情况

答案:B。二阶时间导数刻画惯性与振动,解以波的形式传播,属于双曲型。A、D 是稳态椭圆问题,C 是抛物型扩散问题。

Q10. 关于软约束边界条件,下列说法正确的是?

多选题 · extreme

  • A.边界损失权重需要仔细调参← 正确答案
  • B.权重过大可能抑制 PDE 内部拟合← 正确答案
  • C.边界处可以不布置任何采样点
  • D.软约束能保证边界严格精确满足

答案:AB。软约束是软惩罚,权重需调,过大则边界项压过 PDE 残差,内部精度被牺牲(A、B 对)。C 错——边界不采样则边界损失无法计算;D 错——严格满足需要硬约束,软约束只能尽量逼近。