PINN 讲义第 1 章:函数、变化率与微分方程语言

3577 字
18 分钟
PINN 讲义第 1 章:函数、变化率与微分方程语言

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

阅读说明#

这份讲义面向希望系统理解 Physics-Informed Neural Networks 的读者,尽量从微分方程、数值近似和神经网络函数表示的基本语言讲起,再逐步进入 PINN 的残差构造与训练过程。 在上一章中,我们把 PINN 的基本思想概括为:用一个带参数的神经网络函数 uθu_\theta 去近似微分方程的未知解,并通过训练使它尽量满足数据、方程、初值条件和边界条件。这个概括中最重要的词不是“神经网络”,而是“函数”。如果不知道未知解为什么是函数,不知道导数如何描述函数的变化,也就无法理解微分方程为什么能表达物理规律,更无法理解 PINN 为什么要计算 uθu_\theta 的导数。

本章的目的不是完整重讲微积分,而是建立后续 PINN 所需的数学语言。我们会从函数的输入输出关系开始,解释导数为什么表示局部变化率,再推广到多变量函数和偏导数。最后,本章会把这些概念放回 PINN 语境中,说明 utu_tuxu_xuxxu_{xx} 这样的符号为什么会出现在方程残差里。

1.1 未知解首先是一个函数#

在许多科学计算问题中,所谓“求解”并不是求一个数,而是求一个函数。考虑一根细杆上的热传导问题。如果只问“温度是多少”,这个问题并不完整,因为温度会随位置和时间变化。更合理的未知量是 u(x,t)u(x,t):给定位置 xx 和时间 tt,函数 uu 返回该处该时刻的温度。类似地,流体中的速度可以写成 v(x,y,z,t)v(x,y,z,t),材料中的位移可以写成 u(x)u(x)u(x,t)u(x,t),化学反应扩散中的浓度也可以写成空间和时间的函数。

函数最基本的含义,是输入到输出的对应关系。若写作

y=f(x),y=f(x),

意思是给定输入 xx,规则 ff 产生输出 yy。例如 f(x)=x2f(x)=x^2 表示把输入平方;当 x=3x=3 时,输出为 f(3)=9f(3)=9。这个例子很简单,但它已经包含后续所有讨论的基本结构:输入、输出以及把输入变成输出的规则。

在 PINN 中,真实解通常记为 uu,神经网络给出的近似解记为 uθu_\theta。下标 θ\theta 表示这个函数依赖一组可训练参数。对于热传导问题,我们可以写

u(x,t)uθ(x,t).u(x,t)\approx u_\theta(x,t).

这句话的含义是:真实温度分布 uu 可能无法直接写出或直接计算,于是我们用神经网络构造一个候选函数 uθu_\theta 来近似它。训练过程会不断调整参数 θ\theta,使这个候选函数在观测数据、微分方程和边界条件的共同约束下变得更合理。

这里要注意 uuu(x,t)u(x,t)uθ(x,t)u_\theta(x,t) 的区别。uu 表示整个未知函数,u(x,t)u(x,t) 表示这个函数在某个输入点上的值;uθu_\theta 表示由神经网络表示的一整个近似函数,uθ(x,t)u_\theta(x,t) 是该网络在输入 (x,t)(x,t) 处的输出。初学时如果把这些对象混在一起,后面看到损失函数和残差时就会很容易混乱。

函数不一定总以简单公式出现。它可以由表格给出,可以由曲线图表示,也可以由程序或神经网络隐式表示。传统数值方法常在网格点上记录近似函数值,而神经网络则通过一组参数和计算过程定义函数。后者未必能展开成简洁公式,但只要输入确定、参数确定,输出也就确定,因此它仍然是一个函数。

1.2 从平均变化率到导数#

仅仅知道未知量是函数还不够。微分方程关心的是函数如何变化,而变化率正是导数要描述的对象。

先看最朴素的变化率。设 f(x)f(x) 是一个一元函数,从 x=ax=ax=bx=b,函数值由 f(a)f(a) 变为 f(b)f(b)。这段区间上的平均变化率定义为

f(b)f(a)ba.\frac{f(b)-f(a)}{b-a}.

分子是输出变化量,分母是输入变化量。若 f(x)=x2f(x)=x^2,从 x=1x=1x=3x=3 的平均变化率为

f(3)f(1)31=912=4.\frac{f(3)-f(1)}{3-1} = \frac{9-1}{2} =4.

这个数表示在区间 [1,3][1,3] 上,函数值平均每增加一个单位输入就增加四个单位。它描述的是区间上的总体变化,而不是某一个点的瞬时变化。

为了描述某一点处的变化率,需要让区间长度越来越小。若从 xx 出发,向右移动一个很小的量 hh,对应的平均变化率是

f(x+h)f(x)h.\frac{f(x+h)-f(x)}{h}.

hh 趋近于 00 时,如果这个比值趋向某个确定的数,就把这个数称为 ffxx 处的导数:

f(x)=limh0f(x+h)f(x)h.f'(x) = \lim_{h\to 0} \frac{f(x+h)-f(x)}{h}.

导数可以理解为函数在某一点的瞬时变化率,也可以理解为函数图像在该点处切线的斜率。若导数为正,函数在该点附近倾向于随输入增加而上升;若导数为负,函数倾向于下降;若导数绝对值很大,说明局部变化很快。

f(x)=x2f(x)=x^2 为例,根据定义有

f(x)=limh0(x+h)2x2h=limh0(2x+h)=2x.f'(x) = \lim_{h\to 0} \frac{(x+h)^2-x^2}{h} = \lim_{h\to 0}(2x+h) =2x.

这说明 x2x^2 的变化率不是常数,而是随位置改变。当 x=1x=1 时,导数为 22;当 x=3x=3 时,导数为 66。同一个函数在不同位置的变化快慢可能不同,这正是导数比平均变化率更细致的地方。

在物理问题中,导数往往有直接含义。若 s(t)s(t) 表示物体位置,那么 s(t)s'(t) 是速度;若速度再对时间求导,就得到加速度。若 T(x)T(x) 表示沿一根杆的温度分布,那么 T(x)T'(x) 描述温度沿空间方向变化得多快。微分方程正是通过这些导数表达变化规律。

导数也提醒我们,函数需要具备一定光滑性才方便讨论变化率。例如 f(x)=xf(x)=|x|x=0x=0 处有尖角,左侧斜率为 1-1,右侧斜率为 11,因此该点不可导。在 PINN 中,网络结构和激活函数会影响 uθu_\theta 的光滑性。若方程中需要二阶导数,网络输出至少应当能够稳定地计算相应导数。这一点在后续讨论网络选择时会再次出现。

1.3 多变量函数与偏导数#

许多微分方程中的未知函数并不只依赖一个变量。热传导中的温度 u(x,t)u(x,t) 同时依赖空间位置和时间;二维流场中的速度可能依赖 xxyytt;三维问题还会出现 zz。这种情况下,函数的输入不再是一个数,而是一组变量。

u(x,t)u(x,t) 为例,xx 表示空间变量,tt 表示时间变量,u(x,t)u(x,t) 表示在位置 xx、时间 tt 处的函数值。如果固定时间 t=t0t=t_0,得到的是某一时刻的空间分布 u(x,t0)u(x,t_0);如果固定位置 x=x0x=x_0,得到的是某一位置随时间变化的过程 u(x0,t)u(x_0,t)。同一个函数可以从不同方向观察,这正是偏导数出现的原因。

偏导数描述多变量函数沿某一个变量方向的局部变化率。对 u(x,t)u(x,t) 而言,若只关心时间方向的变化,就固定 xx,让 tt 改变。于是对时间的偏导数定义为

ut(x,t)=limh0u(x,t+h)u(x,t)h.\frac{\partial u}{\partial t}(x,t) = \lim_{h\to 0} \frac{u(x,t+h)-u(x,t)}{h}.

若只关心空间方向的变化,就固定 tt,让 xx 改变。于是对空间变量的偏导数定义为

ux(x,t)=limh0u(x+h,t)u(x,t)h.\frac{\partial u}{\partial x}(x,t) = \lim_{h\to 0} \frac{u(x+h,t)-u(x,t)}{h}.

在 PDE 文献中,这两个偏导数常简写为

ut=ut,ux=ux.u_t=\frac{\partial u}{\partial t}, \qquad u_x=\frac{\partial u}{\partial x}.

这些简写非常常见,后续讲义也会频繁使用。读者需要记住,utu_t 不是 uutt 相乘,uxu_x 也不是两个符号的并列,而是偏导数记号。

例 1.1

u(x,t)=x2+3t.u(x,t)=x^2+3t.

xx 求偏导时,把 tt 暂时看作常数,因此

ux(x,t)=2x.u_x(x,t)=2x.

tt 求偏导时,把 xx 暂时看作常数,因此

ut(x,t)=3.u_t(x,t)=3.

这个例子说明,同一个多变量函数沿不同方向的变化率可以完全不同。空间方向的变化率依赖 xx,时间方向的变化率则是常数。

需要注意的是,把其他变量“看作常数”并不意味着它们从结果中一定消失。例如

u(x,t)=x2tu(x,t)=x^2t

xx 求偏导得到

ux(x,t)=2xt.u_x(x,t)=2xt.

这里结果仍含有 tt,因为 tt 虽然在求导过程中被固定,但它仍然影响函数值的大小。

1.4 高阶导数与方程中的变化结构#

许多重要方程不只包含一阶导数,还包含二阶甚至更高阶导数。二阶导数描述的是变化率本身如何变化。对于一元函数 f(x)f(x),二阶导数写作

f(x)=ddx(f(x)).f''(x)=\frac{d}{dx}\left(f'(x)\right).

如果 s(t)s(t) 表示位置,那么 s(t)s'(t) 是速度,s(t)s''(t) 是加速度。加速度不是位置本身,也不是速度本身,而是速度的变化率。类似地,在空间问题中,二阶导数常常刻画函数图像的弯曲程度。

对于多变量函数 u(x,t)u(x,t),常见二阶偏导数包括

uxx=2ux2,utt=2ut2.u_{xx} = \frac{\partial^2u}{\partial x^2}, \qquad u_{tt} = \frac{\partial^2u}{\partial t^2}.

uxxu_{xx} 表示先对 xx 求一次偏导,再对 xx 求一次偏导;uttu_{tt} 表示对 tt 连续求两次偏导。还有一类混合偏导,例如 uxtu_{xt}utxu_{tx},表示分别对不同变量求导。在函数足够光滑、相关偏导连续的条件下,混合偏导的求导顺序通常可以交换;在初学阶段,只需要知道这不是无条件成立的代数规则,而是依赖函数光滑性的结论。

例 1.2

u(x,t)=x2t+t2.u(x,t)=x^2t+t^2.

一阶偏导数为

ux=2xt,ut=x2+2t.u_x=2xt, \qquad u_t=x^2+2t.

继续求导得到

uxx=2t,utt=2.u_{xx}=2t, \qquad u_{tt}=2.

若先对 xx 求导再对 tt 求导,则

uxt=t(2xt)=2x.u_{xt} = \frac{\partial}{\partial t}(2xt) =2x.

若先对 tt 求导再对 xx 求导,则

utx=x(x2+2t)=2x.u_{tx} = \frac{\partial}{\partial x}(x^2+2t) =2x.

在这个例子中,两个混合偏导相等。这个计算虽然简单,却能帮助我们理解后续 PDE 中密集出现的下标记号。

二阶导数在物理方程中有特别重要的位置。热方程

ut=αuxxu_t=\alpha u_{xx}

把时间一阶变化率 utu_t 与空间二阶变化 uxxu_{xx} 联系起来。直观地说,如果某处温度分布在空间上弯曲明显,热量扩散会驱动温度随时间变化。波动方程中则常见

utt=c2uxx,u_{tt}=c^2u_{xx},

它把时间二阶变化与空间二阶变化联系起来,用于描述弦振动、声波等现象。这些例子说明,微分方程不是任意拼接导数,而是在表达某种变化机制。

1.5 神经网络函数为什么也要求导#

在普通监督学习中,神经网络常被训练来拟合数据。给定样本 (xi,yi)(x_i,y_i),我们希望网络输出 uθ(xi)u_\theta(x_i) 接近 yiy_i。如果只做这件事,训练损失可以写成类似

1Ni=1Nuθ(xi)yi2.\frac{1}{N}\sum_{i=1}^N \left|u_\theta(x_i)-y_i\right|^2.

这个损失只比较函数值,不涉及导数。但 PINN 不只要求网络贴近数据,还要求它满足微分方程。由于微分方程包含未知函数的导数,神经网络函数 uθu_\theta 也必须能够被求导。

设控制方程写为

N[u](x,t)=0,\mathcal{N}[u](x,t)=0,

其中 N\mathcal{N} 可能包含 uuutu_tuxu_xuxxu_{xx} 等项。PINN 用 uθu_\theta 代替 uu,得到残差

rθ(x,t)=N[uθ](x,t).r_\theta(x,t)=\mathcal{N}[u_\theta](x,t).

如果在许多点 (xi,ti)(x_i,t_i) 上,rθ(xi,ti)r_\theta(x_i,t_i) 都接近零,就说明网络函数在这些点上近似满足方程。用于检查残差的点通常称为配置点。配置点不一定有观测标签,它们的作用是让方程本身参与训练。

仍以热方程为例,把方程移到一边得到

utαuxx=0.u_t-\alpha u_{xx}=0.

uθu_\theta 近似 uu 后,残差为

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^2 u_\theta}{\partial x^2}(x,t).

这个公式说明,要训练热方程的 PINN,程序必须能够计算网络输出对 tt 的一阶偏导,以及对 xx 的二阶偏导。现代深度学习框架中的自动微分正是为此提供了计算工具。它根据网络的计算过程应用链式法则,从而得到所需导数。

这里还要区分两类导数。第一类是网络输出对输入变量的导数,例如 uθ/x\partial u_\theta/\partial xuθ/t\partial u_\theta/\partial t,它们用于构造微分方程残差。第二类是损失函数对网络参数的导数,例如 L/θ\partial \mathcal{L}/\partial \theta,它们用于梯度下降或其他优化算法。二者都重要,但含义不同:前者服务于物理方程,后者服务于训练过程。

本章小结#

本章建立了后续讨论 PINN 所需的函数与导数语言。科学计算中的未知量往往是函数,而不是单个数;导数描述函数的局部变化率,偏导数描述多变量函数沿某个方向的变化率,高阶导数描述变化率本身的变化。微分方程正是通过这些导数表达物理规律。

对 PINN 而言,神经网络首先应被理解为一个带参数的函数 uθu_\theta。它接受空间、时间或其他变量作为输入,输出对未知解的近似值。由于控制方程包含导数,PINN 不仅需要计算 uθu_\theta 的函数值,还需要计算它对输入变量的导数,并由此构造方程残差。下一章将进一步说明微分方程如何把这些导数组织成具体的物理或数学模型。

习题#

  1. f(x)=x2+1f(x)=x^2+1。计算它在区间 [1,3][1,3] 上的平均变化率,并计算 f(x)f'(x)
  2. u(x,t)=x2+xt+t2u(x,t)=x^2+xt+t^2。计算 uxu_xutu_tuxxu_{xx}uttu_{tt}
  3. 对热方程 ut=αuxxu_t=\alpha u_{xx},说明 utu_tuxxu_{xx} 分别表示什么变化。
  4. 设 PINN 的近似解为 uθ(x,t)u_\theta(x,t)。解释为什么构造 PDE 残差时需要对输入变量求导,而训练网络参数时需要对 θ\theta 求导。

延伸阅读#

  1. MIT OpenCourseWare, Single Variable Calculus: 18.01 Single Variable Calculus
  2. MIT OpenCourseWare, Multivariable Calculus: 18.02 Multivariable Calculus
  3. OpenStax, Calculus Volume 1, Section 3.1 “Defining the Derivative”: OpenStax Calculus Volume 1
  4. OpenStax, Calculus Volume 3, Section 4.3 “Partial Derivatives”: OpenStax Calculus Volume 3

文章分享

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

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

文章目录