今天看啥  ›  专栏  ›  prophet__

吴恩达深度学习-序列模型 1.9 GRU单元

prophet__  · 简书  ·  · 2020-01-30 23:55

GRU单元(gated-recurrent-unit)是为了解决长期依赖问题而提出的一种解决方案,通过这个单元可以一定程度解决梯度消失问题,并且提高远距离的单元联系。

首先,我们复习一下RNN的基本单元。然后我们会用类似的图来对GRU单元进行解释。

GRU在RNN的使用过程当中会提供一个C单元,用来进行储存(memory cell)。

在GRU单元当中,Ct=At,但是在LSTM网络当中它们是不一样的(这个后面会讲到)。然后它还有一个候选人C ,C 是通过激活函数tanh计算出来的一个值,C~是否替代C取决于“门的开关”。那么什么是门呢?

GRU单元最重要的核心思想是它有一个门(我们称之为GAMMAu),这个门可以决定让不让C~对C进行更新。(通过sigmod函数归一化之后,它的值会一直处于0-1之间)

我们可以看到sigmod函数会在大部分的时间内很接近于0或者1,我们假设在单数的时候Ct=1,使用前面那个猫的例子:当句子读到The cat的时候,会把Ct设为1,然后记住,接着会继续往后找,找到was这里把它设置为单数,就完成了它的使命,就可以忘记这个Ct了。

这个门的函数式是这样的: Y = GAMMAu X Ct~ + ( 1 - GAMMAu ) X C(t-1)

也就是说,如果GAMMAu=0,那么就延续上一个Ct的值,如果等于 1,则使用它候选人的值,处于中间位置就是两个加权的和。

关于梯度消失: 由于GAMMAu在大部分情况下都会处于一个很小的值,很接近于0,所以Ct往往会延续上一个Ct-1的值,这样它就会保持在一个范围里,就不会出现梯度消失的情况。

Ct是一个多维的向量,向量的维数取决于它需要考虑的元素的个数。Ct、Ct 、GAMMAu都是相同长度的向量,因为GAMMAu决定了哪些维度会被触发,Ct 则是被触发值,Ct是未被触发的值。

但是呢,其实我们刚刚看到的这个是不完全的GRU,一个真正的GRU还包含了另外一组关于r的参数,跟之前的u一样同样需要计算,然后再放入Ct~的式子当中。

其实神经网络的设计有很多很多的选择,但是这个标准的GRU单元是前人们在尝试当中得到的一个鲁棒性和解决问题能力都比较强的解决方案。当然,你们也可以尝试着做更多不一样的神经网络,看看会不会有更好的效果。




原文地址:访问原文地址
快照地址: 访问文章快照