原文链接:Understanding LSTM Networks
注:非全部翻译,有部分为自我添加,有部分原文未全翻译。
全连接或卷积神经网络模型中,网络结构都是从输入层到隐藏层再到输出层,层与层之间都是全连接或部分连接,但每层之间的节点是没有连接的。这样就会存在无法捕捉时序特征的问题。不同时间序列的输入之间没有联系。
因此促进了携带时间序列信息的模型的发展,如隐马尔可夫模型HMM等。
HMM模型存在一个较严重的问题就是时间和空间复杂度都是O(N^2),当数据集非常大时,其开销大,效率低。
RNN模型的出现一定程度上解决了以往模型上的一些缺陷。
一个最简单的RNN模型如下:
由上图可看出,RNN模型已经带有循环结构了,RNN的隐藏层之间的结点是有连接的,隐藏层的输入不仅包括输入层的输出还包括上一时刻隐藏层的状态。
将该结构展开可看到如下的结构:
从这里可以更明确的看出来,隐藏层之间是有相关联的,不过有一点需要明确,这些循环网络结构中的参数在不同时刻是共享的。
为了将当前时刻的状态转换为输出,同样还需要接一个全连接网络。
所以RNN模型的精髓就在于对循环结构A的设计。
传统的RNN结构如下,该结构非常简单,将上一个时刻的隐藏层状态和当前时刻的输入进行拼接,加一个tanh的激活即得到当前隐藏层的状态。
传统RNN结构(图片来源)
RNN存在的一个较严重的缺陷就是,虽然RNN可以自发学会利用历史信息,但只有在相关信息和需要该信息的距离较近的时候,RNN才能成功的运作,当相关信息和需要该信息的地方的距离变得非常大的情况下,RNN无法有效地利用历史信息。
不过即使RNN的模型非常简单,但提供了一个非常好的循环结构模型,为其它模型的产生提供了非常大的引导作用。
比较成功的一个案例就是LSTM(Long Short-Term Memory,长短期记忆模型)。
LSTM是一种拥有三个门结构的特殊网络结构,输入门,遗忘门,输出门。
LSTM通过一些门的结构让信息有选择性地影响RNN中每一个时刻的状态。它是由一个Sigmoid神经网络层和一个点乘运算组成。
门(图片来源)
Sigmoid作为激活函数的输出会使输出控制在一个0~1之间的数,描述有多少信息可以通过这个结构,0表示不通过任何信息,1表示全部通过。
LSTM的整体结构如下图:
LSTM结构(图片来源)
其中一些操作意义如下:
几种操作含义(图片来源)
LSTM的关键是细胞状态,表示细胞状态的这条线水平的穿过图的顶部。
细胞状态类似于传送带,细胞的状态再整个链上运行,只有一些小的线性操作作用其上,信息很容易保持不变的流过整个链。
细胞状态信息传递(图片来源)
解析LSTM的每一部分
(1)遗忘门
LSTM的第一步是决定我们需要丢弃哪些信息或保留哪些信息,通过一个sigmoid层实现,查看上一个隐藏层的状态和当前输入,通过sigmoid输出在0到1之间的特性,决定信息的弃留。越接近0意味着忘记,越接近1意味着要保持。
遗忘门(图片来源)
(2)输入门
下一步是决定我们要在循环结构中存储什么信息。这一步分为两部分。首先,输入门层的sigmoid层,决定了我们要更新哪些值。接下来一个tanh层创建候选向量,该向量将会被加到细胞的状态中。在下一步中,将结合这两个向量来创建更新值。
输入门(图片来源)
(3)将过去和现在的记忆合并
这时要将上一个状态值更新为,将上一个状态值乘以,以此表达期待忘记的部分。之后将得到的值加上。这个得到的是新的候选值,按照我们决定更新每个状态值的多少来衡量。
更新细胞状态(图片来源)
(4)输出门
最后,我们要决定我们要输出什么。此输出将基于细胞状态,实际输出还需要接一个全连接层。首先,运行一个sigmoid层,它决定了我们要输出的细胞状态的哪些部分。然后,将单元格状态通过tanh(将值泛化到-1和1之间),并将其乘以sigmoid门的输出,即为循环结构的状态输出。
输出门(图片来源)
LSTM的一个比较成功的变种:GRU(Gated recurrent units,门控循环单元)。它将遗忘门和输入门组合成一个单一的更新门。还将单元格状态和隐藏状态合并了,并进行了一些其它的更改,所得的模型比标准的LSTM模型更简单。
GRU结构(图片来源)
LSTM还有其它类型的变体(原文有提):添加窥视、使用耦合的遗忘门和输入门。