GRU
GRU 动机
大家可以关注我在西瓜视频 zidea 的账号,图标与本人简书图标一致,来收看相关视频
因为在循环神经网络中存在循环结构,所以反向传播计算中,梯度很容易出现梯度弥散和梯度爆炸的情况,可以梯度裁剪可以防止梯度爆炸,对于梯度弥散我们可以采用几种措施
- 增加数据量
- 改变神经网络结构
改变神经网络结构
之前我们介绍的 LSTM 就是为了解决梯度消失问题而提出的门控循环神经网络(gated recurrent networks)的一种,今天我们将介绍除了 LSTM 以外,另一种门控循环神经网络 GRU。
GRU 结构相对于 LSTM 要简单一些。GRU 是在 2014 年由 Cho、van Merrienboer、Bahdanau 和 Bengio 提出的。
如何实现门控机制
其实门控机制是 GRU 特点,那么又是如何实现门控机制的呢? 其实这个并不难,是否还记得在 logistic 回归的 sigmoid 函数,这个函数性质就是将线性输出实数域压缩到 0 到 1 之间数值,所以我们通过用 sigmoid 函数包裹输入的线性变换和上一个隐含状态就实现一个门控
重置门和更新门
在 GRU 结构中主要有两个门分别是重置门和更新门,下图就是GRU 的结构
为重置门(reset gate), 为更新门(update gate)
表示在 t 时刻的输入
表示上一个时刻隐含状态
- 候选隐含状态: 在 GRU 同样维护一个候选隐含状态
- 重置门: 有助于捕捉时序数据中短期的依赖关系
- 更新门: 有助于捕捉时序数据中长期的依赖关系
通过输入和上一个时刻隐含状态来控制重置门,是否将候选隐含状态中信息抛弃来实现遗忘作用,更新门用来控制是否将当前输入以及上一时刻隐含状态信息更新到候选隐含状态
- 表示按元素相乘
- 是 t-1 时刻隐含状态,所以比较直观理解,当是一个标量,非常接近 0 的数,那么其实就把上一个时刻信息丢弃掉;,如果 表示会将过去信息保留,也就是控制是否保留过去信息。
这里选择 tanh 将输出压缩到 -1 和 1 之间好处也是便于计算
为什么 GRU 会有效
我们是通过抛弃一些信息来进行语义分析或者一些语言任务,一些信息对于当前任务可能用处不大,大家可以看下面图,我们模型通过序列,来理解作者的意图,抓住主要含义
我们人类阅读上面话,会保留能够反应作者主要意图的词语或者句子,其他词语可能对我们理解作者意图帮助并不大,所以可以将这些信息量不大词是可以抛弃的。正是因为这一点我们才可以通过门控对记忆不同时刻进行重置和更新