梯度弥散与梯度爆炸及其解决方法

      梯度弥散(梯度消失): 通常神经网络所用的激活函数是sigmoid函数,sigmod函数容易引起梯度弥散。这个函数能将负无穷到正无穷的数映射到0和1之间,并且对这个函数求导的结果是f′(x)=f(x)(1−f(x))f′(x)=f(x)(1−f(x))表示两个0到1之间的数相乘,得到的结果就会变得很小了。神经网络的反向传播是逐层对函数偏导相乘,因此当神经网络层数非常深的时候,最后一层产生的偏差就因为乘了很多的小于1的数而越来越小,最终就会变为0,从而导致层数比较浅的权重没有更新,这就是梯度消失。

     梯度爆炸:就是由于初始化权值过大,前面层会比后面层变化的更快,就会导致权值越来越大,梯度爆炸的现象就发生了。

     反向传播基于的是链式求导法则。如果导数小于1,那么随着层数的增多,梯度的更新量会以指数形式衰减,结果就是越靠近输出层的网络层参数更新比较正常,而靠近输入层的网络层参数可能基本就不更新。这就是梯度消失。而如果导数值大于1,那么由于链式法则的连乘,梯度更新量是会成指数级增长的。这就是梯度爆炸。

 

转载:详解机器学习中的梯度消失、爆炸原因及其解决方法

引用:https://blog.csdn.net/qq_25737169/article/details/78847691

梯度消失、爆炸的解决方案

方案1-预训练加微调
       此方法来自Hinton在2006年发表的一篇论文,Hinton为了解决梯度的问题,提出采取无监督逐层训练方法,其基本思想是每次训练一层隐节点,训练时将上一层隐节点的输出作为输入,而本层隐节点的输出作为下一层隐节点的输入,此过程就是逐层“预训练”(pre-training);在预训练完成后,再对整个网络进行“微调”(fine-tunning)。Hinton在训练深度信念网络(Deep Belief Networks中,使用了这个方法,在各层预训练完成后,再利用BP算法对整个网络进行训练。此思想相当于是先寻找局部最优,然后整合起来寻找全局最优,此方法有一定的好处,但是目前应用的不是很多了。

方案2 梯度剪切、正则
      梯度剪切这个方案主要是针对梯度爆炸提出的,其思想是设置一个梯度剪切阈值,然后更新梯度的时候,如果梯度超过这个阈值,那么就将其强制限制在这个范围之内。这可以防止梯度爆炸。
另外一种解决梯度爆炸的手段是采用权重正则化(weithts regularization)比较常见的是l1 l1l1正则,和l2 l2l2正则,在各个深度框架中都有相应的API可以使用正则化,比如在tensorflow tensorflowtensorflow中,若搭建网络的时候已经设置了正则化参数,

方案3  relu、leakrelu、elu等激活函数

方案4  batchnorm
Batchnorm是深度学习发展以来提出的最重要的成果之一了,目前已经被广泛的应用到了各大网络中,具有加速网络收敛速度,提升训练稳定性的效果,Batchnorm本质上是解决反向传播过程中的梯度问题。

batchnorm全名是batchnormalization,简称BN,即批规范化,通过规范化操作将输出信号x规范化保证网络的稳定性。
具体的batchnorm原理非常复杂,在这里不做详细展开
http://blog.csdn.net/qq_25737169/article/details/79048516

方案5  残差网络

      论文:Deep Residual Learning for Image Recognition

      关于这篇论文的解读可以参考知乎链接:https://zhuanlan.zhihu.com/p/31852747

 

 

你可能感兴趣的:(机器学习,深度学习,梯度弥散,梯度爆炸)