4. 物理约束神经网络基础架构

物理信息神经网络(Physics-Informed Neural Network,PINN)的核心思想并不复杂:用一个神经网络 u_θ(x, t) 直接表示物理场的解,把控制方程、初值条件和边界条件写成残差项,与少量观测数据一起构成损失函数,让网络在训练中同时“拟合数据”和“满足物理”。与传统数值方法不同,PINN 不需要网格剖分,解在任意坐标点上连续可求,这使得它在反问题、稀疏数据场景和参数辨识中具有独特价值。

理解 PINN 的关键在于看清它的“双通道”结构:一条通道是数据损失,来自传感器或解析解采样点;另一条通道是物理损失,来自对网络输出做自动微分后代入方程得到的残差。两条通道共享同一组网络参数 θ,因此物理约束实际上是在参数空间中“牵引”网络,使其在无数据区域也保持合理行为。

输入坐标 x, t (配点/采样点) 神经网络 u_θ 全连接 / 卷积 / 图网络 激活:tanh / sin 参数 θ 共享 输出:u, u_x, u_t, u_xx… 自动微分 AD ∂u/∂t, ∂u/∂x ∂²u/∂x² 反向模式,无需网格 物理残差 r_phys r = u_t − νu_xx + 初值/边界残差 在配点上逐点计算 数据损失 L_data ‖u_θ(x_i,t_i) − u_i‖² 观测点/解析解采样 总损失 L L = L_data + λ·L_phys λ 为物理权重 梯度回传,更新 θ(Adam → L-BFGS)

网络架构选择与物理场表示

架构选择取决于物理场的空间结构和问题维度。对于一维 ODE/PDE 或低维参数化问题,全连接网络(MLP)是最直接的选择:输入 (x, t),若干隐藏层,输出标量场 u。实践中的经验是隐藏层 3~6 层、每层 32~128 个神经元,激活函数优先选 tanh 或 sin,因为 ReLU 的二阶导数为零,会让含 u_xx 的残差失效——这是初学者最常见的坑。

当物理场具有强空间局部性(如多孔介质、图像型场)时,卷积网络可以提取局部特征,但要注意卷积的平移等变性与边界条件处理需要额外设计。对于非规则几何、网格化仿真数据或粒子系统,图神经网络(GNN)更自然:节点表示离散点,边表示邻接关系,消息传递等价于局部算子作用。选择原则可以概括为:规则低维场用 MLP,网格型高维场考虑 CNN,非结构几何与多体耦合考虑 GNN。

自动微分在物理约束中的角色

自动微分(AD)是 PINN 的“发动机”。以反向模式为例,网络前向计算出 u 后,对输入坐标求导即可得到 u_t、u_x、u_xx,全程无需差分近似,也不依赖网格。以 PyTorch 为例,关键写法是让输入 x 带 requires_grad=True,再用 torch.autograd.grad 逐阶求导:

import torch

def physics_residual(model, x, t, nu):
    x = x.clone().requires_grad_(True)
    t = t.clone().requires_grad_(True)
    u = model(torch.cat([x, t], dim=1))
    u_t = torch.autograd.grad(u, t, torch.ones_like(u), create_graph=True)[0]
    u_x = torch.autograd.grad(u, x, torch.ones_like(u), create_graph=True)[0]
    u_xx = torch.autograd.grad(u_x, x, torch.ones_like(u_x), create_graph=True)[0]
    return u_t - nu * u_xx   # 一维热方程残差

注意 create_graph=True 必须保留,否则二阶导数无法继续回传;同时求导对象是输入坐标而非参数,这一点与常规训练中的参数梯度方向相反,是理解 AD 用于物理约束的关键。

一维 ODE/PDE 的 PINN 实战要点

以一个示例任务说明:求解一维热方程 u_t = ν u_xx,x∈[0,1],t∈[0,1],ν=0.01,初值 u(x,0)=sin(πx),边界 u(0,t)=u(1,t)=0。以下参数为教学示例设定,非实测结果。

  • 配点采样:域内随机采 2000 个 (x,t) 计算物理残差;初值/边界各采 200 个点计算条件残差。
  • 损失组合:L = L_data + λ_b·L_bc + λ_0·L_ic + λ_p·L_phys,示例取 λ_b=λ_0=100、λ_p=1,用较大权重保证边界与初值被优先满足。
  • 训练策略:先用 Adam(学习率 1e-3)训练约 5000 步,再切 L-BFGS 精调;每 500 步打印各分项损失。
  • 结果判读:与解析解 u=sin(πx)e^{−νπ²t} 对比,示例目标相对 L2 误差低于 1e-2;若物理残差下降但边界误差上升,说明权重失衡,应调大 λ_b。
调试顺序建议:先确认边界/初值损失能降到 1e-4 量级,再观察物理残差;若物理残差长期不降,优先检查激活函数是否可二阶导、配点是否覆盖全域、create_graph 是否开启。

PINN 的局限也要正视:训练成本高于传统求解器、多尺度问题收敛困难、权重 λ 敏感。工程上常配合课程学习(先易后难采样)、自适应配点(在残差大的区域加密)和硬约束(把边界条件嵌入网络输出结构)来提升稳定性。掌握这些实现要点,才能让物理约束真正“约束住”网络,而不是停留在公式层面。