大家好,关于RNN为什么会梯度消失很多朋友都还不太明白,今天小编就来为大家分享关于RNN梯度消失与解决办法的知识,希望对各位有所帮助!
本文目录
RNN为什么会梯度消失
梯度消失/梯度爆炸的问题不仅仅是RNN有,而是深度神经网络所面临的问题。这里简单地介绍一下RNN和RNN梯度消失的原因。
RNNRNN是循环神经网络的英文缩写(也是递归神经网络的英文缩写)。
RNN模型如下图所示
展开后就是
RNN的损失贯穿一个序列中每一个元素,Wa,ba,Wy,by都是被共享的,所以交叉熵损失是
RNN的梯度消失当RNN处理长序列的时候,通常会出现梯度消失的问题。
让我们来借助一个例子处理这个问题。假设我们正在处理语言建模问题,尝试学习两个系列:
"Thecat,whichalreadyate........................,wasfull"
"Thecats,whichalreadyate........................,werefull"
这里我们需要学习的是,"was"搭配"cat","were"搭配"cats"。
普通的RNN会很难获得它们的关系。要计算单词"was",我们需要计算之后所有单词的梯度。
乘以分数往往会使梯度消失,而乘以大的数目会导致梯度爆炸。这时候有一些的权重可能没有被更新。正如深度网络一样,很容易发生梯度消失问题。
在深层网络(反向传播)中,想要计算前面(某一层)的权重,需要计算在它之后所有层的权重,这会导致梯度消失。处理长序列的RNN也会发生类似的问题。
RNN梯度消失/梯度爆炸的对策梯度爆炸的解决方案
截断反向传播。在反向的途中不更新所有权重,不是最佳的,所有权重都不更新。梯度裁剪。梯度消失问题的解决方案
权重初始化,比如HE初始化。回声状态网络(ECS)。使用LSTM/GRU网络。参考个人网站博客:https://www.soaringroad.com/result/category/DeepLearning.ai
最后根据所学的DeepLearning.ai发表一下见解,抛砖引玉,欢迎大家讨论。
神经网络中的梯度消失和梯度爆炸是如何解决的
神经网络中的梯度消失和梯度爆炸主要原因有三点:
1、神经网络层数加深;
目前,深度神经网络通过不断的构造出越来越深的网络,从而实现比浅层网络更为复杂多样的任务,比如深度卷积网络(CNN)用于图像分类,循环神经网络(RNN)用于自然语言处理。
2、反向传播的权重更新机制。
同时,现有的权重更新机制都是基于反向传播,也就是由损失函数得到的误差,通过链式求导来反向传播梯度,从末层向第一层逐层的更新和优化网络中的权重。这样就可以实现损失函数最小化的目标。这种寻优机制简单易懂,实现起来也十分便捷。
3、激活函数sigmoid的使用
为了使得神经网络能够有更强的表达能力,往往会在每层加入一个非线性的激活函数,而最经典的就是sigmoid函数。
sigmoid函数的导数
我们会发现sigmoid函数的导数最大只有0.25。那么在进行多层的反向传播中利用链式求导,就会将sigmoid导数累层计算。那么传到靠近输出层的时候,梯度就会变得很小,那么对权重更新的幅度就微乎其微,这就是梯度消失问题。梯度爆炸一般出现在深层网络和权值初始化值太大的情况下。这种梯度的不稳定就会使得,深层网络中不同层的学习速度差异很大,表现为在靠近输出层的学习效果好,而到了输入层则变得尤为缓慢。
目前已经出现了许多方法来防止在训练过程中出现梯度不稳定的问题。
1)如将sigmoid函数换成ReLU或者LeakReLU等激活函数。ReLU的导数,不是0就是1,因此就能很好的解决梯度消失的问题。
1)梯度截断。对于出现了梯度爆炸问题,可以对梯度的上限设定阈值,从而有效的避免梯度过大。
2)对权重进行合理的初始化。使每个神经元尽可能不要取极大或极小值,以躲开梯度消失的区域。如使用Xavier或MSRA初始化。
关于本次RNN为什么会梯度消失和RNN梯度消失与解决办法的问题分享到这里就结束了,如果解决了您的问题,我们非常高兴。
声明:本文内容来自互联网不代表本站观点,转载请注明出处:https://bk.77788889.com/11/88336.html