传统神经网络都是从零开始理解,这首个很大的缺点。
如何把之前的信息引入到当前任务中就需要用到RNN。
LSTM网络就是一种特殊的RNN结构,它能够学习长距离依赖。LSTM的结构就是用来防止长距离依赖问题,记住之前的信息对它而言是很自然的事情。
LSTM结构单元就像是传送带,从左边到右边只经历了轻微了线性变换。LSTM有这种移除或者添加信息的能力,考靠的就是门(gates)。
第一步:我们考虑哪些信息是我们不需要的,我们直接扔掉。这就是forget gate要做的事情。
上面的sigmod函数就是决定信息的遗忘程度。1表示完全保留,0表示彻底丢弃。
下一步是要决定哪些新信息我们要保存,这里有两个部分:
1. input gate
2. tanh layer
得到新向量
C̃ t
。然后我们综合这两部分得到一个新向量。
接下来我们要更新结构状态(cell state),从 Ct−1 到 Ct 。
我们来梳理一下过程,进来一个状态 Ct−1 ,我们先要忘掉之前准备忘掉的一些东西 ft∗Ct−1 ,然后我们加上要保留的新信息 it∗C̃ t :
最后,我们要决定要输出什么,输入当然是我们的状态(cell state)啦,但是我们要在输出之前先规整一下数据,这就是输出门(ouput gate)要做的事情。
首先,我们用sigmoid层来对输出的来滤一下波,然后放到tanh层中,然后再用输出的sigmoid gate的输出相乘。
当然,各个论文当中的LSTM的结构不尽相同,有各种各样的变种,不过也大同小异,基本结构就是如上所示,最重要的就是input gate,forget gate,oupgate三部分。
注:本文参考这篇博客,加入了点自己的理解,不当之处敬请指出。