在这篇文章中将介绍的是RNN的一个“升级”模型,LSTM。LSTM可以说是复杂版本的RNN,相较于simple-RNN,LSTM可以有效地避免了梯度消失的问题,并且在RNN的基础上可以有更长的记忆。
1.LSTM的模型结构
LSTM与simple-RNN的区别更多的在于,LSTM引入了门的一个机制的设定,从而导致了LSTM有4个学习参数(simple-RNN只有一个)。
上图所展示的便是LSTM和simple-RNN的大致模型图。
在LSTM中,一共有3个门,忘记门(forget gate),输入门(input gate),以及输出门(output gate)。而这些门的主要作用便是有选择的让上一次的数据通过。
1.1 门
在LSTM中,我们讲到共有3个门,分别是忘记门,输入门,和输出门。
上图所展示的是LSTM中三个门对应的公式及其模型图。
我们设I_t,F_t,O_t分别对应输入门,忘记门以及输出门在t时刻的输出。我们可以看到三个门输入的参数都是input X_t以及上一层的Hidden state H_(t-1)。并且我们对每一个门,每一个X_t和H_(t-1)都设定了相应的权重W。(实际中,我们会对X_t和H_(t-1)进行结合变成一个矩阵,那么对应到的每一个门的参数权重W就只有一个,因此三个门有三个W)。
上图所展示的是忘记门的F_t运算图。
讲完忘记门的具体模型图,我们这边要就用数据实际的来讲解一下,忘记门是如何进行有选择的忘记的(以忘记门为例,其他两个门都一样)。过程也很简单,因为我们F_t是经过sigmoid函数得到的,因此对应的矩阵的值便在0-1之间,所以当矩阵中某一个值为0时,那么做数组元素依次相乘时,最后的结果便是0(不通过)。同理,当值为1时,那么做数组元素依次相乘时,最后的结果便是1(通过)。
上图所展示的是忘记门的一个数据选择。
1.2候选记忆单元
在LSTM中我们还加入了候选记忆单元这么一个部分,主要作用便是将X_t和H_(t-1)进行结合,产生C_t波浪(数学符号打不出来),这里我们也设定了一组W矩阵作为学习的参数。
上图所展示的是C_t波浪的数学公式。
1.3记忆单元
记忆单元产生结果便是LSTM的一个输出C_t。在1.1和1.2中,我们分别介绍了忘记门,输入门,已经候选记忆单元这三个部分,所以记忆单元便是由这三个所组成。
上图所展示的是LSTM中记忆单元对应的公式及其模型图。
我们可以看到加号的前一部分是忘记门和C_(t-1)做elementwise multiplication(数组元素依次相乘),这个作用便是对上一个的输出C_(t-1)的数据进行选择性的保留,加号的前一部分是输入门和C_t波浪做elementwise multiplication(数组元素依次相乘),这个作用便是对C_t波浪的数据进行选择性的保留。随后两个数据进行相加得到最后的C_t。
1.4隐状态
LSTM的隐状态和simple-RNN的隐变量相识,都是利用上一层的隐藏状态和这一层的输入进行结合,生成下一层的隐藏状态。
上图所展示的是LSTM中隐状态对应的公式及其模型图。
相较于simple-RNN,这里H_t的产生并不相同。我们可以看到它是将已经生成的C_t,先做激活运算,再与输出门 O_t做elementwise multiplication(数组元素依次相乘),得到最后的H_t。
1.5总结