图解LSTM关键门

网上关于LSTM的整理也已经很多了,最近学校上了text processing,被整理的图片所吸引,所以截取了一点整理了下来。

image.png

将当前输入和上一个时刻的隐含层state拼接后,串接流过3个门控电路。

输入门:决定要在cell中添加多少信息。

遗忘门:决定要在cell中忘掉多少信息。

输出门:决定要在最后输出多少信息。

image.png

保留原始RNN的输出结构,即输入x和上一个时刻的隐含层h(t-1)。

紫色部分的意思是,在LSTM中也一样保留着原始RNN的输出结构,只是在这个结构的基础上,我们加上了一系列的门控,归根到底的RNN root结构还是会保留的。这里也是为了便于记忆。

image.png

将输入门的输出乘以原生的RNN网络输出。

也就是在输入门的作用下,多少信息从原生RNN中得到保留。用一个elment-wise乘积来记录通过门后的保留值。

image.png

将遗忘门的输出乘以上一个cell即c(t-1)。

遗忘门在这里与上一个cell的状态做elment-wise乘积,来对上一个cell做遗忘处理。
这里结合3,4,一次对新状态的保留操作和一次对上一个记忆元的遗忘操作,来生成了一个当前的cell状态。

image.png

输出门的输出和新生成的cell element-wise 乘积得到新的隐含层。

这里先对cell进行了一次tanh的非线性映射,再与输出门发生关系。

image.png

重点来了,用一句话来概括的话就是:

Absorb what is useful, discard what is not, add what is uniquely your own.

汇总一下所有的公式:
image.png

针对 GRU,我们也可以得到类似的结果
image.png

针对深度网络中的梯度爆炸和梯度弥散问题,LSTM和GRU只能在一定程度上缓解,也并不能完全根治。
能缓解是因为增加了遗忘门,可以一定程度上防止数量级较小的偏导数消失,因为它直接给你忘了,也就是说不太重要。针对长句或者说长时依赖,它的cell又可以一定程度的进行保留,所以隐含层不至于全部消失。
不能根治是因为网络结构都是嵌套的(nested),因此一定会产生不稳定的梯度,这部分梯度可能在chain rule求导的各个方向上发生,对激活函数求导会导致梯度消失,所以大家用Relu等等。