【基于物理信息的DeepONets】基本原理介绍以及概述

引言

函数和算子

函数:

指两个向量空间的映射:

比如对于 f 1 ( x ) = s i n ( x ) f_1(x)=sin(x) f1(x)=sin(x); for x ∈ R x\in\mathbf{R} xR

z = f 1 ( x ) = s i n ( x ) ∈ [ 0 , 1 ] z=f_1(x)=sin(x)\in[0, 1] z=f1(x)=sin(x)[0,1]

就是说 f 1 f_1 f1 映射 x ∈ R → [ 0 , 1 ] x\in\mathbf{R}→[0,1] xR[0,1]

算子:
指无限维函数空间之间的映射:

G ( f 1 ( x ) ) = f 2 ( x ) G(f_1(x))=f_2(x) G(f1(x))=f2(x)

比如微分算子→ d d x \frac{d}{d x} dxd

将函数 f 1 f_1 f1 映射到了另一个函数 f 2 f_2 f2:

f 1 ( x ) = s i n ( x ) f_1(x)=sin(x) f1(x)=sin(x)

应用这个微分算子后

f 2 = d f 1 ( x ) d x = d d x s i n ( x ) = c o s ( x ) f_2=\frac{df_1(x)}{d x}=\frac{d}{d x}sin(x)=cos(x) f2=dxdf1(x)=dxdsin(x)=cos(x)

含参的偏微分方程(也可以说是条件可变的偏微分方程)

含参的偏微分方程是指求解时候的一些参数能够改变,包含了形状,初始条件,边界条件,系数等等。
N \mathcal{N} N表示了一个非线性微分算子,含参的偏微分方程可以表示成:

N ( u , s ) = 0 \mathcal{N}(u,s)=0 N(u,s)=0

其中 u u u 是输入函数, s s s 是未知偏微分方程的解(同样是一个函数)。

其中 s s s是根据 u u u求得的,偏微分方程的求解算子就变成了

G ( u ) = s G(u)=s G(u)=s
Note: 换句话说,我们可以将PDE的通解表示为一个算子 G G G
记住 s s s本身就是一个函数,所以如果我们在任意点 y y y求值,输出将是一个实数。(这里的 y y y是自变量)

G ( u ) ( y ) = s ( y ) ∈ R G(u)(y)=s(y)\in \mathbf{R} G(u)(y)=s(y)R

算子的普遍近似定理

∀ ϵ > 0 \forall \epsilon >0 ϵ>0, 有正整数 n , p , m n,p,m n,p,m, 常数 c i k , W b i j k , b b i j k , W t k , b t k c_i^k,W_{bij}^k,b_{bij}^k,W_{tk},b_{tk} cik,Wbijk,bbijk,Wtk,btk 使:

∣ G ( u ) ( y ) − ∑ k = 1 p ∑ i = 1 n c i k σ ( ∑ j = 1 m W b i j k u ( x j ) + b b i k ) . σ ( W t k . y + b t k ) ∣ < ϵ \left|G(u)(y)-\sum_{k=1}^{p}\sum_{i=1}^{n}c_i^k\sigma\left(\sum_{j=1}^{m}W_{bij}^{k}u(x_j)+b_{bi}^k\right).\sigma(W_{tk}.y+b_{tk})\right|<\epsilon G(u)(y)k=1pi=1ncikσ(j=1mWbijku(xj)+bbik).σ(Wtk.y+btk) <ϵ
这个定理就是为了说明,这个算子是存在的,能够找到的。

神经网络

神经网络是一个函数,它的形式可以表示为: (https://book.sciml.ai/notes/03/)

N N ( X ) = W n σ n − 1 ( W n − 1 σ n − 2 ( . . . ( W 2 σ 1 ( W 1 X + b 1 ) + b 2 ) + . . ) + b n − 1 ) + b n NN(X)=W_n\sigma_{n-1}(W_{n-1}\sigma_{n-2}(...(W_2\sigma_1(W_1X+b_1)+b_2)+..)+b_{n-1})+b_n NN(X)=Wnσn1(Wn1σn2(...(W2σ1(W1X+b1)+b2)+..)+bn1)+bn

所以我们可以用2个神经网络来实现算子的普遍近似定理。

分支(Branch):

N N b ( u ( x ) ) = b ( u ( x ) ) = c . σ ( W b u ( x ) + b b ) NN_b(u(\textbf{x}))=b(u(\textbf{x}))=\textbf{c}.\sigma\left(W_{b}u(\textbf{x})+\textbf{b}_{b}\right) NNb(u(x))=b(u(x))=c.σ(Wbu(x)+bb)

表示我需要很多个 u ( x ) u(\textbf{x}) u(x)函数,近乎于无限次幂,我才能够泛化到任何情况的求解。

主干(Trunk):

N N t ( y ) = t ( y ) = σ ( W t . y + b t ) NN_t(\textbf{y})=t(\textbf{y})=\sigma(W_{t}.\textbf{y}+\textbf{b}_{t}) NNt(y)=t(y)=σ(Wt.y+bt)

表示对于各个函数,我有一些条件需要去满足,比如初始条件和边界条件。

DeepOnet

为了学习含参偏微分方程的解算子,尝试用两个神经网络来近似 G G G (算子的解):

G θ ( u ) ( y ) = ∑ k = 1 q b k ( u ( x 1 ) , u ( x 2 ) , . . . , u ( x m ) ) ⏟ B r a n c h . t k ( y ) ⏟ T r u n k G_\theta(u)(y)=\sum_{k=1}^q\underset{Branch}{\underbrace{b_k\left(u(x_1),u(x_2),...,u(x_m)\right)}}.\underset{Trunk}{\underbrace{t_k(\textbf{y})}} Gθ(u)(y)=k=1qBranch bk(u(x1),u(x2),...,u(xm)).Trunk tk(y)

我们想要得到 G G G,所以我们的目标是

G θ ( u ) ( y ) ≈ G ( u ) ( y ) G_\theta(u)(y)\approx G(u)(y) Gθ(u)(y)G(u)(y)

要训练出一个网络,使得对于任何 y y y,就是对于任何的边界或初始条件,我都能获得这个偏微分方程的解。

所以我们将这个条件强加到一个损失函数中(训练中的 y y y我们是已知的):

L O p e r a t o r ( θ ) = 1 N P ∑ i = 1 N ∑ j = 1 P ∣ G θ ( u ( i ) ) y j ( i ) − G ( u ( i ) ) y j ( i ) ∣ 2 \mathcal{L}_{Operator}(\theta)=\frac{1}{NP}\sum_{i=1}^N\sum_{j=1}^P\left|G_{\theta}(u^{(i)})y_j^{(i)}-G(u^{(i)})y_j^{(i)}\right|^2 LOperator(θ)=NP1i=1Nj=1P Gθ(u(i))yj(i)G(u(i))yj(i) 2

L O p e r a t o r ( θ ) = 1 N P ∑ i = 1 N ∑ j = 1 P ∣ ∑ k = 1 q b k ( u ( x 1 ) , u ( x 2 ) , . . . , u ( x m ) ) . t k ( y j ( i ) ) − G ( u ( i ) ) y j ( i ) ∣ 2 \mathcal{L}_{Operator}(\theta)=\frac{1}{NP}\sum_{i=1}^N\sum_{j=1}^P\left|\sum_{k=1}^q{b_k\left(u(x_1),u(x_2),...,u(x_m)\right)}.t_k(y_j^{(i)})-G(u^{(i)})y_j^{(i)}\right|^2 LOperator(θ)=NP1i=1Nj=1P k=1qbk(u(x1),u(x2),...,u(xm)).tk(yj(i))G(u(i))yj(i) 2

其中:

m : m: m: 评价输入函数的点个数(选取了多少个样本点来做训练)

q : q: q: 输出神经元的个数

N : N: N: 输入函数的个数。

P : P: P: 评价输出函数的点个数

基于物理信息的 DeepONets

与PINN类似,基于物理信息的DeepONets输出函数通过最小化非线性微分算子的残差来与物理约束保持一致。

L P h y s i c s ( θ ) = 1 N Q m ∑ i = 1 N ∑ j = 1 Q ∑ k = 1 m ∣ N ( u ( i ) ( x k ) , G θ ( u ( i ) ) ( y j ( i ) ) ∣ 2 \mathcal{L}_{Physics}(\theta)=\frac{1}{NQm}\sum_{i=1}^{N}\sum_{j=1}^{Q}\sum_{k=1}^{m}\left|\mathcal{N}(u^{(i)}(x_k),G_{\theta}(u^{(i)})(y_j^{(i)})\right|^2 LPhysics(θ)=NQm1i=1Nj=1Qk=1m N(u(i)(xk),Gθ(u(i))(yj(i)) 2

其中 N \mathcal{N} N是一个非线性微分算子, { y j } i = 1 Q \{y_j\}_{i=1}^{Q} {yj}i=1Q是collocation points(用来执行物理约束)。

所以总loss是:

L ( θ ) = L O p e r a t o r ( θ ) + L P h y s i c s ( θ ) \mathcal{L}(\theta)=\mathcal{L}_{Operator}(\theta)+\mathcal{L}_{Physics}(\theta) L(θ)=LOperator(θ)+LPhysics(θ)

问题实例

Diffusion-reaction system

由源项为 u ( x ) u(x) u(x)的非线性偏微分方程描述的隐式算子( u ( x ) u(x) u(x)是已知的,不同的方程不一样,要求解这个偏微分方程,求解这个 s s s s s s是关于 x x x t t t的函数):

∂ s ∂ t = D ∂ 2 s ∂ x 2 + k s 2 + u ( x ) \frac{\partial s}{\partial t}=D\frac{\partial^2 s}{\partial x^2}+ks^2+u(x) ts=Dx22s+ks2+u(x)

( x , t ) ∈ ( 0 , 1 , ] × ( 0 , 1 ] (x,t)\in (0,1,]\times(0,1] (x,t)(0,1,]×(0,1]

其中, D = 0.01 D=0.01 D=0.01 是扩散系数, k = 0.01 k=0.01 k=0.01 是反应速率。

Note: 我们不会使用任何配对的输入输出数据。我们只知道初始条件和边界条件都是零。

训练

我们将源项 u ( x ) u(x) u(x)映射到PDE解 s ( x , t ) s(x,t) s(x,t)。因此,我们将使用PI-DeepONet ( G θ G_{\theta} Gθ)近似隐式解算子( G G G)。

对于这个偏微分方程,我们知道对于给定的输入函数 u ( i ) u^{(i)} u(i):

u ( i ) = ∂ s ( i ) ∂ t − D ∂ 2 s ( i ) ∂ x 2 − k [ s ( i ) ] 2 u^{(i)}=\frac{\partial s^{(i)}}{\partial t}-D\frac{\partial^2 s^{(i)}}{\partial x^2}-k[s^{(i)}]^2 u(i)=ts(i)Dx22s(i)k[s(i)]2

理想情况下,我们通过偏微分方程算子来近似 s s s的解 G θ ( u ( i ) ) ( x , t ) ≈ G ( u ( i ) ) ( x , t ) = s ( i ) ( x , t ) G_{\theta}(u^{(i)})(x,t)\approx G(u^{(i)})(x,t)= s^{(i)}(x,t) Gθ(u(i))(x,t)G(u(i))(x,t)=s(i)(x,t) :

那么对于函数 u u u:
u ( i ) ≈ ∂ G θ ( u ( i ) ) ( x , t ) ∂ t − D ∂ 2 G θ ( u ( i ) ) ( x , t ) ∂ x 2 − k [ G θ ( u ( i ) ) ( x , t ) ] 2 u^{(i)}\approx \frac{\partial G_{\theta}(u^{(i)})(x,t)}{\partial t}-D\frac{\partial^2 G_{\theta}(u^{(i)})(x,t)}{\partial x^2}-k[G_{\theta}(u^{(i)})(x,t)]^2 u(i)tGθ(u(i))(x,t)Dx22Gθ(u(i))(x,t)k[Gθ(u(i))(x,t)]2

R θ ( i ) ( x , t ) R_{\theta}^{(i)}(x,t) Rθ(i)(x,t)表示计算损失:
R θ ( i ) ( x , t ) = ∂ G θ ( u ( i ) ) ( x , t ) ∂ t − D ∂ 2 G θ ( u ( i ) ) ( x , t ) ∂ x 2 − k [ G θ ( u ( i ) ) ( x , t ) ] 2 R_{\theta}^{(i)}(x,t)=\frac{\partial G_{\theta}(u^{(i)})(x,t)}{\partial t}-D\frac{\partial^2 G_{\theta}(u^{(i)})(x,t)}{\partial x^2}-k[G_{\theta}(u^{(i)})(x,t)]^2 Rθ(i)(x,t)=tGθ(u(i))(x,t)Dx22Gθ(u(i))(x,t)k[Gθ(u(i))(x,t)]2
所以物理损失 L P h y s i c s \mathcal{L}_{Physics} LPhysics 为:

L P h y s i c s ( θ ) = 1 N Q ∑ i = 1 N ∑ j = 1 Q ∣ R θ ( i ) ( x r , j ( i ) , t r , j ( i ) ) − u ( i ) ( x r , j ( i ) ) ∣ 2 \mathcal{L}_{Physics}(\theta)=\frac{1}{NQ}\sum_{i=1}^{N}\sum_{j=1}^{Q}\left|R_{\theta}^{(i)}(x_{r,j}^{(i)},t_{r,j}^{(i)})-u^{(i)}(x_{r,j}^{(i)})\right|^2 LPhysics(θ)=NQ1i=1Nj=1Q Rθ(i)(xr,j(i),tr,j(i))u(i)(xr,j(i)) 2

其中 ( x r , j , t r , j ) (x_{r,j},t_{r,j}) (xr,j,tr,j) 是 “collocation points” 来评价模型好坏, N N N是评价的函数个数, Q Q Q表示评价点的个数, r r r无实际意义,代表函数里的点,于下文的 u u u下标所代表函数的点进行区分。

另一方面,我们用零初始条件和边界条件 L O p e r a t o r ( θ ) \mathcal{L}_{Operator}(\theta) LOperator(θ):

L O p e r a t o r ( θ ) = 1 N P ∑ i = 1 N ∑ j = 1 P ∣ G θ ( u ( i ) ) ( x u , j ( i ) , t u , j ( i ) ) − G ( u ( i ) ) ( x u , j ( i ) , t u , j ( i ) ) ) ∣ 2 \mathcal{L}_{Operator}(\theta)=\frac{1}{NP}\sum_{i=1}^{N}\sum_{j=1}^{P}\left|G_{\theta}(u^{(i)})(x_{u,j}^{(i)},t_{u,j}^{(i)})- G(u^{(i)})(x_{u,j}^{(i)},t_{u,j}^{(i)}))\right|^2 LOperator(θ)=NP1i=1Nj=1P Gθ(u(i))(xu,j(i),tu,j(i))G(u(i))(xu,j(i),tu,j(i))) 2

式中, ( x u , j , t u , j ) (x_{u,j},t_{u,j}) (xu,jtu,j)是初始条件和边界条件的点。因此,由于我们在零初始和边界条件下工作, G ( u ( i ) ) ( x u , j ( i ) , t u , j ( i ) ) = 0 G(u^{(i)})(x_{u,j}^{(i)},t_{u,j}^{(i)})=0 G(u(i))(xu,j(i)tu,j(i))=0:

L O p e r a t o r ( θ ) = 1 N P ∑ i = 1 N ∑ j = 1 P ∣ G θ ( u ( i ) ) ( x u , j ( i ) , t u , j ( i ) ) ) ) ∣ 2 \mathcal{L}_{Operator}(\theta)=\frac{1}{NP}\sum_{i=1}^{N}\sum_{j=1}^{P}\left|G_{\theta}(u^{(i)})(x_{u,j}^{(i)},t_{u,j}^{(i)})))\right|^2 LOperator(θ)=NP1i=1Nj=1P Gθ(u(i))(xu,j(i),tu,j(i)))) 2

最后,总损失为:
L ( θ ) = L o p e r a t o r ( θ ) + L P h y s i c s ( θ ) \mathcal{L}(\theta)=\mathcal{L}_{operator}(\theta)+\mathcal{L}_{Physics}(\theta) L(θ)=Loperator(θ)+LPhysics(θ)

总结

总结一下,在基于物理信息的DeepONets中,对于一个偏微分方程,我们有不同的源项(source),我们想要对于任何的源项都能求解。
我们用一个偏微分算子 G G G来近似要求解的 s s s,那么我们就能表示出 u u u u u u是关于 x x x的函数,是已知条件,带入 x x x t t t后求得训练出来的偏微分算子 G G G,进而求得训练出来的 u u u,进一步求物理损失。同时对于每个函数的边界点,初始设置的为0,也算损失,相加为总损失,训练出来的 G G G便能表示不同初始条件下这个微分方程的解。

PS:代码实战

  • 11
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值