首先感谢https://i-blog.csdnimg.cn/blog_migrate/8598d1caf74bb2310533dd4f9810eace.png作者的文章,让我对LSTM有了初步的认识。
还有我要推荐李宏毅老师讲的LSTM课程,讲的实在是太容易理解了,https://www.youtube.com/watch?v=xCGidAeyS4M
理解RNN
想要理解LSTM的前提是理解RNN,RNN(Recurrent Neural Network)是一类用于处理序列数据的神经网络。RNN的典型应用就是NLP,自然语言就是一个时间序列数据,上下文之间存在着一定的联系。RNN 是包含循环的网络,允许信息的持久化。
有时候当前预测位置与上下文中的相关信息间隔较远,当相关信息和当前预测位置之间的间隔不断增大时,RNN 会丧失学习到连接如此远的信息的能力,LSTM对于这种情况却有很好的效果。
理解LSTM
Long Short Term 网络—— 一般就叫做 LSTM ——是一种 RNN 特殊的类型,可以学习长期依赖信息。
所有 RNN 都具有一种重复神经网络模块的链式的形式。在标准的 RNN 中,这个重复的模块只有一个非常简单的结构,例如一个 tanh
层。
LSTM 同样是这样的结构,但是重复的模块拥有一个不同的结构。不同于 单一神经网络层,这里是有四个,以一种非常特殊的方式进行交互。
门结构
LSTM 有通过“门”结构去除或增加信息到细胞状态的能力。门是一种让信息选择式通过的方法。他们包含一个 sigmoid
神经网络层和一个按位的乘法操作。下图就是这个门
Sigmoid 层输出 0到 1 之间的数值,描述每个部分有多少量可以通过。0代表“不许任何量通过”,1就指“允许任意量通过”!
第一步决定丢弃信息
在我们 LSTM 中的第一步是决定我们会从细胞状态中丢弃什么信息。这个决定通过一个称为忘记门层完成。该门会读取 和 ,输出一个在 0到 1之间的数值给每个在细胞状态 中的数字。1表示“完全保留”,0表示“完全舍弃”。
例如在nlp中,当我们看到新的主语,我们希望忘记旧的主语。
第二步决定更新的信息
下一步是确定什么样的新信息被存放在细胞状态中。这里包含两个部分。第一,sigmoid
层称 “输入门层” 决定什么值我们将要更新。然后,一个 tanh
层创建一个新的候选值向量,,会被加入到状态中。下一步,我们会讲这两个信息来产生对状态的更新。比如增加新的主语,来替代旧的需要忘记的主语。