http://blog.csdn.net/pipisorry/article/details/78362537
[深度学习:长短期记忆模型LSTM]
[Greff, Klaus, et al. "LSTM: A search space odyssey." TNNLS2016] 探讨了基于Vanilla LSTM (Graves & Schmidhube (2005))之上的8个变体,并比较了它们之间的性能差异,包括:
关于不同变体的对比
[Greff, Klaus, et al. "LSTM: A search space odyssey." TNNLS2016]将8种LSTM变体与基本的Vanilla LSTM在TIMIT语音识别、手写字符识别、复调音乐建模三个应用中的表现情况进行了比较,得出了几个有趣的结论:
[[NL系列] RNN & LSTM 网络结构及应用]
变成
CIFG可以达到a 20% reduction in computation time (Greff et al., 2016).
某小皮
GRU即门控循环单元/Gated Recurrent Unit。GRU保持了LSTM的效果同时又使结构更加简单计算量更小。GRU把LSTM中的forget gate
和input gate
用update gate
来替代。 把cell state
和隐状态htht进行合并,在计算当前时刻新信息的方法和LSTM有所不同。
GRU模型只有两个门了,分别为更新门zt和重置门rt。更新门用于控制前一时刻的状态信息被带入到当前状态中的程度,更新门的值越大说明前一时刻的状态信息带入越多;重置门用于控制忽略前一时刻的状态信息的程度,重置门的值越小说明忽略得越多。
GRU前向传播公式
其中[]表示两个向量相连接,*表示矩阵元素相乘。
Note: 有些地方zt和(1 - zt)是相反的,这个顺序需要注意一下,比如下面这个等同的图示。
具体更新过程如下:
如果reset gate
接近0,那么之前的隐藏层信息就会丢弃,允许模型丢弃一些和未来无关 的信息;update gate
控制当前时刻的隐藏层输出ht需要保留多少之前的隐藏层信息, 若zt接近1相当于我们之前把之前的隐藏层信息拷贝到当前时刻,可以学习长距离依赖。 一般来说那些具有短距离依赖的单元reset gate
比较活跃(如果rt为1,而zt为0 那么相当于变成了一个标准的RNN,能处理短距离依赖),具有长距离依赖的单元update gate
比较活跃。
1 门数不同。GRU只有两个门reset门r和update门z。
2 在GRU中,r和z共同控制了如何从之前的隐藏状态(st−1st−1)计算获得新的隐藏状态(stst),而取消了LSTM中的output门。
3 如果reset门为1,而update门为0(不同图示中可能为1)的话,则GRU完全退化为一个RNN。
4 经过实验,一般认为,LSTM和GRU之间并没有明显的优胜者。因为GRU具有较少的参数,所以训练速度快,而且所需要的样本也比较少。而LSTM具有较多的参数,比较适合具有大量样本的情况,可能会获得较优的模型。
[经典必读:门控循环单元(GRU)的基本概念与原理]
[RNN LSTM与GRU深度学习模型学习笔记]
[GRU 原论文:https://arxiv.org/pdf/1406.1078v3.pdf]
the cell and hidden state update equations for LSTM will incorporate a single dropout (Hinton et al., 2012) gate, as developed in Recurrent Dropout without Memory Loss (Semeniuta et al., 2016), to help regularize the entire model during training.
[Stanislaw Semeniuta, Aliases Severyn, and Erhardt Barth. Recurrent dropout without memory loss. arXiv 2016]
add the option to use a Layer Normalization layer in the LSTM
i g f o s^t都需要LN。
Layer Normalization (Ba et al., 2016[Jimmy L. Ba, Jamie R. Kiros, and Geoffrey E. Hinton. Layer normalization. NIPS2016]). The central idea for the normalization techniques is to calculate the first two statistical moments of the inputs to the activation function, and to linearly scale the inputs to have zero mean and unit variance.
既然LSTM(RNN)是神经网络,我们自然可以把一个个LSTM叠加起来进行深度学习。
比如,我们可以用两个独立的LSTM来构造两层的循环神经网络:一个LSTM接收输入向量,另一个将前一个LSTM的输出作为输入。这两个LSTM没有本质区别——这不外乎就是向量的输入输出而已,而且在反向传播过程中每个模块都伴随着梯度操作。
[Gated Feedback Recurrent Neural Networks]
左边是传统的stack RNN(三个RNN叠加),右边是升级版——RNN的hidden state除了会对下一时刻自己产生影响外,还会对其他的RNN产生影响,由reset gates控制。
类似于深层RNN,使用多层的LSTM模型。著名的seq2seq模型使用的就是2层的LSTM来进行encode和decode的。multilayered Long Short-Term Memory (LSTM) to map the input sequence to a vector of a fixed dimensionality。
[Ilya Sutskever, Oriol Vinyals, and Quoc VV Le. Sequence to sequence learning with neural networks. In NIPS, 2014.]
一般时间序列只需要一个block,而空间序列可能需要多个block?如下图。
2个cell的lstm模型就类似于rnn模型中的”动态跨时间步的rnn网络“。
Figure 2: Example of a net with 8 input units, 4 output units, and 2 memory cell blocks of size 2.
in 1 marks the input gate, out 1 marks the output gate, and cell 1 =block 1 marks the rst memory cell of block 1. cell 1 =block 1 's architecture is identical to the one in Figure 1, with gate units in 1 and out 1
The example assumes dense connectivity: each gate unit and each memory cell see all non-output units.
[Hochreiter, S., & Schmidhuber, J. Long short-term memory. Neural computation1997]
[LSTM模型]
stateful LSTM:能让模型学习到你输入的samples之间的时序特征,适合一些长序列的预测,哪个sample在前,那个sample在后对模型是有影响的。
stateless LSTM:输入samples后,默认就会shuffle,可以说是每个sample独立,之间无前后关系,适合输入一些没有关系的样本。
在stateless时,长期记忆网络并不意味着你的LSTM将记住之前batch
的内容,它只是记住句子内部的内容。Keras stateless lstm在训练时会默认地shuffle samples
,所以导致sequence
之间的依赖性消失,sample
和sample
之间就没有时序关系,顺序被打乱,这时记忆参数在batch
、小序列之间进行传递就没意义了,所以Keras要把记忆参数初始化。
使 RNN 具有状态意味着每批样品的状态将被重新用作下一批样品的初始状态。注意,此处的状态表示的是原论文公式里的c,h,即LSTM特有的一些记忆参数,并非w权重。
在keras中使用带状态的lstm时,即在stateful = True
时,我们要在fit中手动使得shuffle = False
。随后,在X[i]
(表示输入矩阵中第i
个sample
)这个小序列训练完之后,Keras会将将训练完的记忆参数传递给X[i+bs]
(表示第i+bs个sample),作为其初始的记忆参数。bs = batch_size
。这样一来,我们的记忆参数就能顺利地在sample
和sample
之间传递,X[i+n*bs]
也能知道X[i]
的信息。
[Keras之stateful LSTM全面解析+实例测试]
换一个图:
这里三条黑线就是所谓的 peephole,传统的 LSTM 中遗忘门、输入门和输出门只用了 h(t-1) 和 xt 来控制门缝的大小,peephole 的意思是说不但要考虑 h(t-1) 和 xt,也要考虑 Ct-1 和 Ct,其中遗忘门和输入门考虑了 Ct-1,而输出门考虑了 Ct。
[Gers, Felix A., Schraudolph, Nicol N., and Schmidhuber, J¨urgen. Learning precise timing with lstm recurrent networks. J. Mach. Learn. Res., 3:115–143, March 2003.]
from: http://blog.csdn.net/pipisorry/article/details/78362537
ref: