LSTM :Long short-term memory

这也是RNN的一个变种网络,在之后大家都可以见到各类变种网络,其本质就是为了解决某个领域问题而设计出来的,LSTM是为了解决RNN模型存在的问题而提出来的,RNN模型存在长序列训练过程中梯度爆炸和梯度消失的问题,无法长久的保存历史信息,而LSTM就可以解决梯度消失和梯度爆炸问题。简单来说,就是相比普通的RNN,LSTM能够在更长的序列中有更好的表现。

网络结构

LSTM的RNN的更新模块具有4个不同的层相互作用,这四个层分别是:

  • 遗忘门
  • matlab中长短期记忆神经网络 lstm长短期记忆网络_lstm

  • matlab中长短期记忆神经网络 lstm长短期记忆网络_反向传播_02是指sigmoid函数,对于状态matlab中长短期记忆神经网络 lstm长短期记忆网络_反向传播_03矩阵当中每个输入的值,都会乘以一个乘子,乘子的值在[0, 1]之间,相当于是决定了遗忘多少部分。如果乘子值为1,说明全部保留,不删除原本的记忆,如果是0,说明状态matlab中长短期记忆神经网络 lstm长短期记忆网络_反向传播_03矩阵对应的这个值全部删除,全部遗忘。场景:比如文本中的转折语句,前一个句子主语“He”,名字叫“Peter”,国籍是“America”。下一句新出现了一群人,因此这个时候状态矩阵对应主语的这一栏就会删除“He”,以保证接下来的动词的形式不是第三人称单数。
  • 输入门
  • matlab中长短期记忆神经网络 lstm长短期记忆网络_lstm_05

  • 这里有两部分同时进行:一个是matlab中长短期记忆神经网络 lstm长短期记忆网络_反向传播_02函数决定添加多少部分的新信息到前一个状态矩阵当中(类似于权重),tanh层则根据前一个的输入值matlab中长短期记忆神经网络 lstm长短期记忆网络_lstm_07和当前的输入值matlab中长短期记忆神经网络 lstm长短期记忆网络_深度学习_08产生一个新的当前状态(也就是一个新的候选值向量,这个向量之后要加入到已有的状态矩阵当中)。最后根据前面matlab中长短期记忆神经网络 lstm长短期记忆网络_反向传播_02函数输出的权重和新的候选值向量两个共同更新原有的矩阵。其实是构建一个权重、一个输入,权重是对输入做一个过滤判断。
  • matlab中长短期记忆神经网络 lstm长短期记忆网络_lstm_10

  • 最后跟历史的输入做加法作为matlab中长短期记忆神经网络 lstm长短期记忆网络_lstm_11
  • 输出门
  • matlab中长短期记忆神经网络 lstm长短期记忆网络_lstm_12

  • 输出层也有一个权重,这个权重也是matlab中长短期记忆神经网络 lstm长短期记忆网络_反向传播_02函数对输入值matlab中长短期记忆神经网络 lstm长短期记忆网络_lstm_07和当前的输入值matlab中长短期记忆神经网络 lstm长短期记忆网络_深度学习_08的作用,对应图中的matlab中长短期记忆神经网络 lstm长短期记忆网络_权重_16,然后对matlab中长短期记忆神经网络 lstm长短期记忆网络_lstm_11做乘法,保证对输出的一个过滤。其实最后一个输出matlab中长短期记忆神经网络 lstm长短期记忆网络_深度学习_18还要经过转换:
    matlab中长短期记忆神经网络 lstm长短期记忆网络_matlab中长短期记忆神经网络_19

反向传播

通过上节,我们可以知道误差来自两个地方:matlab中长短期记忆神经网络 lstm长短期记忆网络_反向传播_20matlab中长短期记忆神经网络 lstm长短期记忆网络_深度学习_21,一个是matlab中长短期记忆神经网络 lstm长短期记忆网络_深度学习_22时刻的神经单元的误差,一个是matlab中长短期记忆神经网络 lstm长短期记忆网络_深度学习_22时刻之后的神经单元的误差
matlab中长短期记忆神经网络 lstm长短期记忆网络_lstm_24

其中有两个隐藏变量:matlab中长短期记忆神经网络 lstm长短期记忆网络_lstm_25matlab中长短期记忆神经网络 lstm长短期记忆网络_matlab中长短期记忆神经网络_26
matlab中长短期记忆神经网络 lstm长短期记忆网络_lstm_27
重点是这个matlab中长短期记忆神经网络 lstm长短期记忆网络_matlab中长短期记忆神经网络_28如何计算,matlab中长短期记忆神经网络 lstm长短期记忆网络_反向传播_29,其中matlab中长短期记忆神经网络 lstm长短期记忆网络_反向传播_30matlab中长短期记忆神经网络 lstm长短期记忆网络_权重_31都有关于matlab中长短期记忆神经网络 lstm长短期记忆网络_深度学习_32的,matlab中长短期记忆神经网络 lstm长短期记忆网络_深度学习_33都有关于matlab中长短期记忆神经网络 lstm长短期记忆网络_深度学习_32的递推关系,求导就比较复杂了。首先这里matlab中长短期记忆神经网络 lstm长短期记忆网络_matlab中长短期记忆神经网络_35是指sigmod函数,sigmod函数求导等于:matlab中长短期记忆神经网络 lstm长短期记忆网络_lstm_36,tanh的导数为:matlab中长短期记忆神经网络 lstm长短期记忆网络_深度学习_37matlab中长短期记忆神经网络 lstm长短期记忆网络_matlab中长短期记忆神经网络_28导数拆解为:
matlab中长短期记忆神经网络 lstm长短期记忆网络_lstm_39
matlab中长短期记忆神经网络 lstm长短期记忆网络_matlab中长短期记忆神经网络_40的求导比较复杂,这里需要拆解求导
matlab中长短期记忆神经网络 lstm长短期记忆网络_反向传播_41
这里我们用一个变量matlab中长短期记忆神经网络 lstm长短期记忆网络_深度学习_42来表示matlab中长短期记忆神经网络 lstm长短期记忆网络_深度学习_43,因为还需要对matlab中长短期记忆神经网络 lstm长短期记忆网络_权重_31的变量中的matlab中长短期记忆神经网络 lstm长短期记忆网络_深度学习_32来求导,避免公式太长,用一个变量来替换一下,然后分别求:
matlab中长短期记忆神经网络 lstm长短期记忆网络_深度学习_46
所以:
matlab中长短期记忆神经网络 lstm长短期记忆网络_反向传播_47
这里主要参考了刘建平老师的博客,链接在下面,可以进去详细看看。

LSTM 时长

误差向上一个状态传递时几乎没有衰减,所以权值调整的时候,对于很长时间之前的状态带来的影响和结尾状态带来的影响可以同时发挥作用,最后训练出来的模型就具有较长时间范围内的记忆功能。

lstm如何解决梯度消失

首先说明一下梯度爆炸的解决比较简单,比如截断,所以大部分网络研究的问题在于梯度消失。RNN梯度消失带来的问题是对远距离的信息越来越弱,因为梯度传过去后很小,这样远距离信息都没有起到作用,所以LSTM一方面有matlab中长短期记忆神经网络 lstm长短期记忆网络_权重_48,通过gate机制,将矩阵乘法变为了逐位想乘,延缓了梯度消失,可以存储足够远的信息,在反向推到的误差传递过程中,很多推到参数是是0|1,这样也保证了梯度的消失和爆炸会非常延缓。我们具体来看下如何解决: LSTM通过门机制就能够解决梯度问题。

LSTM四倍与RNN的参数也是对网络模型有帮助的,通过参数来控制模型。

缺点

引入了很多内容,导致参数变多,也使得训练难度加大了很多。因此很多时候我们往往会使用效果和LSTM相当但参数更少的GRU来构建大训练量的模型。