长短时记忆网络LSTM

因为循环神经网络很难训练的原因,这导致了它在实际应用中,很难处理长距离的依赖。我们将介绍一种改进之后的循环神经网络:长短时记忆网络(Long Short Term Memory Network, LSTM),它成功的解决了原始循环神经网络的缺陷,成为当前最流行的RNN,在语音识别、图片描述、自然语言处理等许多领域中成功应用。但不幸的一面是,LSTM的结构很复杂,因此,我们再介绍一种LSTM的变体:GRU (Gated Recurrent Unit)。 它的结构比LSTM简单,而效果却和LSTM一样好,因此,它正在逐渐流行起来。

原始RNN的隐藏层只有一个状态,即h,它对于短期的输入非常敏感。那么,假如我们再增加一个状态,即c,让它来保存长期的状态,那么问题不就解决了么?如下图所示:

长短时记忆网络LSTM

新增加的状态c,称为单元状态(cell state)。我们把上图按照时间维度展开:

长短时记忆网络LSTM

上图仅仅是一个示意图,我们可以看出,在t时刻,LSTM的输入有三个:当前时刻网络的输入值长短时记忆网络LSTM、上一时刻LSTM的输出值长短时记忆网络LSTM、以及上一时刻的单元状态长短时记忆网络LSTM;LSTM的输出有两个:当前时刻LSTM输出值长短时记忆网络LSTM、和当前时刻的单元状态长短时记忆网络LSTM

LSTM的关键,就是怎样控制长期状态长短时记忆网络LSTM。在这里,LSTM的思路是使用三个控制开关。第一个开关,负责控制继续保存长期状态长短时记忆网络LSTM(也就是说上一时刻状态长短时记忆网络LSTM是否汇入长短时记忆网络LSTM);第二个开关,负责控制把即时状态长短时记忆网络LSTM输入到长期状态长短时记忆网络LSTM;第三个开关,负责控制是否把长期状态长短时记忆网络LSTM作为当前的LSTM的输出。三个开关的作用如下图所示:

长短时记忆网络LSTM

接下来,我们要描述一下,输出长短时记忆网络LSTM和单元状态长短时记忆网络LSTM的具体计算方法。

LSTM前向计算

的概念:假设W是该门的权重向量,b是偏置项,则:长短时记忆网络LSTM长短时记忆网络LSTM是sigmoid函数,那么长短时记忆网络LSTM的值域为0到1之间的实数向量;门的使用,就是用门的输出向量按元素乘以我们需要控制的那个向量。因为门的输出是0到1之间的实数向量,那么,当门输出为0时,任何向量与之相乘都会得到0向量,这就相当于啥都不能通过;输出为1时,任何向量与之相乘都不会有任何改变,这就相当于啥都可以通过;这就是门和开关的对应关系。

遗忘门:它决定了上一时刻的单元状态长短时记忆网络LSTM有多少保留到当前时刻长短时记忆网络LSTM

输入门:它决定了针对当前输入长短时记忆网络LSTM的单元状态长短时记忆网络LSTM有多少保存到当前时刻的单元状态长短时记忆网络LSTM;(此处与原博客理解不一样,请大家指点)

输出门:控制单元状态长短时记忆网络LSTM有多少输出到LSTM的当前输出值长短时记忆网络LSTM

这几个门与上述的开关相配合来计算当前长短时记忆网络LSTM

 长短时记忆网络LSTM

如上图所示:这三个门:长短时记忆网络LSTM长短时记忆网络LSTM长短时记忆网络LSTM

输入都为长短时记忆网络LSTM表示把两个向量连接成一个更长的向量;我们以长短时记忆网络LSTM为例,权重矩阵长短时记忆网络LSTM都是由两个矩阵拼接而成的,如上公式一个是长短时记忆网络LSTM,对应着输入项长短时记忆网络LSTM,一个是长短时记忆网络LSTM,对应着输入项长短时记忆网络LSTM

针对于当前输入的单元状态长短时记忆网络LSTM

则所求的:长短时记忆网络LSTM长短时记忆网络LSTM

LSTM训练算法

LSTM的训练算法仍然是反向传播算法,对于这个算法,我们已经非常熟悉了。主要有下面三个步骤:

1.前向计算每个神经元的输出值,对于LSTM来说,即长短时记忆网络LSTM长短时记忆网络LSTM长短时记忆网络LSTM长短时记忆网络LSTM长短时记忆网络LSTM五个向量的值。计算方法已经在上一节中描述过了。

2.反向计算每个神经元的误差项长短时记忆网络LSTM值。与循环神经网络一样,LSTM误差项的反向传播也是包括两个方向:一个是沿时间的反向传播,即从当前t时刻开始,计算每个时刻的误差项;一个是将误差项向上一层传播。

3.根据相应的误差项,计算每个权重的梯度。

误差项沿时间的反向传递

在t时刻,LSTM的输出值长短时记忆网络LSTM,定义t时刻的误差项长短时记忆网络LSTM为:长短时记忆网络LSTM;这里假设误差项是损失函数对输出值的导数,而不是对加权输入长短时记忆网络LSTM的导数。长短时记忆网络LSTM长短时记忆网络LSTM长短时记忆网络LSTM长短时记忆网络LSTM对于这四个加权输入及他们的误差项:

长短时记忆网络LSTM,              长短时记忆网络LSTM

推导过程参见博客,最后得到公式:

长短时记忆网络LSTM,其中:

长短时记忆网络LSTM

那么我们就得到误差项向前传递到任意时刻k的公式:

长短时记忆网络LSTM

将误差传递到上一层

我们假设当前为第l层,定义l-1层的误差项是误差函数对l-1层加权输入的导数,即:

长短时记忆网络LSTM,因为在本层下,输入长短时记忆网络LSTM为:长短时记忆网络LSTM长短时记忆网络LSTM表示l-1层的**函数。

推导过程不再多说,得到:长短时记忆网络LSTM

权重梯度计算

对于长短时记忆网络LSTM长短时记忆网络LSTM长短时记忆网络LSTM长短时记忆网络LSTM的权重梯度,我们知道它的梯度是各个时刻梯度之和(循环神经网络已经介绍)。

长短时记忆网络LSTM   ,长短时记忆网络LSTM      ,   长短时记忆网络LSTM

以上就是LSTM训练算法全部公式。

GRU:

事实上LSTM存在很多变体,在众多的LSTM变体中,GRU (Gated Recurrent Unit)也许是最成功的一种。它对LSTM做了很多简化,同时却保持着和LSTM相同的效果。因此,GRU最近变得越来越流行。GRU对LSTM做了两个大改动:

  1. 将输入门、遗忘门、输出门变为两个门:更新门(Update Gate)长短时记忆网络LSTM和重置门(Reset Gate)长短时记忆网络LSTM
  2. 将单元状态与输出合并为一个状态:长短时记忆网络LSTM

GRU示意图:

长短时记忆网络LSTM

由示意图可知,GRU前向计算公式为:

长短时记忆网络LSTM

长短时记忆网络LSTM

长短时记忆网络LSTM

长短时记忆网络LSTM