关于机器学习:FNO傅里叶算子神经网络在PDEs求解上的应用

3次阅读

共计 4415 个字符,预计需要花费 12 分钟才能阅读完成。

Fourier Neural Operator(FNO)求解非线性偏微分方程

FNO 的前世今生

继上次的 DeepONet 求解偏微分方程的文章,这次是介绍联合傅里叶算子和图神经网络的办法,也就是傅里叶神经算子办法,这篇创造性地引入了傅里叶算子,取得了能够与 DeepONet 扳手段的速度和经度

Li, Zongyi, et al. “Fourier neural operator for parametric partial differential equations.” International Conference on Learning Representing, 2021. (arXiv preprint arXiv:2010.08895).

DeepONet 的作者陆路博士还将 FNO 与 DeepONet 进行了比拟,也进行了一些拓展,有趣味的读者能够参考以下的论文:

Lu, Lu, et al. “A comprehensive and fair comparison of two neural operators (with practical extensions) based on fair data.” Computer Methods in Applied Mechanics and Engineering 393 (2022): 114778.

如果间接看 FNO 那篇论文,大部分一开始的感觉都是不知所云,我也是这样的。这里我举荐能够先看一下论文一作 Zongyi Li 博士的之前两篇文章,能够帮忙更好地了解 FNO 这篇论文:

Li, Zongyi, et al. “Neural operator: Graph kernel network for partial differential equations.” ICLR 2020 Workshop on Integration of Deep Neural Models and Differential Equations, 2020.

当然了,读者也能够疏忽下面的简介,上面我尽量把 FNO 介绍地比较清楚。

图核函数网络

这里就间接叙述图核函数网络的想法,上面给出一个个别模式的偏微分方程的零碎

$$
\begin{aligned}
\left(\mathcal{L}_{a} u\right)(x) &=f(x), & & x \in D \\
u(x) &=0, & & x \in \partial D
\end{aligned}
$$

其中 \(u(x)=u(x,t) \),作者在这里是疏忽了工夫这个维度 \(t\),此外还默认 \(u(x) \)是一个标量,这里的参数 \(a\)能够是零碎的不同参数或者管制输出,这里的 \(f(x)\)是一个固定的函数,在训练和应用的时候都是不变(并不是管制输出,这里要了解)。

随后,作者就引入了 Green 函数这个概念,\(G: D \times D \rightarrow \mathbb{R}\)是上面这个方程的惟一解

$$
\mathcal{L}_{a} G(x, \cdot)=\delta_{x}
$$

其中 \(\delta_{x}\)就是复变中的狄利克雷函数,是一个定义在实数范畴上、值域不间断的函数。狄利克雷函数的图像以 Y 轴为对称轴,是一个偶函数,它处处不间断,处处极限不存在,不可黎曼积分。

这个 Green 函数忽然跳进去是很诡异的,然而其领有很多良好的性质,能够示意偏微分方程的解

$$
u(x)=\int_{D} G_{a}(x, y) f(y) d y
$$

下面的式子示意的意思,只有可能找到这样一个 Green 函数,那么在整个管制域内做积分就能失去偏微分方程的解 \(u(x)\),这显然是不事实的,Green 函数只在多数的状况下是解析的,这也就意味着解析的准确解是无奈失去,然而能够利用神经网络的弱小拟合能力对 Green 函数进行迫近,这也就是 FNO 办法的次要思维。

上面就是用核函数对 Green 函数进行迫近:

$$
v_{t+1}(x)=\sigma\left(W v_{t}(x)+\int_{D} \kappa_{\phi}(x, y, a(x), a(y)) v_{t}(y) \nu_{x}(d y)\right)\tag{1}
$$

其中 \(\kappa_{\phi}(x, y, a(x), a(y))\)就是核函数,\(\sigma\)是激活函数,\(\nu_{x}(d y)\)是测度(这里不必管),然而还是有问题,这个公式是要在整个管制域 \(D\)上进行计算,其计算量是十分大,相当于是一个全连贯的图网络,根本是偏微分方程的维度上来之后,这就是不可行的,这里 \(v(x) \)是对 \(u(x) \)的一个可逆变换,失去一个更高维的向量,具备更多的特色。

为了进步问题的一般性,作者随后就提出本人的算法用节点的邻域 \(B(x,r)\)来代替 \(D\),上面是对下面办法的一个近修改

$$
\begin{aligned}
v_0(x)=&P\left(x,a(x),a_{\epsilon}(x),\nabla a_{\epsilon}(x) \right) +p\\
v_{t+1}(x)=&\sigma \left(Wv_t(x)+\int_{B(x,r)}{\kappa _{\phi}}(x,y,a(x),a(y))v_t(y)\mathrm{d}y \right)\\
u(x)=&Qv_T(x)+q\\
\end{aligned}
$$

其中 \(a_{\epsilon}(x)\)是对 \(a(x)\)的高斯润滑版本,相当于晋升对于不同参数 \(a(x)\)的泛化性能,P 是将低维投影到高维的矩阵,Q 则是将高维向量投影到低维的矩阵,都是投影算子,为了减少神经网络的特色维度。

上面就是用神经网络对核函数 \(\kappa _{\phi}(x,y,a(x),a(y)) \)进行毕竟,此外,还要留神到这是在邻域 \(B(x,r)\)上的,咱们很天然地就想到是消息传递图神经网络,就是上面的模式

$$
v_{t+1}(x)=\sigma\left(W v_{t}(x)+\frac{1}{|N(x)|} \sum_{y \in N(x)} \kappa_{\phi}(e(x, y)) v_{t}(y)\right)
$$

须要指出的是,这里的边特色定义为 \(e(x, y)=(x, y, a(x), a(y)) \),剩下的工作就是搭建适合的神经网络对核函数的 \(\kappa _{\phi}\)进行迫近,这里的具体实现形式能够参考图网络外面的一些办法,也有一些翻新点能够做。

如果本文中是思考在整个管制域 \(D\)上构建全连贯神经网络,那么复杂度就是 \(\mathcal{O}\left(K^{2}\right)\),作者这里提供了一个思路,就是采集 \(l\)个子图,每个子图平均随机采样 \(m \ll K\)个节点,那么复杂度就是 \(\mathcal{O}\left(lm^{2}\right)\),这里的复杂度就能有所降落,随后作者还给出了一个升高复杂度的准确度误差的上界,这就是 FNO 的没有引入傅里叶算子的版本,前面的 FNO 就是为了升高对核函数 \(\kappa _{\phi}\)的迫近老本。

升高 \(\kappa _{\phi}\)的迫近老本上面的论文给出了一个办法:

Li, Zongyi, et al. “Multipole graph neural operator for parametric partial differential equations.” Advances in Neural Information Processing Systems 33 (2020): 6755-6766.

FNO 的庐山真面目

通过下面的介绍 Zongyi Li 博士的两篇论文,FNO 能够天然地被导出。

如果咱们去掉对函数 \(\kappa _{\phi}\)对 \(a \)的依赖并强加 \(\kappa_{\phi}(x, y)=\kappa_{\phi}(x-y) \),能够失去 (1) 是一个卷积算子。

对于卷积算子,利用傅里叶变换能够失去如下的后果:

$$
\left(\mathcal{K}(a ; \phi) v_{t}\right)(x)=\mathcal{F}^{-1}\left(\mathcal{F}\left(\kappa_{\phi}\right) \cdot \mathcal{F}\left(v_{t}\right)\right)(x)
$$

解除上述公式对 \(a\)的依赖,咱们能够失去

$$
\left(\mathcal{K}(\phi) v_{t}\right)(x)=\mathcal{F}^{-1}\left(R_{\phi} \cdot\left(\mathcal{F} v_{t}\right)\right)(x) \quad \forall x \in D
$$

其中 \(k\in D, \left( \mathcal{F} v_t \right) (k)\in \mathbb{C} ^{d_v},R_{\phi}(k)\in \mathbb{C} ^{d_v \times d_v}\),都是一个函数空间,因为图网络其实是对间断空间的一个离散化,这里咱们也就思考对这些参数进行离散化,并利用疾速 FFT 进行变动。此外,因为傅里叶变换的频率是 \(-\infty \rightarrow +\infty \),那么这里是对频率进行了一个限度,也就是说把傅里叶变换截断到下限频率
\(k_{\max}=\left| Z_{k_{\max}} \right|\),\(R_{\phi} \) 是一个 \(\left( k_{\max}\times d_v\times d_v \right) \)维的三阶张量。

上面给出了算法的具体实现流程图:

作者在试验局部进行了比拟,与 U -Net、TF-Net 和 ResNet 等经典办法相比具备显著的劣势

这里 FNO-2D 与 FNP-3D 的次要区别就是,FNO-2D 利用了 RNN 构造,能够将解以固定距离长度 \(\varDelta t \) 的增量流传到任意工夫 \(T\),是一种自回归迭代的办法;FNP-3D 间接将工夫维度增广到管制维度下来,以 Conv3D 构造间接训练,能够间接失去任意离散工夫点 \(t\)上进行求解,不须要递推式的解法去求解,和 DeepONet 一样,是一种间接映射。FNO-3D 办法更具表现力且更易于训练,然而试验里看出的是参数量更多且体现晋升不多。

论断

傅里叶神经算子在噪声数据上的体现是超过 DeepONet,我猜是因为傅里叶变换时把高频的噪声信号给滤去了,这样傅里叶神经算子就对噪声不敏感了。FNO 算法也启发了起初的很多钻研,大家有趣味地能够深刻浏览以下的论文,也是利用消息传递图神经网络,然而是利用的自回归办法,算是对传统办法的一个加强:

Johannes Brandstetter and Daniel E. Worrall and Max Welling. “Message passing neural PDE solvers.” International Conference on Learning Representations (2022).

正文完
 0