梯度消失与爆炸的根本原因相关见解

前言

本文降从反向传播,BN,激活函数,残差网络的几个部分分析几种解决梯度消失的方案。

根本原因-反向传播过程

假设(假设每一层只有一个神经元且对于每一层 [公式],其中[公式]为sigmoid函数),如图
这里我们使用sigmoid,求导之后图像如下:
在这里插入图片描述
发现sigmoid函数求导后最大最大也只能是0.25。
再来看W,一般我们初始化权重参数W时,通常都小于1,用的最多的应该是0,1正态分布吧。对于:
[公式]
多个小于1的数连乘之后,那将会越来越小,导致靠近输入层的层的权重的偏导几乎为0,也就是说几乎不更新,这就是梯度消失的根本原因
说到这假设我们使用的不是sigmoid函数,如果出现:
在这里插入图片描述
连乘下来就会导致梯度过大,导致梯度更新幅度特别大,可能会溢出,导致模型无法收敛。sigmoid的函数是不可能大于1了,上图看的很清楚,那只能是w了。

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

RELU 激活函数

首先,我们来看一下ReLU激活函数的形式,如下图:
在这里插入图片描述
总结如下:

  1. ,ReLU函数其实是分段线性函数,把所有的负值都变为0,而正值不变,这种操作被成为单侧抑制
  2. 单侧抑制形成稀疏性
  3. 实现稀疏后的模型能够更好地挖掘相关特征,拟合训练数据
  4. 对于线性函数而言,ReLU的表达能力更强,尤其体现在深度网络中。
  5. 而对于非线性函数而言,ReLU由于非负区间的梯度为常数,因此不存在梯度消失问题(Vanishing Gradient Problem),使得模型的收敛速度维持在一个稳定状态。
  6. 由于负数部分恒为0,会导致一些神经元无法激活(可通过设置小学习率部分解决。
  7. 输出不是以0为中心的。

batchnorm

Batchnorm本质上是解决反向传播过程中的梯度问题,全名是batch normalization,简称BN,即批规范化,通过规范化操作将输出信号x规范化保证网络的稳定性。
BN的基本思想其实相当直观:因为深层神经网络在做非线性变换前的激活输入值(就是那个x=WU+B,U是输入)随着网络深度加深或者在训练过程中,其分布逐渐发生偏移或者变动,之所以训练收敛慢,一般是整体分布逐渐往非线性函数的取值区间的上下限两端靠近(对于Sigmoid函数来说,意味着激活输入值WU+B是大的负值或正值),所以这导致反向传播时低层神经网络的梯度消失,这是训练深层神经网络收敛越来越慢的本质原因,而BN就是通过一定的规范化手段,**把每层神经网络任意神经元这个输入值的分布强行拉回到均值为0方差为1的标准正态分布,**其实就是把越来越偏的分布强制拉回比较标准的分布,这样使得激活输入值落在非线性函数对输入比较敏感的区域,这样输入的小变化就会导致损失函数较大的变化,意思是这样让梯度变大,避免梯度消失问题产生,而且梯度变大意味着学习收敛速度快,能大大加快训练速度。

总结:

  1. 机器学习领域有个重要假设:IID独立同分布假设,就是假设训练数据和测试数据是满足相同分布的,这是通过训练数据获得的模型能够在测试集获得好的效果的一个基本保障。而BatchNorm就是在深度神经网络训练过程中使得每一层神经网络的输入保持相同分布。
  2. BN为了保证非线性的获得,对变换后的满足均值为0方差为1的x又进行了scale加上shift操作(y=scale*x+shift),每个神经元增加了两个参数scale和shift参数,这两个参数是通过训练学习到的,意思是通过scale和shift把这个值从标准正态分布左移或者由移一点并长胖一点或者变瘦一点,每个实例挪动的程度不一样,这样等价于非线性函数的值从正中心周围的线性区往非线性区动了动。核心思想应该是想找到一个线性和非线性的较好平衡点,既能享受非线性的较强表达能力的好处,又避免太靠非线性区两头使得网络收敛速度太慢
  3. BN 比较适用的场景是:每个 mini-batch 比较大,数据分布比较接近。在进行训练之前,要做好充分的 shuffle. 否则效果会差很多。
  4. LN的操作类似于将BN做了一个“转置”,对同一层网络的输出做一个标准化。注意,同一层的输出是单个图片的输出,比如对于一个batch为32的神经网络训练,会有32个均值和方差被得出,每个均值和方差都是由单个图片的所有channel之间做一个标准化。这么操作,就使得LN不受batch size的影响
  5. 还有一个叫做Weight Normalization的操作,和LN有着同样的特点。WN是在训练过程中,对网络参数进行标准化。这也是一个很神奇的操作。不过效果表现上,是被LN虐了。还不足以成为主流的标准化方法,所以在这里只是稍微提一下。
    在这里插入图片描述
    注:四种归一化的理解:
  • BatchNorm:batch方向做归一化,计算NHW的均值
  • LayerNorm:channel方向做归一化,计算CHW的均值
  • InstanceNorm:一个channel内做归一化,计算H*W的均值
  • GroupNorm:先将channel方向分group,然后每个group内做归一化,计算(C//G)HW的均值
  • GN与LN和IN有关,这两种标准化方法在训练循环(RNN / LSTM)或生成(GAN)模型方面特别成功。

残差网络

残差结构说起残差的话,不得不提这篇论文了:Deep Residual Learning for Image Recognition,关于这篇论文的解读,可以参考RESNET论文个人博客链接:https://blog.csdn.net/weixin_45232469/article/details/99068818
这里只简单介绍残差如何解决梯度的问题。
在这里插入图片描述
如图,把输入加入到某层中,这样求导时,总会有个1在,这样就不会梯度消失了。
在这里插入图片描述
小括号中的1表明短路机制可以无损地传播梯度,而另外一项残差梯度则需要经过带有weights的层,梯度不是直接传递过来的。残差梯度不会那么巧全为-1,而且就算其比较小,有1的存在也不会导致梯度消失。所以残差学习会更容易。

正则化

最后介绍L1和L2正则化用于梯度爆炸。详细可参考个人博客链接:https://blog.csdn.net/weixin_45232469/article/details/99420639
这里只做简单介绍:
正则化是通过对网络权重做正则限制过拟合,仔细看正则项在损失函数的形式:
Loss=(y−WTx)2+α||W||2
其中,α是指正则项系数,因此,如果发生梯度爆炸,权值的范数就会变的非常大,通过正则化项,可以部分限制梯度爆炸的发生。在实际训练过程中梯度消失的问题发生的比较多。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值