梯度消失、爆炸 简记

作者: madeirak | 来源:发表于2019-03-22 19:14 被阅读204次

    CNN

    梯度爆炸和梯度消失问题都是因为网络太深,网络权值更新不稳定造成的,本质上是因为梯度反向传播中的连乘效应。 

    梯度消失的重点就在于在BP中,链式乘法如何会出现激活函数的导数这一项,正因为这一项与权重的乘积的大于1或小于1,不断连乘,才出现了梯度的爆炸和消失。

    假设每一层一个神经元,用的是\sigma 激活函数

    由上图发现,\sigma 的导数的最大值是0.25,如果网络过深,出现过多的\sigma ’相乘之后就会使靠近输入端的层的参数梯度趋于0,出现梯度消失。类似的激活函数还有tanh,如下图所示,(tanh)’小于1。

    影响

    梯度消失造成的影响:会造成神经网络中浅层网络的参数梯度恒为0,参数无法更新。


    措施

    更换激活函数:可以考虑用relu激活函数取代\sigma 激活函数。因为relu在大于0部分,导数恒等于1。

                           relu 优点:解决了梯度消失、爆炸的问题 ; 

                                                 计算方便,计算速度快 ,加速了网络的训练 ; 

                                      缺点:由于负数部分为0,导致一些神经元无法激活(通过设置小学习率部分解决)                                                输出不是以0为中心的

    BatchNormalization:简称BN ,具有加速网络收敛速度,提升训练稳定性的效果,Batchnorm本质上是解决反向传播过程中的梯度问题。 BN通过规范化输入数据改变数据分布,在前传过程中消除梯度弥散。具体来说就是反向传播中,经过层之间时梯度会乘以权重\omega 。BN就是通过对每一层的输出规范为均值和方差一致的方法,消除了\omega 带来的放大缩小的影响,进而解决梯度消失和爆炸的问题,或者可以理解为BN将输出从饱和区拉倒了非饱和区。关于BatchNormalization的讨论

    梯度剪切:主要是针对梯度爆炸提出的,其思想是设置一个梯度剪切阈值,然后更新梯度的时候,如果梯度超过这个阈值,那么就将其强制限制在这个范围之内。这可以防止梯度爆炸。 

    残差连接:skip connection能在后传过程中更好地把梯度传到更浅的层次中。

    1、有人说是因为skip connection 直接映射下来的x反向传播时,求导为1,避免了梯度消失(那难道不会爆炸吗?)详解残差网络

    2、有人说其实是一种集成学习(ensemble),  为了佐证,作者进行如下验证。对普通的 VGG 网络,去掉任意一层,预测结果变成了随机的(~10%),完全不可用。这个结果非常符合预期。但是,对于 ResNet, 除了去年前面的 downsampling 会对性能造成较大的影响外,其他层的缺失对网络整体性能几乎没有影响。这一现象符合 ensemble 的假设——一个由多个基础模型构成的 ensemble 模型,不会因为某个模型的缺失而受到重大性能损害。  ensemble--Residual Network起作用的一种解释


    RNN

    RNN的时序结构决定了它存在梯度消失和爆炸的问题,本质上和DCNN相同,出现了(W_xx激活函数)项的累乘。避免措施是使用LSTM和GRU。具体参见文章:RNN梯度消失和爆炸的原因

    相关文章

      网友评论

        本文标题:梯度消失、爆炸 简记

        本文链接:https://www.haomeiwen.com/subject/wlbrvqtx.html