PINN 讲义第 6 章:一个最简单的 PINN 常微分方程

2970 字
15 分钟
PINN 讲义第 6 章:一个最简单的 PINN 常微分方程

本文属于“PINN 入门讲义”系列:第 6 章。如果你是第一次阅读,建议先从 总目录 开始。

阅读说明#

这份讲义面向希望系统理解 Physics-Informed Neural Networks 的读者,尽量从微分方程、数值近似和神经网络函数表示的基本语言讲起,再逐步进入 PINN 的残差构造与训练过程。

前一章给出了 PINN 的一般形式。一般形式虽然重要,但如果第一次接触 PINN,只看 N[u]=0\mathcal{N}[u]=0rθ=N[uθ]r_\theta=\mathcal{N}[u_\theta] 和各种损失项,很容易觉得抽象。本章把这些符号放进一个最简单的常微分方程中,完整走一遍 PINN 的构造过程。

我们选择的例子是指数衰减方程:

dudt=u,u(0)=1.\frac{du}{dt}=-u,\qquad u(0)=1.

这个问题足够简单,解析解也容易写出:

u(t)=et.u(t)=e^{-t}.

正因为它简单,才适合作为第一个 PINN 例子。我们可以清楚地看到网络函数、方程残差、初值损失和训练目标如何对应,而不会被复杂 PDE、边界几何或多维采样分散注意力。读者应把本章看作一张小比例尺地图:后续 PDE 中的结构更复杂,但基本路线与这里相同。

6.1 初值问题的结构#

方程

dudt=u\frac{du}{dt}=-u

描述的是一个量随时间衰减的过程。左端 dudt\frac{du}{dt} 是变化率,右端 u-u 表示变化率与当前量成正比且方向相反。若 u(t)u(t) 表示某种物质剩余量,那么剩余越多,减少越快;随着 u(t)u(t) 变小,减少速度也变慢。

只有方程还不能唯一确定解。任意函数

u(t)=Cetu(t)=Ce^{-t}

都满足 dudt=u\frac{du}{dt}=-u,其中 CC 是常数。初值条件 u(0)=1u(0)=1 规定了起点,从而确定 C=1C=1。因此这个初值问题的唯一解是 u(t)=etu(t)=e^{-t}

PINN 的目标不是先利用解析公式求解,而是假设我们不知道解析解,只知道方程和初值条件。我们希望构造一个神经网络函数 uθ(t)u_\theta(t),让它满足两件事:

  1. 在时间区间内部近似满足微分方程。
  2. t=0t=0 处近似满足初值条件。

这两件事会分别变成残差损失和初值损失。

6.2 用神经网络表示候选解#

在这个例子中,未知解只依赖时间 tt,所以神经网络可以看成从一个实数输入到一个实数输出的函数:

tuθ(t).t\longmapsto u_\theta(t).

如果用一个全连接网络来表示,它可以写成多层复合函数。例如,

h1=σ(W1t+b1),h_1=\sigma(W_1t+b_1),h2=σ(W2h1+b2),h_2=\sigma(W_2h_1+b_2),uθ(t)=W3h2+b3.u_\theta(t)=W_3h_2+b_3.

这里 θ={W1,b1,W2,b2,W3,b3}\theta=\{W_1,b_1,W_2,b_2,W_3,b_3\} 表示所有可训练参数。实际代码中,W1,W2,W3W_1,W_2,W_3 可能是矩阵,b1,b2,b3b_1,b_2,b_3 可能是向量;本章只关心它们共同决定了一个函数 uθu_\theta

训练开始时,参数通常随机初始化,此时 uθ(t)u_\theta(t) 可能是一条完全不符合方程的曲线。训练的任务是调整 θ\theta,让这条曲线逐渐接近满足方程和初值条件的函数。由于真实解是 ete^{-t},我们训练后可以把 uθ(t)u_\theta(t)ete^{-t} 比较,观察 PINN 是否学到了正确形状。

需要注意,网络输出 uθ(t)u_\theta(t) 是一个连续函数表达。与在固定网格点上存储数值不同,一旦参数确定,我们可以在任意时间 tt 上计算 uθ(t)u_\theta(t),也可以通过自动微分计算它对 tt 的导数。

6.3 方程残差#

原方程为

dudt+u=0.\frac{du}{dt}+u=0.

把神经网络函数 uθu_\theta 代入方程左端,得到残差

rθ(t)=duθdt(t)+uθ(t).r_\theta(t) = \frac{du_\theta}{dt}(t)+u_\theta(t).

如果 rθ(t)=0r_\theta(t)=0,说明 uθu_\theta 在时间点 tt 处满足微分方程;如果残差不为零,说明网络函数在该点违反了方程。这个残差是本章最重要的对象。

为了训练,我们在时间区间内选择若干配置点:

t1r,t2r,,tNrr.t_1^r,t_2^r,\ldots,t_{N_r}^r.

这些点不需要真实标签。它们只是用来检查方程是否被满足。对应的残差损失为

Lr(θ)=1Nri=1Nrduθdt(tir)+uθ(tir)2.\mathcal{L}_r(\theta) = \frac{1}{N_r} \sum_{i=1}^{N_r} \left| \frac{du_\theta}{dt}(t_i^r) + u_\theta(t_i^r) \right|^2.

这条公式的结构很清楚:在每个配置点上,把网络函数和它的时间导数代入方程左端,得到残差;把残差平方后求平均,就得到方程约束的损失。

这里的 duθdt\frac{du_\theta}{dt} 通常通过自动微分计算。它不是用差分公式近似出来的,也不是手工写出网络的解析导数,而是由深度学习框架根据网络计算图和链式法则自动得到。PyTorch 中的 torch.autograd 正是用于完成这类导数计算的工具。

6.4 初值损失#

仅仅让残差小还不够。方程 dudt=u\frac{du}{dt}=-u 有一族解 CetCe^{-t}。如果不施加初值条件,网络可能学到某个满足方程但起点错误的函数。例如 2et2e^{-t} 也满足方程,但它不满足 u(0)=1u(0)=1

因此必须把初值条件写入损失函数。初值条件为

u(0)=1.u(0)=1.

网络对应的初值误差是

uθ(0)1.u_\theta(0)-1.

于是初值损失可以写成

L0(θ)=uθ(0)12.\mathcal{L}_0(\theta) = \left|u_\theta(0)-1\right|^2.

这个损失项只在一个点上计算,但作用非常关键。它把整族可能解中的一个具体解选出来。对更复杂的时间演化 PDE,初值条件通常是一整条曲线或一个空间分布,例如 u(x,0)=u0(x)u(x,0)=u_0(x);本章的 ODE 例子中,初值只是一个数。

6.5 总损失与训练#

把方程残差损失和初值损失相加,得到总损失:

L(θ)=Lr(θ)+λ0L0(θ).\mathcal{L}(\theta) = \mathcal{L}_r(\theta) + \lambda_0\mathcal{L}_0(\theta).

这里 λ0>0\lambda_0>0 是初值损失的权重。最简单时可以取 λ0=1\lambda_0=1,但在实际问题中,不同损失项的尺度可能不同,权重选择会影响训练效果。

展开写,总损失为

L(θ)=1Nri=1Nrduθdt(tir)+uθ(tir)2+λ0uθ(0)12.\mathcal{L}(\theta) = \frac{1}{N_r} \sum_{i=1}^{N_r} \left| \frac{du_\theta}{dt}(t_i^r) + u_\theta(t_i^r) \right|^2 + \lambda_0 \left|u_\theta(0)-1\right|^2.

训练就是求解优化问题

minθL(θ).\min_\theta \mathcal{L}(\theta).

每一步训练可以理解为以下过程。首先,把配置点输入网络,得到 uθ(tir)u_\theta(t_i^r);然后通过自动微分计算 duθdt(tir)\frac{du_\theta}{dt}(t_i^r);接着计算方程残差和初值误差,组合成总损失;最后计算总损失对参数 θ\theta 的梯度,并用优化器更新参数。这个过程不断重复,直到损失下降到较小水平,或者训练达到预设迭代次数。

从这个例子可以清楚看到 PINN 中两类导数的关系。构造残差时,需要计算

duθdt,\frac{du_\theta}{dt},

这是网络输出对输入 tt 的导数。更新参数时,需要计算

θL(θ),\nabla_\theta \mathcal{L}(\theta),

这是损失对网络参数的导数。二者都可以由自动微分框架完成,但含义完全不同。

6.6 训练结果应如何理解#

如果训练成功,网络函数 uθ(t)u_\theta(t) 应当接近解析解 ete^{-t}。判断训练结果时,至少可以看三个方面。

第一,看残差损失是否下降。若 Lr\mathcal{L}_r 较小,说明网络函数在配置点上较好地满足了方程。第二,看初值损失是否下降。若 L0\mathcal{L}_0 较小,说明网络在 t=0t=0 处接近 11。第三,如果解析解已知,可以计算误差,例如在一组测试点上比较

uθ(t)et.\left|u_\theta(t)-e^{-t}\right|.

在真实科学计算问题中,解析解往往未知,因此第三种检查不一定可用。这时通常需要借助高精度数值解、实验数据、残差分布、守恒量或物理一致性来评估结果。本章之所以选这个 ODE,是因为它有解析解,便于第一次观察 PINN 是否按预期工作。

即使在这个简单问题中,也可能出现训练不理想的情况。若配置点太少,网络可能只在少数点附近满足方程;若学习率太大,损失可能震荡;若网络太小,表达能力可能不足;若初值损失权重太低,网络可能较好地满足方程却偏离初始值。这些现象在 PDE 中会更加明显。

还要注意,损失小并不总是等于真实误差小。残差只在采样点上被约束,初值只在指定点上被约束。如果网络在采样点之间出现不合理振荡,训练损失可能看起来不错,但整体解仍然有问题。因此,PINN 训练后通常需要额外验证,而不能只看训练损失。

6.7 与传统数值方法的比较#

对这个简单 ODE,传统数值方法可以用欧拉法近似求解。若时间步长为 hh,显式欧拉法写成

un+1=unhun=(1h)un.u_{n+1}=u_n-hu_n=(1-h)u_n.

它从初值 u0=1u_0=1 出发,一步一步推进,得到离散时间点上的近似值。这个方法直接利用方程给出的变化率,从当前点走到下一个点。

PINN 的思路不同。它不按时间一步步推进,而是先假设整个时间区间上的解由一个函数 uθ(t)u_\theta(t) 表示,再通过残差损失和初值损失让这个函数整体满足问题。训练完成后,uθu_\theta 可以在任意时间点上求值。

这种差异在简单 ODE 上看起来并不一定带来优势,因为欧拉法、Runge—Kutta 方法等传统方法已经非常成熟。但这个例子帮助我们理解 PINN 的基本机制。对于高维问题、反问题、数据融合问题或复杂约束问题,PINN 的“把方程和数据共同写进损失函数”的思想会显示出更多可能性。当然,这些可能性并不意味着它总能超过传统方法;具体问题仍需具体分析。

6.8 从 ODE 例子到 PDE 例子#

本章的 ODE 例子虽然简单,但已经包含了 PINN 的核心结构:

uθrθLminθL(θ).u_\theta \quad\longrightarrow\quad r_\theta \quad\longrightarrow\quad \mathcal{L} \quad\longrightarrow\quad \min_\theta \mathcal{L}(\theta).

在 PDE 中,输入从单个时间变量 tt 变为 (x,t)(x,t)(x,y,t)(x,y,t);残差中会出现偏导数,例如 utu_tuxu_xuxxu_{xx};初值条件可能是一条曲线或一个函数;边界条件可能作用在空间边界上。虽然符号更复杂,但基本逻辑没有改变。

例如热方程 PINN 的残差为

rθ(x,t)=uθt(x,t)α2uθx2(x,t).r_\theta(x,t) = \frac{\partial u_\theta}{\partial t}(x,t) - \alpha \frac{\partial^2u_\theta}{\partial x^2}(x,t).

这与本章 ODE 残差

rθ(t)=duθdt(t)+uθ(t)r_\theta(t) = \frac{du_\theta}{dt}(t)+u_\theta(t)

在结构上完全类似:都是把网络函数代入方程左端,得到衡量方程违反程度的量。下一章将把本章的一维时间例子推广到偏微分方程。

本章小结#

本章用初值问题 dudt=u, u(0)=1\frac{du}{dt}=-u,\ u(0)=1 完整展示了 PINN 的基本流程。首先用神经网络函数 uθ(t)u_\theta(t) 近似未知解,然后把它代入方程构造残差 rθ(t)=duθdt+uθr_\theta(t)=\frac{du_\theta}{dt}+u_\theta,再用配置点上的残差平方形成 PDE 或 ODE 残差损失。初值条件 u(0)=1u(0)=1 被写成初值损失 uθ(0)12\left|u_\theta(0)-1\right|^2。二者共同组成总损失,通过优化参数 θ\theta 选择合适的网络函数。

这个例子说明,PINN 的基本思想并不依赖复杂方程。只要一个问题可以写成“未知函数满足某种微分关系和条件”,就可以尝试用神经网络表示候选函数,并把这些关系写成损失项。后续 PDE 章节只是把输入变量、残差结构和边界条件变得更丰富。

习题#

  1. 对方程 dudt=2u, u(0)=1\frac{du}{dt}=-2u,\ u(0)=1,写出 PINN 残差 rθ(t)r_\theta(t) 和初值损失。
  2. 对方程 dudt=tu, u(0)=0\frac{du}{dt}=t-u,\ u(0)=0,写出残差损失的形式。
  3. 解释为什么只最小化残差损失 Lr\mathcal{L}_r 不能唯一确定本章例子的解。
  4. 若候选函数为 u~(t)=et+0.1t\tilde{u}(t)=e^{-t}+0.1t,计算它对方程 dudt+u=0\frac{du}{dt}+u=0 的残差。
  5. 比较欧拉法和 PINN 在本章 ODE 问题中的求解思路差异。

延伸阅读#

  1. 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
  2. Raissi 等人的 PINN 项目页:Physics Informed Deep Learning
  3. OpenStax, Calculus Volume 2, Section 4.1 “Basics of Differential Equations”: OpenStax Calculus Volume 2
  4. PyTorch 官方教程:Automatic Differentiation with torch.autograd
  5. MIT OpenCourseWare, Differential Equations: 18.03 Differential Equations

文章分享

如果这篇文章对你有帮助,欢迎分享给更多人!

PINN 讲义第 6 章:一个最简单的 PINN 常微分方程
https://sciml.com.cn/posts/pinn-lecture-06/
作者
星飞帆
发布于
2026-06-25
许可协议
CC BY-NC-SA 4.0
Profile Image of the Author
星飞帆
西北工业大学24级研究生 | SciML · PINNs · 神经算子 · PDE 约束学习
欢迎
欢迎来到星飞帆的 SciML 研究笔记:这里记录论文阅读、数学推导、代码复现、实验踩坑,也分享研究生阶段可能用得上的资料。
分类
标签
站点统计
文章
21
分类
4
标签
69
总字数
70,675
运行时长
0
最后活动
0 天前

文章目录