CNN
假设每一层一个神经元,用的是激活函数梯度爆炸和梯度消失问题都是因为网络太深,网络权值更新不稳定造成的,本质上是因为梯度反向传播中的连乘效应。
梯度消失的重点就在于在BP中,链式乘法如何会出现激活函数的导数这一项,正因为这一项与权重的乘积的大于1或小于1,不断连乘,才出现了梯度的爆炸和消失。
由上图发现,的导数的最大值是0.25,如果网络过深,出现过多的相乘之后就会使靠近输入端的层的参数梯度趋于0,出现梯度消失。类似的激活函数还有,如下图所示,小于1。
影响
梯度消失造成的影响:会造成神经网络中浅层网络的参数梯度恒为0,参数无法更新。
措施
更换激活函数:可以考虑用激活函数取代激活函数。因为在大于0部分,导数恒等于1。
优点:解决了梯度消失、爆炸的问题 ;
计算方便,计算速度快 ,加速了网络的训练 ;
缺点:由于负数部分为0,导致一些神经元无法激活(通过设置小学习率部分解决) 输出不是以0为中心的
BatchNormalization:简称BN ,具有加速网络收敛速度,提升训练稳定性的效果,Batchnorm本质上是解决反向传播过程中的梯度问题。 BN通过规范化输入数据改变数据分布,在前传过程中消除梯度弥散。具体来说就是反向传播中,经过层之间时梯度会乘以权重。BN就是通过对每一层的输出规范为均值和方差一致的方法,消除了带来的放大缩小的影响,进而解决梯度消失和爆炸的问题,或者可以理解为BN将输出从饱和区拉倒了非饱和区。关于BatchNormalization的讨论
梯度剪切:主要是针对梯度爆炸提出的,其思想是设置一个梯度剪切阈值,然后更新梯度的时候,如果梯度超过这个阈值,那么就将其强制限制在这个范围之内。这可以防止梯度爆炸。
残差连接:skip connection能在后传过程中更好地把梯度传到更浅的层次中。
1、有人说是因为skip connection 直接映射下来的x反向传播时,求导为1,避免了梯度消失(那难道不会爆炸吗?)详解残差网络
2、有人说其实是一种集成学习(ensemble), 为了佐证,作者进行如下验证。对普通的 VGG 网络,去掉任意一层,预测结果变成了随机的(~10%),完全不可用。这个结果非常符合预期。但是,对于 ResNet, 除了去年前面的 downsampling 会对性能造成较大的影响外,其他层的缺失对网络整体性能几乎没有影响。这一现象符合 ensemble 的假设——一个由多个基础模型构成的 ensemble 模型,不会因为某个模型的缺失而受到重大性能损害。 ensemble--Residual Network起作用的一种解释
RNN
RNN的时序结构决定了它存在梯度消失和爆炸的问题,本质上和DCNN相同,出现了(x激活函数)项的累乘。避免措施是使用LSTM和GRU。具体参见文章:RNN梯度消失和爆炸的原因
网友评论