PINN基础理论

分类:AI × CAE | 2026-10-02 改写
PINN architecture diagram: neural network with collocation points, loss decomposition into data, PDE residual, and boundary condition terms
PINN损失函数分解图:神经网络结构(带搭配点)和由数据损失、PDE残差损失、边界条件损失3项组成的物理约束的数学表述

理论:把方程放进损失函数

概述

🙋

听说PINN没有数据也能训练。它靠什么来学习?

🎓

靠控制方程本身。普通神经网络通过缩小与输入-正解对(数据)的差来学习,而PINN把网络所表示的函数u(x)代入方程后的残差作为损失函数。导数可以用自动微分精确计算,因此在求解域中散布的配点(collocation点)上评估残差,并与边界、初始条件的偏差一起最小化。有测量数据时,与数据的偏差也可以加入同一个损失函数。不需要生成网格、能在一个框架中同时处理方程和数据,是它的魅力所在。但训练中损失下降与解正确是两回事,配点的数量和分布、各项权重的设置、变量尺度的统一方式都会大大改变结果。

PINN的损失函数

$$ \mathcal{L}(\theta) = \frac{1}{N_c}\sum_{i=1}^{N_c}\left|\mathcal{N}[u_\theta](x_i) - f(x_i)\right|^2 + \lambda_b \frac{1}{N_b}\sum_{j=1}^{N_b}\left|u_\theta(x_j) - g(x_j)\right|^2 + \lambda_d\,\mathcal{L}_{\text{data}} $$

θ为网络参数,𝒩为微分算子(如u″),f为右端项,x_i为配点,g为边界值,λ_b、λ_d为边界项和数据项的权重,L_data为与测量数据的偏差。

Coffee Break 随笔闲谈

1990年代想法的复兴

用神经网络求解微分方程的想法本身,在1998年Lagaris等人的论文中就已经提出。它在2017〜2019年因Raissi、Perdikaris、Karniadakis的研究以“PINN”之名流行开来,是因为具备自动微分功能的TensorFlow、PyTorch普及,使方程残差能方便地写进损失函数。这是一个老想法因工具进步而一下子变得实用的例子。

算例

这是物理信息随机特征的最小二乘例,不是全层训练的PINN。使用60个隐藏单元、seed 0、[-8,8]随机权重与偏置、均匀配点、边界权重1。独立网格为[0,1]上1,001点;残差为RMS,解误差为最大绝对误差。舍入及随机种子会改变数值。

例:u″ = −π² sin(πx),u(0) = u(1) = 0(精确解sin(πx))

使用单隐藏层、60个tanh单元的网络(隐藏层权重随机固定、输出层用最小二乘确定的物理信息随机特征模型),改变配点数量。

配点数配点处残差配点之间的残差解的最大误差
56.7×10⁻¹⁵9.30.75
102.6×10⁻¹⁴0.875.3×10⁻³
201.4×10⁻¹⁴1.4×10⁻³4.0×10⁻⁶
505.5×10⁻¹⁰7.6×10⁻⁹6.4×10⁻¹²

5个配点时,配点处残差几乎为零(损失最小),但在配点之间完全不满足方程,解偏差很大。网络自由度多于配点数时,只满足这些配点的答案可以有无数个。

🙋

用PyTorch训练PINN,损失顺利下降,边界值却一直对不上。该怎么办?

🎓

很可能是损失各项的量级不一致。方程残差项含二阶导数,数值量级大,梯度下降几乎都被拉向减小残差的方向,边界项很难减小。对策有几种:增大边界项权重λ_b;使用在训练中监测各项梯度大小并自动调整权重的方法;对网络输出做变换使其自动满足边界条件(例如令u = x(1−x)·NN(x),则u(0) = u(1) = 0必然成立)。最后一种连边界项都不需要了,最为可靠。另外,输入坐标和输出值若不归一化到0〜1左右,激活函数会饱和,训练无法推进。训练结束后,要在配点以外的细密点上检查残差,可能的话再与已知解或有限元比较。

实务流程

  1. 确认要解的是正问题还是反问题,有限元够用就用有限元。
  2. 对坐标和变量无量纲化、归一化,使损失各项量级一致。
  3. 能满足的边界条件通过网络输出形式满足,其余放入损失函数。
  4. 配点要充足,变化大的地方多放,并在未参与训练的点上检查残差。
  5. 先与已知解或有限元结果比较确认精度,再用于反问题或数据融合。
Coffee Break 随笔闲谈

“只盯着损失曲线”

训练PINN时,看到损失曲线下降容易让人放心。但损失是配点上的值,增加配点重新训练时损失可能突然变大,这正说明之前的解在配点之间并不满足方程。在损失曲线旁定期记录未参与训练的点上的残差,就能立刻发现这种假收敛。

常见错误

错误与对策

错误后果对策
配点太少假收敛在训练外的点检查残差
损失项量级不同边界条件不满足调整权重或变换输出
不做归一化训练停滞缩放到0〜1左右
把PINN用于有限元就够的正问题慢且不准按目的选用
不用已知解检验发现不了误差与有限元或解析解比较
🙋

我想了解相关内容。

常见问题

PINN是什么?

用神经网络表示解u(x),把控制方程的残差以及边界、初始条件的偏差放入损失函数进行训练的方法。导数由自动微分计算,不需要网格,测量数据也能加入同一个损失函数。2019年Raissi等人系统阐述后得到广泛应用。

损失变小,解就正确吗?

不一定,因为损失只在配点(评估残差的点)上计算。u″ = −π² sin(πx)的例子中,用5个配点时残差为10⁻¹⁴几乎为零,解的最大误差却是0.75,配点之间的残差高达9.3;用20个配点误差降到4×10⁻⁶。在不参与训练的点上检查残差和误差必不可少。

PINN能代替有限元吗?

对于正问题(条件已定的求解),多数情况下有限元更快更准。PINN擅长的是由测量数据推断材料常数或边界条件的反问题、测量与模型融合的场景以及高维问题。按目的分工使用比较现实。

参考资料与检验范围

所列数值是基于文中假设的教学参考计算。资料用于理论和设置参考,不证明已在各软件中复现这些数值。工程决策须按实际条件验证。

关联模拟器

在本领域的交互式模拟器中体验理论

模拟器列表

相关分析领域

结构分析流体分析(CFD)V&V·质量保证
本文评价
感谢您的反馈!
有帮助
更详细
报错
有帮助
0
更详细
0
报错
0