门控循环单元:改变了RNN的隐藏层,使其可以更好地捕捉深层连接,并改善了梯度消失问题
简化的GRU模型
RNN隐藏层的单元的可视化:
a<t>表达式为:
a<t>=tanh(Wa[a<t−1>,x<t>]+ba) 为了解决梯度消失问题,对上述单元进行修改,添加了记忆单元,构建GRU,如下图所示:
表达式为:
c~<t>=tanh(Wc[c<t−1>,x<t>]+bc) Γu=σ(Wu[c<t−1>,x<t>]+bu) c<t>=Γu∗c~<t>+(1−Γu)∗c<t−1> c<t−1>=a<t−1>,c<t>=a<t>。符号c表示记忆细胞的值,a表示输出的激活值,c~<t>是个候选值,替代了c的值,Γu(0到1)意为gate,u表示“update”,当Γu=1时,代表更新;当Γu=0时,代表记忆,保留之前的模块输出。Γu能够保证RNN模型中跨度很大的依赖关系不受影响,消除梯度消失问题
完整的GRU
完整的GRU添加了另外一个gate,即Γr,表达式如下:
c~<t>=tanh(Wc[Γr∗c<t−1>,x<t>]+bc) Γu=σ(Wu[c<t−1>,x<t>]+bu) Γr=σ(Wr[c<t−1>,x<t>]+br) c<t>=Γu∗c~<t>+(1−Γu)∗c<t−1> a<t>=c<t> Γr门:计算出的下一个c<t>的候选值c~<t>跟c<t−1>有多大的相关性
c<t>可以是一个向量(编号1),如果有100维的隐藏的激活值,那么c<t>、c~<t>、Γu还有画在框中的其他值也是100维
∗实际上就是元素对应的乘积(c<t>=Γu∗c~<t>+(1−Γu)∗c<t−1>),若Γu(Γu=σ(Wu[c<t−1>,x<t>]+bu))是一个100维的向量,而里面的值几乎都是0或者1,则这100维的记忆细胞c<t>(c<t>=a<t>,编号1)就是要更新的比特