LSTM和RNN

   LSTM是一种特殊结构的RNN,所以这里可以先理解一下RNN。

RNN

   RNN是一种具有反馈结构的神经网络,其输出不但与当前输入和网络权值有关系,也和之前网络的输入有关系;RNN通过添加跨越时间点的自连接隐藏层,对时间进行建模,也就是说,隐藏层的反馈,不仅进入输出端,还进入下一时间的隐藏层。理论上,RNN可以利用任意长的序列信息,但实际中只能回顾之前的几步。

   上面的图中展示了RNN被展开成一个全网络后的结构。这里展开的意思是把针对整个序列的网络结构表示出来。但是RNN会存在一个问题,即上面提到的其只能回顾最近几层的信息,前面的信息会存在梯度消失或者梯度爆炸的情况,所以这里引入了LSTM。

LSTM

   LSTM和RNN的不同在于其还有一个控制信息存储的单元(包括 输入控制, 输出控制, 忘记控制)。

   忘记控制即哪些状态应该被遗忘。这部分通过sigmoid来实现,也就是最左边的通路。根据输入和上一时刻的输出来决定当前状态是否有需要被遗忘的内容。concatenate的输入和上一时刻的输出经过sigmoid函数后,越接近于0被遗忘的越多,越接近于1被遗忘的越少。
   输入控制,即哪些新的状态应该被加入,这里也是使用sigmoid函数,但是需要被记住的内容并不是直接concatenate的输入和上一时刻的输出,还要经过tanh,这点应该也是和RNN保持一致。此处的sigmoid和上一处是不一样的,因此单元在忘记需要忘记的,记住需要记住的之后,就可以作为下一阶段的输入了。
   输出控制,即输出应该做什么,即上图最右边的部分,也是通过sigmoid函数做门,对第二步求得的状态做tanh后的结果过滤,从而得到最终的预测结果。

也就是说,LSTM就是RNN的基础上,增加对过去的过滤,选择影响更大的状态,而不是简单的选择最近的状态。所以是长短时记忆网络。

参考:
1.https://zhuanlan.zhihu.com/p/22266022
2.https://zhuanlan.zhihu.com/p/24813287
3.https://blog.csdn.net/lanmengyiyu/article/details/79941486

0%