前言

之前我们对RNN模型做了总结。由于RNN也有梯度消失的问题,因此很难处理长序列的数据,大牛们对RNN做了改进,得到了RNN的特例LSTM,它可以避免常规RNN的梯度消失,因此在工业界得到了广泛的应用。

RNN原理介绍:追根溯源:循环神经网络

 

《 Long short-term memory 》  ( 1997 )

作者:Hochreiter S, Schmidhuber J

论文链接:https://people.idsia.ch//~juergen/lstm2003tutorial.pdf

论文内容简介

在LSTM中引入了门机制,主要是为了解决梯度消失问题。引入了输入门,遗忘门和输出门,以决定应保留来自新输入和过去存储器的多少信息。该模型可用以下方程式描述:

长短时记忆网络中的循环权重 长短期记忆网络模型_激活函数

 

长短时记忆网络中的循环权重 长短期记忆网络模型_深度学习_02

术语“长期短期记忆”直觉上是提出的模型同时应用了长期和短期记忆向量来编码顺序数据,并使用门控机制来控制信息流。LSTM的性能令人印象深刻,因为它在许多NLP任务中作为骨干模型都获得了最新的成果,尽管该模型是在1997年提出的。

 

LSTM的整体结构

长短时记忆网络中的循环权重 长短期记忆网络模型_深度学习_03

由于RNN梯度消失的问题,大牛们对于序列索引位置t的隐藏结构做了改进,可以说通过一些技巧让隐藏结构复杂了起来,来避免梯度消失的问题,这样的特殊RNN就是我们的LSTM。由于LSTM有很多的变种,这里我们以最常见的LSTM为例讲述。

 

  • 细胞状态
    在每个序列索引位置t时刻向前传播的除了和RNN一样的隐藏状态ℎ𝑡,还多了另一个隐藏状态,如图中上面的长横线。这个隐藏状态我们一般称为细胞状态(Cell State),记为𝐶𝑡。如下图所示:
  • 遗忘门
    遗忘门(forget gate)顾名思义,是控制是否遗忘的,在LSTM中即以一定的概率控制是否遗忘上一层的隐藏细胞状态。遗忘门子结构如下图所示:

图中输入的有上一序列的隐藏状态ℎ𝑡−1和本序列数据𝑥𝑡,通过一个激活函数,一般是sigmoid,得到遗忘门的输出𝑓𝑡。由于sigmoid的输出𝑓𝑡在[0,1]之间,因此这里的输出𝑓𝑡 代表了遗忘上一层隐藏细胞状态的概率。

【其中𝑊𝑓,𝑈𝑓,𝑏𝑓为线性关系的系数和偏倚,和RNN中的类似。𝜎为sigmoid激活函数】

用数学表达式即为:𝑓𝑡=𝜎(𝑊𝑓ℎ𝑡−1+𝑈𝑓𝑥𝑡+𝑏𝑓)

  • 输入门
    输入门(input gate)负责处理当前序列位置的输入,它的子结构如下图:

从图中可以看到输入门由两部分组成,第一部分使用了sigmoid激活函数,输出为𝑖𝑡 ;第二部分使用了𝑡𝑎𝑛ℎ激活函数,输出为𝑎𝑡 ,两者的结果后面会相乘再去更新细胞状态。

【其中𝑊𝑖,𝑈𝑖,𝑏𝑖,𝑊𝑎,𝑈𝑎,𝑏𝑎为线性关系的系数和偏倚,和RNN中的类似。𝜎为sigmoid激活函数】用数学表达式即为:

  • 𝑖𝑡=𝜎(𝑊𝑖ℎ𝑡−1+𝑈𝑖𝑥𝑡+𝑏𝑖)
  • 𝑎𝑡=𝑡𝑎𝑛ℎ(𝑊𝑎ℎ𝑡−1+𝑈𝑎𝑥𝑡+𝑏𝑎)
  • 细胞状态更新
    在研究LSTM输出门之前,我们要先看看LSTM之细胞状态。前面的遗忘门和输入门的结果都会作用于细胞状态𝐶𝑡。我们来看看从细胞状态𝐶𝑡−1如何得到𝐶𝑡。如下图所示:

细胞状态𝐶𝑡 由两部分组成,第一部分是𝐶𝑡−1 和遗忘门输出𝑓𝑡 的乘积,第二部分是输入门的𝑖𝑡 和𝑎𝑡 的乘积,即:𝐶𝑡=𝐶𝑡−1⊙𝑓𝑡+𝑖𝑡⊙𝑎𝑡

 

  • 输出门
    有了新的隐藏细胞状态𝐶𝑡 ,我们就可以来看输出门了,子结构如下:
  • 从图中可以看出,隐藏状态ℎ𝑡 的更新由两部分组成,第一部分是𝑜𝑡 ,它由上一序列的隐藏状态ℎ𝑡−1 和本序列数据𝑥𝑡 ,以及激活函数sigmoid得到,第二部分由隐藏状态𝐶𝑡 和𝑡𝑎𝑛ℎ 激活函数组成, 即:
  • 𝑜𝑡=𝜎(𝑊𝑜ℎ𝑡−1+𝑈𝑜𝑥𝑡+𝑏𝑜)
  • ℎ𝑡=𝑜𝑡⊙𝑡𝑎𝑛ℎ(𝐶𝑡)