Physics-Informed Neural Networks (PINNs) 基础理论

1. 引言

Physics-Informed Neural Networks (PINNs) 是一种将物理先验知识嵌入神经网络训练过程的科学机器学习方法。由Raissi等人于2019年提出1,PINNs通过将偏微分方程(PDE)作为软约束纳入损失函数,实现数据驱动与物理定律的结合。

1.1 核心思想

PINNs的核心思想是将物理定律(通常由PDE描述)与实验数据同时作为监督信号,通过神经网络近似解,使得网络输出同时满足:

  1. 观测数据的拟合
  2. 物理方程的约束

其中:

  • :数据拟合损失
  • :PDE残差损失
  • :边界条件损失
  • :初始条件损失

2. 数学框架

2.1 问题定义

考虑一般形式的偏微分方程:

其中:

  • :未知函数(物理量)
  • :非线性微分算子
  • :物理参数
  • :空间域

2.2 神经网络近似

使用神经网络 近似真实解 。通过自动微分,计算网络输出对输入的导数:

2.3 PDE残差计算

将自动微分计算的导数代入PDE,得到残差:

PDE损失定义为残差的均方误差:


3. 边界条件与初始条件

3.1 边界条件(BC)

Dirichlet边界条件

Neumann边界条件

3.2 初始条件(IC)


4. 正向问题与逆向问题

4.1 正向问题(Forward Problem)

已知:PDE参数 、边界条件、初始条件
求解:未知函数

特点:仅有PDE损失和边界/初始条件损失,无数据损失。

# 正向问题示例:求解Burgers方程
import torch
import torch.nn as nn
 
class PINN(nn.Module):
    def __init__(self, layers):
        super().__init__()
        self.net = nn.Sequential(
            nn.Linear(2, 64), nn.Tanh(),
            nn.Linear(64, 64), nn.Tanh(),
            nn.Linear(64, 1)
        )
    
    def forward(self, x, t):
        X = torch.cat([x, t], dim=1)
        u = self.net(X)
        return u
    
    def pde_loss(self, x, t):
        x.requires_grad_(True)
        t.requires_grad_(True)
        u = self.forward(x, t)
        
        # 计算导数
        u_t = torch.autograd.grad(u, t, grad_outputs=torch.ones_like(u),
                                  create_graph=True)[0]
        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]
        
        # Burgers方程: u_t + u*u_x - ν*u_xx = 0
        nu = 0.01
        f = u_t + u * u_x - nu * u_xx
        return torch.mean(f**2)

4.2 逆向问题(Inverse Problem)

已知:部分观测数据
求解:未知参数 和/或未知函数

特点:同时优化PDE参数和网络权重。

def inverse_loss(self, x_data, t_data, u_data):
    """数据拟合损失"""
    u_pred = self.forward(x_data, t_data)
    return torch.mean((u_pred - u_data)**2)

5. 网络架构设计

5.1 标准架构

  • 输入层:时空坐标 ,维度
  • 隐藏层:全连接层 + 激活函数(通常使用Tanh或Sine)
  • 输出层:物理量

5.2 激活函数选择

激活函数特点适用场景
Tanh平滑、可正可负一般PDE
Sigmoid有界输出需要输出有界时
Sin/Cos (Fourier)频率感知周期性问题
Swish自门控、梯度流好复杂PDE

5.3 残差连接

对于深层网络,残差连接有助于梯度流:


6. 训练策略

6.1 采样策略

随机采样:在时空域内均匀随机采样

# 随机采样
x_pde = torch.rand(N_p, 1) * x_max
t_pde = torch.rand(N_p, 1) * t_max

拟随机采样:使用低差异序列(如Sobol序列)提高采样效率

# Sobol序列采样
from scipy.stats import qmc
sampler = qmc.Sobol(d=2, scramble=False)
samples = sampler.random(n=N_p) * [x_max, t_max]

6.2 权重平衡

多目标损失中权重 的选择至关重要:

  • 固定权重:简单但需手动调优
  • 自适应权重:根据梯度 magnitude 动态调整
  • GradNorm:梯度范数归一化
# 自适应权重示例
def adaptive_weights(losses, grad_norms):
    weights = {}
    for key, loss in losses.items():
        # 基于梯度范数的权重调整
        weights[key] = 1.0 / (grad_norms[key] + 1e-8)
    return weights

6.3 课程学习

从简单到复杂的渐进式训练:

  1. 阶段1:仅训练数据损失
  2. 阶段2:逐步引入PDE损失
  3. 阶段3:增加边界条件权重

7. 常见应用

7.1 流体力学

  • Navier-Stokes方程求解
  • Burgers方程
  • Kolmogorov方程

7.2 热传导

  • 热传导方程
  • Stefan问题(相变)

7.3 量子力学

  • Schrödinger方程
  • 多体问题

7.4 生物医学

  • 药物扩散
  • 肿瘤生长模型

8. 与传统方法的比较

特性PINNs有限元法谱方法
计算复杂度
高维适用性✅ 高❌ 低❌ 低
网格生成❌ 不需要✅ 需要✅ 需要
物理约束✅ 内嵌✅ 自然满足✅ 自然满足
不确定性量化✅ 可扩展❌ 困难❌ 困难

9. 局限性与挑战

  1. 高频问题:神经网络难以捕捉高频解
  2. 多尺度问题:不同尺度物理过程的学习
  3. 梯度消失:深层网络训练困难
  4. 多目标优化:各损失项的平衡
  5. 计算效率:对于简单问题可能比传统方法慢

10. 参考文献


相关主题

Footnotes

  1. Raissi, M., Perdikaris, P., & Karniadakis, G. E. (2019). Physics-informed neural networks: A deep learning framework for solving forward and inverse problems involving nonlinear partial differential equations. Journal of Computational Physics, 378, 686-707.