(2021|Nature,深度算子网络(DeepONet),算子的通用逼近定理(UAT),逼近/优化/泛化误差)

文摘   2024-07-19 17:13   新加坡  

DeepONet: Learning nonlinear operators for identifying differential equations based on the universal approximation theorem of operators

进 Q 交流群:922230617 或加 VX:CV_EDPJ 进 V 交流群

目录

0. 摘要

1. 引言

2. 方法

2.1 深度算子网络(DeepONets)

2.2 数据生成

3. 识别非线性动态系统的传感器数量

4. 仿真结果

4.1 一个简单的一维动态系统

4.1.1 线性案例: g(s(x),u(x),x)=u(x)

4.1.2 非线性案例: g(s(x),u(x),x) = −s^2(x)+u(x)

4.2 受外力作用的重力摆

5. 结论



0. 摘要

尽管众所周知,神经网络是连续函数的通用逼近器,但一个较少为人知且可能更强大的结果是,一个具有单隐藏层的神经网络可以准确地逼近任何非线性连续算子(nonlinear continuous operator) [5]。这个通用逼近定理(universal approximation theorem,UAT)暗示了神经网络在从数据中学习非线性算子的潜在应用。然而,该定理仅保证对于一个足够大的网络有较小的逼近误差,并且没有考虑重要的优化和泛化误差。为了在实践中实现这一定理,我们提出了深度算子网络(deep operator networks,DeepONets),以从相对较小的数据集中准确高效地学习算子。一个 DeepONet 由两个子网络组成,一个用于在固定数量的传感器 x_i, i=1,…,m 处编码输入函数(trunk net,分支网络),另一个用于编码输出函数的位置(branch net,主干网络)。我们进行系统模拟以识别两种类型的算子,即动态系统和偏微分方程,并证明 DeepONet 相比于全连接网络显著减少了泛化误差。我们还从理论上推导了逼近误差与传感器数量(输入函数定义的位置)以及输入函数类型的依赖关系,并用计算结果验证了该定理。更重要的是,我们在计算测试中观察到了高阶误差收敛,即相对于训练数据集大小的多项式速率(从半阶到四阶),甚至达到了指数收敛。

1. 引言

通用逼近定理指出,如果对隐藏层的宽度和深度没有约束,神经网络可以用来逼近任意连续函数,达到任意精度 [7, 11]。然而,另一个逼近结果更为令人惊讶,并且至今未被充分重视,它指出,具有单隐藏层的神经网络可以准确逼近任意非线性连续泛函(从函数空间到实数的映射)[3, 18, 25]或(非线性)算子(从函数空间到另一个函数空间的映射)[5, 4]。

在回顾算子的逼近定理之前,我们先介绍一些将在本文中使用的符号。设 G 为一个算子,其输入函数为 u,则 G(u) 为相应的输出函数。对于 G(u) 的定义域中的任意点 y,输出 G(u)(y) 是一个实数。因此,网络的输入由两个部分组成:u 和 y,输出 G(u)(y)(图 1A)。尽管我们的目标是学习以函数为输入的算子,但我们必须离散地表示输入函数,以便应用网络逼近。在实践中,一种直接而简单的方法是采用足够但有限数量位置处的函数值 {x1,x2,…,xm},我们称这些位置为 “传感器” (图 1A)。接下来,我们陈述 Chen 和 Chen [5] 的以下定理,详见附录。

定理 1(算子的通用逼近定理)。假设 σ 是一个连续的非多项式函数,X 是一个 Banach 空间,K1⊂X,K2⊂R^d 分别是 X 和 R_d 中的两个紧集(compact sets),V 是 C(K1) 中的一个紧集,G 是一个非线性连续算子,它将 V 映射到 C(K2)。那么,对于任意 ϵ>0,存在正整数 n,p,m 和常数

使得对于所有 u∈V 和 y∈K,以下方程成立

尽管这个定理没有告诉我们如何有效地学习算子。以经典的图像分类任务为例,神经网络的通用逼近定理 [7, 11] 表明,全连接神经网络(fully-connected neural networks,FNNs)能够准确逼近真实的分类函数,但在实践中,FNNs 的表现远不如具有特定架构的网络,例如广泛使用的卷积神经网络(CNN)[14] 或更近期的胶囊神经网络(CapsNet)[27]。性能差距在于,神经网络的准确性可以通过将总误差分为三种主要类型来表征:逼近误差、优化误差和泛化误差 [1, 17, 13, 16]。通用逼近定理仅保证了足够大网络的小逼近误差,但完全不考虑优化误差和泛化误差,这些在实践中同样重要且通常是主要的总误差来源。实用的网络应该易于训练,即表现出小的优化误差,并且对未见过的数据泛化良好,即表现出小的泛化误差。

为了展示神经网络学习非线性算子的能力和有效性,我们在传感器和训练数据集上使用尽可能弱的约束来尽可能一般地设置问题。具体而言,唯一需要的条件是传感器位置 {x1,x2,…,xm} 对所有输入函数 u 都相同,但不必在网格(lattice)上,而我们对输出位置 y 不施加任何约束(图 1B)。为了准确高效地学习算子,我们提出了一种特定的网络架构,即深度算子网络(DeepONet),以实现更小的总误差。我们将展示基于两个子网络设计的 DeepONet 显著改进了泛化能力,分支网络用于输入函数,主干网络用于评估输出函数的位置

我们考虑两种类型的算子,即动态系统(例如,以常微分方程 ODE 的形式)和偏微分方程 PDE。动态系统通常由差分或微分方程描述,识别非线性动态系统是控制理论中的一个主要问题。一些研究 [22, 33] 使用神经网络识别动态系统,但它们只考虑由差分方程描述的动态系统。其他一些研究 [20, 24, 23, 9] 预测特定动态系统的演变,而不是识别新未见输入信号的系统行为。它们采用的网络架构包括 FNN [24]、递归神经网络(RNNs)[20]、储层计算(reservoir computing) [20]、残差网络 [23]、自编码器 [9]、神经常微分方程 [6] 和神经跳跃随机微分方程 [12]。对于识别 PDE,一些研究将输入和输出函数视为图像,然后使用 CNN 学习图像到图像的映射 [30, 34],但这种方法只能应用于特定类型的问题,即输入函数 u 的传感器分布在等间距网格上,且训练数据必须包括所有等间距网格上的 G(u)(y) 值。另一种没有这种限制的方法是,将 PDE 参数化为未知系数,然后仅从数据中识别系数值 [2, 26, 31, 21, 15]。或者,可以基于广义移动最小二乘 [28] 使用广义 CNN 处理非结构化数据,但它只能逼近局部算子,不能学习其他算子,如积分算子。

本文组织如下。

  • 第二部分,我们介绍 DeepONet 的两种网络架构:堆叠 DeepONet 和非堆叠 DeepONet,并介绍数据生成过程。

  • 第三部分,我们对准确逼近 ODE 算子所需的传感器数量进行了理论分析。

  • 第四部分,我们测试了 FNN、堆叠 DeepONet 和非堆叠 DeepONet 在不同示例中的表现,并展示了非堆叠 DeepONet 的准确性和收敛率。

  • 第五部分,我们总结了本文的内容。

2. 方法

2.1 深度算子网络(DeepONets)

我们专注于在更一般的设置中学习算子,其中对训练数据集的唯一要求是输入函数的传感器 {x1,x2,…,xm} 的一致性。在这种一般设置中,网络输入由两个独立的组件组成:[u(x1), u(x2), ..., u(xm)]^T 和 y(图 1A),目标是通过设计网络架构来获得良好的性能。一种直接的解决方案是直接采用经典网络,如 FNN、CNN 或 RNN,并将两个输入拼接在一起作为网络输入,即 [u(x1), u(x2), ..., u(xm), y]^T。然而,该输入没有任何特定结构,因此选择 CNN 或 RNN 等网络没有意义。在这里,我们使用 FNN 作为基准模型。

在高维问题中,y 是一个具有 d 个分量的向量,所以 y 的维度与 u(xi) ,i = 1, 2, ..., m,的维度不匹配。这也阻止了我们将 u(xi) 和 y 同等对待,因此需要至少两个子网络来分别处理 [u(x1), u(x2), ..., u(xm)]^T 和 y。尽管通用逼近定理(定理 1)没有对总误差提供任何保证,但它仍为我们提供了一个网络结构(方程 1)。定理 1 仅考虑了一个具有单隐藏层的浅层网络,因此我们将其扩展到具有更强表现力的深层网络。我们提出的架构如图 1C 所示,具体细节如下。

首先有一个 “主干” 网络,它以 y 为输入并输出 [t1, t2, ..., tp]^T ∈ R^p。除了主干网络,还有 p 个 “分支” 网络,每个网络以 [u(x1), u(x2), ..., u(xm)]^T 为输入并输出一个标量 b_k ∈ R,k = 1, 2, ..., p。我们将它们合并如方程 1:

我们注意到主干网络在最后一层也应用了激活函数,即 t_k = ξ(⋅) 对于 k = 1; 2; ...; p,因此这种主干-分支网络也可以被看作是一个主干网络,其最后一层的每个权重由另一个分支网络参数化,而不是经典的单变量。我们还注意到,在方程 1 中,每个 b_k 分支网络的最后一层没有偏置。尽管在定理 1 中偏置不是必要的,但添加偏置可能通过减少泛化误差来提高性能。除了在分支网络中添加偏置外,我们还可以在最后阶段添加一个偏置 b_0 ∈ R:

在实践中,p 至少是 10 的数量级,使用大量分支网络在计算和内存上都很昂贵。因此,我们将所有分支网络合并为一个单一的分支网络(图 1D),即单一分支网络输出一个向量 [b1, b2, ..., bp]^T ∈ Rp。在第一个 DeepONet(图 1C)中,有 p 个并行堆叠的分支网络,因此我们称其为“堆叠 DeepONet”,而我们称第二个 DeepONet(图 1D)为 “非堆叠 DeepONet”。所有版本的DeepONet 都在 DeepXDE 中实现,这是一个用户友好的 Python 库,专为科学机器学习设计(https://github.com/lululxvi/deepxde)

DeepONet 是一种高级网络架构,没有定义其内部主干和分支网络的架构。为了单独展示DeepONet 的能力和良好性能,我们选择最简单的 FNN 作为本研究中子网络的架构。使用卷积层可能会进一步提高准确性。然而,卷积层通常适用于传感器 {x1,x2,…,xm} 分布在等间距网格上的方形域,因此作为替代方案并针对更一般的设置,我们可以使用 “注意力” 机制 [29]。

在神经网络架构中融入一些先验知识通常会诱导出良好的泛化能力。这种归纳偏差在许多网络中得到了体现,例如用于图像的 CNN 和用于序列数据的 RNN。DeepONet 即使使用 FNN 作为其子网络也能取得成功,这也归功于其强大的归纳偏差。输出 G(u)(y) 有两个独立的输入 u 和 y,因此显式使用主干和分支网络与这种先验知识是一致的。更广泛地说,G(u)(y) 可以被看作是在 u 条件下的 y 的函数。找到一种有效的方法来表示条件输入仍然是一个开放的问题,并且已经提出了不同的方法,例如特征变换 [8]。

2.2 数据生成

进程的输入信号 u(x) 在系统识别中起着重要作用。显然,输入信号是影响进程以收集其响应信息的唯一可能性,识别信号的质量决定了任何模型在最佳情况下所能达到的准确度上限。在本研究中,我们主要考虑两个函数空间:高斯随机场(Gaussian random field,GRF)和正交(Chebyshev)多项式。

我们使用均值为零的 GRF:

其中协方差核 k_l 是具有长度尺度参数 l>0 的径向基函数(radial-basis function,RBF)核。长度尺度 l 决定了采样函数的平滑度,较大的 l 导致平滑度更高的 u。

设 M>0 且 T_i 是第一类切比雪夫多项式。我们将 N 次正交多项式定义为:

我们通过从 [−M,M] 中随机采样 a_i 来生成 u 的样本,从而从 Vpoly 中生成数据集。

从选择的函数空间中采样 u 后,我们通过 Runge-Kutta (4, 5) 方法求解 ODE 系统,通过二阶有限差分法求解 PDE,以获得参考解。我们注意到一个数据点是一个三元组 (u, y, G(u)(y)),因此一个特定的输入 u 可能在多个数据点中出现,但 y 的取值不同。例如,一个大小为 10000 的数据集可能仅由 100 条 u 轨迹生成,每条轨迹在 100 个 y 位置上评估 G(u)(y)。

3. 识别非线性动态系统的传感器数量

在本节中,我们研究了需要多少个传感器点才能达到识别非线性动态系统的精度 ϵ。假设动态系统受以下 ODE 系统约束:

其中 u∈V(C[a,b] 的紧子集)是输入信号,s:[a,b]→R^K 是系统(3)的解,作为输出信号。

设 G 是将输入 u 映射到输出 s 的算子,即 Gu 满足

现在,我们在区间 [a,b] 上选择均匀的 m+1 个点 x_j = a + j(b−a)/m,j=0,1,…,m,并定义函数 u_m(x) 如下:

将映射 u 到 u_m 的算子记为 L_m,并设 U_m={L_m(u)∣u∈V},显然这是 C[a,b] 的一个紧子集,因为 V 是紧集且连续算子 L_m 保持紧凑性。自然地,W_m: = V∪U_m 作为两个紧集的并集也是紧的。然后,设

引理 7 指出 W 仍然是紧集。由于 G 是连续算子,G(W) 在 C([a,b]; R^K) 中是紧的。接下来的讨论主要在 W 和 G(W) 内进行。为了便于分析,我们假设 g(s,u,x) 在 G(W)×W 上满足 Lipschitz 条件,即存在常数 c>0,使得:

注意,这个条件很容易实现,例如,只要 g 关于 s 和 u 在 G(W)×W 上可微。

对于 u ∈ V 和 u_m ∈ U,存在一个依赖于 m 和紧空间 V 的常数 k(m,V),使得

当 V 是具有 RBF 核的 GRF 时,我们有

见附录 C 的证明。基于这些概念,我们有以下定理:

定理 2: 假设 m 是一个正整数,使得

那么对于任何 d∈[a,b],存在

使得下式对所有 u∈V 成立。证明见附录B。

4. 仿真结果

在本节中,我们首先展示了由于较小的泛化误差,DeepONets 在最简单的线性问题中比 FNNs 具有更好的性能,然后展示了 DeepONets 在三个非线性 ODE 和 PDE 问题中的能力。在所有问题中,我们使用学习率为 0.001 的 Adam 优化器,并选择迭代次数以保证训练收敛。除非另有说明,否则其他参数和网络大小列在表 1 和表 2 中。所有示例的代码都发布在 GitHub 上(https://github.com/lululxvi/deepxde)。

4.1 一个简单的一维动态系统

一个一维动态系统描述如下:

初始条件为 s(0)=0。我们的目标是为任意 u(x) 预测整个区间 [0,1] 上的 s(x) 。

4.1.1 线性案例: g(s(x),u(x),x)=u(x)

我们首先通过选择 g(s(x),u(x),x)=u(x) 来考虑一个线性问题,这等同于学习反导数算子(antiderivative operator)

作为基准,我们训练 FNNs 来学习反导数算子。为了获得 FNNs 的最佳性能,我们对三个超参数进行网格搜索:深度从 2 到 4,宽度从 10 到 2560,学习率从 0.0001 到 0.01。学习率为 0.01、0.001 和 0.0001 时测试数据集的均方误差(MSE)如图 2 所示。尽管我们只选择了深度最多为 4,但结果表明进一步增加深度并不能改善误差。在所有这些超参数中,最小的测试误差约为 10^{-4} ,该网络的深度为 2,宽度为 2560,学习率为 0.001。我们观察到,当网络较小时,训练误差较大,泛化误差(测试误差与训练误差之间的差异)较小,这是由于表达能力有限。当网络规模增加时,训练误差减少,但泛化误差增加。需要注意的是,FNN 并未达到过拟合区域,即测试误差增加的区域。

与 FNNs 相比,DeepONets 具有更小的泛化误差,从而具有更小的测试误差。这里我们不打算找到最佳超参数,只测试表 2 中列出的两个 DeepONets 的性能。图 3A 显示了带有偏置的非堆叠 DeepONet 的训练轨迹,泛化误差可以忽略不计。我们观察到,

  • 对于堆叠和非堆叠的 DeepONets,向分支网络和公式 (2) 中添加偏置减少了训练和测试误差(图 3B);带有偏置的 DeepONets 也具有较小的不确定性,即从随机初始化训练时更加稳定(图 3B)。

  • 与堆叠 DeepONets 相比,尽管非堆叠 DeepONets 具有较大的训练误差,但测试误差较小,这是由于较小的泛化误差。因此,带有偏置的非堆叠 DeepONets 达到了最佳性能

  • 此外,非堆叠 DeepONets 的参数数量少于堆叠 DeepONets,因此可以使用更少的内存更快地进行训练

4.1.2 非线性案例: g(s(x),u(x),x) = −s^2(x)+u(x)

接下来我们考虑一个非线性问题,其中 g(s(x),u(x),x) = −s^2(x)+u(x)。因为对于某些 u , s(x) 可能会发散,我们通过去除最差的 1‰ 预测来计算测试 MSE。在网络训练过程中,堆叠和非堆叠 DeepONets 的训练 MSE 和测试 MSE 都在减少,但非堆叠 DeepONets 的训练 MSE 和测试 MSE 之间的相关性更紧密(图 4A),即泛化误差较小。这种紧密的相关性在多次随机训练数据集和网络初始化的运行中也能观察到(图 4B)。此外,非堆叠 DeepONets 的测试 MSE 和训练 MSE 几乎呈现线性相关性:

图 4C 显示,由于较小的泛化误差,非堆叠 DeepONets 具有较小的测试 MSE。DeepONets 即使在分布外预测中也能工作,参见图 5 中的三个预测示例。在接下来的研究中,我们将使用非堆叠  DeepONets。

图 4C 显示,由于较小的泛化误差,非堆叠 DeepONets 具有较小的测试 MSE。DeepONets 即使在分布外预测中也能工作,参见图 5 中的三个预测示例。在接下来的研究中,我们将使用非堆叠  DeepONets。

4.2 受外力作用的重力摆

略。参见原文。

5. 结论

在这篇论文中,我们在更一般的设置下提出了学习算子的框架,并提出了 DeepONets 来学习非线性算子。在 DeepONets 中,我们首先构建两个子网络,分别对输入函数和位置变量进行编码,然后将它们合并以计算输出。我们在四个常微分方程和偏微分方程问题上测试了 DeepONets,并展示了通过这种归纳偏置,DeepONets 能够实现较小的泛化误差。在我们的仿真中,我们系统地研究了不同因素对测试误差的影响,包括传感器数量、最大预测时间、输入函数空间的复杂性、训练数据集大小和网络规模。我们观察到,对应于训练数据集大小的不同的阶数多项式和甚至是指数级别的误差收敛。根据我们的知识,这首次在深度学习中观察到指数级收敛。此外,我们理论上推导了近似误差对不同因素的依赖关系,这与我们的计算结果一致。

尽管取得了上述成就,但在理论和计算上仍需进一步工作。例如,尚未有关于网络规模对算子近似的理论结果,类似于函数近似的宽度和深度界限 [10]。我们还尚未理论上理解 DeepONets 为什么能够引起较小的泛化误差。另一方面,在这篇论文中,我们使用了全连接神经网络作为两个子网络,但正如我们在 2.1 节中讨论的,我们还可以使用其他网络架构,如卷积神经网络或 “注意力” 机制。这些修改可能进一步提高 DeepONets 的准确性。


论文地址:https://arxiv.org/abs/1910.03193 

项目页面:https://github.com/lululxvi/deeponet

示例代码:https://github.com/lululxvi/deepxde 


近期的相关文献:

https://arxiv.org/abs/2407.11253

https://arxiv.org/abs/2407.13010

EDPJ
CV 博士在读。文章搜索:公众号主页右上角放大镜搜关键词。
 最新文章