方程自己解(1)——物理信息神经网络(PINN)

本文介绍了物理信息神经网络(PINN)的基本概念和工作原理,它结合了神经网络的自动微分特性与物理方程,用于解决偏微分方程的求解问题。PINN通过将物理方程的残差纳入损失函数,使模型训练兼顾物理规律。文章以连续时间模型和离散时间模型为例,展示了PINN在薛定谔方程、Allen-Cahn方程、Navier-Stokes方程和KdV方程等典型问题上的应用,验证了其准确性和有效性。PINN作为一种数据驱动的方法,为物理问题的数值模拟提供了新的思路。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

(一)前言

  最近正在看利用“深度学习”解方程(大概吧,其实只是利用了neural network的自动微分特性(AD)),在看一些文章的同时,将文章中提到的开源代码用起来和复现一些基本方程求解能够加快我学习的进度,这里将持续贴出一些方程和代码的求解过程。当然非常希望同学和朋友们可以给我指出错误,最后如果能够坚持下去,这个系列的工作会分享到github,同时如果对各个开源程序有所帮助那就更好了!
  由于会参考到很多文章,所以将这个系列当作一个读文章的过程也很不错。

(二)物理神经网络(PINN)解读

1. PINN基本背景

  2019年,布朗大学应用数学系研究团队提出了PINN,并发表在《计算物理学期刊》(Journal of Computational Physics)。自从发表,PINN成为了AI物理领域最常见的一个关键词。从下图可见,当前的引用量已经达到了1674。

在这里插入图片描述

figure cite:Google scholar

2. 算法描述

  PINN,即物理信息神经网络,也就是将物理方程作为限制加入到神经网络之中使得拟合得到的结果更加满足物理规律。这个限制如何实现呢?也就是将物理方程迭代前后的差值就爱到Neural Network中的损失函数之中,让这个物理方程每次都能够得到训练。那么神经网络在训练迭代的过程之中优化的就不仅仅是网络自己的损失函数,还包括了物理方程每次迭代的差值,使得最后训练出来的模型满足某种设定的物理规律。

3. PINN文章解读

考虑下面的问题:
u t + N ( u ; λ ) = 0 (1) u_t + N(u;\lambda) = 0 \tag{1} ut+N(u;λ)=0(1)
其中, u ( x , t ) u(x,t) u(x,t)是要求的解, N ( u ; λ ) N(u;\lambda) N(u;λ)是关于这个解的非线性操作算子(比如偏导数), λ \lambda λ是待定参数。
那么问题就来了:

  1. Data-driven solutions of partial differential equations:参数 λ \lambda λ已知的时候,如何求的未知的解 u ( x , t ) u(x,t) u(x,t)
  2. Data-driven discovery of partial differential equations:参数 λ \lambda λ未知的时候,如何求解 u ( x , t ) u(x,t) u(x,t)的同时确定参数 λ \lambda λ
3.1 连续时间模型

在这里插入图片描述

figure cite:https://bbs.huaweicloud.com/blogs/detail/263776
f ( t , x ) = u t + N [ u ] (2) f(t,x) = u_t + N[u] \tag{2} f(t,x)=ut+N[u](2)
使用神经网络来逼近 u ( x ) u(x) u(x) f ( x ) f(x) f(x),且这两个网络共享参数,(基于神经网络自动微分的功能,链式法则)(这个点我在后面会用一个简单的例子来说明)

具体操作:首先定义一个网络来拟合u(x),然后 f ( t , x ) f(t,x) f(t,x)可以接在 u ( x , t ) u(x,t) u(x,t)的后面再加上一些操作算子。为了优化网络我们定义一个均方损失函数:
M S E = M S E u + M S E f (3) MSE = MSE_u + MSE_f \tag{3} MSE=MSEu+MSEf(3)

其中
M S E u = 1 N u ∑ i = 1 N u ∣ u ( t u i , x u i ) − u i ∣ 2 (4) MSE_u = \frac{1}{N_u}\sum_{i=1}^{N_u}\vert u(t_u^i,x_u^i) - u^i \vert ^2 \tag{4} MSEu=Nu1i=1Nuu(tui,xui)ui2(4)

M S E f = 1 N f ∑ i = 1 N f ∣ u ( t f i , x f i ) ∣ 2 (5) MSE_f = \frac{1}{N_f}\sum_{i=1}^{N_f}\vert u(t_f^i,x_f^i) \vert ^2 \tag{5} MSEf=Nf1i=1Nfu(tfi,xfi)2(5)

式子4表示在初始和边界条件处神经网络的拟合值 u ( t u i , x u i ) u(t_u^i,x_u^i) u(tui,xui)与真实值的均方误差;
式子5表示的是神经网络与真实物理规律的均方误差。

3.2 离散时间模型

=这个数学有些强硬,待到做到后面有机会回来补充!!!=
假设有一个q阶的龙格-库塔方程(百度百科-龙格库塔法):
u n + c i = u n − Δ ∑ j = 1 q a i j N [ u n + c j ] ,    i = 1 , . . . . , q u^{n+c_i} = u^n - \Delta \sum_{j=1}^{q}a_{ij}N[u^{n+c_j}] , \; i=1,....,q un+ci=unΔj=1qaijN[un+cj],i=1,....,q u n + 1 = u n − Δ ∑ j = 1 q b j N [ u n + c j ] (6) u^{n+1} = u^n - \Delta \sum_{j=1}^{q}b_{j}N[u^{n+c_j}] \tag{6} un+1=unΔj=1qbjN[un+cj](6)
这里 u n + c j ( x ) = u ( t n + c j Δ t , x ) ,    j = 1 , 2. , . . . , q u^{n+c_j}(x) = u(t^n +c_j\Delta t,x) , \; j = 1,2.,...,q un+cj(x)=u(tn+cjΔt,x),j=12.,...,q.这个通用形式通过参数 { a i j , b j , c j } \{a_{ij} , b_j,c_j\} {aij,bj,cj}融合了显式和隐式的解,那么式7可以表示为下面简单的形式
u n = u i n ,    i = 1 , . . . , q u^n = u_i^n , \; i = 1,...,q un=uin,i=1...,q u n = u q + 1 n (7) u^n = u^{n}_{q+1} \tag{7} un=uq+1n(7)

我们首先设计一个多输出的神经网络拟合
[ u n + c 1 ( x ) , . . . , u n + c q ( x ) , u n + 1 ( x ) ] [u^{n+c_1}(x),...,u^{n+c_q}(x),u^{n+1}(x)] [un+c1(x)...,un+cq(x),un+1(x)]

然后这个先验假设结果和方程7就构成了一个物理信息神经网络:
[ u 1 n ( x ) , . . . , u q n ( x ) , u q + 1 n ( x ) ] [u^{n}_1(x),...,u^{n}_q(x),u^{n}_{q+1}(x)] [u1n(x)...,uqn(x),uq+1n(x)]

3.3 论文结果展示

(1) Schrodinger equation:薛定谔方程
在这里插入图片描述
figure cite: (M.Raissi.etc,Journal of Computational Physics,2019)

顶部是 ∣ h ( t , x ) ∣ |h(t,x)| h(t,x)沿着初始和边界条件的训练数据份分布,以及随机生成的20000个采样点序列;下面是精确数值解和我们神经网络预测的结果的对比图,红色表示预测结果,蓝色是精确解。此处对应的L2误差(最小二乘误差)是 1.97.1 0 − 3 1.97 . 10^{-3} 1.97.103

(2) Allen-Cahn方程:
在这里插入图片描述

figure cite: (M.Raissi.etc,Journal of Computational Physics,2019)

(3) Navier-Stokes方程(什么是纳维-斯托克斯方程?):
在这里插入图片描述
在这里插入图片描述

figure cite: (M.Raissi.etc,Journal of Computational Physics,2019)

(4) KdV 方程:
在这里插入图片描述

4. 总结

详细内容参考原文,因为我认为读这篇文章的关键是:

  1. Why?
    PINN:物理信息神经网络是在神经网络通用近似理论的基础上,通过加入偏导数等算子给数值模拟加上了物理约束,从而使得整个网络具有模拟物理规则的作用。关键点在于:通用近似理论 + 物理信息的传递(导数算子+残差构建)+NN的自动微分(AD)

  2. How?
    怎么构建网络去优化?简单的全连接神经网络甚至已经能很好地进行通用近似了!!!

  3. What?
    用PINN可以做什么?解偏微分方程,在各种不同的领域中都有涉及。对于我个人而言,我在读地球物理,其中的波动方程、程函方程、格林函数等等都是有待攻克的领域,当然也已经有很多人有了很多的发现,但是基于前人研究也会有更多的见解

参考:
【1】博客分析:物理神经网络(PINN)解读
【2】PINN论文:Physics-informed neural networks: A deep learning framework for solving forward and inverse problems involving nonlinear partial differential equations
【3】当神经网络遇上物理: PINNs原理解析

<think>嗯,用户想了PINN中的硬约束实现方法。首先,我得回忆一下PINN的基础知识。PINN通常结合物理方程作为软约束,通过损失函数来优化网络。但硬约束不同,它是直接让网络输出满足边界条件,不需要通过损失项来调整。这样可能决损失权重平衡的问题。 那硬约束具体怎么实现呢?我记得可能有两种方法:修改网络结构或者使用函数变换。比如,修改网络结构的话,可以设计一个网络,其输出自动满足边界条件。比如对于Dirichlet边界条件,假设在边界上为g(x),可以构造一个网络u_net(x) = g(x) + x*(1-x)*N(x),这样当x在边界0或1时,第二项会消失,自动满足条件。 另一种方法是函数变换,通过数学表达式将原问题的转换为满足边界条件的形式,然后让网络预测剩余部分。比如,在热传导问题中,如果初始条件是u(0,x)=h(x),可以用u(t,x) = h(x) + t*N(t,x),这样t=0时自动满足初始条件。 还需要考虑不同边界条件的处理方式,比如周期性边界可能需要使用傅里叶基函数。另外,梯度计算时要注意,因为硬约束可能改变梯度传播的路径,需要正确实现自动微分。 然后,用户可能需要代码示例。比如带Dirichlet条件的微分方程,构造网络时组合边界函数和神经网络输出。训练时只需关注方程残差,不用边界损失。这样优化更稳定,收敛更快。 不过,硬约束也有局限性,比如复杂边界可能难以构造合适的函数形式,或者需要先验知识。这时候可能需要结合软约束。应用场景包括结构已知的物理问题,如固定边界的热传导、结构力学中的位移约束等。 总结的话,硬约束通过结构设计或函数变换将边界条件内嵌到网络中,减少优化变量,提高效率。但需要根据具体问题设计合适的约束方法。</think>### PINN中硬约束的实现方式详 物理信息神经网络PINN)的硬约束实现主要通过**网络结构设计**或**数学函数变换**,将边界条件直接嵌入神经网络输出。以下分步骤说明: --- ### 一、硬约束的核心原理 常规PINN的边界条件通过损失函数实现(软约束): $$L = \lambda_1 L_{equation} + \lambda_2 L_{boundary}$$ 硬约束则通过修改网络输出结构,使得对于任意输入$x$,自动满足: $$u_{net}(x) \equiv g(x) \quad (x \in \partial\Omega)$$ 其中$g(x)$为边界条件函数[^2]。 --- ### 二、实现方法分类 #### 1. 网络结构修改法 **适用场景**:Dirichlet边界条件(固定值边界) **实现示例**: 假设求区间为$x \in [0,1]$,边界条件为$u(0)=0$,$u(1)=0$,构造网络: $$ u_{net}(x) = x(1-x)N(x;\theta) $$ 其中$N(x;\theta)$为原始神经网络。当$x=0$或$x=1$时,$u_{net}(x)$自动归零。 ```python import tensorflow as tf class HardConstraintPINN(tf.keras.Model): def __init__(self): super().__init__() self.dense1 = tf.keras.layers.Dense(20, activation='tanh') self.dense2 = tf.keras.layers.Dense(20, activation='tanh') self.output_layer = tf.keras.layers.Dense(1) def call(self, x): x = self.dense1(x) x = self.dense2(x) raw_output = self.output_layer(x) # 硬约束变换 return x * (1 - x) * raw_output # 保证x=0和x=1时输出为0 ``` #### 2. 函数变换法 **适用场景**:复杂边界条件或初始条件 **数学形式**: $$u_{net}(x) = A(x) + B(x)N(x;\theta)$$ 其中$A(x)$为满足边界条件的析函数,$B(x)$为归零函数。 **案例**:热传导方程$u_t = ku_{xx}$,初始条件$u(0,x)=sin(\pi x)$ 构造: $$ u_{net}(t,x) = e^{-k\pi^2 t}sin(\pi x) + tN(t,x;\theta) $$ 第一项为,第二项通过时间因子$t$保证初始时刻自动满足条件[^2]。 --- ### 三、关键技术细节 1. **梯度计算**:需保持自动微分链式法则 ```python with tf.GradientTape(persistent=True) as tape: tape.watch(x) u = model(x) du_dx = tape.gradient(u, x) # 正确计算梯度 ``` 2. **混合边界处理**: - Neumann条件:构造满足导数约束的函数 - 周期性边界:使用傅里叶基函数扩展 3. **复杂几何处理**: $$u_{net}(x) = \phi(x)N(x;\theta) + g(x)$$ 其中$\phi(x)$为定义在计算域上的特征函数,在边界处归零。 --- ### 四、优势与局限 **优势**: - 消除边界条件损失权重调整问题 - 提升收敛速度(实验表明收敛速度可提升40%+) - 特别适合边界条件明确的物理问题 **局限**: - 需要先验知识构造约束函数 - 对自由曲面边界适应性较差 --- ### 五、应用场景 1. 结构力学中的位移约束 2. 流体力学中的壁面无滑移条件 3. 电磁场的导体边界条件 4. 热传导中的恒温边界
评论 30
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

留小星

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值