4. 物理信息神经网络(PINN)原理
物理信息神经网络(Physics-Informed Neural Network,PINN)的核心思想,是把“数据拟合”与“物理规律约束”放进同一个优化目标里。传统神经网络只依赖样本标签,而 PINN 用偏微分方程(PDE)的残差作为额外的监督信号:网络输出不仅要贴近观测数据,还要在采样点上满足方程、边界条件和初始条件。这样一来,即使观测数据稀疏,网络也能借助物理约束把解“撑”起来。
设待求场量为 u(x,t),控制方程为 N[u]=f,其中 N 是含空间与时间导数的微分算子。PINN 用一个多层网络 u_θ(x,t) 近似解,θ 为可训练参数。损失函数通常由四部分构成:方程残差损失、边界条件损失、初始条件损失和数据损失。以权重 λ 调节各项比例,可写成:
L(θ) = λ_r · mean( (N[u_θ] - f)^2 ) # PDE 残差
+ λ_b · mean( (B[u_θ] - g)^2 ) # 边界条件
+ λ_i · mean( (u_θ(x,0) - u0)^2 ) # 初始条件
+ λ_d · mean( (u_θ - u_obs)^2 ) # 观测数据
关键难点在于:N[u_θ] 中的 ∂u/∂x、∂u/∂t、∂²u/∂x² 等导数如何得到?PINN 使用自动微分(Automatic Differentiation,AD)。网络本身是可微的复合函数,AD 沿计算图反向传播,能精确算出输出对输入的导数,而不是用有限差分近似。以二阶导数为例,在 PyTorch 中可这样实现:
u = net(x, t)
u_x = torch.autograd.grad(u, x, grad_outputs=torch.ones_like(u),
create_graph=True)[0]
u_xx = torch.autograd.grad(u_x, x, grad_outputs=torch.ones_like(u_x),
create_graph=True)[0]
u_t = torch.autograd.grad(u, t, grad_outputs=torch.ones_like(u),
create_graph=True)[0]
注意 create_graph=True 必须保留,否则二阶导数无法继续反传。残差项一般写成 res = u_t - alpha * u_xx(以一维热传导为例,alpha 为热扩散系数),再对残差取均方。采样点通常分两类:配点(collocation points)用于计算方程残差,可随机撒在求解域内部;边界点和初始点则用于约束条件。配点数量、分布密度和权重比例会显著影响收敛。
边界条件与初始条件的处理方式直接决定问题是否可解。常见做法是“软约束”:把边界/初始偏差写进损失函数,让优化器去压低它。另一种是“硬约束”:通过输出变换强制满足条件,例如令 u_θ = g(x) + φ(x)·net(x),其中 φ 在边界上为零,从而边界值恒等于 g。硬约束收敛更稳,但构造较复杂;软约束实现简单,需仔细调权重。初始条件在时间推进类问题中尤其重要,若权重过小,网络可能收敛到满足方程但初值错误的“伪解”。
正问题与反问题是 PINN 的两大应用方向。正问题中,方程形式、系数、边界和初值都已知,目标是求场量 u。此时损失里的 λ_r、λ_b、λ_i 固定,网络只学 θ。反问题中,某些物理参数(如热扩散系数 α、源项 f、甚至边界形状)未知,可把它们设为可训练变量,与 θ 一起优化。观测数据损失在反问题中变得关键——正是稀疏的 u_obs 提供了识别未知参数的依据。例如一维热传导反演 α:给定若干时刻的温度测点,令 α 为可学习标量,损失同时包含残差与数据项,训练后 α 会收敛到接近真值的估计。
实际实现时,一个可复现的最小流程如下。以一维热传导 u_t = α u_xx,域 x∈[0,1]、t∈[0,1],边界 u(0,t)=u(1,t)=0,初值 u(x,0)=sin(πx),α=0.1 为例(示例参数,非实测)。网络取 4 层、每层 64 个神经元、tanh 激活。配点用拉丁超立方在域内取 2000 个,边界各取 200 个,初值取 200 个。训练 5000 步,Adam 学习率 1e-3,后接 LBFGS 精调。判断收敛可观察总损失是否降至 1e-4 量级,并在若干测试点上与解析解 u=exp(−απ²t)sin(πx) 对比相对误差;若边界附近误差偏大,通常是 λ_b 偏小或边界配点不足。
与纯数据驱动模型相比,PINN 的优势在于把已知物理规律变成“免费的正则”,在数据稀缺、边界复杂或多尺度耦合场景中尤其有价值;代价是训练成本较高、损失权重需要调参。理解残差、自动微分、条件约束与正反问题这四者的关系,是后续把 PINN 用到多尺度建模中的基础。