1.Gated Recurrent Unit(GRU)门控循环单元
GRU改变了RNN隐藏层单元使其更好的捕捉深层连接,并改善了梯度消失问题。
相比于普通的RNN隐藏层单元,GRU增加了一个C(memory cell)记忆细胞,以增加记忆功能。
普通的RNN单元如下图所示:
简化版的GRU如下图所示:
其中---<t>表示上标:
c<t>:记忆细胞的在t时间步的值,表示是否要记忆此处的信息,GRU中c<t>=a<t>
c^<t>:重写记忆细胞的候选值,是否采用这个值来更新c<t>取决于Γu
Γu:更新门,u=update,决定什么时候更新记忆细胞,取值范围在0~1,0表示不更新记忆细胞即保持之前的值,1表示更新记忆细胞为候选值。
完整的GRU增加了一个相关门Γr,表示c<t−1>跟新的候选值c^<t>之间的相关性。
2. LSTM(Long short term memory) Unit长短时记忆单元
LSTM比之GRU更加有效。注意:LSTM中c<t>和a<t>将不再相等。
Γu:更新门(update)
Γf:遗忘门(forget)
Γo:输出门(output)
peephole connection窥视孔连接,将c<t−1>加入到对门的计算中,也就是门由c<t−1>,a<t−1>,x<t>共同决定。
GRU和LSTM比较:
GRU结构更简单,更有利于构建深层的RNN,LSTM功能更强大。
3. Bidirectional RNN双向循环神经网络(BRNN)
此网络结构使得在序列的某点,既可以获得之前的信息,也可以获得之后的信息。
以一个人名实体识别的例子来说明,下面两句话,判断Teddy是不是一个人名,只有前面的信息是不足够的
图中最下面x<1> x<4>x<1> x<4>表示输入的前四个单词,紫色框表示的是正向循环层,绿色框是反向循环层,正向循环和反向循环构成一个无环图,都属于正向传播,各值计算顺序如下:
a⃗<1>−a⃗<2>−a⃗<3>−a⃗<4>−a←<4>−a←<3>−a←<2>−a←<1>
所有的激活值都计算完毕之后,就可以计算预测值了:
y^<t>=g(wy[a⃗<t>,a←<t>]+by)
其中各单元可以是标准RNN单元,也可以是GRU单元、LSTM单元,对于NLP问题来说基于LSTM单元的BRNN用的比较多。
BRNN缺点:需要完整序列的数据才能预测。对于语音识别来说,也就是必须等到讲话的人讲完,才能预测,这并不能满足我们的需求,所以语音识别通常用其他更复杂的模型,而BRNN较广泛的应用于NLP问题。
4. Deep RNN
对于RNN来说一般很少像CNN那样堆叠很多层,3层对RNN来说就已经非常庞大了。如果需要堆叠多层,一般会删去水平连接。(以下是有三个隐层的网络)
某个RNN单元可以是标准RNN单元,也可以是GRU单元、LSTM单元甚至BRNN单元,可以自由设置。