长短时期记忆(LSTM)及门控循环单元(GRU)网络结构

一、背景

1、RNN自身可以通过不停的将信息循环操作,保证信息持续存在,从而可以利用前面得事件信息来对后面得事件进行分类操作。
2、RNN处理这类任务时不一定就可以完全得理解之前的记忆,因为在语句过长得情况下,之前的文本内容在传到后期时已经不再具有那么的信息。
(1)在‘the clouds are in the sky’中,如果最后进行预测,则我们可以大概率的将sky进行预测出来。
(2)若在一个复杂的任务中‘I grew up in France… I speak fluent French.’如果在这句话中我们要进行最后一个单词French的预测就比较麻烦,因为我们最后一个单词离France比较远。
3、在RNN中若要解决2的(2)这类问题则需要通过调参的操作来进行解决。

二、LSTM网络

1、标准的RNN与LSTM网络的对比
(1)在RNN中每个重复的模块仅具有比较简单的一个网络结构
在这里插入图片描述

(2)在LSTM中,它与RNN具有类似的这种链式结构,区别于RNN的地方在于,它的内部具有四个复杂的网络层。
在这里插入图片描述

以下为LSTM中各类符号的定义图
在这里插入图片描述
图中黄色类似于CNN里的激活函数操作,粉色圆圈表示点操作,单箭头表示数据流向,箭头合并表示向量的合并(concat)操作,箭头分叉表示向量的拷贝操作。

2、简述LSTM的核心内容
我们可以把LSTM的核心理解为一个细胞状态,用贯穿细胞的水平线进行表示。这个细胞状态和一个传送带类似,它虽然贯穿整个细胞,却仅有很少的分支出现,只有这样才能保证信息可以不变的流过整个循环神经网络(RNN)。

在这里插入图片描述

然而,在LSTM的网络中,我们可以通过一种被称为门的结构,对细胞状态中的信息进行删除或者添加信息。
这些门可以选择性的决定让细胞状态中的哪些信息通过;门的结构也很简单,在LSTM的内部,门的结构为一个sigmoid层和一个点乘操作的组合。
在这里插入图片描述

由于sigmoid层的输出值是在0到1之间,这代表着有多少的信息可以流过sigmoid层。通常0表示都不能通过,而1表示都能通过。
通常在一个LSTM中包含三个门来控制细胞状态

3、一个一个门的打开LSTM(遗忘门、输入门、输出门)
(1)遗忘门
LSTM的第一件事情是需要决定我们的细胞状态需要丢弃哪些信息。所以我们通过遗忘门来进行这项操作,这个遗忘门是通过sigmoid的单元来进行处理操作的。它通过查看ht1h_{t-1}xtx_t中的信息来输出一个0-1之间的向量,该向量里面的0-1值可以表示细胞状态Ct1C_{t-1}中的哪些信息保留或丢弃多少。0表示不保留,1表示保留。遗忘门的结构如下图。

在这里插入图片描述ft=σ(Wf[ht1,xt]+bf)f_t = \sigma(W_f*[h_{t-1},x_t]+b_f)

(2)输入门
通过输入门,我们可以决定为当前的细胞状态添加哪些新的信息。这一步分为两个子步骤,第一步,我们得利用ht1h_{t-1}xtx_t通过一个称为输入门的操作来决定更新哪些信息。第二步,利用ht1h_{t-1}xtx_t通过一个tanh层得到新的候选细胞信息CTC'_T,这些信息可能会被更新到细胞信息中。
在这里插入图片描述
it=σ(Wi[ht1,xt]+bi)i_t = \sigma(W_i*[h_{t-1},x_t]+b_i)
Ct=tanh(Wc[ht1,xt]+bc)C'_t=tanh(W_c*[h_{t-1},x_t]+b_c)
将更新旧得细胞信息Ct1C_{t-1},变为新的细胞信息CtC_t。更新的规则是通过遗忘门选择忘记旧细胞信息的一部分,通过输入门选择添加候选细胞信息CtC'_t的一部分得到新的细胞信息CtC_t。更新操作如下
在这里插入图片描述Ct=ftCt1+itCtC_t = f_t*C_{t-1}+i_t*C'_t
CtLSTM**C_t可以理解为LSTM的一种状态,保存的中间态**
(3)输出门
更新完细胞状态后需要根据输入的$h_{t-1}和x_t来判断输出细胞的哪些状态特征,这里需要将输入经过一个称为输出门的sigmoid层得出判断条件,然后将细胞状态经过tanh层得出一个-1~1之间值得向量,该向量与输出门得到得判断条件相乘就得出了最终该循环神经网络得单元输出
在这里插入图片描述
Ot=σ(Wo[ht1,xt]+bo)O_t = \sigma(W_o[h_{t-1},x_t]+b_o)
ht=Ottanh(Ct)h_t = O_t * tanh(C_t)

三、GRU

1、GRU是LSTM网络的一种效果很好的变体,它较LSTM网络的结构更加简单,参数也相应的减少。
2、对比LSTM引入的三个门函数(遗忘门、输入门、输出门)中,GRU中仅仅只有两个门函数(更新门、重置门)

在这里插入图片描述
其中ztz_trtr_t分别表示更新门和重置门。更新门用于控制前一时刻的状态信息被代入到当前状态中的程度,更新门(ztz_t)的值越大则说明前一时刻的状态信息代入越多;重置门(rtr_t)控制前一状态有多少信息被写入到当前的候选集h~t\widetilde{h}_t,重置门越小,前一状态的信息被写入的越少。

3、前向传播中的公式理解
rt=σ(wr[ht1,xt])r_t = \sigma(w_r*[h_{t-1},x_t])
zt=σ(wz[ht1,xt])z_t = \sigma(w_z*[h_{t-1},x_t])
h~t=tanh(wh~[rtht1,xt])\widetilde{h}_t = tanh(w_{\widetilde{h}}*[r_t*h_{t-1},x_t])
ht=(1zt)ht1+zth~th_t= (1-z_t)*h_{t-1}+z_t*\widetilde{h}_t
yt=σ(woht)y_t=\sigma(w_o*h_t)
注:数和矩阵相乘为点乘,其他的为矩阵乘法

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章