1、梯度消失的产生原因

使用sigmoid函数作为激活函数时,靠近输出层的梯度较大,更新较快;靠近输入层的梯度较小,更新较慢。因此当靠近输出层的梯度更新完成时,靠近输入层的权重未得到充分更新,仍保持几乎随机的状态。

靠近输入层的函数梯度小的原因:

\frac{\partial l}{\partial w} \approx \frac{\Delta l}{\Delta w} 

偏导约等于变化量的比值,当激活函数是sigmoid函数时,输入变化量很大,所对应输出的变化量却很小。如此从最后的梯度向前依次传递,离输出很远的部分梯度变化很小,难以更新。

2、梯度消失的解决方法——改变激活函数

(1)ReLU函数:线性模型

优点:计算量小,只要一个阈值比较;生物学原因;没有梯度消失,收敛速度快

缺点:ReLU的输出不是zero-centered;

            Dead  ReLU  Problem(神经元坏死现象):某些神经元可能永远不会被激活,导致相应参数永远不会被更新(在负数部    分,梯度为0)。产生这种现象的两个原因:参数初始化问题;learning  rate太高导致在训练过程中参数更新太大。 解决方法:采用Xavier初始化方法,以及避免将learning  rate设置太大或使用adagrad等自动调节learning  rate的算法。

            ReLU不会对数据做幅度压缩,所以数据的幅度会随着模型层数的增加不断扩张。

(2)Leaky ReLU

f(x)=max(0.01x,x)

解决神经元坏死现象,但效果不一定比ReLU好。

(3)Maxout(ReLU是Maxout的特例,即neuron中另一套参数为0的特殊情况。)

 

Maxout是可学习的激活函数,neuron内可以自定义个元素。从多套参数中选出一个使神经元输出最大的参数作为本次训练的参数,对于不同的输入,激活的单元不同。因此虽然对每个样本来说该激活函数是线性的,但对总体而言模型是非线性的。因此该激活函数最主要的缺点是参数量很大。

Maxout函数示意图:neuron中有几个元素其激活函数就有几折线。

 

 

 

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐