前面我们介绍了GRU,得到了很多公式,具体表示如下: c ~ < t > = t a n h ( W c [ Γ r ∗ c < t − 1 > , x < t > ] + b c ) \tilde{c}^{<t>}=tanh(W_c[\Gamma_r*c^{<t-1>},x^{<t>}]+b_c) c~<t>=tanh(Wc[Γr∗c<t−1>,x<t>]+bc) Γ u = σ ( W u [ c < t − 1 > , x < t > ] + b u ) \Gamma_u=\sigma (W_u[c^{<t-1>},x^{<t>}]+b_u) Γu=σ(Wu[c<t−1>,x<t>]+bu) Γ r = σ ( W r [ c < t − 1 > , x < t > ] + b r ) \Gamma_r=\sigma(W_r[c^{<t-1>},x^{<t>}]+b_r) Γr=σ(Wr[c<t−1>,x<t>]+br) c < t > = Γ u ∗ c ~ < t > + ( 1 − Γ u ) ∗ c < t − 1 > c^{<t>}=\Gamma_u*\tilde{c}^{<t>}+(1-\Gamma_u)*c^{<t-1>} c<t>=Γu∗c~<t>+(1−Γu)∗c<t−1> c < t > = a < t > c^{<t>}=a^{<t>} c<t>=a<t>对于GRU我们有 c < t > = a < t > c^{<t>}=a^{<t>} c<t>=a<t>,还有两个门,更新门 Γ u \Gamma_u Γu和相关门 Γ r \Gamma_r Γr, c ~ < t > \tilde{c}^{<t>} c~<t>是代替记忆细胞的候选值,然后我们使用更新门 Γ u \Gamma_u Γu来决定是否要用 c ~ < t > \tilde{c}^{<t>} c~<t>更新 c < t > c^{<t>} c<t>。
LSTM甚至是一个比GRU更加强大和通用的版本,介绍一下LSTM的主要公式,我们继续回到记忆细胞 c < t > c^{<t>} c<t>和更新它的 c ~ < t > \tilde{c}^{<t>} c~<t>上,其公式如下所示: c ~ < t > = t a n h ( W c [ a < t − 1 > , x < t > ] + b c ) \tilde{c}^{<t>}=tanh(W_c[a^{<t-1>},x^{<t>}]+b_c) c~<t>=tanh(Wc[a<t−1>,x<t>]+bc)注意在LSTM中不再有 a < t > = c < t > a^{<t>}=c^{<t>} a<t>=c<t>的情况,这是现在我们用的公式,我们不再用 Γ r \Gamma_r Γr。
我们像以前那样,有一个更新门 Γ u \Gamma_u Γu和表示更新的参数 W u W_u Wu,公式表示如下: Γ u = σ ( W u [ a < t − 1 > , x < t > ] + b u ) \Gamma_u=\sigma(W_u[a^{<t-1>},x^{<t>}]+b_u) Γu=σ(Wu[a<t−1>,x<t>]+bu)一个LSTM的新特性是不只有一个更新门控制,我们将用不同的项来替代它们,要用别的项来取代公式 c < t > = Γ u ∗ c ~ < t > + ( 1 − Γ u ) ∗ c < t − 1 > c^{<t>}=\Gamma_u*\tilde{c}^{<t>}+(1-\Gamma_u)*c^{<t-1>} c<t>=Γu∗c~<t>+(1−Γu)∗c<t−1>中的 Γ u \Gamma_u Γu和 1 − Γ u 1-\Gamma_u 1−Γu,这里我们用 Γ u \Gamma_u Γu和 Γ f \Gamma_f Γf,所以这个 Γ f \Gamma_f Γf门就是一个sigmoid函数,其计算公式为 Γ f = σ ( W f [ a < t − 1 > , x < t > ] + b f ) \Gamma_f=\sigma(W_f[a^{<t-1>},x^{<t>}]+b_f) Γf=σ(Wf[a<t−1>,x<t>]+bf)然后我们有一个新的sigmoid的输出门,其计算公式为 Γ o = σ ( W o [ a < t − 1 > , x < t > ] + b o ) \Gamma_o=\sigma(W_o[a^{<t-1>},x^{<t>}]+b_o) Γo=σ(Wo[a<t−1>,x<t>]+bo)于是记忆细胞的更新值。
于是记忆细胞的更新公式为 c < t > = Γ u ∗ c ~ < t > + ( Γ f ) ∗ c < t − 1 > c^{<t>}=\Gamma_u*\tilde{c}^{<t>}+(\Gamma_f)*c^{<t-1>} c<t>=Γu∗c~<t>+(Γf)∗c<t−1>所以这给了记忆细胞选择权去维持旧的值 c < t − 1 > c^{<t-1>} c<t−1>或者加上新的值 c ~ < t > \tilde{c}^{<t>} c~<t>,所以这里用了单独的更新门和遗忘门。
最后的
c
<
t
>
=
a
<
t
>
c^{<t>}=a^{<t>}
c<t>=a<t>公式变为
a
<
t
>
=
Γ
o
∗
t
a
n
h
c
<
t
>
a^{<t>}=\Gamma_o*tanh\space c^{<t>}
a<t>=Γo∗tanh c<t>以上就是LSTM的主要的式子了。LSTM中有三个门而不是两个门,整理一下,LSTM中用到的所有式子如下图所示.
用下面的图片稍微解释一下
以上就是LSTM,你可能会想到,这里和一般使用的版本会有所不同,最常用的版本可能是,门值不仅取决于
a
<
t
−
1
>
a^{<t-1>}
a<t−1>和
x
<
t
>
x^{<t>}
x<t>,有时候也可以偷窥一下
c
<
t
−
1
>
c^{<t-1>}
c<t−1>的值,这叫做窥视孔连接。窥视孔连接,其实意思就是门值不仅仅取决于
a
<
t
−
1
>
a^{<t-1>}
a<t−1>和
x
<
t
>
x^{<t>}
x<t>,也取决于上一个记忆细胞的值,然后窥视孔连接就可以结合这三个门来计算了。
如你所见,LSTM主要的区别在于一个技术上的细节,比如有一个100维的向量,有一个100维的隐藏的记忆细胞单元,然后比如第50个 c < t − 1 > c^{<t-1>} c<t−1>元素只会影响第50个元素对应的那个门,所以关系是一对一的,于是并不是任意的这100维的 c < t − 1 > c^{<t-1>} c<t−1>可以影响所有的门元素,相反的,第一个 c < t − 1 > c^{<t-1>} c<t−1>元素只能影响门的第一个元素,第二个元素影响对应的第二个元素,如此类推。