本文提出了一种将迁移学习应用到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结果还不错。

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

One-Shot Transfer Learning of Physics-Informed Neural Networks的更多相关文章

  1. 1506.01186-Cyclical Learning Rates for Training Neural Networks

    1506.01186-Cyclical Learning Rates for Training Neural Networks 论文中提出了一种循环调整学习率来训练模型的方式. 如下图: 通过循环的线 ...

  2. Learning How To Code Neural Networks

    原文:https://medium.com/learning-new-stuff/how-to-learn-neural-networks-758b78f2736e#.ly5wpz44d This i ...

  3. Coursera Deep Learning 2 Improving Deep Neural Networks: Hyperparameter tuning, Regularization and Optimization - week2, Assignment(Optimization Methods)

    声明:所有内容来自coursera,作为个人学习笔记记录在这里. 请不要ctrl+c/ctrl+v作业. Optimization Methods Until now, you've always u ...

  4. Coursera Deep Learning 2 Improving Deep Neural Networks: Hyperparameter tuning, Regularization and Optimization - week1, Assignment(Initialization)

    声明:所有内容来自coursera,作为个人学习笔记记录在这里. Initialization Welcome to the first assignment of "Improving D ...

  5. 吴恩达《深度学习》-课后测验-第一门课 (Neural Networks and Deep Learning)-Week 3 - Shallow Neural Networks(第三周测验 - 浅层神 经网络)

    Week 3 Quiz - Shallow Neural Networks(第三周测验 - 浅层神经网络) \1. Which of the following are true? (Check al ...

  6. Coursera Deep Learning 2 Improving Deep Neural Networks: Hyperparameter tuning, Regularization and Optimization - week1, Assignment(Regularization)

    声明:所有内容来自coursera,作为个人学习笔记记录在这里. Regularization Welcome to the second assignment of this week. Deep ...

  7. Coursera Deep Learning 2 Improving Deep Neural Networks: Hyperparameter tuning, Regularization and Optimization - week1, Assignment(Gradient Checking)

    声明:所有内容来自coursera,作为个人学习笔记记录在这里. Gradient Checking Welcome to the final assignment for this week! In ...

  8. Coursera Deep Learning 2 Improving Deep Neural Networks: Hyperparameter tuning, Regularization and Optimization - week3, Hyperparameter tuning, Batch Normalization and Programming Frameworks

    Tuning process 下图中的需要tune的parameter的先后顺序, 红色>黄色>紫色,其他基本不会tune. 先讲到怎么选hyperparameter, 需要随机选取(sa ...

  9. Coursera Deep Learning 2 Improving Deep Neural Networks: Hyperparameter tuning, Regularization and Optimization - week2, Optimization algorithms

    Gradient descent Batch Gradient Decent, Mini-batch gradient descent, Stochastic gradient descent 还有很 ...

  10. Coursera, Deep Learning 2, Improving Deep Neural Networks: Hyperparameter tuning, Regularization and Optimization - week1, Course

    Train/Dev/Test set Bias/Variance Regularization  有下面一些regularization的方法. L2 regularation drop out da ...

随机推荐

  1. 浅析容器运行时奥秘——OCI标准

    背景 2013年Docker开源了容器镜像格式和运行时以后,为我们提供了一种更为轻量.灵活的"计算.网络.存储"资源虚拟化和管理的解决方案,在业界迅速火了起来. 2014年更是容器 ...

  2. TypeError: unsupported operand type(s) for |=: 'dict' and 'dict'

    原因:python3.9 支持对 dict 类型使用 |, 而较老的版本不支持 解决方案 :1. 用更新的 python 2. 把 | 操作替换成 {**d1, **d2} 来源:https://st ...

  3. css小技巧【让背景最少是屏幕高度】【让三个字和四个字左右对齐】

    怎么让背景最少是屏幕高度 min-height: 100vh; 怎么让三个字和四个字左右对齐 text-align-last: justify;

  4. 《用Python写网络爬虫》pdf高清版免费下载

    <用Python写网络爬虫>pdf高清版免费下载地址: 提取码:clba 内容简介  · · · · · · 作为一种便捷地收集网上信息并从中抽取出可用信息的方式,网络爬虫技术变得越来越有 ...

  5. js判断任意数值接近数组中的某个值

    可以是数组,也可以是数组对象,看需求定义 let val = '' for (let i = 0; i < this.allData.length; i++) { if (this.days & ...

  6. CodeGym自学笔记04——什么是编译器?

    编译器 编程语言可以同时被人和编译器所理解.编译器是一个特殊的程序,它可将用编程语言编写的程序转换成一系列的机器代码. 程序员通常用编程语言来编写程序,然后运行编译器,将程序员编写的程序代码文件转换为 ...

  7. python获取上周的起始日期

    import datetime def get_date_of_last_week(form='%Y-%m-%d'): """ 获取上周开始结束日期 :param for ...

  8. 利用for循环同步执行异步方法

    //定义一个异步函数 const foo1 = (i) => { return new Promise((resolve, reject) => { setTimeout(() => ...

  9. (app笔记)如何执行monkey命令测试稳定性

    1.monkeyMonkey 就是SDK中附带的一个工具,向系统发送伪随机的用户事件流,为了测试软件的稳定性.健壮性,验证app是否出现ANR or Crush 操作: 2. adb devices ...

  10. jQuery-强大的jQuery选择器 (详解)

    jq除常用的选择写法之外的更多方法记录. 原文:jQuery-强大的jQuery选择器 (详解)[转] 1. 基础选择器 Basics 名称 说明 举例 #id 根据元素Id选择 $("di ...