Deeponet详解(提供论文、代码、中文翻译、复现过程)

源代码:https://github.com/lululxvi/deeponet/tree/master

文章链接:Learning nonlinear operators via DeepONet based on the universal approximation theorem of operators (Journal Article) | OSTI.GOV

https://arxiv.org/abs/1910.03193

复现过程:CSDN 

 中文翻译论文https://www.zhihu.com/question/456570818/answer/3567077746

主要的两个文章

这里推荐一篇看过的还不错的论文解释:https://zhuanlan.zhihu.com/p/514148390

相关重要概念和有代码的案例:https://zhuanlan.zhihu.com/p/667494933

下面的内容都是根据上面两个文章和其他文章总结得出

次要文章:

其他文章:https://zhuanlan.zhihu.com/p/648901604

个人理解(个人觉得有用):

  1. DeepONet的原理是学习算子映射,也就是学习输入函数到输出函数的映射。
  2. 如何学习算子映射?基于两个子网络,也就是用于输入函数的分支网络和用于评估输出函数的位置的主干网络。(体现了函数到函数的映射)
  3. 为什么能通过数据学习到非线性算子?基于第4条:算子的通用逼近定理
  4. 为什么两个子网络设计?deeponet设计两个网络(也就是于输入函数的分支网络和用于评估输出函数的位置的主干网络)输出结果的点乘,也对应了上面第4条算子的通用逼近定理中的两项的加权求和。作者提到基于两个子网络的设计显著提高了泛化能力。
  5. 两个网络的输入输出?让 𝐺 是一个接受输入函数的运算符 𝑢 , 进而 𝐺​(𝑢) 是对应的输出函数。对于任意一点 𝑦 在域中 𝐺​(𝑢) ,输出 𝐺​(𝑢)​(𝑦) 是一个实数。因此,网络接受由两部分组成的输入: 𝑢 和 𝑦 ,和输出 𝐺​(𝑢)​(𝑦) 。虽然目标是学习以函数作为输入的运算符,但是必须离散地表示输入函数,以便可以应用网络近似。直接而简单的方法是在足够但有限的多个位置处使用函数值 {𝑥1,𝑥2,…,𝑥𝑚} ;我们将这些位置称为“传感器”(sensor).也就是将u这个函数用有限个点u(x1),u(x2)……u(xm)来近似表示
  6. 神经网络的准确性可以通过将总误差分为三种主要类型来表征:近似、优化和泛化三种误差万能逼近定理仅保证足够大的网络具有较小的逼近误差,但它们根本没有考虑优化误差和泛化误差,而优化误差和泛化误差同样重要,并且在实践中往往对总误差起主导作用。有用的网络应该易于训练,即表现出较小的优化误差,并且能够很好地泛化到未见过的数据,即表现出较小的泛化误差。为了准确有效地学习算子,我们提出了一种特定的网络架构,即深度算子网络(DeepONet),以实现更小的总误差。我们将证明 DeepONet 基于两个子网络的设计显着提高了泛化能力,即用于输入函数的分支网络和用于评估输出函数的位置的主干网络。
  7. 提出deeponet架构的原因:为了准确有效地学习算子,我们提出了一种特定的网络架构,即深度算子网络(DeepONet),以实现更小的总误差( 近似、优化和泛化 )。并证明 DeepONet 基于两个子网络的设计显着提高了泛化能力,即用于输入函数的分支网络和用于评估输出函数的位置的主干网络。

重要理解:

-1.DeepONet的原理是学习算子映射,也就是学习输入函数到输出函数的映射。

0.DeepONet是一种学习非线性算子的神经网络架构。它旨在从输入数据中学习一个算子(即一个映射),这个算子可以将函数映射到另一个函数

1.算子是能作用在整个向量空间上的一种映射规则,而不是作用于具体的数

2.这里的u函数是多个u函数而不是一个u函数

3.相比于函数逼近,DeepONet这类算子学习的方法目标是解决一类问题。比如我们想解决有源的热传导方程,则给出成百上千种热源的表达函数(u)作为输入,一旦训练完成后,这个模型则可以解决这个定义域内的所有有源热传导问题。

4.如果说PINNs的目标是在用神经网络是在逼近微分方程的解,那么算子学习可以理解为目标是在逼近微分方程本身

5.算子学习需要输入的是函数。如何取一大组(多个)函数 𝑢 能让神经网络成功学习算子 𝐺 则成了研究的重点,在DeepONet的这篇文章中,作者主要研究了两个函数空间,分别是Gaussian random field(GRF)和orthogonal (Chebyshev) polynomials。

个人理解:也就是函数随着l的取值而变化,比如x平方,x立方中的指数的取值会变化,但都是指数函数。 

5.理解函数和算子(推荐)

6.从函数到算子
所以,人们想到了一种新方法,求助于“算子”。算子是一种从函数到函数的映射。

函数:数→数 ,如sinx将x在无穷区间上的数 映射到了[0,1]
算子:函数→函数

比如,正弦算子(sin)把线性函数x变成三角函数sinx,微分(求导)算子(d/dx)把三次函数x³变成二次函数3x²。

基于物理信息的 DeepONets训练步骤如下

去掉8,9,就是deeponet的训练步骤

deeponet的相关概念: 

### 比较DeepXDEDeepONet框架特性差异 #### 背景介绍 DeepXDEDeepONet 是两种基于深度学习的方法,分别用于解决偏微分方程 (PDEs) 的数值求解以及函数逼近中的复杂问题。尽管两者都属于科学计算领域内的神经网络方法,但在设计目标、架构特点和应用场景上存在显著的区别。 --- #### 架构对比 ##### 1. **DeepXDE** DeepXDE 是一种通用的物理信息神经网络 (PINNs, Physics-Informed Neural Networks),其核心在于通过神经网络参数化未知场变量并利用自动微分技术来满足给定 PDE 的约束条件[^3]。 - 它支持多种类型的边界条件和初始条件。 - 可处理正向问题(已知模型预测输出)、逆向问题(从数据反推模型参数)以及其他混合场景。 - 使用单一连续型全连接神经网络作为基础结构,适用于高维空间下的动态系统建模。 ```python import deepxde as dde def pde(x, y): dy_t = dde.grad.jacobian(y, x, i=0, j=1) return dy_t + y - dde.backend.exp(-x[:, 1:]) geom = dde.geometry.TimeDomain(0, 5) data = dde.data.PDE(geom, pde, num_domain=2000, num_boundary=100) net = dde.nn.FNN([2] + [20] * 3 + [1], "tanh", "Glorot normal") model = dde.Model(data, net) model.compile("adam", lr=1e-3) losshistory, train_state = model.train(iterations=10000) ``` ##### 2. **DeepONet** 相比之下,DeepONet 更专注于高效表示非线性算子映射关系,即输入信号到输出响应之间的变换过程[^4]。它由两个主要组件构成——分支网路(branch network)负责编码特定实例特征;主干网络(trunk network)则捕捉全局模式规律。这种双流式组合形式使得该算法特别适合于大规模多任务学习环境或者当训练样本数量有限时仍需保持良好泛化性能的情况之下应用。 ```python from deepxde import config, utils config.set_default_float("float64") branch_input_dim = ... # Dimensionality of branch input trunk_input_dim = ... # Dimensionality of trunk input output_dim = ... deep_onet_model = create_deeponet_architecture( branch_input_dim, trunk_input_dim, output_dim, layer_sizes=[..., ..., ...], activation="relu", ) utils.model_save(deep_onet_model, "./saved_models/deeponet.h5") ``` --- #### 功能特性比较表 | 特性 | DeepXDE | DeepONet | |---------------------|---------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------| | 主要用途 | 解决带有物理定律约束的各种类型偏微分方程组 | 表达复杂的非线性运算符 | | 输入/输出 | 接受时空坐标点及其对应的目标值 | 支持任意维度的功能映射 | | 训练效率 | 对于某些高度耦合或强非线性的案例可能收敛缓慢 | 利用了先验知识从而加速了优化流程 | | 数据需求量 | 需要有足够的采样密度才能保证精度 | 即使是在少量观测条件下也能实现较好的近似效果 | --- #### 应用范围举例说明 - 如果研究者希望快速验证某个理论假设是否成立,则可以借助像DeepXDE这样的工具包构建相应的仿真平台来进行探索实验; - 当面临如何有效压缩海量历史记录以便后续在线实时查询的需求时,或许考虑采用类似于DeepONet的技术方案会更加合适一些。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

热爱生活的五柒

谢谢你的打赏,人好心善的朋友!

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

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

打赏作者

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

抵扣说明:

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

余额充值