本文提出了一种将迁移学习应用到PINN的方法。可以极大的缩短训练PINN所用的时间,目前,PINN所需要的训练次数往往都在成千上万次,

作者通过批量训练PINN,来学习丰富的潜在空间用来执行迁移学习。主要是冻结网络的隐藏层,只微调最后一个线性层。这样可以将神经网络的推理速度快好几个数量级。对于线性问题,本文涉及的几个实验都仅仅只需要几秒钟就可以完成训练,此外,非线性问题依旧可以使用梯度下降进行优化,这就类似于一般的迁移学习了。

首先,关于本文模型结构,可以给一个大概的描述,如下图:

不同于一般的PINN结构,本文的输出层的大小是可以根据参与训练的方程的个数进行调整的。但这些方程都是同一类的,具有不同的非齐次项,初始条件,边界条件等。比如,薛定谔方程,因为同时训练三个不同的参数,取n=3,输出层就有6的神经元。(因为薛定谔方程的解是复值解,本身就需要两个神经元)。因为没有找到代码,所以我猜测训练时,网络同时给输出三个解,分别带入各自的损失函数(也就是残差+边界),从而对网络进行优化。最后的微调阶段,对于一个新的方程,只调节最后一个线性层的大小,就可以快速精确的获得近似解。

现在我们看一下论文。本文发表在ICML2022。

摘要:作者首先说到,将迁移学习应用到求解PDE还未被充分探索,诚然,我还没有读到过类似的文章。对于线性的常微分和偏微分方程,作者提出一种一次性推断的迁移学习方法。这就意味着在求解新的方程时,无需重新训练整个网络。

介绍:目前关注PINN计算花费的论文还不是很多,PINN的训练是很慢的,自己的感觉是训练时对cpu要求比较高,收敛速度比较慢。因此作者使用迁移学习来解决这个问题,在一个任务上训练,并将模型转移到其他的任务上。具体的说,在一系列PDE上预训练的PINN,可以有效地用于求解新的微分方程。通过冻结预训练的PINN的隐藏层,求解同一系列的新的微分方程就简化于微调线性层。并且对于线性系统,甚至可以通过人工计算消除微调的必要,从而降低训练开销,大大减少训练时间。这也是本文将重点介绍的。

背景:ODE给定IC,传统下可以使用积分求解器求解。目前也可以使用PINN求解,损失函数如3式。使用神经网络,相比较于传统方法,可以消除维度灾难、避免累积误差等。但是,目前关于迁移学习的应用还比较少。

相关工作是机器学习关于求解PDE的发展历史。

方法:首先以ODE为例。定义一个神经网络去近似方程的解。换句话说,被参数化的神经网络,将输入t投影到一个高维的非线性隐层空间H,H是隐层空间和非线性激活函数的组合。然后,在潜在空间的线性组合,来获得最后的解。

为了训练网络,定义最后的权重层是多输出的。这样就可以同时训练多个方程(比如不同的微分算子,初始条件等)。捆绑训练允许我们 1 将训练集成到单个网络中,2 鼓励隐层状态H对于多个方程适用。

在推断时(对于一个新的任务),我们冻结隐藏层的参数,仅仅微调最后一个线性层。解可以被写成 H*W 的形式。那么,在面对新的问题是,损失就变成了4式。

对于线性系统,W是可以直接计算的。

还有一个更直观的理解,我们把h看作一组非正交基,Wout是一组系数,即通过线性组合确定输出的近似函数。并且7式还可以进一步简化,因为前一项逆矩阵可以提前计算。总之,这样就可以免于计算梯度,因为没有涉及到进一步的训练。并且如果H足够好,就可以获得高精度的解。事实上,这个方法很依赖于矩阵的逆,如果有很大条件数时,会导致问题病态。实验中可以通过正则化和分解来解决。 对于非线性系统,最后的线性层只能使用微调得到了。

然后到了PDE,一样的过程,可以计算得到W。我们再来说一下H,作者认为,只有当H这组基能够很好的表示解空间时,才能获得准确的解(希望由H张成的子空间尽可能大)。因此,为了鼓励学到有代表性的隐空间,作者使用了一个网络来训练多个方程。

结果:

使用了四个不同的泊松方程训练,用两种方式测试。已知分析解。图1结果还不错。

然后又考虑了薛定谔,使用三个方程训练,测试结果如下。

最新文章

  1. 系统中没有邮件客户端设置autoLink=email会挂掉的问题
  2. 12.Struts2自定义拦截器
  3. jmeter安装配置教程
  4. 关于oracle 10g creating datafile with zero offset for aix
  5. 如何配置Hyper-V的虚拟机通过主机网络上网 (NAT)
  6. NMAP实用手册
  7. 计算机中的DMA的多种含义?
  8. select 支持宽高(高度有兼容问题);
  9. iOS开发拓展篇—UIDynamic(捕捉行为)
  10. FW: Chef集中管理工具实践之 (1) 环境部署
  11. git 换行符LF与CRLF转换问题
  12. 筛选DataTable数据的方法
  13. (转)为首次部署MongoDB做好准备:容量计划和监控
  14. linux下文件的复制、移动与删除
  15. 海量Office文档搜索
  16. UNIX环境高级编程——sigqueue、sigsuspend函数
  17. Vsphere 回收未消使用的磁盘空间
  18. Scala面向对象详解
  19. 转 $(document).ready()与window.onload的区别
  20. BLOB TO CLOB

热门文章

  1. C# Post调用接口并传递json参数
  2. 00_java基础笔记
  3. 【面试题】 用vue想要拿20k,面试题要这样回答(源码版)
  4. Java使用Calendar获取月最大天数
  5. 32位机转化11位手机号以及BLE与USB的切换
  6. Google 官方 AppCrawles学习小结
  7. vue封装组件
  8. gitlab 已有代码仓库推送到另外一个gitlab仓库
  9. 使用ESP8266连接中文wifi
  10. 记录一次mybatis中parameterType中使用String和string的区别