吴恩达Deeplearning.ai 第五课 Sequence Model 第一周------Gated Recurrent Unit(GRU)
这一节主要讲述了GRU单元
先来看看标准的RNN单元:
简化的GRU单元:
与一般的RNN单元不同的是增加了一个参数c,表示memory cell
在GRU中,令c<t>
= a<t>
例如,当cat为单数时令c<t>
为1,复数时为0,这个参数一直保持住并且在需要的时候(即要决定be动词的单复数的时候)会参与决定be动词单复数的计算。(???这里存疑,tanh函数如何保证c为0或者1,是不是应该用sigmoid)
c的更新利用一个门Γu来进行控制,Γu为0或1,并利用更新公式来更新c<t>
。需要注意的是这里面的*表示element wise的相乘
左边是简化的GRU单元
这里面存在一个问题,由于在计算中输入x<t>
和a<t>
都是向量,自然计算得到的c<t>
也是向量。可以认为:c<t>
的每一位都记录了不同的信息,比如某一位记录的是cat的单复数,其他位记录的是这句话的其他信息(比如这句话是在将吃的食物等)。
由于c<t>
有很多位,是一个向量,因此gate(Γ)也是一个向量,每次更新可能只更新c中的某些位。因此Γ记录的是c<t>
不同位置的更新信息
在这句话中,c<t>
中记录cat为单数的位一直保持住,并告诉be动词的位置应该用单数形式
完整的GRU单元:
完整的GRU模块还增加了一个Γr,用来计算c和c ̃的相关性,r代表relevance(???其实这里不太明白为什么这里这样能表示它们的相关性)。至于添加这个gate的原因,Ng在课程里讲这是研究人员在多次尝试后将其作为普遍适用的了。
对于GRU单元的结构,我们也可以进行自定义,不过效果可能就不如这个标准GRU模块了