使用Keras进行深度学习:(六)GRU讲解及实践

编辑 | 磐石

出品 | 磐创AI技术团队

【磐创AI导读】:本文详细介绍了GRU结构并在文末介绍其python实现。欢迎大家点击上方蓝字关注我们的公众号:磐创AI。进入公众号通过下方文章精选系列文章了解更多keras相关项目。

介绍

GRU(Gated Recurrent Unit) 是由 Cho, et al. (2014) 提出,是LSTM的一种变体。GRU的结构与LSTM很相似,LSTM有三个门,而GRU只有两个门且没有细胞状态,简化了LSTM的结构。而且在许多情况下,GRU与LSTM有同样出色的结果。GRU有更少的参数,因此相对容易训练且过拟合问题要轻一点。

目录

  • GRU原理讲解
  • Keras实现GRU

一、 GRU原理讲解

下图展示了GRU的网络结构,GRU的网络结构和LSTM的网络结构很相似,LSTM中含有三个门结构和细胞状态,而GRU只有两个门结构:更新门和重置门,分别为图中的z_t和r_t,结构上比LSTM简单。

将GRU网络结构具体运算操作用下图进行表示。接下来将会针对该图每一部分进行详细的讲解。

首先说明图中每个符号的意义:

1.更新门(update gate):

[.]_j表示一个向量的第j个元素。与LSTM中忘记门和输入门的操作一样,也是该时刻的输入x_t、上一时刻隐藏层h_(t-1)分别和权重矩阵W_z、U_z相乘,再将这两部分结果相加后放入sigmoid激活函数中,将结果压缩在0-1之间。

更新门的作用是决定上一层隐藏层状态中有多少信息传递到当前隐藏状态h_t中,或者说前一时刻和当前时刻的信息有多少需要继续传递的(在最后的公式中可以看到此功能的表示,并有详细讲解更新门为什么有这个作用)。当z_j越接近0为说明上一层隐藏状态的第j个信息在该隐藏层被遗忘,接近1则说明在该隐藏层继续保留。

2.重置门(reset gate):

和更新门的运算操作类似,只是权重矩阵不同而已。重置门是决定上一时刻隐藏状态的信息中有多少是需要被遗忘的。当该值接近于0,则说明上一时刻第j个信息在当前记忆内容(在后文解释该词)中被遗忘,接近于1则说明在当前记忆内容中继续保留。

读到这里,有些读者可能会感觉重置门和更新门的作用很相似,是否可以再简化只用一个门即可?其实不然,这两个门作用的对象是不一样的,GRU虽然没有LSTM的细胞状态,但是它有一个记忆内容,更新门是作用于上一时刻隐藏状态和记忆内容,并最终作用于当前时刻的隐藏状态(如文中最后一条公式所表达),而重置门作用于当前记忆内容。

3.确定当前记忆内容

除了和上面两个门一样与权重矩阵相乘之外,还计算重置门结果r_t和h_(t-1)进行Hadamard乘积,即对应元素相乘。因为r_t是由0到1的向量组成的,因此,进行Hadamard乘积的意义就在于使用重置门决定在当前记忆内容中要遗忘多少上一时刻隐藏状态的内容,正如重置门处描述,值接近于0说明该信息被遗忘,接近于1则保留该信息。最后再将这两部分信息相加放入tanh激活函数中,将结果缩放到-1到1中。

记忆内容就是GRU记录到的所有重要信息,类似于LSTM中的细胞状态,比如在语言模型中,可能保存了主语单复数,主语的性别,当前时态等所有记录的重要信息。

因此,通过此处的运算操作的说明,就可以了解该时刻的记忆内容由两部分组成,一部分是使用重置门储存过去相关的重要信息,另一部分是加上当前时刻输入的重要信息。这两部分就组成了当前时刻的所有记忆内容。

4.确定当前时刻隐藏层保留的信息

(公式说明:此处是标量相乘,若是以向量表示,需要使用Hadamard乘积)

解释在第2部分更新门处遗留的问题

最后,该网络需要计算 h_t向量,该向量将保留当前单元的信息并传递到下一个单元中。在此过程,使用更新门,一方面,如公式第一项,它决定了上一个时刻的h_(t-1)中多少信息在此时刻隐藏单元h_t需要保留,另一方面,如公式的第二项,通过(1-z_j)表示那些需要遗忘的信息,用此时刻的记忆内容中相应的内容进行更新。这样更新门就能决定了分别需要在当前时刻的记忆内容和上一时刻隐藏层的信息收集哪些内容了

需要注意的是,虽然隐藏层信息的符号和当前记忆内容的符号相似,但是这两者是有一定的区别的。当前记忆内容在上文中已经说明了是当前时刻保存的所有信息,而隐藏层信息则是当前时刻所需要的信息。比如在语言模型中,在当前时刻可能我们只需要知道当前时态和主语单复数就可以确定当前动词使用什么时态,而不需要其他更多的信息。

二、Keras实现GRU

在这里,同样使用Imdb数据集,且使用同样的方法对数据集进行处理,详细处理过程可以参考《使用Keras进行深度学习:(五)RNN和双向RNN讲解及实践》一文。

可以发现GRU和LSTM具有同样出色的结果,甚至比LSTM结果好一些。在很多时候,人们更愿意使用GRU来替换LSTM,因为GRU比LSTM少一个门,参数更少,相对容易训练且可以防止过拟合。(训练样本少的时候可以使用防止过拟合,训练样本多的时候则可以节省很多训练时间。)因此GRU是一个非常流行的LSTM变体。同时,希望通过该文能让读者对GRU有更深刻的了解。

参考文献:https://towardsdatascience.com/understanding-gru-networks-2ef37df6c9be


写在最后:欢迎大家点击下方二维码关注我们的公众号,点击干货资源专栏或发送关键字“资源”获取更多资源推荐。关注我们的历史文章,和小编一起畅游在深度学习的世界中。

原文发布于微信公众号 - 磐创AI(xunixs)

原文发表时间:2018-05-10

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏ATYUN订阅号

Python机器学习的练习八:异常检测和推荐系统

在这篇文章中,将会涉及两个话题——异常检测和推荐系统,我们将使用高斯模型实现异常检测算法并且应用它检测网络上的故障服务器。我们还将看到如何使用协同过滤创建推荐系...

7377
来自专栏专知

【干货】​在Python中构建可部署的ML分类器

【导读】本文是机器学习爱好者 Sambit Mahapatra 撰写的一篇技术博文,利用Python设计一个二分类器,详细讨论了模型中的三个主要过程:处理不平衡...

33811
来自专栏AI传送门

keras教程:卷积神经网络(CNNs)终极入门指南

1815
来自专栏人工智能头条

Azure Machine Learning 上如何选择合适的机器学习算法

1056
来自专栏marsggbo

Augmentor 使用介绍

<img src="https://ask.qcloudimg.com/draft/1215004/jfwdwyxm4.jpg" style="border:5...

4535
来自专栏https://www.cnblogs.com/L

机器学习之线性回归

分类算法:对于x1,x2,x3,x4作为特征值,当输入到算法中得出有限个结果。比如对于银行借钱,输入年龄,性别,信誉等值 银行反馈借款或者不借款为分类指标。

873
来自专栏机器之心

资源 | MIT 新发布大型数据集 ADE20K:用于场景感知、语义理解等多种任务

选自CSAIL 机器之心编译 参与:黄小天、Smith 近日,MIT 通过官网发布了一款名为 ADE20K 的数据集,可用于场景感知、解析、分割、多物体识别和语...

3757
来自专栏Petrichor的专栏

深度学习: 模型压缩

预训练后的深度神经网络模型往往存在着严重的 过参数化 问题,其中只有约5%的参数子集是真正有用的。为此,对模型进行 时间 和 空间 上的压缩,便谓之曰“模型压缩...

1194
来自专栏用户2442861的专栏

循环神经网络——实现LSTM

网络回忆:在《循环神经网络——介绍》中提到循环神经网络用相同的方式处理每个时刻的数据。

842
来自专栏数据派THU

教你在Python中用Scikit生成测试数据集(附代码、学习资料)

原文标题:How to Generate Test Datasets in Python with Scikit-learn 作者:Jason Brownlee...

4017

扫码关注云+社区