专栏首页机器学习技术分享三步理解--门控循环单元(GRU),TensorFlow实现。

三步理解--门控循环单元(GRU),TensorFlow实现。

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/weixin_41510260/article/details/99679481

1. 什么是GRU

在循环神经⽹络中的梯度计算⽅法中,我们发现,当时间步数较⼤或者时间步较小时,**循环神经⽹络的梯度较容易出现衰减或爆炸。虽然裁剪梯度可以应对梯度爆炸,但⽆法解决梯度衰减的问题。**通常由于这个原因,循环神经⽹络在实际中较难捕捉时间序列中时间步距离较⼤的依赖关系。

**门控循环神经⽹络(gated recurrent neural network)的提出,正是为了更好地捕捉时间序列中时间步距离较⼤的依赖关系。**它通过可以学习的⻔来控制信息的流动。其中,门控循环单元(gatedrecurrent unit,GRU)是⼀种常⽤的门控循环神经⽹络。

2. ⻔控循环单元

2.1 重置门和更新门

GRU它引⼊了**重置⻔(reset gate)和更新⻔(update gate)**的概念,从而修改了循环神经⽹络中隐藏状态的计算⽅式。

门控循环单元中的重置⻔和更新⻔的输⼊均为当前时间步输⼊ XtX_tXt​ 与上⼀时间步隐藏状态Ht−1H_{t-1}Ht−1​,输出由激活函数为sigmoid函数的全连接层计算得到。 如下图所示:

具体来说,假设隐藏单元个数为 h,给定时间步 t 的小批量输⼊ Xt∈Rn∗dX_t\in_{}\mathbb{R}^{n*d}Xt​∈​Rn∗d(样本数为n,输⼊个数为d)和上⼀时间步隐藏状态 Ht−1∈Rn∗hH_{t-1}\in_{}\mathbb{R}^{n*h}Ht−1​∈​Rn∗h。重置⻔ Ht∈Rn∗hH_t\in_{}\mathbb{R}^{n*h}Ht​∈​Rn∗h 和更新⻔ Zt∈Rn∗hZ_t\in_{}\mathbb{R}^{n*h}Zt​∈​Rn∗h 的计算如下:

Rt=σ(XtWxr+Ht−1Whr+br)R_t=\sigma(X_tW_{xr}+H_{t-1}W_{hr}+b_r)Rt​=σ(Xt​Wxr​+Ht−1​Whr​+br​)

Zt=σ(XtWxz+Ht−1Whz+bz)Z_t=\sigma(X_tW_{xz}+H_{t-1}W_{hz}+b_z)Zt​=σ(Xt​Wxz​+Ht−1​Whz​+bz​)

sigmoid函数可以将元素的值变换到0和1之间。因此,重置⻔ RtR_tRt​ 和更新⻔ ZtZ_tZt​ 中每个元素的值域都是[0*,* 1]。

2.2 候选隐藏状态

接下来,⻔控循环单元将计算候选隐藏状态来辅助稍后的隐藏状态计算。我们将当前时间步重置⻔的输出与上⼀时间步隐藏状态做按元素乘法(符号为)。如果重置⻔中元素值接近0,那么意味着重置对应隐藏状态元素为0,即丢弃上⼀时间步的隐藏状态。如果元素值接近1,那么表⽰保留上⼀时间步的隐藏状态。然后,将按元素乘法的结果与当前时间步的输⼊连结,再通过含激活函数tanh的全连接层计算出候选隐藏状态,其所有元素的值域为[-1,1]。

具体来说,时间步 t 的候选隐藏状态 H~∈Rn∗h\tilde{H}\in_{}\mathbb{R}^{n*h}H~∈​Rn∗h 的计算为:

H~t=tanh(XtWxh+(Rt⊙Ht−1)Whh+bh)\tilde{H}_t=tanh(X_tW_{xh}+(R_t⊙H_{t-1})W_{hh}+b_h)H~t​=tanh(Xt​Wxh​+(Rt​⊙Ht−1​)Whh​+bh​)

从上⾯这个公式可以看出,重置⻔控制了上⼀时间步的隐藏状态如何流⼊当前时间步的候选隐藏状态。而上⼀时间步的隐藏状态可能包含了时间序列截⾄上⼀时间步的全部历史信息。因此,重置⻔可以⽤来丢弃与预测⽆关的历史信息。

2.3 隐藏状态

最后,时间步t的隐藏状态 Ht∈Rn∗hH_t\in_{}\mathbb{R}^{n*h}Ht​∈​Rn∗h 的计算使⽤当前时间步的更新⻔ZtZ_tZt​来对上⼀时间步的隐藏状态 Ht−1H_{t-1}Ht−1​ 和当前时间步的候选隐藏状态 H~t\tilde{H}_tH~t​ 做组合:

值得注意的是,**更新⻔可以控制隐藏状态应该如何被包含当前时间步信息的候选隐藏状态所更新,**如上图所⽰。假设更新⻔在时间步 t′到t(t′&lt;t)t^{′}到t(t^{′}&lt;t)t′到t(t′<t) 之间⼀直近似1。那么,在时间步 t′到tt^{′}到tt′到t 间的输⼊信息⼏乎没有流⼊时间步 t 的隐藏状态HtH_tHt​实际上,这可以看作是较早时刻的隐藏状态 Ht′−1H_{t^{′}-1}Ht′−1​ 直通过时间保存并传递⾄当前时间步 t。这个设计可以应对循环神经⽹络中的梯度衰减问题,并更好地捕捉时间序列中时间步距离较⼤的依赖关系。

我们对⻔控循环单元的设计稍作总结:

  • 重置⻔有助于捕捉时间序列⾥短期的依赖关系;
  • 更新⻔有助于捕捉时间序列⾥⻓期的依赖关系。

3. 代码实现GRU

MNIST–GRU实现

机器学习通俗易懂系列文章

4. 参考文献

《动手学–深度学习》


作者:@mantchs GitHub:https://github.com/NLP-LOVE/ML-NLP

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • HanLP《自然语言处理入门》笔记--6.条件随机场与序列标注

    笔记转载于GitHub项目:https://github.com/NLP-LOVE/Introduction-NLP

    mantch
  • 通俗易懂--循环神经网络(RNN)的网络结构!(TensorFlow实现)

    版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。

    mantch
  • 详解隐马尔可夫模型(HMM)中的维特比算法

    笔记转载于GitHub项目:https://github.com/NLP-LOVE/Introduction-NLP

    mantch
  • 为什么有人说 Redis 的 set 命令是一个危险命令?

    原文链接:https://redislabs.com/

    业余草
  • 弯弯的小船悠悠 -- JDBCUtil 工具类

    阿凯
  • 2018 05 09

    顾名思义就是只能有一个,不能在出现第二个。就如同地球上没有两片完全一模一样的树叶一样。

    用户2145987
  • 设计模式(一)——单例模式

    在实际生产的项目中我们一般很少自己使用单例模式,但是在有过间接的使用过他,例如spring的bean单例。 定义:确保某一个类只有一个实例,而且自行实例化并向整...

    小森啦啦啦
  • 【重磅】Facebook 开源产业级深度学习框架 Caffe2,带来跨平台机器学习工具

    【新智元导读】Facebook 开发者大会今天召开。同时,Facebook 宣布开源 production-ready 的深度学习框架 Caffe2,轻量级、模...

    新智元
  • 回顾 | Facebook开源产业级深度学习框架 Caffe2

    AI 模型的训练和部署通常与大量数据中心或超级计算机相关联,原因很简单。从大规模的图像、视频、文本和语音等各种信息中持续处理、创建和改进模型的能力不是小型计算擅...

    IT派
  • java执行 string code

    工作当中需要执行 string 类型的 java code ,之前有同事用过 mvel ,调研之后发现太多于重量级了,我就想安安静静的执行一段 java 代码 ...

    shengjk1

扫码关注云+社区

领取腾讯云代金券