深度学习中“消失的梯度”

简介: 在上图中,神经元上的条可以理解为神经元的学习速率。这个网络是经过随机初始化的,但是从上图不难发现,第二层神经元上的条都要大于第一层对应神经元上的条,即第二层神经元的学习速率大于第一层神经元学习速率。那这可不可能是个巧合呢?其实不是的,在书中,Nielsen通过实验说明这种现象是普遍存在的。

最近已经没有存货了,抽时间看了Nielsen的《Neural Networks and Deep Learning》感觉小有收获,分享给大家,就当是一点个人的随笔。  


了解深度学习的同学可能知道,目前深度学习面临的一个问题就是在网络训练的过程中存在梯度消失问题(vanishing gradient problem),或者更广义地来讲就是不稳定梯度问题。那么到底什么是梯度消失呢?这个问题又是如何导致的呢?这就是本文要分享的内容。


1. 消失的梯度


  首先,我们将一个网络在初始化之后在训练初期的结果可视化如下:


640.png


  在上图中,神经元上的条可以理解为神经元的学习速率。这个网络是经过随机初始化的,但是从上图不难发现,第二层神经元上的条都要大于第一层对应神经元上的条,即第二层神经元的学习速率大于第一层神经元学习速率。那这可不可能是个巧合呢?其实不是的,在书中,Nielsen通过实验说明这种现象是普遍存在的。  


我们再来看下对于一个具有四个隐层的神经网络,各隐藏层的学习速率曲线如下:


640.png


  可以看出,第一层的学习速度和最后一层要差两个数量级,也就是比第四层慢了100倍。 实际上,这个问题是可以避免的,尽管替代方法并不是那么有效,同样会产生问题——在前面的层中的梯度会变得非常大!这也叫做激增的梯度问题(exploding gradient problem),这也没有比消失的梯度问题更好处理。更加一般地说,在深度神经网络中的梯度是不稳定的,在前面的层中或会消失,或会激增,这种不稳定性才是深度神经网络中基于梯度学习的根本原因。


2. 什么导致了梯度消失?


  为了弄清楚为何会出现消失的梯度,来看看一个极简单的深度神经网络:每一层都只有一个单一的神经元。下面就是有三层隐藏层的神经网络:


640.png


  我们把梯度的整个表达式写出来:


image.png


为了理解每个项的行为,先看下sigmoid函数导数的曲线:


640.png


该导数在image.png时达到最高。现在,如果我们使用标准方法来初始化网络中的权重,那么会使用一个均值为0标准差为1的高斯分布。因此所有的权重通常会满足 image.png。有了这些信息,我们发现会有image.png并且在进行所有这些项的乘积时,最终结果肯定会指数级下降:项越多,乘积的下降也就越快。


  下面我们从公式上比较一下第三层和第一层神经元的学习速率:


640.png


image.png


3. 梯度激增问题


举个例子说明下:


 首先,我们将网络的权重设置得很大,比如


image.png


然后,我们选择偏置使得σ′(zj)项不会太小。这是很容易实现的:方法就是选择偏置来保证每个神经元的带权输入是image.png(这样image.png。比如说,我们希望image.png,我们只需要把image.png即可。我们使用相同的方法来获取其他的偏置。这样我们可以发现所有的项image.png。最终,我们获得了激增的梯度。


4. 不稳定的梯度问题


  不稳定的梯度问题:根本的问题其实并非是消失的梯度问题或者激增的梯度问题,而是在前面的层上的梯度是来自后面的层上项的乘积。当存在过多的层次时,就出现了内在本质上的不稳定场景。唯一让所有层都接近相同的学习速度的方式是所有这些项的乘积都能得到一种平衡。如果没有某种机制或者更加本质的保证来达成平衡,那网络就很容易不稳定了。简而言之,真实的问题就是神经网络受限于不稳定梯度的问题。所以,如果我们使用标准的基于梯度的学习算法,在网络中的不同层会出现按照不同学习速度学习的情况。


5. 参考文献


  1. Michael Nielsen,《Neural Networks and Deep Learning》

相关文章
|
24天前
|
机器学习/深度学习 人工智能 分布式计算
R和Python机器学习:广义线性回归glm,样条glm,梯度增强,随机森林和深度学习模型分析
R和Python机器学习:广义线性回归glm,样条glm,梯度增强,随机森林和深度学习模型分析
|
2月前
|
机器学习/深度学习 资源调度 算法
深度学习模型数值稳定性——梯度衰减和梯度爆炸的说明
深度学习模型数值稳定性——梯度衰减和梯度爆炸的说明
22 0
|
9月前
|
机器学习/深度学习 自然语言处理 算法
TabR:检索增强能否让深度学习在表格数据上超过梯度增强模型?
这是一篇7月新发布的论文,他提出了使用自然语言处理的检索增强*Retrieval Augmented*技术,目的是让深度学习在表格数据上超过梯度增强模型。
99 0
|
12月前
|
机器学习/深度学习 人工智能 算法
具有生物启发训练方法的物理深度学习:物理硬件的无梯度方法
具有生物启发训练方法的物理深度学习:物理硬件的无梯度方法
437 0
|
12月前
|
机器学习/深度学习 人工智能
做时间序列预测有必要用深度学习吗?事实证明,梯度提升回归树媲美甚至超越多个DNN模型
做时间序列预测有必要用深度学习吗?事实证明,梯度提升回归树媲美甚至超越多个DNN模型
192 0
|
12月前
|
机器学习/深度学习 算法
深度学习相关概念:动量法与自适应梯度
在梯度下降的每一步中,我们都用到了所有的训练样本,我们需要进行求和运算,在梯度下降中,在计算微积随机梯度下降(SGD)
126 0
|
机器学习/深度学习 数据挖掘 PyTorch
# 【深度学习】:《PyTorch入门到项目实战》第10天:梯度爆炸、梯度消失、梯度检验
训练神经网络时,尤其是深度神经网络所面临的一个重要问题就是梯度爆炸或梯度消失,也就是我们训练神经网络的时候,导数或梯度有时会变得非常大,或者非常小,甚至于以指数方式变小,这加大了训练的难度。接下来我们介绍一些什么是梯度爆炸和梯度消失。
# 【深度学习】:《PyTorch入门到项目实战》第10天:梯度爆炸、梯度消失、梯度检验
|
机器学习/深度学习 算法 Python
深度学习入门(3)神经网络参数梯度的计算方式
深度学习入门(3)神经网络参数梯度的计算方式
深度学习入门(3)神经网络参数梯度的计算方式
|
机器学习/深度学习 PyTorch 算法框架/工具
【从零开始学习深度学习】2. 深度学习框架Pytorch如何自动求梯度(gradient)
【从零开始学习深度学习】2. 深度学习框架Pytorch如何自动求梯度(gradient)
【从零开始学习深度学习】2. 深度学习框架Pytorch如何自动求梯度(gradient)
|
机器学习/深度学习
【深度学习】7-矩阵乘法运算的反向传播求梯度
【深度学习】7-矩阵乘法运算的反向传播求梯度
448 0
【深度学习】7-矩阵乘法运算的反向传播求梯度