RNN中的门控循环单元GRU

1. RNN隐层单元结构可视化

下面是一个基本的RNN隐层单元结构:

在这里插入图片描述

其中,a是上一个时刻的激活函数输出值,x是当前时刻的输入,y是当前时刻的输出。

要理解这个单元结构,需要注意2点:

  • a与x结合,通过激活函数的作用后,有两个分支,一个分支作为下一个时刻的输入a
  • 另一个分支通过softmax作用后,作为当前时刻的输出y

2. GRU单元中的符号

GRU(Gated Recurrent Unit)是门控循环单元的简称。为了理解GRU,我们一步一步引入一些记号:

  1. 符号c:代表memory cell(记忆细胞),提供了记忆能力

  2. c就等于t时刻激活函数输出值a(这里c=a,但在LSTM中他们并不相等)

  3. c~的值(如下),它会被用于更新c的值(本节6中会讲到更新公式)

在这里插入图片描述

所以,c<t>的值,是01之间的小数,因为tanh(x)在x大于0时,输出是0~1之间的小数。

  1. sigma(符号类似6),代表sigmoid函数,所以"6(x)"的输出值为0~1之间的小数;而且大多数x输入,输出的值都非常接近0或者1。具体在5中可以看到这个符号。

  2. gamma(符号类似7镜像过来),看起来像门的边缘,所以门用gamma符号来表示。有时候也用Gate的G字母来表示(门)。门会决定是否要更新c值,门的作用就是决定什么时候你会更新(记住)这个值。

在这里插入图片描述

  1. 最终,记忆细胞c的值,由下式决定

在这里插入图片描述

如果gamma=1,则用3中c~的值的更新c;否则,就不更新c,沿用上一时刻的值(c=c)。

因为sigmoid函数的值比较容易为0,所以大部分内容是不需要记忆的。

3. GRU单元原理举例

我们举个简单的例子来说明GRU的工作原理:

给定一句话:The cat, which already ate …, was full.

GRU在处理时,t时刻处理到cat时,就会记住cat为单数,所以记忆细胞c值为1(假设单数就为1)。

处理到was之前,发现记忆细胞c还是为1,所以就知道是单数,我们需要用was。

门的作用,就是告诉我们哪些时刻需要更新c值(需要记住它),哪些时刻可以不更新(可以忘记它,不需要记忆这些内容)。所以处理到“The cat”时,更新c值,而后面的半句话(which already ate …)可以不需要记忆(可以忘记它了)。

注意,这里举例简化了c的维度,实际上,c的值可能是高维的。并且实际使用中,gamma大多数情况下不会为1或0,而是0~1之间的小数。

4. GRU单元结构可视化

首先说明,上面的公式,比这个结构图好理解。具体的GRU单元结构可视化如下图

在这里插入图片描述

它与1中讲到的RNN隐层结构很类似,要理解这个单元结构,需要注意2点:

  • c与x结合,通过激活函数与门的作用后,有两个分支,一个分支作为下一个时刻的输入c
  • 另一个分支通过softmax作用后,作为当前时刻的输出y

5. GRU如何改善梯度消失

我们再回看记忆细胞值更新的公式:

在这里插入图片描述

可见gamma(门控)的值,是比较容易接近0的,因为sigmoid函数的作用。在sigmoid(x)中,在一个很大的参数区间(x<0)都等于0。

所以,gamma的值接近0时,c的值就会被维护住(c=c),这样就不会因为梯度消失而使c的值消失了。

回忆一下,梯度消失,会导致a的值,不能传到后面时刻。这里c=a(2.2中定义)。c能被记住,也就不存在梯度消失问题了。

这使得RNN能被运行在非常庞大的依赖词上了。

6. 完整的GRU公式

上面讲的是简化了的GRU,完整的GRU,还需要加上一个门(一共两个门),如下:

在这里插入图片描述

打印体公式(3个公式)是简化的GRU的表达(上面讲的内容),手写体公式是完整GRU中被加上的另一个门gamma_r(符号类似7镜像过来)。

r代表相关性,所以gamma_r表示计算出的下一个时刻的c值,与上一个时刻的c值有多大的相关性。

这4个公式,表示了完整的GRU。

7. 总结

研究者通过很多的实验,证明了GRU再解决梯度消失问题上的有效性,也证明了GRU能让神经网络有更深的连接,能产生更长范围的依赖,所以GRU是一个标准版本,是研究者们最常使用的一个版本,他是非常健壮和实用的。

参考

  • [1]. Andrew Ng Sequence Models video
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章