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的相关概念: 

### Deeponet与COMSOL的集成方法 为了实现DeepONet与COMSOL之间的有效结合,主要通过两种方式来完成这一目标:数据交换接口和联合求解器模式。 #### 数据交换接口 一种常见的做法是在训练阶段利用COMSOL生成的数据集作为DeepONet模型输入的一部分。具体而言,在离线状态下先使用COMSOL软件模拟物理现象并导出相应的数值结果文件[^1]。这些文件可以被转换成适合机器学习框架读取的形式(如CSV、HDF5),进而用于构建神经网络所需的特征向量集合。当DeepONet经过充分训练之后,便能够基于新的边界条件快速预测系统的响应特性而无需重新运行耗时较长的传统有限元分析过程[^2]。 ```python import numpy as np from scipy.io import loadmat # 假设MATLAB格式存储来自COMSOL的结果 data = loadmat('comsol_simulation.mat') input_features = data['inputs'] # 获取输入参数矩阵 output_responses = data['outputs'] # 获取输出响应矩阵 ``` #### 联合求解器模式 另一种更为紧密耦合的方式则是开发定制化的Python脚本或插件,使得DeepONet可以直接嵌入到COMSOL的工作流当中形成所谓的“混合求解环境”。在这种情况下,可以在每次迭代过程中动态调用预训练好的DeepONet实例来进行实时反馈控制或是辅助计算某些难以解析表达式的近似值。值得注意的是,这种方法通常需要更深入的技术支持以及可能涉及到对原有商业软件API权限申请等问题[^3]。 ```python def comsol_deeponet_coupling(comsol_model, deep_onet): """ 实现COMSOL与DeepONet之间交互操作 参数: comsol_model (Model): COMSOL Model对象 deep_onet (tf.keras.Model): 已经训练完毕的DeepONet Keras模型 返回: updated_comsol_results (dict): 更新后的仿真结果字典 """ current_state = extract_current_physical_parameters(comsol_model) predicted_changes = deep_onet.predict(current_state.reshape(1,-1)) apply_predicted_adjustments_to_comsol(comsol_model, predicted_changes.flatten()) return get_updated_simulation_outputs(comsol_model) # 注册自定义函数至COMSOL LiveLink API中... ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

热爱生活的五柒

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

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

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

打赏作者

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

抵扣说明:

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

余额充值