吴恩达Deeplearning.ai 第五课 Sequence Model 第一周------Gated Recurrent Unit(GRU)

这一节主要讲述了GRU单元

先来看看标准的RNN单元:

吴恩达Deeplearning.ai 第五课 Sequence Model 第一周------Gated Recurrent Unit(GRU)

简化的GRU单元:

吴恩达Deeplearning.ai 第五课 Sequence Model 第一周------Gated Recurrent Unit(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的相乘

吴恩达Deeplearning.ai 第五课 Sequence Model 第一周------Gated Recurrent Unit(GRU)

左边是简化的GRU单元

这里面存在一个问题,由于在计算中输入x<t>和a<t>都是向量,自然计算得到的c<t>也是向量。可以认为:c<t>的每一位都记录了不同的信息,比如某一位记录的是cat的单复数,其他位记录的是这句话的其他信息(比如这句话是在将吃的食物等)。

由于c<t>有很多位,是一个向量,因此gate(Γ)也是一个向量,每次更新可能只更新c中的某些位。因此Γ记录的是c<t>不同位置的更新信息

在这句话中,c<t>中记录cat为单数的位一直保持住,并告诉be动词的位置应该用单数形式

完整的GRU单元:

吴恩达Deeplearning.ai 第五课 Sequence Model 第一周------Gated Recurrent Unit(GRU)

完整的GRU模块还增加了一个Γr,用来计算c和c ̃的相关性,r代表relevance(???其实这里不太明白为什么这里这样能表示它们的相关性)。至于添加这个gate的原因,Ng在课程里讲这是研究人员在多次尝试后将其作为普遍适用的了。

对于GRU单元的结构,我们也可以进行自定义,不过效果可能就不如这个标准GRU模块了