美文网首页人工智能我爱编程
神经网络中的梯度爆炸和梯度消失

神经网络中的梯度爆炸和梯度消失

作者: 3b899188980c | 来源:发表于2018-04-13 13:45 被阅读101次

两种情况下梯度消失经常出现,一是在深层网络中,二是采用了不合适的损失函数,比如sigmoid。梯度爆炸一般出现在深层网络和权值初始化值太大的情况下,下面分别从这两个角度分析梯度消失和爆炸的原因。

深层网络原因:


ps:截图来自https://blog.csdn.net/qq_25737169/article/details/78847691

总结:从深层网络角度来讲,不同的层学习的速度差异很大,表现为网络中靠近输出的层学习的情况很好,靠近输入的层学习的很慢,有时甚至训练了很久,前几层的权值和刚开始随机初始化的值差不多。因此,梯度消失、爆炸,其根本原因在于反向传播训练法则,属于先天不足,另外多说一句,Hinton提出capsule的原因就是为了彻底抛弃反向传播,如果真能大范围普及,那真是一个革命。

激活函数原因:

其实也注意到了,上文中提到计算权值更新信息的时候需要计算前层偏导信息,因此如果激活函数选择不合适,比如使用sigmoid,梯度消失就会很明显了,原因看下图,左图是sigmoid的损失函数图,右边是其倒数的图像,如果使用sigmoid作为损失函数,其梯度是不可能超过0.25的,这样经过链式求导之后,很容易发生梯度消失


同理,tanh作为损失函数,它的导数图如下,可以看出,tanh比sigmoid要好一些,但是它的倒数仍然是小于1的。

在这里就不得不提一下我们用得比较多的激励函数啦,上面的两类激励函数或多或少都会引起梯度爆炸,尤其是在网络结构越来越深的情况呀。那样什么样的激励函数能够避免这样的情况呢,这边我先引两个激励函数,之后的激励函数会再做一篇博客详细介绍

ReLu函数



Maxout函数


几种解决梯度爆炸和消失的方法

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

2、另外一种解决梯度爆炸的手段是采用权重正则化(weithts regularization)比较常见的是l1正则,和l2正则,在各个深度框架中都有相应的API可以使用正则化,比如在tensorflow中,若搭建网络的时候已经设置了正则化参数

3、使用我上面提到的两个激活函数

4、Batchnorm是深度学习发展以来提出的最重要的成果之一了,目前已经被广泛的应用到了各大网络中,具有加速网络收敛速度,提升训练稳定性的效果,Batchnorm本质上是解决反向传播过程中的梯度问题。batchnorm全名是batch normalization,简称BN,即批规范化,通过规范化操作将输出信号x规范化到均值为0,方差为1保证网络的稳定性。

(未完待续……)

相关文章

网友评论

    本文标题:神经网络中的梯度爆炸和梯度消失

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