LSTM可以通过门这种结构给cell state移除或增加信息。门能够选择性让信息通过,它由sigmoid神经网络层和逐点乘法操作符组成。sigmoid层输出0到1的数字,描述每个组件应该让它通过多少。数值0表示都不通过,1表示让它全部通过。
LSTM有三个门来保护和控制cell state的状态。整个模型结构如下图
图中的三个绿色框框从左到右依次是忘记门(forget gate),更新门(update gate),输出门(output gate)。
Step by Step理解LSTM
先整体看一下LSTM和GRU的不同:
让我们看看右边,前两行其实就是和GRU一样,第3行等式,它是计算忘记门的值,它用于更新单元状态(第四行等式),最后第5行是计算输出门,用于得到第6行A在t时刻的值。
第一步就是决定我们要从cell state中丢弃哪些信息。这个决定是由叫‘forget gate layer’的sigmoid层指定的。它看起来像输入ht-1,xt,然后为每个ct-1(t-1时刻的cell state)变量中的数据输出0到1之间的数字。1就是保留全部,0是全部不要。
下一步是确定要在cell state下存储哪些新信息。
这一步包括两个部分:
首先,称为“更新门”的sigmoid层决定了我们将更新哪些值。
接下来,tanh层创建新候选值(可以添加到cell state中的值)C̃ t向量。
下一步将会结合这两个值去对状态进行更新。
这一步是更新cell state。
我们将旧状态值和忘记门相乘,目的是忘记该忘记的信息,只记住重要的信息;然后用更新门和候选状态相乘,目的是决定到底我们需要多少新状态值的信息。
最后,我们需要决定要输出什么。
这个输出是在cell state基础上计算的,但是是它的过滤版本。首先我们用sigmoid层来确定要输出当前cell state的哪些部分;接着我们把结果送到tanh并和输出门相乘,这样我们就可以只输出我们期望的那部分结果。
因为有这三个额外的门,LSTM有着更强的记忆能力,它们控制着哪个部分需要记住,记住多少,所以它在处理序列模型的时候很受欢迎。
ps: 本来想一次性用一篇文章写完的,后来发现理论+代码这个工程真有点大,就分成两篇。
参考资料:
吴恩达deeplearning.ai第五门课 Module 1: Recurrent Neural Networks (RNNs)
The Most Intuitive and Easiest Guide for Recurrent Neural Network
Must-Read Tutorial to Learn Sequence Modeling (deeplearning.ai Course #5)
2015-08-Understanding-LSTMs
今日互动
文首的问题你想清楚了吗?