what
- 所谓防止梯度消失,其实就是防止时间距离过大的两层神经元的参数w之间的联系过少,即 d W j / d W i d_{W_{j}}/d_{W_{i}} dWj/dWi过小,j和i的距离很大。
why
- 我们先看原始的RNN结构,从多对多的例子来看:
对w进行合并之后就是:
- 再看使用GRU之后的表达式:
我们可以看到,差别就是r和z的出现,**r是重置门,决定遗忘先前信息的程度。z是更新门,它决定了要忘记哪些信息以及哪些新信息需要被添加。**在添加这两个门之前,我们是完全接受 h t h_{t} ht而不再使用 h t − 1 h_{t-1} ht−1的,但是因为有了z门,我们对 h t − 1 h_{t-1} ht−1也赋予了话语权,这是最重要的,前面的激活值可以直接参与影响后面的激活值,即 h t − 1 h_{t-1} ht−1可以直接影响 h t h_{t} ht,这无意中影响了什么?当然影响了 d w t / d w t − 1 d_{w_{t}}/d_{w_{t-1}} dwt/dwt−1,大大增加了这个比值,但是这与原始的相比也仅仅是增大了相邻两个元素的梯度关联程度啊(即 W t − 1 对 于 W t W_{t-1}对于W_{t} Wt−1对于Wt的影响),并没有跨层影响啊。 - 这么想是错误的,下面看这个例子:
cat(下标i)对应was(下标j),cats对应were,然后中间经过了漫长的从句,所以说, d W i 对 于 d W j d_{W_{i}}对于d_{W_{j}} dWi对于dWj的影响难道就没有了嘛?假如使用原始的结构的话,可以说影响很小,但是使用了GRU之后,我们可以看到上面,我们完全可以使中间经过的层的z等于0,这样的话,就可以使得 d W i 直 接 影 响 d W j d_{W_{i}}直接影响d_{W_{j}} dWi直接影响dWj。 - 有的同学可能会问,这些z门会这么听话嘛?当然不会,可是我们可以训练啊,其实z也是个矩阵啊,它会注意到主语单词后缀为s这个特征可以影响谓语。 很不可思议,其实我也刚接触RNN一天,我觉得是这样的,我觉得它是会学习到主谓宾结构等等的,因为我觉得人脑可以做到,大脑或许做得不够好,但是也会去模仿这个过程。此处的解释可能有些瑕疵,我会在以后学习RNN的过程中再体会,并可能做出修改。