深度学习笔记(八)LSTM长短期记忆网络

来源:互联网 发布:怎样推广淘宝网店 编辑:程序博客网 时间:2024/05/29 07:40
上一个章节(RNN)最后的时候分析,

 当t-k远大于0的时候,如果小于零,将会变成一个很小值,如果大于零,将会变成一个很多的数,前者就是梯度消失,后者就是梯度爆炸LSTM主要是解决这个问题。梯度消失图如下:


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

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

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

接下来,我们要描述一下,输出h和单元状态c的具体计算方法。

长短时记忆网络的前向计算

前面描述的开关是怎样在算法中实现的呢?这就用到了门(gate)的概念。门实际上就是一层全连接层,它的输入是一个向量,输出是一个0到1之间的实数向量。假设W是门的权重向量,是偏置项,那么门可以表示为:


门的使用,就是用门的输出向量按元素乘以我们需要控制的那个向量。因为门的输出是0到1之间的实数向量,那么,当门输出为0时,任何向量与之相乘都会得到0向量,这就相当于啥都不能通过;输出为1时,任何向量与之相乘都不会有任何改变,这就相当于啥都可以通过。因为(也就是sigmoid函数)的值域是(0,1),所以门的状态都是半开半闭的。

结果图和分析如下:

遗忘门:
最左边的遗忘门,遗忘们决定有多少重Ct-1 传播到Ct。

输入门:
输入门决定当前输入有多少保存到Ct

新的保存信息: 
所以最终的保存信息为:符号*表示按元素乘

 输出:
 

LSTM 的变体

1)其中一个流形的 LSTM 变体,就是由 Gers & Schmidhuber (2000) 提出的,增加了 “peephole connection”。是说,我们让 门层 也会接受细胞状态的输入。

上面的图例中,我们增加了 peephole 到每个门上,但是许多论文会加入部分的 peephole 而非所有都加。

另一个变体是通过使用 coupled 忘记和输入门。不同于之前是分开确定什么忘记和需要添加什么新的信息,这里是一同做出决定。我们仅仅会当我们将要输入在当前位置时忘记。我们仅仅输入新的值到那些我们已经忘记旧的信息的那些状态 。

 另一个改动较大的变体是 Gated Recurrent Unit (GRU),这是由 Cho, et al. (2014) 提出。它将忘记门和输入门合成了一个单一的 更新门。同样还混合了细胞状态和隐藏状态,和其他一些改动。最终的模型比标准的 LSTM 模型要简单,也是非常流行的变体。

训练:
我们设定gate的激活函数为sigmoid函数,输出的激活函数为tanh函数。
 训练:
 其中:
 





 参考文档:
http://www.jianshu.com/p/9dc9f41f0b29/
http://www.csdn.net/article/2015-11-25/2826323
http://www.mamicode.com/info-detail-1804850.html