本文属于“PINN 入门讲义”系列:第 5 章。如果你是第一次阅读,建议先从 总目录 开始。
阅读说明# 这份讲义面向希望系统理解 Physics-Informed Neural Networks 的读者,尽量从微分方程、数值近似和神经网络函数表示的基本语言讲起,再逐步进入 PINN 的残差构造与训练过程。
前几章已经把 PINN 所需的主要部件逐一准备好。微分方程给出未知函数必须满足的变化规律,边界条件和初值条件使求解问题完整;神经网络可以看成带参数的函数 u θ u_\theta u θ ;损失函数和优化算法可以在参数空间中选择一个较合适的函数;自动微分既能计算损失对参数的导数,也能计算网络输出对输入变量的导数。现在可以把这些部件合在一起,得到 PINN 的基本形式。
PINN 的核心思想很简单:不用先在网格上直接求出数值解,而是用神经网络表示候选解,并把微分方程、初值条件、边界条件和观测数据写成损失函数。训练网络时,参数 θ \theta θ 被调整,使这个候选函数同时尽量满足这些约束。Raissi、Perdikaris 和 Karniadakis 在 2019 年的 PINN 论文中正是采用这种思路,把初值/边界数据误差和 PDE 残差误差共同放入均方误差损失中,并在有限个配置点上约束方程结构。
5.1 从微分方程问题到网络函数# 为了讨论一般形式,设未知函数为 u u u ,它定义在某个空间-时间区域内。例如一维时间演化问题中,输入变量可以写成 ( x , t ) (x,t) ( x , t ) ;更高维时,空间变量可以记为 x \mathbf{x} x ,未知函数写成 u ( x , t ) u(\mathbf{x},t) u ( x , t ) 。为了不让符号过重,本章主要使用 ( x , t ) (x,t) ( x , t ) 表示输入变量。
许多 PDE 可以抽象写为
N [ u ] ( x , t ) = 0 , ( x , t ) ∈ Ω . \mathcal{N}[u](x,t)=0,
\qquad (x,t)\in \Omega. N [ u ] ( x , t ) = 0 , ( x , t ) ∈ Ω. 这里 Ω \Omega Ω 表示方程需要成立的区域,N \mathcal{N} N 是微分算子。它可能包含 u u u 本身,也可能包含 u t u_t u t 、u x u_x u x 、u x x u_{xx} u xx 以及非线性项。例如热方程可以写成
N [ u ] = u t − α u x x , \mathcal{N}[u]=u_t-\alpha u_{xx}, N [ u ] = u t − α u xx , Burgers 方程的一种常见形式可以写成
N [ u ] = u t + u u x − ν u x x . \mathcal{N}[u]=u_t+uu_x-\nu u_{xx}. N [ u ] = u t + u u x − ν u xx . 无论 N \mathcal{N} N 的具体形式如何,方程 N [ u ] = 0 \mathcal{N}[u]=0 N [ u ] = 0 都表示真实解 u u u 必须让这个算子输出为零。
PINN 用神经网络函数 u θ u_\theta u θ 近似未知解:
u ( x , t ) ≈ u θ ( x , t ) . u(x,t)\approx u_\theta(x,t). u ( x , t ) ≈ u θ ( x , t ) . 这里 u θ u_\theta u θ 是前馈神经网络或其他可微网络结构,θ \theta θ 包含所有待训练参数。若 θ \theta θ 固定,u θ u_\theta u θ 就是一个确定的函数;训练的任务是选择合适的 θ \theta θ ,使 u θ u_\theta u θ 尽量像真实解。
把 u θ u_\theta u θ 代入微分算子,得到网络残差
r θ ( x , t ) = N [ u θ ] ( x , t ) . r_\theta(x,t)=\mathcal{N}[u_\theta](x,t). r θ ( x , t ) = N [ u θ ] ( x , t ) . 这个残差是 PINN 的中心对象。它衡量网络函数在点 ( x , t ) (x,t) ( x , t ) 处对微分方程的违反程度。若 r θ ( x , t ) = 0 r_\theta(x,t)=0 r θ ( x , t ) = 0 ,说明 u θ u_\theta u θ 在该点上满足方程;若残差不为零,说明网络函数在该点上没有完全满足方程。
以热方程为例,PINN 残差为
r θ ( x , t ) = ∂ u θ ∂ t ( x , t ) − α ∂ 2 u θ ∂ x 2 ( x , t ) . r_\theta(x,t)
=
\frac{\partial u_\theta}{\partial t}(x,t)
-
\alpha
\frac{\partial^2u_\theta}{\partial x^2}(x,t). r θ ( x , t ) = ∂ t ∂ u θ ( x , t ) − α ∂ x 2 ∂ 2 u θ ( x , t ) . 这里的两个导数都由自动微分计算。注意,u θ u_\theta u θ 并不是先在网格上求出离散值再做差分,而是作为一个可微函数直接对输入变量求导。这是 PINN 与传统有限差分方法的一个明显区别。
5.2 配置点、数据点、边界点和初值点# 连续方程要求 N [ u ] ( x , t ) = 0 \mathcal{N}[u](x,t)=0 N [ u ] ( x , t ) = 0 在整个区域 Ω \Omega Ω 内成立,但实际训练不可能检查无穷多个点。PINN 通常在有限个采样点上计算残差。这些用于约束方程的点常称为配置点,记为
{ ( x i r , t i r ) } i = 1 N r . \{(x_i^r,t_i^r)\}_{i=1}^{N_r}. {( x i r , t i r ) } i = 1 N r . 上标 r r r 表示 residual,即残差。这些点通常位于区域内部,用来检查网络函数是否满足 PDE。配置点不一定有观测标签;它们的作用不是告诉网络“正确答案是多少”,而是告诉网络“在这里代入方程后残差应接近零”。
除配置点外,PINN 还可能使用观测数据点。若在某些位置和时间有测量值,可以记为
{ ( x i d , t i d , u i d ) } i = 1 N d . \{(x_i^d,t_i^d,u_i^d)\}_{i=1}^{N_d}. {( x i d , t i d , u i d ) } i = 1 N d . 这里 u i d u_i^d u i d 是观测到的函数值。数据点对应普通监督学习中的标签约束,它要求
u θ ( x i d , t i d ) ≈ u i d . u_\theta(x_i^d,t_i^d)\approx u_i^d. u θ ( x i d , t i d ) ≈ u i d . 在许多科学问题中,观测数据可能很少,甚至没有内部观测数据。PINN 的特点之一,是即使数据稀少,也可以通过方程、初值条件和边界条件提供额外约束。
初值点用于约束初始时刻。例如对时间区间 0 ≤ t ≤ T 0\le t\le T 0 ≤ t ≤ T 的问题,初值条件可能为
u ( x , 0 ) = u 0 ( x ) . u(x,0)=u_0(x). u ( x , 0 ) = u 0 ( x ) . 训练时可以选取若干初始点
{ ( x i 0 , 0 , u 0 ( x i 0 ) ) } i = 1 N 0 , \{(x_i^0,0,u_0(x_i^0))\}_{i=1}^{N_0}, {( x i 0 , 0 , u 0 ( x i 0 )) } i = 1 N 0 , 并要求网络在这些点上满足
u θ ( x i 0 , 0 ) ≈ u 0 ( x i 0 ) . u_\theta(x_i^0,0)\approx u_0(x_i^0). u θ ( x i 0 , 0 ) ≈ u 0 ( x i 0 ) . 边界点用于约束空间边界。例如在区间 0 ≤ x ≤ L 0\le x\le L 0 ≤ x ≤ L 上,若边界条件为
u ( 0 , t ) = g 0 ( t ) , u ( L , t ) = g L ( t ) , u(0,t)=g_0(t),
\qquad
u(L,t)=g_L(t), u ( 0 , t ) = g 0 ( t ) , u ( L , t ) = g L ( t ) , 则可以在边界上采样点,要求
u θ ( 0 , t i ) ≈ g 0 ( t i ) , u θ ( L , t i ) ≈ g L ( t i ) . u_\theta(0,t_i)\approx g_0(t_i),
\qquad
u_\theta(L,t_i)\approx g_L(t_i). u θ ( 0 , t i ) ≈ g 0 ( t i ) , u θ ( L , t i ) ≈ g L ( t i ) . 这些边界点不属于区域内部,但它们对解的形状非常关键。若边界条件没有被满足,即使 PDE 残差在内部很小,得到的函数也未必是原问题的正确解。
把这些点区分清楚,是理解 PINN 损失函数的关键。配置点约束方程,数据点约束观测,初值点约束起始状态,边界点约束区域边界。它们共同决定网络函数 u θ u_\theta u θ 被训练成什么样。
5.3 PDE 残差损失# 配置点上的残差可以组织成 PDE 残差损失:
L r ( θ ) = 1 N r ∑ i = 1 N r ∣ r θ ( x i r , t i r ) ∣ 2 . \mathcal{L}_r(\theta)
=
\frac{1}{N_r}
\sum_{i=1}^{N_r}
\left|
r_\theta(x_i^r,t_i^r)
\right|^2. L r ( θ ) = N r 1 i = 1 ∑ N r ∣ r θ ( x i r , t i r ) ∣ 2 . 这个损失项的含义直接而重要:在所有配置点上,网络函数代入 PDE 后的残差越小,L r \mathcal{L}_r L r 越小。若 L r \mathcal{L}_r L r 接近零,说明网络函数在这些采样点上较好地满足了微分方程。
以热方程为例,将残差展开后可写为
L r ( θ ) = 1 N r ∑ i = 1 N r ∣ ∂ u θ ∂ t ( x i r , t i r ) − α ∂ 2 u θ ∂ x 2 ( x i r , t i r ) ∣ 2 . \mathcal{L}_r(\theta)
=
\frac{1}{N_r}
\sum_{i=1}^{N_r}
\left|
\frac{\partial u_\theta}{\partial t}(x_i^r,t_i^r)
-
\alpha
\frac{\partial^2u_\theta}{\partial x^2}(x_i^r,t_i^r)
\right|^2. L r ( θ ) = N r 1 i = 1 ∑ N r ∂ t ∂ u θ ( x i r , t i r ) − α ∂ x 2 ∂ 2 u θ ( x i r , t i r ) 2 . 这个公式展示了 PINN 与普通神经网络训练的根本区别。普通监督学习的损失通常只比较预测值和标签,而这里的损失包含网络输出的导数。训练时,自动微分先计算 u θ u_\theta u θ 对输入变量的导数,再组合成残差,最后把残差平方作为损失的一部分。
不过,L r \mathcal{L}_r L r 小并不自动意味着真实误差小。首先,残差只在有限配置点上被检查;如果采样点过少或分布不合理,网络可能在这些点上残差小,却在其他区域表现不好。其次,残差小是方程满足程度的指标,而不是直接的解误差。若边界条件或初值条件没有被正确施加,残差再小也可能对应另一个问题的解。因此,PDE 残差损失必须和边界、初值、数据等其他损失一起理解。
5.4 初值、边界和数据损失# 如果初值条件为 u ( x , 0 ) = u 0 ( x ) u(x,0)=u_0(x) u ( x , 0 ) = u 0 ( x ) ,对应的初值损失可以写成
L 0 ( θ ) = 1 N 0 ∑ i = 1 N 0 ∣ u θ ( x i 0 , 0 ) − u 0 ( x i 0 ) ∣ 2 . \mathcal{L}_0(\theta)
=
\frac{1}{N_0}
\sum_{i=1}^{N_0}
\left|
u_\theta(x_i^0,0)-u_0(x_i^0)
\right|^2. L 0 ( θ ) = N 0 1 i = 1 ∑ N 0 u θ ( x i 0 , 0 ) − u 0 ( x i 0 ) 2 . 这个损失项要求网络函数在初始时刻贴近给定初始分布。对于时间演化问题,初值条件决定系统从哪里开始;如果初值没有满足,后续演化即使看起来平滑,也不是原问题的解。
边界损失的形式取决于边界条件类型。最简单的是 Dirichlet 边界条件,即直接给出边界上的函数值。若边界集合记为 ∂ Ω \partial\Omega ∂ Ω ,边界条件写作
u ( x , t ) = g ( x , t ) , ( x , t ) ∈ ∂ Ω , u(x,t)=g(x,t),
\qquad (x,t)\in\partial\Omega, u ( x , t ) = g ( x , t ) , ( x , t ) ∈ ∂ Ω , 则边界损失可以写为
L b ( θ ) = 1 N b ∑ i = 1 N b ∣ u θ ( x i b , t i b ) − g ( x i b , t i b ) ∣ 2 . \mathcal{L}_b(\theta)
=
\frac{1}{N_b}
\sum_{i=1}^{N_b}
\left|
u_\theta(x_i^b,t_i^b)-g(x_i^b,t_i^b)
\right|^2. L b ( θ ) = N b 1 i = 1 ∑ N b u θ ( x i b , t i b ) − g ( x i b , t i b ) 2 . 若边界条件给出的是导数,例如 Neumann 条件
∂ u ∂ n ( x , t ) = q ( x , t ) , \frac{\partial u}{\partial n}(x,t)=q(x,t), ∂ n ∂ u ( x , t ) = q ( x , t ) , 其中 ∂ ∂ n \frac{\partial}{\partial n} ∂ n ∂ 表示沿边界外法向的导数,那么边界损失就要包含网络输出的法向导数:
L b ( θ ) = 1 N b ∑ i = 1 N b ∣ ∂ u θ ∂ n ( x i b , t i b ) − q ( x i b , t i b ) ∣ 2 . \mathcal{L}_b(\theta)
=
\frac{1}{N_b}
\sum_{i=1}^{N_b}
\left|
\frac{\partial u_\theta}{\partial n}(x_i^b,t_i^b)
-
q(x_i^b,t_i^b)
\right|^2. L b ( θ ) = N b 1 i = 1 ∑ N b ∂ n ∂ u θ ( x i b , t i b ) − q ( x i b , t i b ) 2 . 这说明自动微分不仅用于 PDE 残差,也可能用于边界条件。
若有内部观测数据,数据损失可写为
L d ( θ ) = 1 N d ∑ i = 1 N d ∣ u θ ( x i d , t i d ) − u i d ∣ 2 . \mathcal{L}_d(\theta)
=
\frac{1}{N_d}
\sum_{i=1}^{N_d}
\left|
u_\theta(x_i^d,t_i^d)-u_i^d
\right|^2. L d ( θ ) = N d 1 i = 1 ∑ N d u θ ( x i d , t i d ) − u i d 2 . 数据损失在反问题和数据同化中尤其重要。例如,方程中的某些参数未知,或者观测数据有助于校正模型,PINN 就可以把数据误差与物理残差放在同一个训练目标中。Karniadakis 等关于 physics-informed machine learning 的综述强调,科学问题中数据往往有限,而物理定律可以作为额外信息参与训练,这正是 PINN 的主要动机之一。
5.5 总损失与训练问题# 把各类损失合并,就得到 PINN 的总损失函数。常见形式为
L ( θ ) = λ r L r ( θ ) + λ 0 L 0 ( θ ) + λ b L b ( θ ) + λ d L d ( θ ) . \mathcal{L}(\theta)
=
\lambda_r\mathcal{L}_r(\theta)
+
\lambda_0\mathcal{L}_0(\theta)
+
\lambda_b\mathcal{L}_b(\theta)
+
\lambda_d\mathcal{L}_d(\theta). L ( θ ) = λ r L r ( θ ) + λ 0 L 0 ( θ ) + λ b L b ( θ ) + λ d L d ( θ ) . 这里 λ r , λ 0 , λ b , λ d \lambda_r,\lambda_0,\lambda_b,\lambda_d λ r , λ 0 , λ b , λ d 是非负权重,用来调节不同损失项的重要程度。若没有观测数据,可以去掉 L d \mathcal{L}_d L d ;若问题不是时间演化问题,也可能没有初值损失。具体损失结构取决于具体 PDE 问题。
训练 PINN 的目标是
min θ L ( θ ) . \min_{\theta}\mathcal{L}(\theta). θ min L ( θ ) . 从形式上看,这与普通神经网络训练没有区别:都是最小化一个关于参数的损失函数。但损失函数的内容已经发生变化。普通监督学习主要让网络贴近标签;PINN 则要求网络函数在配置点上满足方程,在边界点上满足边界条件,在初值点上满足初值条件,并在数据点上贴近观测。
这也解释了为什么 PINN 常被说成是 mesh-free 或 meshless 方法。它不需要像有限差分或有限元那样先构造规则网格或单元网格来表示解,而是在区域内选取采样点,通过损失函数约束网络函数。当然,“无网格”并不等于“不需要采样”。PINN 仍然需要选择配置点和边界点,而这些点的分布会显著影响训练效果。
在基本训练流程上,PINN 通常包括以下步骤。首先,确定 PDE、区域、边界条件、初值条件和可用数据。其次,构造神经网络 u θ u_\theta u θ 。然后,在区域内部、边界和初始面上采样训练点。接着,用自动微分计算 PDE 残差和可能出现的边界导数。最后,组合损失函数并用优化算法更新参数。训练结束后,u θ u_\theta u θ 就作为原问题解的近似。
5.6 一个抽象例子:热方程 PINN# 为了把本章公式连起来,考虑一维热方程
u t = α u x x , 0 < x < L , 0 < t < T . u_t=\alpha u_{xx},
\qquad 0<x<L,\quad 0<t<T. u t = α u xx , 0 < x < L , 0 < t < T . 给定初值
u ( x , 0 ) = u 0 ( x ) , u(x,0)=u_0(x), u ( x , 0 ) = u 0 ( x ) , 以及 Dirichlet 边界条件
u ( 0 , t ) = g 0 ( t ) , u ( L , t ) = g L ( t ) . u(0,t)=g_0(t),
\qquad
u(L,t)=g_L(t). u ( 0 , t ) = g 0 ( t ) , u ( L , t ) = g L ( t ) . PINN 先构造网络函数 u θ ( x , t ) u_\theta(x,t) u θ ( x , t ) 。在内部配置点 ( x i r , t i r ) (x_i^r,t_i^r) ( x i r , t i r ) 上计算残差
r θ ( x i r , t i r ) = ∂ u θ ∂ t ( x i r , t i r ) − α ∂ 2 u θ ∂ x 2 ( x i r , t i r ) . r_\theta(x_i^r,t_i^r)
=
\frac{\partial u_\theta}{\partial t}(x_i^r,t_i^r)
-
\alpha
\frac{\partial^2u_\theta}{\partial x^2}(x_i^r,t_i^r). r θ ( x i r , t i r ) = ∂ t ∂ u θ ( x i r , t i r ) − α ∂ x 2 ∂ 2 u θ ( x i r , t i r ) . 对应残差损失为
L r ( θ ) = 1 N r ∑ i = 1 N r ∣ r θ ( x i r , t i r ) ∣ 2 . \mathcal{L}_r(\theta)
=
\frac{1}{N_r}
\sum_{i=1}^{N_r}
\left|
r_\theta(x_i^r,t_i^r)
\right|^2. L r ( θ ) = N r 1 i = 1 ∑ N r ∣ r θ ( x i r , t i r ) ∣ 2 . 在初值点 ( x i 0 , 0 ) (x_i^0,0) ( x i 0 , 0 ) 上构造
L 0 ( θ ) = 1 N 0 ∑ i = 1 N 0 ∣ u θ ( x i 0 , 0 ) − u 0 ( x i 0 ) ∣ 2 . \mathcal{L}_0(\theta)
=
\frac{1}{N_0}
\sum_{i=1}^{N_0}
\left|
u_\theta(x_i^0,0)-u_0(x_i^0)
\right|^2. L 0 ( θ ) = N 0 1 i = 1 ∑ N 0 u θ ( x i 0 , 0 ) − u 0 ( x i 0 ) 2 . 在左右边界上构造
L b ( θ ) = 1 N b ∑ i = 1 N b ( ∣ u θ ( 0 , t i b ) − g 0 ( t i b ) ∣ 2 + ∣ u θ ( L , t i b ) − g L ( t i b ) ∣ 2 ) . \mathcal{L}_b(\theta)
=
\frac{1}{N_b}
\sum_{i=1}^{N_b}
\left(
\left|u_\theta(0,t_i^b)-g_0(t_i^b)\right|^2
+
\left|u_\theta(L,t_i^b)-g_L(t_i^b)\right|^2
\right). L b ( θ ) = N b 1 i = 1 ∑ N b ( u θ ( 0 , t i b ) − g 0 ( t i b ) 2 + u θ ( L , t i b ) − g L ( t i b ) 2 ) . 总损失可以写为
L ( θ ) = λ r L r ( θ ) + λ 0 L 0 ( θ ) + λ b L b ( θ ) . \mathcal{L}(\theta)
=
\lambda_r\mathcal{L}_r(\theta)
+
\lambda_0\mathcal{L}_0(\theta)
+
\lambda_b\mathcal{L}_b(\theta). L ( θ ) = λ r L r ( θ ) + λ 0 L 0 ( θ ) + λ b L b ( θ ) . 这个例子展示了 PINN 的基本结构。内部点负责方程,初始点负责初值,边界点负责边界条件。训练不是直接求解离散代数方程组,而是最小化总损失,从而让网络函数在多种约束下逐步接近目标解。
5.7 基本 PINN 的边界# 本章介绍的是最基本的 PINN 框架。它足够清楚,也足够重要,但不能把它理解为解决所有 PDE 的通用钥匙。PINN 的效果依赖许多因素:网络是否有足够表达能力,激活函数是否适合所需导数,配置点是否覆盖关键区域,损失权重是否平衡,优化器是否能有效降低各项损失,方程是否存在多尺度、高频或刚性结构。
此外,基本 PINN 通常以软约束方式处理边界和初值,即把它们写进损失函数。软约束的优点是实现简单,缺点是训练后边界条件未必被精确满足。另一类方法会通过构造特殊网络输出,使边界条件被自动满足,这常被称为硬约束处理。硬约束和软约束的选择会影响训练稳定性和最终精度,后续章节会进一步讨论。
因此,学习 PINN 的正确态度是:先掌握它如何把神经网络、自动微分、残差和损失函数组合起来,再逐步理解它在具体问题中为什么成功或失败。只有这样,后面讨论 ODE 例子、PDE 例子和误差困难时,才不会停留在公式表面。
本章小结# PINN 用神经网络函数 u θ u_\theta u θ 近似微分方程的未知解,并通过自动微分构造 PDE 残差 r θ = N [ u θ ] r_\theta=\mathcal{N}[u_\theta] r θ = N [ u θ ] 。配置点用于约束方程残差,初值点用于约束初始状态,边界点用于约束区域边界,数据点用于约束观测信息。各类约束被写成损失项,再组合成总损失函数。
从优化角度看,PINN 仍然是在求解 min θ L ( θ ) \min_\theta \mathcal{L}(\theta) min θ L ( θ ) 。它与普通监督学习的区别在于,损失函数不仅来自数据,还来自微分方程和边界条件。本章给出的框架是后续所有 PINN 例子的基础。下一章将通过一个最简单的常微分方程完整走通这一流程。
对方程 u ′ ( t ) + u ( t ) = 0 u'(t)+u(t)=0 u ′ ( t ) + u ( t ) = 0 ,令 u θ ( t ) u_\theta(t) u θ ( t ) 为神经网络近似解。写出残差 r θ ( t ) r_\theta(t) r θ ( t ) 。
对热方程 u t = α u x x u_t=\alpha u_{xx} u t = α u xx ,说明哪些点属于配置点,哪些点属于初值点,哪些点属于边界点。
若边界条件为 u ( 0 , t ) = 0 u(0,t)=0 u ( 0 , t ) = 0 和 u ( 1 , t ) = 1 u(1,t)=1 u ( 1 , t ) = 1 ,写出对应的边界损失。
解释为什么 L r \mathcal{L}_r L r 小并不一定意味着 PINN 解完全正确。
比较普通监督学习损失和 PINN 总损失的区别。
延伸阅读#
M. Raissi, P. Perdikaris, and G. E. Karniadakis, “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, 2019. DOI: 10.1016/j.jcp.2018.10.045 。
Raissi 等人的 PINN 项目页:Physics Informed Deep Learning 。
G. E. Karniadakis et al., “Physics-informed machine learning,” Nature Reviews Physics , 3, 422-440, 2021. DOI: 10.1038/s42254-021-00314-5 。
Raissi 等人的 GitHub 项目:Physics Informed Deep Learning 。
S. Cuomo et al., “Scientific Machine Learning Through Physics-Informed Neural Networks: Where we are and What’s Next,” Journal of Scientific Computing , 2022. DOI: 10.1007/s10915-022-01939-z 。