门控循环单元-GRU单元(Gated Recurrent Unit)
来源:Coursera吴恩达深度学习课程
接下来我们将会学习门控循环单元(Gated Recurrent Unit),它改变了RNN的隐藏层,使其可以更好地捕捉深层连接,并改善了梯度消失问题,让我们看一看。
如上图的公式,在RNN的时间t处,计算激活值,把这个RNN的单元用图形表示(上图左)。
备注:不知道为什么右上角的符号就是显示不出来,这篇文章都会()代替,有时间会解决这个bug,望谅解。
输入(input)上一个时间步激活值a^(t-1)和x^(t),并起来乘上权重项,在这个线性计算之后,经过激活函数g(这里是tanh激活函数)后,得到激活值a^(t),然后将激活值a^(t)传入softmax单元,用于输出y^(t)。这张图就是RNN隐藏层的单元的可视化呈现。展示这张图是为了使用相似的图来讲解门控循环单元。
注:许多GRU的想法都来分别自于Yu Young Chang, Kagawa,Gaza Hera, Chang Hung Chu和 Jose Banjo的两篇论文。
①Empirical Evaluation of Gated Recurrent Neural Networks on Sequence Modeling
②On the Properties of Neural Machine Translation: Encoder-Decoder Approaches
如上图,还是之前的句子“The cat, which already ate……, was full.”,当我们从左到右读这个句子,GRU单元将会有个新的变量称为c,代表细胞(cell),即记忆细胞(memory cell)。记忆细胞的作用是提供了记忆的能力,比如说一只猫是单数(singular)还是复数(plural),所以当它看到之后的句子的时候,它仍能够判断句子的主语是单数还是复数。在时间t处,有记忆细胞c^(t),GRU实际输出了激活值a^(t),于是有:
于是我们想要使用不同的符号c和a来表示记忆细胞的值和输出的激活值,即使它们是一样的。Andrew 现在使用这个标记是因为等会说到LSTM的时候,这两个会是不同的值。
所以这些等式表示了GRU单元的计算,在每个时间步,我们将用一个候选值(candidate)重写记忆细胞,它替代了c^(t)的值,我们用tanh激活函数来计算,公式如下:
重点(key)来了,在GRU中真正重要的思想是我们有一个门,把这个门叫做gamma u,这是一个下标为u(字母u代表update)的大写希腊字母Γ,是一个0到1之间的值。实际上这个值是把这个式子带入sigmoid函数得到的,公式如下:
对于大多数可能的输入,sigmoid函数的输出总是非常接近0或者非常接近1。
注意GRU的关键部分(key part)就是之前候选值的计算:
首先我们得到候选值,然后门决定是否要更新它。①于是记忆细胞c^(t)被设定为0或者1,这取决于你考虑的单词在句子中是单数还是复数,这里单数情况我们先假定它被设为了1,如果是复数的情况我们就把它设为0。②GRU单元会一直记住记忆细胞c^(t)的值。③门Γ_u的作用就是决定什么时候会更新这个值,特别是当你看到词组the cat,即句子的主语猫,这就是一个好时机去更新这个值。然后当你使用完它的时候,“The cat, which already ate…, was full.”,然后你就可以忘记它了。
我们接下来要给GRU用的式子就是:
注意到,①当更新值Γ_u = 1时,表示更新它,有:
②当更新值Γ_u = 0时,意味着不更新它,则有:
下面再画个图来(下图左侧所示)解释一下GRU单元。Andrew个人感觉式子在图片中比较容易理解,那么即使看不懂图片也没关系。
这就是GRU单元或者说是一个简化过的GRU单元,它的优点就是通过门决定,当从左到右扫描一个句子的时候,这个时机决定是否要更新某个记忆细胞,不更新(中间一直为0,表示一直不更新)直到你真的需要使用记忆细胞的时候再更新。
因为sigmoid的值,现在因为门很容易取到0值,只要这个值是一个很大的负数,再由于数值上的四舍五入,上面这些门大体上就是0,或者说非常非常非常接近0。所以在这样的情况下,这个更新式子就会变成:
这非常有利于维持记忆细胞的值。因为Γ_u很接近0,这样就不会有梯度消失的问题。这就是缓解梯度消失问题的关键,因此允许神经网络运行在非常庞大的依赖词上,比如说cat和was单词即使被中间的很多单词分割开。
如上图,我们关注一些细节。记忆细胞c^(t)可以是一个向量(vector),假设有一个100维的隐藏的激活值,那么记忆细胞、替代值和更新门(上图红色标记)的维度也是100维。
在实际应用中Γ_u不会真的等于0或者1,有时候它是0到1的一个中间值,元素对应的乘积做的就是告诉GRU单元哪个记忆细胞的向量维度在每个时间步要做更新,所以你可以选择保存一些比特不变,而去更新其他的比特。比如说你可能需要一个比特来记忆猫是单数还是复数,其他比特来理解你正在谈论食物,因为你在谈论吃饭或者食物,然后你稍后可能就会谈论“The cat was full.”,你可以每个时间点只改变一些比特。
我们已经理解GRU最重要的思想了。注意下图的三个式子:
目前为止幻灯片中展示的实际上只是简化过的GRU单元,现在来描述一下完整的GRU单元,如下图:
对于完整的GRU单元,在我们计算的第一个式子中给记忆细胞的新候选值加上一个新的门Γ_r,r代表相关性(relevance),表示下一个记忆细胞c^的候选值跟上一个记忆细胞c^有多大相关性。这里引入一个新的参数矩阵W_r,计算公式如下:
为什么要引入一个新的门呢?这是因为多年来研究者们试验过很多不同可能的方法来设计这些单元,去尝试让神经网络有更深层的连接,去尝试产生更大范围的影响,还有解决梯度消失的问题,GRU就是其中一个研究者们最常使用的版本,也被发现在很多不同的问题上也是非常健壮和实用的。另一个常用的版本被称为LSTM(长短时记忆网络),这个我们会之后讲到,但是GRU和LSTM是在神经网络结构中最常用的两个具体实例。
还有在符号上的一点,Andrew尝试去定义固定的符号让这些概念容易理解。总的来说,这就是GRU,即门控循环单元,这是RNN的其中之一。这个结构可以更好捕捉非常长范围的依赖,让RNN更加有效。
还有其他常用的神经网络,比较经典的是这个叫做LSTM,即长短时记忆网络,我们在下篇文章中讲解。
说明:记录学习笔记,如果错误欢迎指正!转载请联系我。
门控循环单元-GRU单元(Gated Recurrent Unit)相关推荐
- 【tensorflow-keras-GRU】keras.layers.GRU 门限循环单元网络(Gated Recurrent Unit)
循环层 Recurrent - Keras 中文文档 https://keras.io/zh/layers/recurrent/#gru GRU keras.layers.GRU(units, act ...
- 花书+吴恩达深度学习(十七)序列模型之长短期记忆 LSTM 和门控循环单元 GRU
目录 0. 前言 1. 长短期记忆 LSTM 2. 门控循环单元 GRU 如果这篇文章对你有一点小小的帮助,请给个关注,点个赞喔~我会非常开心的~ 花书+吴恩达深度学习(十五)序列模型之循环神经网络 ...
- GRU(Gate Recurrent Unit,门控循环单元)结构
GRU类似LSTM,也是为了解决RNN长期记忆的梯度消失问题 LSTM有三个不同的门,参数较多,训练困难.GRU只含有两个门控结构,调优后相比LSTM效果相差无几,且结构简单,更容易训练,所以很多时候 ...
- (pytorch-深度学习)门控循环单元(GRU)
门控循环单元(GRU) 循环神经网络中的梯度计算 当时间步数较大或者时间步较小时,循环神经网络的梯度较容易出现衰减或爆炸. 虽然裁剪梯度可以应对梯度爆炸,但无法解决梯度衰减的问题. 通常由于这个原因, ...
- pytorch学习笔记(三十一):门控循环单元(GRU)
文章目录 前言 1. 门控循环单元 1.1 重置门和更新门 1.2 候选隐藏状态 1.3 隐藏状态 2. 读取数据集 3. 从零开始实现 3.1 初始化模型参数 3.2 定义模型 3.3 训练模型并创 ...
- 动手学深度学习(三十九)——门控循环单元GRU
文章目录 门控循环单元(GRU) 一.门控隐藏状态 1.1 重置门和更新门 1.2候选隐藏状态 1.3 隐藏状态 二.从零实现GRU 2.1 初始化模型参数 2.2 定义模型 2.3 训练与预测 2. ...
- 【动手学习pytorch笔记】24.门控循环单元GRU
GRU 序列中并不是所有信息都同等重要,为了记住重要的信息和遗忘不重要的信息,最早的方法是"长短期记忆"(long-short-term memory,LSTM),这节门控循环单元 ...
- 2020-10-21 吴恩达DL学习-C5 序列模型-W1 循环序列模型(1.9 GRU门控循环单元-改善梯度消失-在序列中学习非常深的连接-简化和完整版本-记忆细胞)
1.视频网站:mooc慕课https://mooc.study.163.com/university/deeplearning_ai#/c 2.详细笔记网站(中文):http://www.ai-sta ...
- 【吴恩达deeplearning.ai】Course 5 - 1.9 GRU 单元(门控循环单元)
GRU 单元 (Gated Recurrent Unit (GRU)) 你已经了解了基础的RNN模型的运行机制,在本节视频中你将会学习门控循环单元,它改变了RNN的隐藏层,使其可以更好地捕捉深层连接, ...
最新文章
- Javascript导出Excel的方法
- Linux下tcpdump用法
- 老大让我优化数据库,我上来就分库分表,他过来就是一jio。。。
- ble串口程序设计流程图_流程图程序设计的步骤
- 使Docker搭建Java Web运行环境
- 1.14 字符串查找(3种方法)indexOf(), lastlndexOf(), charAt()
- 走进武汉,探索多媒体开发最佳实践
- 如何查看其他人的ABAP authorization check log
- 我的世界网易怎么下载java材质包_我的世界中国版材质包怎么用 材质包设置
- java设计把两个字符串的值交换 而不使用中间变量
- mysql索引类型 normal, unique, full text
- node 报错 throw er; // Unhandled 'error' event 解决办法
- linux 查询命令 批量替换多个文件
- Atitit 跨平台跨语言图像处理与node.js图像处理之道 attilax著 1. 著名跨语言类库 ImageMagick简介、GraphicsMagick、命令行	1 1.1. opencv
- 最火照片墙前端纯HTML(只需添加照片)
- python中shelf对象_shelve -- 用来持久化任意的Python对象
- 阿里巴巴在知乎上又出事了
- PAKDD2020:阿里巴巴算法大赛中的得与失
- 方舟仙境服务器什么时候修复,方舟生存进化2.0.0.5版本修复更新 6月22日联机地牢重新开启...
- smpl-x论文学习-部分翻译
热门文章
- OpenJudge 计算概论(A) / B04 基础练习题(4)3:买房子
- 《又一个草环》心得体会读后感3500字
- 自学python在家赚钱-自学python后,可以自己独立做什么事情来挣钱吗?
- 教你几招玩转小程序分销商城
- 最全的反诈宣传文案都在这里了!
- bon app android,bon app
- 机器学习、监督学习、非监督学习、强化学习传统机器学习、深度学习、迁移学习基本概念
- Python爬虫学习笔记-第十二+十三课(selenium综合练习-12306购票)
- miracl常用函数手册
- CSAPP Lab5: Malloc