Respecting causality is all you need for training physics-informed neural networks
未发表
本篇工作时关于连续时间的PDE。也是从因果关系的角度入手,最近看过几篇该作者的工作。(简而言之就是从初始条件方向开始训练)
目前的PINN框架缺乏尊重物理系统演化所固有的时空因果结构。因此,作者提出PINNs损失函数的简单再表述来解决上述问题。并且这个函数可以在模型训练期间明确解释物理因果关系。并将它用作评估PINN收敛的一种机制。
首先,作者表明,目前的通过梯度下降训练连续时间的PINN,可能会隐含地偏向于在稍后的时间,甚至在解决初始条件之前就首先逼近PDE的解,这严重违反了时间因果关系。尤其当目标函数表现出对初始数据强烈的依赖性(混沌系统)时,就很容易失败。通过一个简单地例子描述一下:
one-dimensional Allen-Cahn equation
将边界条件作为硬约束。下图是作者的结果,经典的PINN无法处理好这个问题。
原始的PINN应该也可以求解,下图是我去原始PINN中找到的。
为什么PINN会失败呢?作者通过分析损失函数给出了解释。
一开始,定义一个时间残差损失,即在某个时间点,在该点的所有空间残差损失的平均。如下。
那么,PINN的总损失就可以写成
借助切线核理论,进一步离散损失,就可以得到下式。
离散后的损失告诉我们,如果我们想要最小化在某个时间点的时间残差损失,我们需要准确地预测该点的u和前一时刻的u,而在PINN的框架中,我们将对整个时空域内的u同时进行最小化。这就违反了时间因果关系,使得PINN的收敛性受到影响。只有在前一时刻PINN的模型得到好的优化的时候,小幅度后的PINN残差最小化才有意义。
根据下图,我们可以看到,原始PINN更容易关注远离初始条件的位置。
根据上述的观察,作者提出了PINN的因果训练,通过对损失函数的重新表述来使得PINN满足因果规律。具体地说,就是给每个时间残差损失前添加一个权重,如下。
作者希望,在ti被充分最小化前,它以及它之前时刻的权重都应该很大,它们之后的权重要很小。通过下式的权重选择实现这个目标。
那么总损失就可以写成
这就可以从时间小的开始训练。当时我的疑惑是:网络收敛会很难吧。当优化到中间时,如果前面有学不好了,那么网络就会重新训练前面,会导致收敛上的困难吧?需要去调参设计吧,后面作者使用退火算法来解决。
可以看到改进后可以找到正确的解了。
并且,根据下图,还可以发现一个规律。训练刚开始的时候,除了0时刻,其余时刻权重全是0。也就是网络先学习初始条件附近的。随着训练的进行,权重会逐渐的释放,并且终会收敛到1。
这就可以为训练PINN提供收敛标准,当所有权重趋于1时,PINN训练完成。实际中可以人为选取一个小于1的阈值来停止训练。停止条件如下。
关于因果参数的敏感性,也就是我上面的疑惑,作者做了消融。发现因果参数太小的会阻止网络有效最小化后面的时间残差,太大会导致训练困难。因为前面的时间残差要充分小才能激活后面的时间权重。所以作者使用一组递增因果参数进行训练,虽然会导致计算量的增加,但是避免了人工干预的繁琐。此外作者还提出了一个改进的MLP结构,具体的解释将在另一篇论文中,暂时还没有去看。
实验结果如下
实验结果还是很好的,有效的解决了远离初始位置训练不好的问题。
Respecting causality is all you need for training physics-informed neural networks的更多相关文章
- [Xavier] Understanding the difficulty of training deep feedforward neural networks
目录 概 主要内容 Glorot X, Bengio Y. Understanding the difficulty of training deep feedforward neural netwo ...
- Xavier——Understanding the difficulty of training deep feedforward neural networks
1. 摘要 本文尝试解释为什么在深度的神经网络中随机初始化会让梯度下降表现很差,并且在此基础上来帮助设计更好的算法. 作者发现 sigmoid 函数不适合深度网络,在这种情况下,随机初始化参数会让较深 ...
- Understanding the difficulty of training deep feedforward neural networks
本文作者为:Xavier Glorot与Yoshua Bengio. 本文干了点什么呢? 第一步:探索了不同的激活函数对网络的影响(包括:sigmoid函数,双曲正切函数和softsign y = x ...
- MLHPC 2018 | Aluminum: An Asynchronous, GPU-Aware Communication Library Optimized for Large-Scale Training of Deep Neural Networks on HPC Systems
这篇文章主要介绍了一个名为Aluminum通信库,在这个库中主要针对Allreduce做了一些关于计算通信重叠以及针对延迟的优化,以加速分布式深度学习训练过程. 分布式训练的通信需求 通信何时发生 一 ...
- Aluminum: An Asynchronous, GPU-Aware Communication Library Optimized for Large-Scale Training of Deep Neural Networks on HPC Systems
本文发表在MLHPC 2018上,主要介绍了一个名为Aluminum通信库,这个库针对Allreduce做了一些关于计算通信重叠以及针对延迟的优化,以加速分布式深度学习训练过程. 分布式训练的通信需求 ...
- MLHPC 2016 | Communication Quantization for Data-parallel Training of Deep Neural Networks
本文主要研究HPC上进行数据并行训练的可行性.作者首先在HPC上实现了两种通信量化算法(1 Bit SGD以及阈值量化),然后提出了自适应量化算法以解决它们的缺点.此外,发挥出量化算法的性能,作者还自 ...
- Training Deep Neural Networks
http://handong1587.github.io/deep_learning/2015/10/09/training-dnn.html //转载于 Training Deep Neural ...
- [Converge] Training Neural Networks
CS231n Winter 2016: Lecture 5: Neural Networks Part 2 CS231n Winter 2016: Lecture 6: Neural Networks ...
- 阅读笔记 The Impact of Imbalanced Training Data for Convolutional Neural Networks [DegreeProject2015] 数据分析型
The Impact of Imbalanced Training Data for Convolutional Neural Networks Paulina Hensman and David M ...
- [CS231n-CNN] Training Neural Networks Part 1 : activation functions, weight initialization, gradient flow, batch normalization | babysitting the learning process, hyperparameter optimization
课程主页:http://cs231n.stanford.edu/ Introduction to neural networks -Training Neural Network ________ ...
随机推荐
- ubuntu 启动脚本变化
ubuntu-16.10 开始不再使用initd管理系统,改用systemd- 快速看了 systemd 的使用方法,发现改动有点大, 包括用 systemctl 命令来替换了 service 和 c ...
- 利用自定义ref实现防抖
1. debounce.js import { customRef } from 'vue'; export function debounceRef(value, delay = 1000) { l ...
- bzoj5000+的洛谷题号
前言 闲得没事把 bzoj5000+ 在 Luogu 上可找到的题面整理了一下-- 对于我,bzoj 连账号都没有,所以肯定是不清楚 bzoj 题目总数的--因此其实就是手动翻查. 工作量很大,基本不 ...
- 00.IDEA的使用
1.IDEA的必备常用快捷键 复制本行到下一行:ctrl D 删除一行代码:ctrl Y 替换文本:ctrl R 根据光标放的位置提供快速修复选择:Alt + Enter 生成返回值:ctrl alt ...
- datagridview 标题设置背景图片
private void dgvCaozuoList_CellPainting(object sender, DataGridViewCellPaintingEventArgs e) { if (e. ...
- MyFreeMarkerConfigurer
public class MyFreeMarkerConfigurer extends FreeMarkerConfigurer { @Override public void afterProper ...
- vscode 中用git命令合并分支
操作:主分支master的代码合并到当前分支wz 操作之前,两个分支的内容都要拉取最新的代码 命令为 git pull origin master git pull origin wz 或者vs内直接 ...
- ABAP 写入批次特征值以及更新批次特征值
需求 SAP启用了批次,需要在特征值中写入物料类型,区分该物料批次是用于研发的亦或是量产的,关于研发和量产标识我是坐在采购订单行项目增强中了,这里就不多赘述了,参考https://www.cnblog ...
- Oracle备份脚本(数据泵)-Windows平台
将以下内容根据自己想要备份的库修改后保存为expdp.bat,加入到计划任务中 set NLS_LANG=AMERICAN_AMERICA.AL32UTF8set filename=%date:~0, ...
- (python笔记)python使用JS定位css元素
from selenium import webdriver from selenium.webdriver.common.keys import Keys import time import da ...