什么是 LSTM?
长短期记忆网络——通常被称为 LSTM,是一种特殊的 RNN,能够学习长期依赖性。由 Hochreiter 和 Schmidhuber(1997)提出的,并且在接下来的工作中被许多人改进和推广。LSTM 在各种各样的问题上表现非常出色,现在被广泛使用。
LSTM 被明确设计用来避免长期依赖性问题。长时间记住信息实际上是 LSTM 的默认行为,而不是需要努力学习的东西
LSTM与标准RNN区别
所有递归神经网络都具有神经网络的链式重复模块。在标准的 RNN 中,这个重复模块具有非常简单的结构,例如只有单个 tanh 层。
LSTM 也具有这种类似的链式结构,但重复模块具有不同的结构。不是一个单独的神经网络层,而是四个,并且以非常特殊的方式进行交互。
LSTM单元由内部记忆单元,输入门,输出门和遗忘门组成。该内部记忆单元记住任意时间间隔内的值,并且三个门控制进出单元的信息流。
原始RNN的隐藏层只有一个状态,即h,它对于短期的输入非常敏感。那么如果我们再增加一个状态,即c,让它来保存长期的状态,这就是长短时记忆网络。
按时间维度展开
可以看出在 t 时刻,LSTM的输入有三个:当前时刻网络的输入值 xt 、上一时刻LSTM的输出值 ht−1、以及上一时刻的单元状态 ct−1;LSTM的输出有两个:当前时刻LSTM输出值 ht 、和当前时刻的单元状态 xt 。注意 x、h、c 都是向量。
LSTM的传播过程
先引入门的理解
门的输出是0到1之间的实数向量,用门向量的输出向量按元素乘以我们需要控制的那个向量,当门输出为0时,任何向量与之相乘都会得到0向量,这就相当完全不能通过;输出为1时,任何向量与之相乘都不会有任何改变,这就相当于完全通过。因为σ(也就是sigmoid函数)的值域是(0,1),所以门的状态都是半开半闭的。
通过sigmoid处理过的向量,得到的都是(0,1)之间的权重,由遗忘门得到上一时刻记忆单元在本层网络中的程度大小,再由输入门得到输入x和当前状态更新到记忆单元的程度大小,根据这两个程度来得到记忆单元在本层网络的状态,完成对记忆单元的更新
可以形象的这样理解内部记忆单元更新过程
在记忆单元的控制下,用输入向量和上一层的输出向量ht-1,得到输出向量ht
长短时记忆网络的训练
LSTM的训练算法仍然是反向传播算法,对于这个算法,我们已经非常熟悉了。主要有下面三个步骤:
1、前向计算每个神经元的输出值,对于LSTM来说,即 ft、it、ct、ot、ht 五个向量的值。计算方法已经在面描述过了。
2、反向计算每个神经元的误差项δ值。与循环神经网络一样,LSTM误差项的反向传播也是包括两个方向:一个是沿时间的反向传播,即从当前t时刻开始,计算每个时刻的误差项;一个是将误差项向上一层传播。
3、根据相应的误差项,计算每个权重的梯度。
小结
LSTM在工作时,
当输入的序列不存在有用信息时,遗忘门f的值就会接近1,输入门i的值就会接近0,这样过去有用的信息就会被保存
当输入的序列存在重要信息时,遗忘门f的值就会接近0,输入门i的值就会接近1,这样LSTM遗忘过去的记忆,记录重要记忆
可以看出遗忘门,输入门,输出门和内部记忆单元共同控制LSTM输出h的设计,使得整个网络更好地把握序列信息之间的关系