我是靠谱客的博主 陶醉耳机,最近开发中收集的这篇文章主要介绍LSTM与梯度消失,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1. 标准RNN中处理序列数据的方法是将上一个state的信息传到下一个state中,表示成数学公式为st=f(W*(st-1,xt)+b),其中f为激活函数。在反向传播中,根据求导的链式法则,这种形式求得的梯度为一个矩阵W与激活函数导数的乘积。如果进行n次反向传播,梯度变化将会变为(W*f”)的n次方累乘。

(1)如果乘积大于1,则梯度会随着反向传播层数n的增加而成指数增长,导致梯度爆炸;

(2)如果乘积小于1,经过多层传播后,小于1的数累乘后结果趋近于0,导致梯度消失。

2. 现在的lstm主要用来缓解梯度消失问题,其中,St主要由两部分组成,表示过去信息的St-1和表示现在信息St(~),数学公式为St = ft*St-1+it*f(St-1)

其中第二input部分与标准RNN类似,在反向传播中可能会逐渐消失,而第一forget部分经过多次传播之后,会出现ft*ft-1*ft-2……这样的累乘,ft的大小是可选的,可以有效减轻梯度消失。

3. 梯度爆炸一般靠裁剪后的优化算法即可解决,比如gradient clipping(如果梯度的范数大于某个给定值,将梯度同比收缩)。

4. 关于lstm中的forget gate的理解:

(1)原始的lstm是没有forget gate的,或者说相当于forget gate恒为1,所以不存在梯度消失问题

(2)现在的lstm被引入了forget gate,但是lstm的一个初始化技巧就是将forget gate的bias置为正数(例如1或5,这点可以查看各大框架代码),这样模型刚开始训练时forget gate的值接近于1,不回发生梯度消失

(3)随着训练过程的进行,forget gate就不再恒为1了。不过对于一个已经训练好的模型,需要选择性地记住或者遗忘某些信息,所以forget gate要么是1,要么是0,很少有类似0.5这样的中间值,相当于一个二元的开关。例如在某个序列里,forget gate全为1,那么梯度不会消失;否则,若某一个forget gate是0,这时候虽然会导致梯度消失,但是体现了模型的选择性,刻意遗忘某些信息。

综上,lstm可以缓解梯度消失问题,但不能彻底避免。

 

 

 

 

 

 

 

最后

以上就是陶醉耳机为你收集整理的LSTM与梯度消失的全部内容,希望文章能够帮你解决LSTM与梯度消失所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(50)

评论列表共有 0 条评论

立即
投稿
返回
顶部