3. 神经网络基础
在PINN(物理信息神经网络)的工程实现中,全连接网络(Fully Connected Network, FCN)是最核心的骨干结构。无论是求解偏微分方程的正问题,还是反演未知参数,PINN都依赖一个可微的神经网络来逼近目标函数。理解全连接网络的结构设计、激活函数的数学特性、损失函数的物理含义以及优化器的收敛行为,是搭建稳定、高效PINN模型的前提。本章将从工程实践视角,系统拆解这些基础组件,并给出在科学计算场景下的选型建议与训练流程。
3.1 全连接网络结构与初始化策略
3.1.1 核心原理:从输入到输出的映射
全连接网络(又称多层感知机,MLP)由输入层、若干隐藏层和输出层组成。每一层的输出通过线性变换与非线性激活函数逐层传递。对于PINN而言,输入通常是时空坐标(x, y, z, t)或参数化变量,输出则是待求解的物理场(如位移、温度、速度、压力)。数学上,第l层的输出可表示为:
z^(l) = W^(l) · a^(l-1) + b^(l)
a^(l) = σ(z^(l))
其中W为权重矩阵,b为偏置向量,σ为激活函数。PINN中网络深度和宽度的选择直接影响逼近复杂非线性函数的能力。对于光滑的PDE解,3~6层隐藏层、每层50~200个神经元通常能取得良好效果;对于含激波或边界层的多尺度问题,则需要更深的网络或引入残差连接。
3.1.2 初始化方法:Xavier与He初始化
权重初始化对PINN训练收敛速度影响显著。Xavier初始化适用于tanh、sigmoid等饱和激活函数,其方差设置为2/(fan_in + fan_out);He初始化适用于ReLU及其变体,方差设置为2/fan_in。在PINN中,由于常用tanh作为激活函数(因其二阶导数光滑,适合PDE约束),推荐使用Xavier初始化。偏置通常初始化为0或极小值(如1e-4),避免初始输出落在饱和区。
| 初始化方法 | 适用激活函数 | 方差设置 | PINN推荐度 |
|---|---|---|---|
| Xavier/Glorot | tanh, sigmoid | 2/(fan_in+fan_out) | ★★★★★ |
| He/Kaiming | ReLU, LeakyReLU | 2/fan_in | ★★★☆☆ |
| 随机正态(小方差) | 任意 | 0.01² | ★★☆☆☆ |
3.2 激活函数:PINN场景下的选型与数学约束
3.2.1 常用激活函数对比
激活函数为网络引入非线性,其可微阶数直接决定PINN能否计算高阶PDE残差。例如,求解二阶弹性力学方程时,网络输出对输入的二阶导数必须存在且连续。下表对比了常见激活函数的性质:
| 激活函数 | 表达式 | 可微阶数 | PINN适用性 | 注意事项 |
|---|---|---|---|---|
| tanh | (e^x - e^-x)/(e^x + e^-x) | 无限阶光滑 | ★★★★★ | 需输入归一化;梯度在饱和区消失 |
| sigmoid | 1/(1+e^-x) | 无限阶光滑 | ★★★☆☆ | 输出非零中心,收敛慢 |
| ReLU | max(0, x) | 一阶不可导 | ★☆☆☆☆ | 二阶导数为0,无法用于二阶PDE |
| SiLU/Swish | x · sigmoid(x) | 无限阶光滑 | ★★★★☆ | 计算量略大,但梯度流更平稳 |
| GELU | x · Φ(x) | 无限阶光滑 | ★★★★☆ | 近似光滑,适合复杂边界 |
3.2.2 激活函数对PDE残差的影响
在PINN中,损失函数包含PDE残差项,即网络输出对输入的高阶导数。若激活函数在定义域内不可导(如ReLU在0点),则自动微分(Autograd)计算二阶导数时会得到0或NaN,导致训练失败。因此,PINN中几乎不使用ReLU作为隐藏层激活函数。tanh因其无限光滑且二阶导数表达式简单,成为PINN的默认选择。对于包含振荡解的问题(如高频波动方程),可考虑使用周期激活函数(如sin)或傅里叶特征映射,但需注意梯度稳定性。
3.3 损失函数:物理约束与数据拟合的加权组合
3.3.1 PINN损失函数的构成
PINN的损失函数由三部分组成:PDE残差损失、边界/初始条件损失、以及(若有)观测数据损失。以二维稳态热传导方程为例:
L_total = λ_pde · L_pde + λ_bc · L_bc + λ_data · L_data
L_pde = (1/N_pde) · Σ | ∂²u/∂x² + ∂²u/∂y² - f(x,y) |²
L_bc = (1/N_bc) · Σ | u(x_bc, y_bc) - g(x_bc, y_bc) |²
L_data= (1/N_data) · Σ | u(x_data, y_data) - u_obs |²
其中λ为各损失项的权重系数。权重设置直接影响训练收敛方向:若λ_pde过大,网络优先满足PDE但可能忽略边界;若λ_bc过大,则边界拟合好但内部残差大。工程上常用自适应权重调整策略(如NTK理论或梯度归一化)来平衡各项。
3.3.2 损失函数设计要点
- PDE残差采样点:应在计算域内均匀随机采样,同时可在边界附近加密采样点以提高边界拟合精度。
- 权重初始化:建议初始设置λ_pde=1.0,λ_bc=10~100,λ_data=1~10,然后根据训练曲线动态调整。
- 损失归一化:若PDE残差量级远大于边界损失(如相差10⁶倍),需对各项做归一化处理,否则梯度被大项主导。
3.4 优化器:Adam与LBFGS的协同策略
3.4.1 Adam优化器:稳健的全局搜索
Adam(Adaptive Moment Estimation)结合动量与自适应学习率,对梯度尺度不敏感,适合PINN训练的初期阶段。其超参数推荐:学习率1e-3~1e-4,β₁=0.9,β₂=0.999,ε=1e-8。Adam能快速降低损失,但收敛后期精度有限(通常L2误差在1e-3~1e-4量级)。
3.4.2 LBFGS优化器:高精度局部收敛
LBFGS(Limited-memory Broyden–Fletcher–Goldfarb–Shanno)是一种拟牛顿法,利用梯度历史信息近似Hessian矩阵,在光滑损失函数上具有超线性收敛速度。在PINN中,LBFGS通常作为第二阶段优化器,在Adam训练至损失平台期后切换。其优势在于:
- 无需手动调整学习率,默认使用强Wolfe条件线搜索。
- 对高精度PDE求解(误差要求<1e-5)效果显著。
- 内存占用低,适合大规模参数网络。
| 对比维度 | Adam | LBFGS |
|---|---|---|
| 收敛速度(初期) | 快 | 慢(需较好初始点) |
| 收敛精度(后期) | 一般(1e-3~1e-4) | 高(1e-6~1e-8) |
| 学习率敏感性 | 敏感,需调参 | 不敏感,自动线搜索 |
| 内存占用 | 低 | 中(存储历史梯度) |
| 适用阶段 | 训练初期/全局搜索 | 训练后期/局部精修 |
3.4.3 两阶段训练策略
# 伪代码示例
# 阶段1:Adam全局搜索
optimizer_adam = torch.optim.Adam(model.parameters(), lr=1e-3)
for epoch in range(5000):
loss = compute_pinn_loss(model, x_pde, x_bc)
optimizer_adam.zero_grad()
loss.backward()
optimizer_adam.step()
# 阶段2:LBFGS精修
optimizer_lbfgs = torch.optim.LBFGS(model.parameters(), lr=1.0, max_iter=2000)
def closure():
optimizer_lbfgs.zero_grad()
loss = compute_pinn_loss(model, x_pde, x_bc)
loss.backward()
return loss
optimizer_lbfgs.step(closure)
3.5 训练基本流程与收敛性诊断
3.5.1 标准训练流程
- 数据准备:生成PDE残差采样点(随机/拉丁超立方)、边界点、初始点;若含观测数据,划分训练/验证集。
- 网络构建:选择层数、宽度、激活函数(默认tanh),初始化权重(Xavier)。
- 损失定义:组合PDE残差、边界条件、数据项,设置初始权重λ。
- 优化器配置:先Adam(lr=1e-3)训练至损失平台,再切换LBFGS精修。
- 训练监控:记录总损失、各分量损失、梯度范数、预测解与参考解误差。
- 收敛判断:当LBFGS的梯度范数<1e-6或损失变化<1e-8时,认为收敛。
3.5.2 常见收敛问题与排障
| 现象 | 可能原因 | 解决方案 |
|---|---|---|
| 损失不下降 | 学习率过大/过小;权重初始化不当 | 调整lr至1e-4~1e-2;改用Xavier初始化 |
| PDE残差大但边界损失小 | λ_pde权重过小 | 增大λ_pde或对PDE残差做归一化 |
| 训练后期损失震荡 | Adam学习率未衰减 | 使用学习率调度(StepLR/CosineAnnealing) |
| LBFGS不收敛 | 损失函数非光滑;梯度计算错误 | 检查激活函数可导性;验证自动微分梯度 |
| 预测解出现尖峰 | 采样点不足或分布不均 | 增加采样点数量,边界附近加密 |
3.5.3 案例复盘:Burgers方程求解
以粘性Burgers方程(ν=0.01/π)为例,初始条件u(x,0)=-sin(πx),边界条件u(-1,t)=u(1,t)=0。采用4层隐藏层(每层50神经元),tanh激活,Adam训练3000次后切换LBFGS。关键参数:λ_pde=1.0,λ_bc=100。训练过程中,Adam阶段损失从1.2降至0.03,LBFGS阶段进一步降至0.002。最终在t=1时刻的预测解与解析解对比,L2相对误差为0.8%。若直接使用LBFGS从头训练,损失在500次迭代后陷入局部极小(损失0.15),误差高达12%。这验证了两阶段策略的有效性。
3.6 总结与工程要点
全连接网络是PINN的骨架,其结构设计、激活函数选择、损失函数构建和优化器配置共同决定了求解精度与效率。工程实践中应遵循以下原则:
- 结构优先:从3层隐藏层、每层50神经元起步,根据误差分布逐步加深加宽。
- 激活函数:默认tanh,若需处理高频振荡可尝试sin或傅里叶特征映射。
- 损失平衡:动态监控各损失分量,使用梯度归一化或自适应权重。
- 优化器协同:Adam负责全局搜索,LBFGS负责局部精修,切换时机以损失平台为准。
- 验证闭环:每次训练后,将预测解与解析解或数值参考解对比,计算L2/相对误差,并可视化残差分布。