[NLP]LSTM理解

简介html

LSTM(Long short-term memory,长短时间记忆)是一种特殊的RNN,主要是为了解决长序列训练过程当中的梯度消失问题。如下先从RNN介绍。网络

 

简说RNNide

RNN(Recurrent Neural Network,循环神经网络)是一种处理序列数据的神经网络。下图是它的结构: 函数

  1.  

从上图能够看出,RNN循环获取输入序列,并保存上一次输入的计算结果,与当前输入进行计算后,将计算结果输出并保存当前的计算结果,这样不断循环输入并计算,便可获取上文信息。学习

RNN内部网络以下图所示,从图中能够看出,在神经元内部的计算过程:先将上一个神经元细胞的输出ht-1与当前状态下神经元细胞的输入xt拼接后进行tan计算。ui

注:输出的ht-1(下图中的紫色圆圈)一般是将ht-1输入到一个线性层(主要是进行维度映射),而后使用softmax进行分类获得须要的数据。具体的计算方式要看模型的使用方式。 spa

 

RNN优势:它能处理序列数据,而且有记忆能力,可以利用上文信息。3d

RNN缺点:orm

  • 梯度消失:对于获取长距离依赖的效果不是很好(即若是上文信息离当前输入距离太远的话,理论上它是可以记得上文信息,可是事实上并非这样,因此它并不能很好地处理长距离依赖问题)
  • 梯度爆炸
  • RNN较难训练

注:长距离依赖处理效果不佳的缘由是使用tanh或者relu做为激活函数。(若是是sigmoid函数则不会)htm

 

LSTM结构

LSTM也是一种RNN,所以它也是一种循环结构,不一样的是RNN神经元内部只用tan层进行计算,而LSTM是有4个全链接层进行计算的,LSTM的内部结构以下图所示。 

 

上图中符号的含义以下图所示,黄色方框相似于CNN中的激活函数操做,粉色圆圈表示点操做,单箭头表示数据流向,下图中第四个符号表示两个向量的链接操做,第五个符号表示向量的拷贝操做,且上图中的σ表示sigmoid(该层的输出时0-1的值,0表示不能经过,1表示能经过) 

如今来描述LSTM的内部操做,具体内容以下图所示:

  

LSTM的核心是细胞状态——最上层的横穿整个细胞的水平线,它经过门来控制信息的增长或者删除。

那么什么是门呢?门是一种用来选择信息经过与否的方式,它由一个sigmoid层和点乘操做组成。LSTM共有三个门,分别是遗忘门,输入门和输出门,具体内容以下所述:

(1)遗忘门:遗忘门决定丢弃哪些信息,输入是上一个神经元细胞的计算结果ht-1以及当前的输入向量xt,两者联接并经过遗忘门后(sigmoid会决定哪些信息留下,哪些信息丢弃),会生成一个0-1向量Γft(维度与上一个神经元细胞的输出向量Ct-1相同)ΓftCt-1进行点乘操做后,就会获取上一个神经元细胞通过计算后保留的信息。

(2)输入门:表示要保存的信息或者待更新的信息,如上图所示是ht-1xt的链接向量,通过sigmoid层后获得的结果Γit,这就是输入门的输出结果了。

可是接下来咱们要计算该神经元细胞的输出结果,新细胞的更新状态CtCt = Ct-1· Γft  + Γit · ~ct(其中~ct = tanh(ht-1xt)),文字描述是:输入门的计算结果点乘 ht-1xt的链接向量通过tanh层计算的结果后,再与上一个神经元细胞通过计算后保留的信息进行相加,则是最终要输出的Ct

(3)输出门:输出门决定当前神经原细胞输出的隐向量hthtCt不一样,ht要稍微复杂一点,它是Ct进过tanh计算后与输出门的计算结果进行点乘操做后的结果,用公式描述是:ht = tanh(ct) · Γot

 

LSTM具体实现步骤[5]

1、首先,输入上一个神经元细胞输出的隐藏层向量和当前神经元细胞的输入,并将其链接起来。

2、将步骤1中的结果传入遗忘门中,该层将删除不相关的信息。

4、一个备选层将用步骤1中的结果建立,这一层将保存可能的会加入细胞状态的值或者说信息。

3、将步骤1中的结果传入输入门中,这一层决定步骤4的备选层中哪些信息应该加入到细胞状态中去。

5、步骤234计算结束后,用这三个步骤计算后的向量和上一个神经元细胞传出的细胞状态向量来更新当前细胞的细胞状态。

6、结果就被计算完了。

7、将结果和新的细胞状态进行点乘则是当前细胞状态的隐向量。

 

LSTM如何避免梯度消失与梯度爆炸

RNN中的梯度消失/爆炸与CNN中的含义不一样,CNN中不一样的层有不一样的参数,每一个参数都有本身的梯度;而RNN中一样的权重在各个时间步中共享,因此最终的梯度等于各个时间步的梯度和。所以,RNN中的梯度不会消失,它只会遗忘远距离的依赖关系,而被近距离的梯度所主导。可是LSTM中的梯度传播有不少条路径,最主要的一条是当前细胞的状态更新这一过程,该过程当中只有逐元素的相乘和相加操做,梯度流最稳定,所以基本不会发生梯度消失或者梯度爆炸;可是其余的传播路径依然有梯度消失或者爆炸风险,而最终的梯度计算是各个梯度路径的和,所以LSTM仍然有梯度消失或者爆炸的风险,只是这个风险被大幅下降了。

 

LSTM变种-GRU

GRULSTM的变种,它也是一种RNN,所以是循环结构,相比LSTM而言,它的计算要简单一些,计算量也下降,可是两者的效果却不能一律而论,须要针对不一样的case进行尝试才能知道哪个模型效果更好。GRU使用隐向量进行信息交换(LSTM使用细胞状态),它有2个门:重置门和更新门。    

   

如上图所示,现分别介绍两个门:

  • 重置门:用来决定须要丢弃哪些上一个神经元细胞的信息,它的计算过程是将Ct-1与当前输入向量xt进行链接后,输入sigmoid层进行计算,结果为S1,再将S1Ct-1进行点乘计算,则结果为保存的上个神经元细胞信息,用C’t-1表示。

公式表示为:C’t-1 = Ct-1 · S1S1 = sigmoid(concat(Ct-1,Xt)) 

  • 更新门:更新门相似于LSTM的遗忘门和输入门,它决定哪些信息会丢弃,以及哪些新信息会增长。

 

总结

LSTM优势:LSTM下降了梯度消失或者梯度爆炸的风险,而且比RNN具备更强的长距离依赖能力。

LSTM缺点:

  • LSTM处理长距离依赖的能力依然不够,所以Transformer横空出世,它具备比LSTM更强的长距离依赖处理能力。
  • 它的计算很费时。每一个细胞中都有4个全链接层(MLP),所以若是LSTM的时间跨度很大的话,计算量会很大也很费时。

 

参考资料

[1] https://zhuanlan.zhihu.com/p/32085405

[2] https://www.jianshu.com/p/95d5c461924c

[3] https://www.zhihu.com/question/34878706

[4] https://r2rt.com/written-memories-understanding-deriving-and-extending-the-lstm.html(待学习)

[5] https://towardsdatascience.com/illustrated-guide-to-lstms-and-gru-s-a-step-by-step-explanation-44e9eb85bf21

相关文章
相关标签/搜索