文章目录
- 0 前言
- 1 LSTM与RNN的异同
- 2 LSTM结构细节
- 2.1 细胞状态
- 2.2 遗忘门
- 2.3 输入门
- 2.4 输出门
- 3 总结
- 4 LSTM的变体
- 4.1 Adding “Peephole Connections”
- 4.2 耦合遗忘门和输入门
- 4.3 GRU(Gated Recurrent Unit)
- 参考资料
0 前言
循环神经网络工作的关键点就是使用历史信息来帮助当前的决策,但同时也带来更大的技术挑战-长期依赖问题(long-term dependencies)。长短期记忆网络(Long Short Term Memory, LSTM)的设计就是为了解决这个问题。
1 LSTM与RNN的异同
如果对RNN的结构及其实现方式不太了解的话,可以先看看我前一篇关于RNN的学习笔记:循环神经网络(RNN)学习笔记 。LSTM是RNN的一种变体,其内部结构相较于RNN多了很多结构。下图是RNN的结构:
在RNN中,只有一个tanh层,即输入与上一时刻的状态组成本时刻的RNN层的输入:。运算之后的结果经过激励函数,得到下一时刻的状态。与之相对应的,LSTM中的结构就比较复杂了:
不同于单一的神经网络层,这里一共有四个,以一种特殊的方式进行交互,但是其基本原理与RNN是一样的,输入进入LSTM层后与上一时刻的状态进行运算,得到本时刻的状态输入到下一时刻进行运算。无非是整个的运算过程变得复杂了而已。
2 LSTM结构细节
2.1 细胞状态
最上面这条线表示细胞状态。细胞状态类似于传送带。直接在整个链上运行,只有一些少量的线性交互。信息在上面流传保持不变会很容易。
从计算流程上看,它先与遗忘门的输出进行乘法运算,然后再加上输入门的输出。这种运算方式理解起来就是将上一时刻的一些信息进行压缩或更新,然后再加上本时刻的信息,通过这种方式来记住长期的信息。
2.2 遗忘门
遗忘门是决定从细胞状态中丢弃什么东西,它首先连接$[h_{t-1}, x_t]$经过sigmoid激励函数得到一个在0-1之间的数字给每个细胞状态$C_{t-1}$里的数字,其中1表示“完全保留”;而0表示“完全舍弃”。
2.3 输入门
输入门是决定将新的信息放在细胞状态里。它首先经过一个tanh层,得到当前信息的表示;同时也经过一个Sigmoid层来计算出新的信息中那些是重要的,那些是不重要的,然后与tanh层的输出进行相乘再加入到细胞状态中。这个过程简言之就是将当前的新信息加权到细胞状态中。经过这些运算就可以得到当前时刻的细胞状态$C_t$。
2.4 输出门
输出门则是决定本时刻的输出状态。它是先将当前时刻的细胞状态$C_t$,经过一个tanh层激励,再由$[x_t, h_{t-1}]$经过一个Sigmoid层得到更新的权值,两者进行相乘得到。其结果就是当前细胞状态经过tanh激励后加权得到当前时刻的状态。
3 总结
在一个lstm cell中,所有的sigmoid层都是在做一个权值的计算。在遗忘门中表示遗忘的程度,在输入门中表示当前信息在细胞状态中的更新程度,而在输出门中则作为细胞状态激励后的输出层度。
4 LSTM的变体
4.1 Adding “Peephole Connections”
这是Gers & Schmidhuber (2000)提出来的一种LSTM的变体,他将细胞状态输入每个Sigmoid之前,与共同影响权值的生成。这个图中是将其加到所有的门中,而在论文中只将其加入到部分门里。
4.2 耦合遗忘门和输入门
。这个式子表示我们遗忘多少信息,就更新多少信息。
4.3 GRU(Gated Recurrent Unit)
有个更加有意思的LSTM变体是Cho, et al. (2014)提出来的。他不仅将遗忘门和输入门统一为更新门,而且将状态h和细胞状态C也一起合并了,从整个外观上看比较像简单的RNN结构了。最终的模型比标准的 LSTM 模型要简单,也是非常流行的变体。
参考资料
Understanding LSTM Networks 理解 LSTM 网络 LSTMs/#disqus_thread)
理解 LSTM 网络理解LSTM