循环序列模型 —— 1.10 长短期记忆(LSTM)

前面我们介绍了GRU,得到了很多公式,具体表示如下:c~<t>=tanh(Wc[Γrc<t1>,x<t>]+bc)\tilde{c}^{<t>}=tanh(W_c[\Gamma_r*c^{<t-1>},x^{<t>}]+b_c)Γu=σ(Wu[c<t1>,x<t>]+bu)\Gamma_u=\sigma (W_u[c^{<t-1>},x^{<t>}]+b_u)Γr=σ(Wr[c<t1>,x<t>]+br)\Gamma_r=\sigma(W_r[c^{<t-1>},x^{<t>}]+b_r)c<t>=Γuc~<t>+(1Γu)c<t1>c^{<t>}=\Gamma_u*\tilde{c}^{<t>}+(1-\Gamma_u)*c^{<t-1>}c<t>=a<t>c^{<t>}=a^{<t>}对于GRU我们有c<t>=a<t>c^{<t>}=a^{<t>},还有两个门,更新门Γu\Gamma_u和相关门Γr\Gamma_rc~<t>\tilde{c}^{<t>}是代替记忆细胞的候选值,然后我们使用更新门Γu\Gamma_u来决定是否要用c~<t>\tilde{c}^{<t>}更新c<t>c^{<t>}

LSTM甚至是一个比GRU更加强大和通用的版本,介绍一下LSTM的主要公式,我们继续回到记忆细胞c<t>c^{<t>}和更新它的c~<t>\tilde{c}^{<t>}上,其公式如下所示:c~<t>=tanh(Wc[a<t1>,x<t>]+bc)\tilde{c}^{<t>}=tanh(W_c[a^{<t-1>},x^{<t>}]+b_c)注意在LSTM中不再有a<t>=c<t>a^{<t>}=c^{<t>}的情况,这是现在我们用的公式,我们不再用Γr\Gamma_r

我们像以前那样,有一个更新门Γu\Gamma_u和表示更新的参数WuW_u,公式表示如下:Γu=σ(Wu[a<t1>,x<t>]+bu)\Gamma_u=\sigma(W_u[a^{<t-1>},x^{<t>}]+b_u)一个LSTM的新特性是不只有一个更新门控制,我们将用不同的项来替代它们,要用别的项来取代公式c<t>=Γuc~<t>+(1Γu)c<t1>c^{<t>}=\Gamma_u*\tilde{c}^{<t>}+(1-\Gamma_u)*c^{<t-1>}中的Γu\Gamma_u1Γu1-\Gamma_u,这里我们用Γu\Gamma_uΓf\Gamma_f,所以这个Γf\Gamma_f门就是一个sigmoid函数,其计算公式为Γf=σ(Wf[a<t1>,x<t>]+bf)\Gamma_f=\sigma(W_f[a^{<t-1>},x^{<t>}]+b_f)然后我们有一个新的sigmoid的输出门,其计算公式为Γo=σ(Wo[a<t1>,x<t>]+bo)\Gamma_o=\sigma(W_o[a^{<t-1>},x^{<t>}]+b_o)于是记忆细胞的更新值。

于是记忆细胞的更新公式为c<t>=Γuc~<t>+(Γf)c<t1>c^{<t>}=\Gamma_u*\tilde{c}^{<t>}+(\Gamma_f)*c^{<t-1>}所以这给了记忆细胞选择权去维持旧的值c<t1>c^{<t-1>}或者加上新的值c~<t>\tilde{c}^{<t>},所以这里用了单独的更新门和遗忘门。

最后的c<t>=a<t>c^{<t>}=a^{<t>}公式变为a<t>=Γotanh c<t>a^{<t>}=\Gamma_o*tanh\space c^{<t>}以上就是LSTM的主要的式子了。LSTM中有三个门而不是两个门,整理一下,LSTM中用到的所有式子如下图所示.
循环序列模型 —— 1.10 长短期记忆(LSTM)
用下面的图片稍微解释一下
循环序列模型 —— 1.10 长短期记忆(LSTM)
以上就是LSTM,你可能会想到,这里和一般使用的版本会有所不同,最常用的版本可能是,门值不仅取决于a<t1>a^{<t-1>}x<t>x^{<t>},有时候也可以偷窥一下c<t1>c^{<t-1>}的值,这叫做窥视孔连接。窥视孔连接,其实意思就是门值不仅仅取决于a<t1>a^{<t-1>}x<t>x^{<t>},也取决于上一个记忆细胞的值,然后窥视孔连接就可以结合这三个门来计算了。

如你所见,LSTM主要的区别在于一个技术上的细节,比如有一个100维的向量,有一个100维的隐藏的记忆细胞单元,然后比如第50个c<t1>c^{<t-1>}元素只会影响第50个元素对应的那个门,所以关系是一对一的,于是并不是任意的这100维的c<t1>c^{<t-1>}可以影响所有的门元素,相反的,第一个c<t1>c^{<t-1>}元素只能影响门的第一个元素,第二个元素影响对应的第二个元素,如此类推。