地球物理中的深度学习理论(DNN的架构、反向传播、梯度消失、梯度爆炸)

       新的数据驱动技术,即深度学习(DL)引起了广泛的关注。DL能准确预测复杂系统,缓解大型地球物理应用中“维数灾难”。在未来地球物理学中涉及到 DL 的研究提供了几个有希望的方向,例如无监督学习(聚类)、迁移学习(利用之前标记好的数据)、多模态 DL(通过DL实现和处理多元模态)、联邦学习、不确定性估计和主动学习。图 1 给出人工智能、机器学习、神经网络和深度学习之间的包含关系,以及深度学习方法的分类。

                                  地球物理中的深度学习理论(DNN的架构、反向传播、梯度消失、梯度爆炸)_第1张图片

                                                                           图 1

 1、简介

        勘探地球物理的主要过程包括预处理和成像。在地球物理信号预处理阶段,关于地下层形状的最简单假设是反射地震记录在小窗口中是线性的 。进一步的假设包括数据在某些变换下是稀疏的等。然而,预先设计的线性假设或稀疏变换假设等不适应不同类型的地震数据,可能导致具有复杂结构的数据去噪或插值质量低。在地球物理成像阶段可以预测地下结构,波动方程是控制地震波传播运动学和动力学的基本工具。然而,随着波动方程变得越来越复杂,方程的数值实现变得不平凡,使得计算成本显着增加。

       与传统的模型驱动方法不同,机器学习 (ML) 是一种数据驱动方法(如图 2),它通过基于训练数据集的复杂非线性映射(参数可调)来训练回归或分类模型。                           

地球物理中的深度学习理论(DNN的架构、反向传播、梯度消失、梯度爆炸)_第2张图片

                                                    图 2: 模型驱动和数据驱动方法的说明

       

       ML中的传统方法有逻辑回归、神经网络等;现代方法有:深度神经网络等。

       人工神经网络 (ANN) 是一种类似于人脑并由神经元层组成的回归或分类模型。具有不止一层ANN的网络称为深度神经网络(DNN)。 

2、深度学习理论

        在地球物理学中,大量的回归或分类任务可以简化为

                                                                    y=Lx,                                                          (1)    

其中 x 代表未知参数,y 代表我们部分知道的观测数据。L 通常是病态的或不可逆的,甚至是未知的。这是一个反问题,通常的反问题的解不是唯一的,故对于问题(1)的求解首先建立目标损失函数并带有附加约束,其次给定一个广泛的训练集,x与 y之间的映射是通过训练建立的。

       DL 将地球物理问题视为分类或回归问题。 F(DNN的架构) 用于从 y 逼近 x

x=F(y; \theta),

\theta 是 DNN 的参数集。 在分类任务中,x 表示类别的向量。\theta是通过在两个集合 X=\{x_i,i=1,\ldots,N\} 和  Y=\{y_i,i=1,\ldots,N\} (即标签和输入) 之间建立高维近似来获得的,通过最小化以下的损失函数来获得优化的: 

E(\theta;X,Y)= \sum_{i=1}^{N}\left \| x_i-F(y_i;\theta) \right \|_2^2

       如果 F 是可微的,则可以使用基于梯度的方法来优化 \theta。然而,在计算时涉及到一个很大的雅可比矩阵,使得它不适用于大规模数据集。故而提出了一种反向传播(但也存在一些缺点)的方法来计算。

         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

地球物理中的深度学习理论(DNN的架构、反向传播、梯度消失、梯度爆炸)_第3张图片

                                                                      图 4 :激活函数

 2.2 梯度消失和梯度爆炸问题

           在介绍梯度消失和爆炸问题时,我们先介绍一些基础内容:

       (1)关于\theta的优化 

         大家看到图 5 一定不陌生

图 5 

 这是典型的三层神经网络的基本构成,Layer L1是输入层,Layer L2、Layer L3是隐含层。其中

 h_{w,b}(x)=f(\sum w_ix_i+b_i).

       我们现在手里有一堆数据X=\{x_i,i=1,\ldots,N\}, 输出也是一堆数据 Y=\{y_i,i=1,\ldots,N\}, 现在要他们在隐含层做某种变换,让你把数据输进去后得到你期望的输出。如果你的输出和原始输入不一样,那么就是很常见的人工神经网络了,相当于让原始数据通过一个映射来得到我们想要的输出数据。根据前面的介绍,我们得知为了避免计算很大的雅可比矩阵,我们通常采取反向传播的方法。

       假设,你有这样一个网络层(图 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为例,如果我们想知道 \omega _5对整体误差产生了多少影响,可以用整体误差对w5求偏导求出(链式法则)。最后我们来更新 \omega _5

得到 \omega _5^+(其中 \eta 为学习速率)

\omega _5^+=\omega _5-\eta \frac{\partial E_{total}}{\partial \omega _5}.

同理,可更新其它的权值。

(详细计算步骤可以看:反向传播——通俗易懂_chengchaowei的博客-CSDN博客_反向传播)

       

     (2)sigmoid函数

        当激活函数为sigmoid函数,其数学表达式为

sigmoid(x)=\frac{1}{1+e^{-x}}

其导数图像为图 8 :

地球物理中的深度学习理论(DNN的架构、反向传播、梯度消失、梯度爆炸)_第4张图片

     图 8

我们可以看到其导数值不超过0.25。

       接下来就进入本节所要介绍的梯度消失和梯度爆炸问题:我们假设每一层只有一个神经元,如图 9 所示:

图 9

         h_1=f(x_0\omega _1+b_1),h_2=f(h_1\omega _2+b_2),\\ h_3=f(h_2\omega _3+b_3),h_4=f(h_3\omega _4+b_4),\\

                                                                L=loss(h_4,y).

假设求第二层的权重更新,则

                                                          \frac{\partial L }{\partial \omega_2}=\frac{\partial L }{\partial h_4}\frac{\partial h_4 }{\partial h_3}\frac{\partial h_3 }{\partial h_2}\frac{\partial h_2 }{\partial \omega_2}

初始化的网络权值通常都小于1,因此,当层数增多时,当激活函数 f 的导数小于1时,其不断相乘,最后就导致梯度消失的情况出现。同理,其实  

                                                      \frac{\partial h_{i+1} }{\partial h_{i}}=\frac{\partial f(h_i\omega _(i+1)+b_i) }{\partial (h_i\omega _(i+1)+b_i)}\omega _i

梯度爆炸的问题也就很明显了,就是当权值\left |\omega \right |过大时,导致\left | f' \omega \right |>1 ,最后大于1的值不断相乘,就会产生梯度爆炸。

        故而我们做出如下总结:梯度消失经常出现在以下两种情况:深层网络和不合适的损失函数(如 sigmoid 函数)。梯度爆炸经常出现在以下两种情况:深层网络和权值初始化太大。

   

         

你可能感兴趣的:(深度学习)