2. 物理信息神经网络基础

物理信息神经网络(Physics-Informed Neural Networks, PINN)的核心思想,是将物理定律以偏微分方程(PDE)的形式嵌入神经网络的损失函数中,使得网络输出不仅拟合观测数据,还严格满足控制方程、初始条件与边界条件。与纯数据驱动的神经网络不同,PINN 的优化目标不再是“预测值接近标签”,而是“预测值同时满足数据约束与物理约束”。这一转变带来了网络结构设计、微分计算方式、损失函数构成以及训练策略上的系统性差异。理解这四个基础模块,是后续开展多物理场耦合建模的前提。

PINN 核心架构与训练闭环 输入层 x, y, z, t 隐藏层 全连接 + 激活函数 权重 W, 偏置 b 输出层 u(x,t), v(x,t) 自动微分 ∂u/∂t, ∂u/∂x, ∂²u/∂x² 链式法则 + 计算图 损失函数 L = L_PDE + L_BC + L_IC + L_Data 加权求和 优化器 Adam / L-BFGS 反向传播更新 W, b 物理约束 PDE 残差: f(x,t) ≈ 0 边界条件: B(u) = g 初始条件: u(x,0) = h(x) 观测数据 传感器 / 仿真 / 实验

2.1 神经网络结构:从通用逼近器到物理场代理模型

PINN 采用的神经网络结构本质上是一个多层全连接前馈网络(MLP),其数学表达为:

输入向量: X = [x, y, z, t]
第 l 层输出: h^(l) = σ(W^(l) · h^(l-1) + b^(l))
最终输出: u(X) = W^(L) · h^(L-1) + b^(L)

其中 σ 为激活函数,W 和 b 为可训练参数。与图像识别中的卷积网络不同,PINN 处理的是连续时空坐标到物理场量的映射,因此全连接结构是主流选择。网络深度通常为 4~8 层,每层宽度 50~200 个神经元,具体取决于 PDE 的复杂度和求解域维度。

激活函数的选择对 PINN 训练影响显著。常用的 tanh 和 Swish 函数因其光滑性适合二阶微分计算,而 ReLU 由于二阶导为零,在 PINN 中几乎不被采用。对于包含冲击波或多尺度特征的问题,可考虑使用自适应激活函数,例如引入可学习的斜率参数:

σ_a(x) = tanh(a · x)

其中 a 为可训练参数,初始值设为 1,训练过程中自动调整以匹配解的梯度变化。

网络结构设计要点:
  • 输入归一化:将时空坐标缩放到 [-1, 1] 或 [0, 1] 区间,避免因量纲差异导致梯度消失或爆炸。
  • 输出层无激活:物理场量(如温度、位移)通常为实数域连续值,输出层应使用线性激活。
  • 权重初始化:推荐 Xavier 或 He 初始化,配合 tanh 激活时 Xavier 效果更稳定。
  • 残差连接:对于深层网络(>8 层),可引入残差结构缓解梯度衰减。

2.2 自动微分原理:PINN 的数学引擎

自动微分(Automatic Differentiation, AD)是 PINN 区别于传统数值方法的关键技术。它通过链式法则在计算图上逐层反向传播,精确计算任意阶导数,且精度达到机器精度,不存在有限差分法的截断误差。

以二维热传导方程为例,PDE 残差需要计算 ∂u/∂t 和 ∂²u/∂x²。在 TensorFlow 或 PyTorch 中,实现方式为:

import tensorflow as tf

def pde_residual(model, x, t):
    with tf.GradientTape(persistent=True) as tape:
        tape.watch([x, t])
        u = model(tf.concat([x, t], axis=1))
        u_t = tape.gradient(u, t)
        u_x = tape.gradient(u, x)
    u_xx = tape.gradient(u_x, x)
    del tape
    return u_t - alpha * u_xx  # 热传导方程残差

自动微分的计算复杂度约为前向传播的 2~4 倍,对于二阶导数需要嵌套梯度带。在训练过程中,每个训练步需要执行一次前向传播和多次反向传播,因此计算图的内存管理至关重要。建议使用 tf.function 或 PyTorch 的 torch.jit.script 进行图编译,可提升 20%~50% 的训练速度。

微分方法 精度 计算成本 适用场景
有限差分 O(h²) 截断误差 低 网格规则、低维问题
符号微分 机器精度 极高(表达式膨胀) 简单函数、教学演示
自动微分 机器精度 中(前向的 2~4 倍) 任意阶导数、PINN 标准选择

2.3 损失函数设计:多约束加权与平衡策略

PINN 的损失函数由四部分构成,每部分对应一类物理或数据约束:

L_total = λ_PDE · L_PDE + λ_BC · L_BC + λ_IC · L_IC + λ_Data · L_Data

其中各分量的具体形式为:

  • PDE 残差损失:L_PDE = (1/N_f) Σ ||f(x_i, t_i)||²,其中 f 为控制方程左端项,N_f 为配点数。
  • 边界条件损失:L_BC = (1/N_b) Σ ||B(u(x_b, t_b)) - g(x_b, t_b)||²。
  • 初始条件损失:L_IC = (1/N_0) Σ ||u(x_0, 0) - h(x_0)||²。
  • 数据拟合损失:L_Data = (1/N_d) Σ ||u(x_d, t_d) - u_obs||²。

权重系数 λ 的选取直接影响训练收敛性。若 λ_PDE 过大,网络会过度拟合物理约束而忽略数据;反之则退化为纯数据驱动。常用的自适应策略包括:

  1. 梯度归一化:根据各损失分量对参数的梯度范数动态调整权重,使梯度量级一致。
  2. 不确定性加权:将 λ 视为可学习参数,通过最大化高斯似然自动学习最优权重。
  3. 时间衰减策略:训练初期加大数据损失权重,后期逐步提高 PDE 损失权重,帮助网络先拟合观测再满足物理。
常见误区:不要将所有 λ 初始化为 1。对于多物理场耦合问题,不同物理过程的量纲差异巨大(如温度场 10³ K 与位移场 10⁻³ m),直接等权相加会导致梯度被大尺度物理量主导。建议先对各物理量做无量纲化处理,再设置初始权重。

2.4 PINN 核心训练流程:从初始化到收敛

PINN 的训练流程可归纳为以下六个步骤,每一步都有明确的输入、操作和输出:

步骤 操作内容 关键参数/输入 输出
1. 问题定义 明确 PDE 方程、边界条件、初始条件、求解域 方程系数、域范围 数学描述文档
2. 数据生成 在求解域内采样配点、边界点、初始点 N_f=10000, N_b=2000, N_0=2000 训练数据集
3. 网络构建 定义 MLP 结构、激活函数、初始化方式 层数=6, 宽度=100, tanh 模型实例
4. 损失计算 前向传播 + 自动微分 + 各损失分量加权 λ 权重、损失函数形式 标量损失值
5. 优化迭代 Adam 预热 + L-BFGS 精调 lr=1e-3, 迭代次数 更新后的参数
6. 验证评估 对比解析解/数值解,计算 L2 相对误差 测试点集 误差报告

训练策略上,推荐采用两阶段优化:先用 Adam 优化器以学习率 1e-3 训练 5000~10000 步,使损失快速下降;再切换至 L-BFGS 进行精细优化,利用其拟牛顿特性加速收敛。L-BFGS 对学习率不敏感,但需要全批量梯度,内存开销较大。

2.5 案例拆解:一维热传导方程的 PINN 求解

为完整展示上述原理,我们以一维热传导方程为例进行全流程演示:

控制方程: ∂u/∂t = α · ∂²u/∂x²,  x ∈ [0, 1], t ∈ [0, 1]
初始条件: u(x, 0) = sin(πx)
边界条件: u(0, t) = u(1, t) = 0
解析解:   u(x, t) = sin(πx) · exp(-π²αt)

场景设定:α = 0.1,求解域为 1m 长的细杆,初始温度分布为正弦波形,两端保持 0°C。目标是训练 PINN 预测任意时空点的温度值。

关键参数配置:

  • 网络结构:4 层隐藏层,每层 50 个神经元,tanh 激活
  • 配点采样:N_f = 5000(域内随机点),N_b = 500(边界点),N_0 = 500(初始点)
  • 损失权重:λ_PDE = 1.0, λ_BC = 1.0, λ_IC = 1.0
  • 优化器:Adam (lr=1e-3) 训练 8000 步,L-BFGS 精调 2000 步

训练过程观察:

  1. 前 1000 步:L_PDE 从 10⁻¹ 快速下降至 10⁻³,L_BC 和 L_IC 同步下降。
  2. 第 3000 步:总损失降至 10⁻⁵,预测曲线与解析解肉眼几乎重合。
  3. L-BFGS 阶段:损失进一步降至 10⁻⁷,L2 相对误差达到 0.3%。

结果对比:在 t=0.5 时刻,PINN 预测的最大误差为 2.1×10⁻⁴,相对解析解的误差为 0.12%。与传统有限差分法(网格 100 点)相比,PINN 在相同精度下无需网格生成,且能直接输出任意位置的连续解。

案例复盘:该案例验证了 PINN 在简单线性 PDE 上的有效性。训练成功的关键在于:① 配点数量充足,覆盖了整个时空域;② 激活函数选择 tanh 保证了二阶导数的光滑性;③ 两阶段优化策略兼顾了全局搜索与局部精调。若将 α 增大至 1.0(强扩散),PDE 残差梯度会增大,需要适当降低 λ_PDE 或增加配点密度。

2.6 常见误区与总结复盘

在 PINN 基础训练中,初学者常遇到以下问题:

误区一:配点数量越多越好。实际上,当配点数超过网络容量时,训练时间线性增长而精度提升有限。建议从 N_f = 1000 开始,逐步增加至损失不再显著下降为止。
误区二:忽略边界条件的权重平衡。若边界点数量远少于内部配点,L_BC 会被 L_PDE 淹没。应保证 N_b 与 N_f 的比例不低于 1:10。
误区三:使用 ReLU 激活函数。ReLU 的二阶导恒为零,无法计算 PDE 中的二阶导数项,导致训练完全失败。
误区四:直接训练深层网络。深度超过 10 层时,梯度消失严重。应先从 4~6 层开始,确认收敛后再逐步加深。

总结:PINN 的基础训练流程可概括为“一个网络、两种微分、三类约束、四步优化”。神经网络结构决定了模型的表达能力,自动微分提供了精确的导数计算,损失函数设计平衡了物理与数据的权重,而训练流程则通过合理的优化策略确保收敛。掌握这四个模块后,即可为后续的多物理场耦合建模奠定基础。在实际工程中,建议从简单线性方程开始验证代码正确性,再逐步引入非线性项和多场耦合。