门控循环单元(GRU):

背景:

  当时间步数较大或者时间步数较小的时候,循环神经网络的梯度较容易出现衰减或者爆炸。虽然裁剪梯度可以应对梯度爆炸,

但是无法解决梯度衰减的问题。正因为如此,循环神经网络在实际中难以捕捉时间序列中的时间步较大的依赖的关系。门控循环

神经网络的提出,真是为了更好地捕捉时间序列中时间步较大的依赖关系。它通过可以学习的门来控制信息的流动。

重置门和更新门:(修改了循环神经网络中隐藏状态的计算方式)

  门控循环单元中的重置门和更新门的输入均为当前时间步输入 X与上一时间步的隐藏状态 Ht-1,输出由激活函数sigmoid函数

的全连接层计算得到。

计算过程:

  假设隐藏单元的个数为 h ,给定时间步 t 的小批量输入,(样本数量为 n ,输入个数为 d )和上一时间步的隐藏状态

重置门和更新门的计算如下

  因为sigmiod函数可以将元素的值变换到0和1之间,因此重置门和更新门中的每个元素的值域都是【0,1】

候选隐藏状态:

  门控循环单元将计算候选隐藏状态来辅助稍后的隐藏状态的计算。我们将当前时间步的重置门的输出与上一时间步的隐藏状态

做按元素乘法(符号为 )。如果重置门中的元素值接近 0 ,则意味着重置对应隐藏状态元素为 0 ,即丢弃上一时间步的隐藏状态。

如果元素值接近1,那么表示保留上一时步的隐藏状态。然后,将按元素乘法的结果与当前时间步的输入连接,在通过激活函数tanh的

全连接层计算出候选隐藏状态,其所有元素的值域都为【-1,1】

  具体的来说,时间步 t 的候选状态的计算为:

  从这个公式可以看出,重置门控制了上一时间步的隐藏状态如何流入当前时间步的候选隐藏状态。而上一时间不的隐藏状态

可能包含了时间序列截止至上一时间步的全部历史信息。因此,重置门可以用来丢弃与预测无关的历史信息。

隐藏状态:

最后时间步 t 的隐藏状态的计算使用当前时间步的更新门Zt来对上一时间步的隐藏状态 Ht-1 和当前时间步的候选隐藏

状态 做组合:

  值得注意的是,更新门可以控制隐藏状态应该如何被包含当前时间步信息的候选隐藏状态所更新,假设更新门在时间步 t‘ 到 t 之间一直近似 1

那么,在时间步 t‘ 到 t 之间的输入信息几乎没有流入时间步 t 的隐藏状态 Ht 。实际上,这可以看作较早时刻的隐藏状态 一直通过时间

并传递至当前时间步 t 。这个设计可以应对循环神经网络中的梯度衰减问题,并更好的捕捉时间序列中时间步距离较大的依赖关系。

总结:

1、重置门有助于捕捉时间序列里短期的依赖关系;

2、更新门有助于捕捉时间序列里长期的依赖关系。

 

 

 

GRU and LSTM的更多相关文章

  1. Recurrent Neural Network系列4--利用Python,Theano实现GRU或LSTM

    yi作者:zhbzz2007 出处:http://www.cnblogs.com/zhbzz2007 欢迎转载,也请保留这段声明.谢谢! 本文翻译自 RECURRENT NEURAL NETWORK ...

  2. 【pytorch】关于Embedding和GRU、LSTM的使用详解

    1. Embedding的使用 pytorch中实现了Embedding,下面是关于Embedding的使用. torch.nn包下的Embedding,作为训练的一层,随模型训练得到适合的词向量. ...

  3. RNN,GRU,LSTM

    2019-08-29 17:17:15 问题描述:比较RNN,GRU,LSTM. 问题求解: 循环神经网络 RNN 传统的RNN是维护了一个隐变量 ht 用来保存序列信息,ht 基于 xt 和 ht- ...

  4. NLP教程(5) - 语言模型、RNN、GRU与LSTM

    作者:韩信子@ShowMeAI 教程地址:http://www.showmeai.tech/tutorials/36 本文地址:http://www.showmeai.tech/article-det ...

  5. 机器学习(ML)九之GRU、LSTM、深度神经网络、双向循环神经网络

    门控循环单元(GRU) 循环神经网络中的梯度计算方法.当时间步数较大或者时间步较小时,循环神经网络的梯度较容易出现衰减或爆炸.虽然裁剪梯度可以应对梯度爆炸,但无法解决梯度衰减的问题.通常由于这个原因, ...

  6. GRU和LSTM比较

    比较: https://www.jianshu.com/p/3774d46b665e https://blog.csdn.net/sinat_33741547/article/details/8282 ...

  7. TensorFlow之RNN:堆叠RNN、LSTM、GRU及双向LSTM

    RNN(Recurrent Neural Networks,循环神经网络)是一种具有短期记忆能力的神经网络模型,可以处理任意长度的序列,在自然语言处理中的应用非常广泛,比如机器翻译.文本生成.问答系统 ...

  8. 循环神经网络之LSTM和GRU

    看了一些LSTM的博客,都推荐看colah写的博客<Understanding LSTM Networks> 来学习LSTM,我也找来看了,写得还是比较好懂的,它把LSTM的工作流程从输入 ...

  9. 第二十一节,使用TensorFlow实现LSTM和GRU网络

    本节主要介绍在TensorFlow中实现LSTM以及GRU网络. 一 LSTM网络 Long Short Term 网络—— 一般就叫做 LSTM ——是一种 RNN 特殊的类型,可以学习长期依赖信息 ...

随机推荐

  1. centos6.5安装ganglia-gmond

    安装过程借鉴许多博客,最后得出没有出错的流程. 一.安装依赖包: yum -y install gccglibc glibc-common rrdtool rrdtool-devel apr apr- ...

  2. Restful概念的理解和践行

    在实习是leader有让我们实习生看restful相关的知识,奈何当初根基很浅,看了一篇博文,但是还是很难用自己的话来描述.现在又接触了Restful的内容,就补上一篇文章. 在Spring Fram ...

  3. xmoj142

    https://code.mi.com/problem/list/view?id=142 暴力. #include <bits/stdc++.h> using namespace std; ...

  4. jq三级联动

    test.html <div class="a_list"> <div class="a_title">商城分类:</div> ...

  5. 原生ajax可变参数post

    var Ajax = { post:function(){ xmlhttp = new XMLHttpRequest(); var len = arguments.length; var url = ...

  6. editplus注册码生成

    http://www.jb51.net/tools/editplus/ 主要JS代码: function generate_editplus_regcode() { var list = [0,493 ...

  7. 【C++】约瑟夫环(数组+链表)

    基于数组: #include<iostream> #include<cstring> #include<cstdlib> using namespace std; ...

  8. 6. Scala面向对象编程(基础部分)

    6.1 基本介绍 6.1.1 Scala语言是面向对象的 1) Java时面向对象的编程语言,由于历史原因,Java中海存在着非面向对象的内容:基本类型,null,静态方法等 2) Scala语言来自 ...

  9. 学习ActiveMQ(一):安装与启动

    一:简单介绍 AvtiveMQ是Apaceh所研发的一个开源消息中间件,用来在服务与服务之间进行异步通信,是基于JMS规范的.activemq包含发送者(sender).消息(message).队列( ...

  10. Python-第一章(开发基础)

    1.    机器语言 = 机器指令 = 二进制代码 汇编语言就是把二进制变成了英文,开发效率低. 编译型语言:C   C++   Delphi  ... 解译型语言:Python  php   jav ...