LSTM是RNN的变形,也就是循环神经网络的形式之一,主要解决传统RNN记忆问题,距离较远的文本信息无法得到利用、距离较近但语义上关联不大的文本信息造成了太大的干扰。(像是一个容易遗忘的老人,记不住太久远之前的信息,所以就出现了LSTM,让他只记住有用的信息)

双向长短期记忆网络和长短期记忆网络 短时记忆的双重模型_Memory


传统RNN的问题分析:比如输入文本是我今天要做红烧排骨,首先要准备排骨,然后…,最后一道美味的菜就出锅了.这个时候我们要让RNN来判断我们到底做了什么菜,RNN可能给出辣子鸡这个答案,然后就反向的去推导误差,在循环神经网络中,由于模型每个时刻的状态都是由之前的状态的乘积得来的,那么根据链式法则,如果每一层神经元对上一层的输出的偏

导乘上权重结果都小于 1,则在经过足够多的传播之后,误差对输入层的梯度会趋近于 0,即梯度消失;反之,则梯度会随着反向传播层数的增加而呈指数增长,导致梯度爆炸(梯度爆炸可以用剪裁来解决)

梯度消失:

双向长短期记忆网络和长短期记忆网络 短时记忆的双重模型_LETM_02


梯度爆炸:

双向长短期记忆网络和长短期记忆网络 短时记忆的双重模型_Memory_03


为了解决上面出现的梯度消失的问题,就出现了LSTM(长短期记忆)

具体LSTM模型是怎么实现的呢?

相对于传统的RNN,LSTM的输入由x(t)[输入数据],a(t-1)[隐藏层信息]两个数据变成了x(t)[输入数据],a(t-1)[隐藏信息],c(t-1)[记忆单元],不仅仅是参数数量上的变化,还有就是

a(t-1)的求法也不一样,下面是LSTM一个cell的计算过程

双向长短期记忆网络和长短期记忆网络 短时记忆的双重模型_LETM_04


双向长短期记忆网络和长短期记忆网络 短时记忆的双重模型_Memory_05


?都代指的是sigmoid激活函数,?(?) = 1/(1 + ?−?) 结果范围在0-1之间

Bi-LSTM的产生

在单向的循环神经网络中,模型实际上只使用到了“上文”的信息,而没有考虑到“下文”的信息。在实际场景中,预测可能需要使用到整个输入序列的信息。因此,目前业内主流使用的都是双向的循环神经网络。顾名思义,双向循环神经网络结合了序列起点移动的一个循环神经网络和令一个从序列末尾向序列起点移动的循环神经网络。而作为循环神经网络的一种拓展,LSTM 自然也可以结合一个逆向的序列,组成双向长短时记忆网络

(Bi-directional Long Short-Term Memory, Bi-LSTM)。Bi-LSTM 目前在自然语言处理领域的应用场景很多,并且都取得了不错的效果。

双向长短期记忆网络和长短期记忆网络 短时记忆的双重模型_LETM_06


双向长短时记忆(Bidirectional Long ShortTerm Memory,BLSTM)在LSTM的基础上,结合了输入序列在前向和后向两个方向上的信息。对于t时刻的输出,前向LSTM层具有输入序列中t时刻以及之前时刻的信息,而后向LSTM层中具有输入序列中t时刻以及之后时刻的信息。前向LSTM层t时刻的输出记作 ,后向LSTM层t时刻的输出结果记作 ,两个LSTM层输出的向量可以使用相加、平均值或连接等方式进行处理,上图中采用连接的方式