Gated Recurrent Unit
看吴恩达老师的视频学习的GRU和LSTM,我概括一下。看这句话
The cat,which already ate…,was full.
was这个单词显然与cat相关,若是cats,则应该是were。也就是说前后隔了很远的单词之间有依赖关系,基本的RNN网络无法处理这种关系,GRU就是处理这种依赖关系的。
GRU的核心增加一个记忆单元,是当处理cat时,我们记住它是单数,也就是记住可能对后面有用的单词的特征,在处理which、already时,不更新这个记忆单元。控制是否要记住的东西叫做门 Γ u \Gamma_u Γu,门 Γ u \Gamma_u Γul来控制记忆单元是否更新, Γ u \Gamma_u Γu是多维向量,1bit记住cat是单数特征,一比特用来记住ate特征可能与吃饭有关…。下面看看怎么记忆以及记忆什么。
c N < t > = t a n h ( Γ r ∗ W c [ c < t − 1 > , x < t > ] + b c ] \large c^{N<t>}=tanh(\Gamma_r*W_c[c^{<t-1>},x^{<t>}]+b_c] cN<t>=tanh(Γr∗Wc[c<t−1>,x<t>]+bc]
Γ u = s i g m o d ( W u [ c < t − 1 > , x < t > ] + b u ] \large \Gamma_u=sigmod(W_u[c^{<t-1>},x^{<t>}]+b_u] Γu=sigmod(Wu[c<t−1>,x<t>]+bu]
c < t > = Γ u ∗ c N < t > + ( 1 − Γ u ) ∗ c < t − 1 > \large c^{<t>}=\Gamma_u*c^{N<t>}+(1-\Gamma_u)*c^{<t-1>} c<t>=Γu∗cN<t>+(1−Γu)∗c<t−1>
a t = c t \large a_t=c_t at=ct
c N < t > c^{N<t>} cN<t>是没有GRU或LSTM时 a < t > a^{<t>} a<t>的值。sigmod使得输出非常接近0或1, Γ u \Gamma_u Γu为0时,即不要更新记忆单元,那么 c < t > c^{<t>} c<t>就不变,等于上一步的 c < t > c^{<t>} c<t>。 Γ u \Gamma_u Γu为1是,则更新记忆单元。 Γ r \Gamma_r Γr就是用来控制更新记忆时与之前的记忆有多大关联。
Γ r = s i g m o d ( W r [ c < t − 1 > , x < t > ] + b r ] \large \Gamma_r=sigmod(W_r[c^{<t-1>},x^{<t>}]+b_r] Γr=sigmod(Wr[c<t−1>,x<t>]+br]
Long Short-Term Memory
LSTM 和 GRU 一样都是为了解决梯度消失问题,使网络能进行深层次的学习。
第一个公式即为
c
N
<
t
>
c^{N<t>}
cN<t>,第二个为 更新门,控制当前记忆存入。第三个为 遗忘门,控制对过去记忆的保留程度,在GRU中这一项由更新门来控制。第三项为 输出门,在GRU中
a
<
t
>
=
c
<
t
>
a^{<t>}=c^{<t>}
a<t>=c<t>,在LSTM中用一个输出门控制。
下面是 LSTM 的图解,我认为还是公式比较好理解。