新的数据驱动技术,即深度学习(DL)引起了广泛的关注。DL能准确预测复杂系统,缓解大型地球物理应用中“维数灾难”。在未来地球物理学中涉及到 DL 的研究提供了几个有希望的方向,例如无监督学习(聚类)、迁移学习(利用之前标记好的数据)、多模态 DL(通过DL实现和处理多元模态)、联邦学习、不确定性估计和主动学习。图 1 给出人工智能、机器学习、神经网络和深度学习之间的包含关系,以及深度学习方法的分类。
图 1
1、简介
勘探地球物理的主要过程包括预处理和成像。在地球物理信号预处理阶段,关于地下层形状的最简单假设是反射地震记录在小窗口中是线性的 。进一步的假设包括数据在某些变换下是稀疏的等。然而,预先设计的线性假设或稀疏变换假设等不适应不同类型的地震数据,可能导致具有复杂结构的数据去噪或插值质量低。在地球物理成像阶段可以预测地下结构,波动方程是控制地震波传播运动学和动力学的基本工具。然而,随着波动方程变得越来越复杂,方程的数值实现变得不平凡,使得计算成本显着增加。
与传统的模型驱动方法不同,机器学习 (ML) 是一种数据驱动方法(如图 2),它通过基于训练数据集的复杂非线性映射(参数可调)来训练回归或分类模型。
图 2: 模型驱动和数据驱动方法的说明
ML中的传统方法有逻辑回归、神经网络等;现代方法有:深度神经网络等。
人工神经网络 (ANN) 是一种类似于人脑并由神经元层组成的回归或分类模型。具有不止一层ANN的网络称为深度神经网络(DNN)。
2、深度学习理论
在地球物理学中,大量的回归或分类任务可以简化为
, (1)
其中 代表未知参数, 代表我们部分知道的观测数据。 通常是病态的或不可逆的,甚至是未知的。这是一个反问题,通常的反问题的解不是唯一的,故对于问题(1)的求解首先建立目标损失函数并带有附加约束,其次给定一个广泛的训练集,与 之间的映射是通过训练建立的。
DL 将地球物理问题视为分类或回归问题。 (DNN的架构) 用于从 逼近
是 DNN 的参数集。 在分类任务中, 表示类别的向量。是通过在两个集合 和 (即标签和输入) 之间建立高维近似来获得的,通过最小化以下的损失函数来获得优化的:
如果 是可微的,则可以使用基于梯度的方法来优化 。然而,在计算时涉及到一个很大的雅可比矩阵,使得它不适用于大规模数据集。故而提出了一种反向传播(但也存在一些缺点)的方法来计算。
DL 可以看作是从数据空间到特征空间或目标空间的超高维非线性映射,其中非线性映射由 DNN 表示。
2.1 DNN的架构
DL 的关键组件是训练集、网络架构和参数优化。 DNN 的架构在不同的应用中有所不同。几种常用的架构有全连接神经网络(FCNN)、卷积神经网络 (CNN)、U-Nets 等。下面就FCNN做出具体的介绍:
FCNN(图 3 )是由全连接层组成的 ANN,其中一层的输入连接到下一层的每个神经元。在一个神经元中通过非线性激活函数 f 对输入进行加权求和。 DL 中的 f 一般是ReLU、sigmoid 或 tanh 函数,如图 4 所示。 FCNN 中的层数越多对模型的拟合和泛化能力有显著影响,然而,由于可用硬件的计算能力、优化过程中的梯度消失和梯度爆炸问题等,FCNN 被限制在几层。(随着硬件和优化算法的发展,ANN 趋向于变得更深。)另一方面,原始数据集如果直接进入 FCNN 的输入,则需要大量参数。故 FCNN 需要预先选择特征作为神经网络的输入,但这个完全依赖于经验,并且完全忽略了输入的结构。为了解决这个问题,研究者提出了自动特征选择算法,但仍需要大量计算资源。
图 3:FCNN
图 4 :激活函数
2.2 梯度消失和梯度爆炸问题
在介绍梯度消失和爆炸问题时,我们先介绍一些基础内容:
(1)关于的优化
大家看到图 5 一定不陌生
图 5
这是典型的三层神经网络的基本构成,Layer L1是输入层,Layer L2、Layer L3是隐含层。其中
.
我们现在手里有一堆数据, 输出也是一堆数据 , 现在要他们在隐含层做某种变换,让你把数据输进去后得到你期望的输出。如果你的输出和原始输入不一样,那么就是很常见的人工神经网络了,相当于让原始数据通过一个映射来得到我们想要的输出数据。根据前面的介绍,我们得知为了避免计算很大的雅可比矩阵,我们通常采取反向传播的方法。
假设,你有这样一个网络层(图 6 ):
图 6
第一层是输入层,包含两个神经元i1,i2,和截距项b1;第二层是隐含层,包含两个神经元h1,h2和截距项b2,第三层是输出o1,o2,每条线上标的wi是层与层之间连接的权重,激活函数我们选择sigmoid函数。
现在对他们赋上初值,如图 7 :
图 7
其中,输入数据 i1=0.05,i2=0.10;
输出数据 o1=0.01,o2=0.99;
初始权重 w1=0.15,w2=0.20,w3=0.25,w4=0.30;
w5=0.40,w6=0.45,w7=0.50,w8=0.55。
目标:给出输入数据i1,i2(0.05和0.10),使输出尽可能与原始输出o1,o2(0.01,0.99)接近。
Step 1 前向传播:输入层---->隐含层:按照之前的介绍,我们得到输出值为[0.75136079 , 0.772928465],与实际值[0.01 , 0.99]相差还很远,现在我们对误差进行反向传播,更新权值,重新计算输出。
Step 2 反向传播:1.计算总误差。
2.隐含层---->输出层的权值更新:以权重参数w5为例,如果我们想知道 对整体误差产生了多少影响,可以用整体误差对w5求偏导求出(链式法则)。最后我们来更新
得到 (其中 为学习速率)
.
同理,可更新其它的权值。
(详细计算步骤可以看:反向传播——通俗易懂_chengchaowei的博客-CSDN博客_反向传播)
(2)sigmoid函数
当激活函数为sigmoid函数,其数学表达式为
其导数图像为图 8 :
图 8
我们可以看到其导数值不超过0.25。
接下来就进入本节所要介绍的梯度消失和梯度爆炸问题:我们假设每一层只有一个神经元,如图 9 所示:
图 9
假设求第二层的权重更新,则
初始化的网络权值通常都小于1,因此,当层数增多时,当激活函数 的导数小于1时,其不断相乘,最后就导致梯度消失的情况出现。同理,其实
梯度爆炸的问题也就很明显了,就是当权值过大时,导致 ,最后大于1的值不断相乘,就会产生梯度爆炸。
故而我们做出如下总结:梯度消失经常出现在以下两种情况:深层网络和不合适的损失函数(如 sigmoid 函数)。梯度爆炸经常出现在以下两种情况:深层网络和权值初始化太大。