LSTM
前置知识——RNN
RNN即Recurrent Neural Network,循环神经网络。RNN是一种用于处理序列数据(像时序数据)的神经网络。
我们先来了解下普通的RNN。
不同于普通的神经网络,RNN多了一个Memory,即RNN会把隐藏层的值存储在内存中。这样使得RNN可以记忆上一层隐藏层的输出,具有记忆力。上图理解:
RNN的输入有两个值,一个是当前状态的时序数据 x x x,一个是上一隐藏层的值 h h h。也就是说,在下一状态或下一时刻输入 x 2 x^2 x2 时,也要把上一时刻的Memory里的值也一起考虑,同时隐藏层输出新的值 h 2 h^2 h2 会替换原先的 h 1 h^1 h1 ,即同时更新Memory里的值。最后的输出 y y y 是要通过一层softmax得到概率值。
简单来说,对于有序的数据集,RNN把之前分析数据 x 1 x^1 x1 的结果存入Memory,分析 x 2 x^2 x2 的时候调用之前 x 1 x^1 x1 的结果一起分析。即累积记忆,一起分析。
值得注意的是,因为RNN处理的是时序的数据,为了更直观的展示时序之间的关系,这张图里,把不同时刻的RNN放在一起,所以图里不是有三个RNN,而是只有一个RNN。
除此之外,RNN还有很多的扩展,比如Elman Network和Jordan Network,两者的区别在于Memory存储的值不同。
- Elman Network:Memory里存储的是隐藏层的值
- Jordan Network:Memory里存储的最终的输出值
此外,还有双向RNN(Bidirectional RNN)。双向的意思即同时正向训练RNN和逆向训练RNN,如下图
什么是LSTM
LSTM全称Long Short-Term Memory,即长短期记忆网络。是RNN的进阶版。
前面我们了解了普通RNN,其对Memory的读取更新是没有限制的,也就是每一时刻神经网络输入新的数据时,Memory都会被更新。
LSTM则是在RNN的基础上,增加了三个 Gate,用于控制全局的Memory。
三个gate即:
- input gate: 输入控制,只有打开才可以把值写进Memory里。
- output gate: 输出控制, 只有打开才会可以从Memory里读取值。
- forget gate: 遗忘控制,决定是要忘记清空,还是保存Memory里的值。
可以看到,LSTM的一个Memory cell有4个input 、1个output。output的就是Memory里的值,input的就是想要写进Memory中的值(其实就是隐藏层的输出值)以及控制三个gate的门控信号。
结构
下面深入的理解下LSTM的结构,看下图
从表达式的角度来看Memory cell, z z z 是想存储进Memory的值, z i