有一定神经网络基础的建议直接阅读原文即可,该篇说明主要翻译来自该文章,目的是为LSTM-DSSM模型的理解做简易说明。
原文地址:https://colah.github.io/posts/2015-08-Understanding-LSTMs/
RNN(Recurrent Neural Networks)的两点在于他有loops,他的结构如下:
首先,对一些字母进行说明,x是输入,h是输出。该结构是一个x对应一个h,当然还有多x,对应一个h,应结合具体需求场景进行神经网络结构构造。
当x的序列增加时,RNN会逐渐丧失学习到远距离信息的能力,因为在训练神经网络参数的时候,使用的是BP算法,用到求导的链式法则,这就导致梯度被表示为连乘的形式,以至于梯度消失(小于1的数连乘趋于0),所以RNN学不到远距离的信息。
因此,LSTM(Long Short Term Memory Networks)应运而生。LSTM具有使得信息通过与否的能力,这个能力是通过gate的操作来控制。gate由一个sigmoid层和矩阵逐点乘法,这两个操作所组成。因为sigmoid的取值范围在[0,1]之间,也就可以表示信息传递的多少。具体图示如下图所示:
下面来逐步解析LSTM的结构,在LSTM中主要包括以下几步:
第一要判断是否抛弃信息(cell state),那么就有结构称为:foget gate layer(ft),由一个sigmoid层组成,它利用了ht-1和xt的信息。
接着,要决定要存储什么新的信息,这由两部分组成。首先是一个sigmoid层,称为input gate layer,用来决定我们更新哪部分信息。然后,是一个tanh层,它用来创造新的候选值Ct,可以用来加到状态中。具体结构如下:
这时,就用新的状态值Ct来代替旧的状态值Ct-1,C代表一个记忆多少。
然后,将旧的状态和新的状态结合成为新的候选值,取决于想忘记多少,以及想更新多少。
最后,要决定需要输出什么,先构造一个sigmoid层来决定要输出哪部分状态,然后将该状态过滤一个tanh层,并和决定要输出的部分相乘。结构如下所示:
以上就是基本的LSTM的内部结构,结合一些节点的意义,会方便理解和记忆。
完整的结构如下:
关于LSTM的变种,主要有以下三个:
① Gers & Schmidhuber等人,在此基础上增加了peephole connection。即使得gate layer “看守”cell state,就是给每一层增加了一个sigmoid层。
② 直接将需要记忆的part设为1-ft,那么结构就变为如下所示:
③ 增加GRU(Gated Rucurrent Unit),他将forget gate和input gate结合成为一个update gate。并把cell state 和hidden state合并,并做一些改变,这样就比普通的LSTM更加简单一些,具体结构如下: