[DeeplearningAI笔记]序列模型1.7-1.9RNN对新序列采样/GRU门控循环神经网络
5.1循环序列模型
觉得有用的话,欢迎一起讨论相互学习~Follow Me
1.7对新序列采样
基于词汇进行采样模型
- 在训练完一个模型之后你想要知道模型学到了什么,一种非正式的方法就是进行一次新序列采样。
- 一个序列模型模拟了任意特定单词序列的概率,对新序列采样即是对概率分布进行采样来生成一个新的单词序列。
- 假设你的RNN训练模型为:

- 对于新序列进行采样第一步即是对想要模型生成的第一个词进行采样
- 设置\(a^{<0>}=0,x^{<1>}=0\)从而得到所有可能的输出结果\(\hat{y}^{<1>}\), \(\hat{y}^{<1>}\)是经过softmax层后得到的概率,然后根据经过softmax层后得到的分布进行随机采样。
- 然后继续下一个时间步,但是和训练RNN不同的是,在第二个时间步中输入的不是正确的\(y^{<1>}\),而是把刚刚采样得到的\(\hat{y}^{<1>}\)作为下一个时间步的输入。
- 然后对第二个时间步的预测得到的输出\(\hat{y}^{<2>}\)进行采样并作为第三个时间步的输入...直到达到最后一个时间步。

- 对于采样完成有两种判定方法:
- 一直在字典集中进行采样,直到得到标识,这表明可以停止采样了。
如果在时间步的结尾,字典中没有这个词,你可以从20个或100个或其他单词中进行采样,然后一直抽样下去,直到达到设定的时间步。但是如果在此过程中又出现了 unknown word,则可以进行重采样,直到得到一个不是一个未知标识的词。如果不介意UNK的话,也可以忽略这些未知的单词。
基于字符进行采样模型
- 根据实际问题,还可以建立基于字符的RNN结构,你的字典仅包含从a到z的字母,可能还会有空格符,数字0-9,还有大写的A-Z字母,还有数据集中出现的特殊字符。最终使用这些字符组成你的字典。
- 这样每次RNN推断的输出都是字母而不是单独的词汇。
- 优点与缺点
- 优点
- 优点是不会出现未知的标识
- 缺点
- 缺点是使用字符进行采样的模型会得到很多很长的序列
- 因为一句话中的英文单词仅有几十个,但是字符的长度却有很多个,这样使得RNN的长度过大,使得其不可以捕捉长范围的关系,而且训练起来计算成本比较高昂。
所以现有的RNN都是使用基于单词的采样,但是随着计算机性能越来越高,使用基于字符进行采样也是一种趋势。
序列生成
- 优点
- 使用新闻的语料库作为训练集,则生成的序列带有明显的新闻语感。
- 使用莎士比亚的语料库作为训练集,则生成的序列带有明显的莎士比亚风格。

1.8RNN的梯度消失vanishing gradient
基本的RNN有一个很大的问题,就是梯度消失问题
梯度消失vanishing gradient
- 示例
- THe cat, which already ate a bunch of food that was delicious ....was full.
- THe cats, which already ate a bunch of food that was delicious ....were full.
- 注意句式中的单复数问题,cat作为主语,则使用was,cats作为主语,则使用were.
- 主语和谓语的单复数关系,因为有从句(即主语和谓语之间的距离可以足够长)的关系,在时间上往往具有 很长时间的依赖效应(long-term dependencies)
但是普通的RNN并不擅长捕捉这种长期依赖效应(因为具有梯度消失的问题)。
梯度爆炸exploding gradients
- 梯度不仅仅会指数级别的下降,也会指数级别的上升--即梯度爆炸(exploding gradients),导致参数的数量级及其巨大会看见许多NaN或者不是数字的情况--这意味着网络的计算出现了数值溢出。
如果出现了梯度爆炸的问题,一个解决方法就是使用梯度修剪(gradient clipping).即--设置一个梯度的天花板,梯度不能超过这个阈值,并对梯度进行缩放。
1.9GRU Gate Recurrent Unit门控循环神经网络
GRU网络改变了RNN的隐层结构,可以捕捉深层连接,并改善了梯度消失问题。
\(a^{<t>}=g(W_{a}[a^{<t-1>},x^{<t>}]+b_{a})\)
[1] Cho K, Van Merrienboer B, Bahdanau D, et al. On the Properties of Neural Machine Translation: Encoder-Decoder Approaches[J]. Computer Science, 2014.
[2] Chung J, Gulcehre C, Cho K H, et al. Empirical Evaluation of Gated Recurrent Neural Networks on Sequence Modeling[J]. Eprint Arxiv, 2014.
门控循环神经网络单元GRU
- The cat , which already ate ..., was full
- 为了记住话语中cat是单数还是复数,在时间T上需要使用记忆细胞memory cell 记住cat这个单词,并且 \(c^{<t>}=a^{<t>}\)
- 在每一个时间步t,都将用一个候选值\(\breve{c}^{<t>}\)重写记忆细胞的值
- 其中: \[\breve{c}^{<t>}=Tanh(W_{c}[c^{<t-1>},x^{<t>}]+b_{c})[1]\]
- GRU中真正重要的思想是,GRU中有一个门Gate(\(\gamma_u\)) 这是一个0到1之间的值
- \[\gamma_u=\sigma(W_{u}[c^{<t-1>},x^{<t>}]+b_{u})[2]\]
- [1]式是\(\breve{c}^{<t>}\)的更新公式,[2]式计算的值用以控制是否采用[1]式进行更新
- 在此例中如果cat变为cats \(\breve{c}^{<t>}\)用以控制was和were的值,而\(\gamma_u\)用以控制 在何时将was变为were
- \[C^{<t>}=\gamma_u * \breve{C}^{<t>}+(1-\gamma_u) * C^{<t-1>}\]
如果\(\gamma_u=1\)则\(C^{<t>}=\breve{C}^{<t>}\),\(\gamma_u=0\)则\(C^{<t>}=C^{<t-1>}\),即时间步没有扫到was时,\(\gamma_u一直=0,此时C^{<t>}=c^{<t-1>}\),则C一直等于旧的值。而当时间步扫到"was"时,\(\gamma_u=1\),此时\(C^{<t>}=\breve{C}^{<t>}\)

- \[C^{<t>}=\gamma_u * \breve{C}^{<t>}+(1-\gamma_u) * C^{<t-1>}\]
GRU计算过程
- GRU单元输入\(C^{<t-1>}\)对应于上一个时间步,先假设其正好等于\(a^{<t-1>}\), 然后\(x^{<t>}\)也作为输入,然后把这两个用合适的权重结合在一起再用Tanh计算,算出\(\breve{c}^{<t>}\)即\(c^{<t>}\)的替代值
- 再用一个不同的参数集,通过\(\sigma\)函数计算出\(\gamma_u\),即更新门。
最后所有的值通过另一个运算符结合: \[C^{<t>}=\gamma_u * \breve{C}^{<t>}+(1-\gamma_u) * C^{<t-1>}\],其输入一个门值,新的候选值和旧的记忆细胞值,得到记忆细胞的新值\(c^{<t>}=a^{<t>}\),也可以把这个值传入Softmax单元中,并计算出预测序列\(\hat{y}^{<t>}\)

GRU优点/font>
- 当你从左往右扫描一整个句子时,控制记忆细胞"不更新不更新不更新... 更新 "
- 因为门的值很容易取到0,只要激活函数的输入是一个很大的负数,则激活函数的输出值就是一个很接近与0的值。所以 \(C^{<t>}=\gamma_u * \breve{C}^{<t>}+(1-\gamma_u) * C^{<t-1>}\) 中\(C^{<t>}=C^{<t-1>}\)则即是经过很多的时间步,记忆神经细胞的值都会很好的维持了下来--这样就避免了梯度消失的问题。这样可以保证RNN运行在十分庞大的依赖词上。
Note/font>
\(C^{<t>},\breve{C}^{<t>},\gamma_u\)是具有一样的维度的向量,其中维度和隐藏层的激活值的个数相等。
完整GRU

[DeeplearningAI笔记]序列模型1.7-1.9RNN对新序列采样/GRU门控循环神经网络的更多相关文章
- 序列模型(4)----门控循环单元(GRU)
一.GRU 其中, rt表示重置门,zt表示更新门. 重置门决定是否将之前的状态忘记.(作用相当于合并了 LSTM 中的遗忘门和传入门) 当rt趋于0的时候,前一个时刻的状态信息ht−1会被忘掉,隐藏 ...
- [DeeplearningAI笔记]序列模型1.10-1.12LSTM/BRNN/DeepRNN
5.1循环序列模型 觉得有用的话,欢迎一起讨论相互学习~Follow Me 1.10长短期记忆网络(Long short term memory)LSTM Hochreiter S, Schmidhu ...
- DLNg序列模型第一周
1.为何选择序列模型? 给出上面一些序列数据的例子,真的很神奇,语音识别.音乐生成.情感分类.DNS序列分析.机器翻译.视频活动检测.命名实体识别. 2.数字符号 对于输入序列x,进行人名识别,输出中 ...
- 吴恩达《深度学习》第五门课(1)循环序列模型(RNN)
1.1为什么选择序列模型 (1)序列模型广泛应用于语音识别,音乐生成,情感分析,DNA序列分析,机器翻译,视频行为识别,命名实体识别等众多领域. (2)上面那些问题可以看成使用(x,y)作为训练集的监 ...
- 序列模型(5)-----双向神经网络(BRNN)和深层循环神经网络(Deep RNN)
一.双向循环神经网络BRNN 采用BRNN原因: 双向RNN,即可以从过去的时间点获取记忆,又可以从未来的时间点获取信息.为什么要获取未来的信息呢? 判断下面句子中Teddy是否是人名,如果只从前面两 ...
- 【学习笔记】循环神经网络(RNN)
前言 多方寻找视频于博客.学习笔记,依然不能完全熟悉RNN,因此决定还是回到书本(<神经网络与深度学习>第六章),一点点把啃下来,因为这一章对于整个NLP学习十分重要,我想打好基础. 当然 ...
- 吴恩达deepLearning.ai循环神经网络RNN学习笔记_看图就懂了!!!(理论篇)
前言 目录: RNN提出的背景 - 一个问题 - 为什么不用标准神经网络 - RNN模型怎么解决这个问题 - RNN模型适用的数据特征 - RNN几种类型 RNN模型结构 - RNN block - ...
- 吴恩达deepLearning.ai循环神经网络RNN学习笔记_没有复杂数学公式,看图就懂了!!!(理论篇)
本篇文章被Google中国社区组织人转发,评价: 条理清晰,写的很详细! 被阿里算法工程师点在看! 所以很值得一看! 前言 目录: RNN提出的背景 - 一个问题 - 为什么不用标准神经网络 - RN ...
- [DeeplearningAI笔记]序列模型3.9-3.10语音辨识/CTC损失函数/触发字检测
5.3序列模型与注意力机制 觉得有用的话,欢迎一起讨论相互学习~Follow Me 3.9语音辨识 Speech recognition 问题描述 对于音频片段(audio clip)x ,y生成文本 ...
随机推荐
- Spring演示及总结
一.目标 二.分工 三.回顾 发现问题: 第一个冲刺的任务以基本完成,但队友的状态相对有些疲软,主要原因可能是这两周有好几个课程大作业要赶, 有的队友还要为比赛做准备,及做一些其他是项目,时间较紧,有 ...
- python knn自我实践
#得到分类数据和测试数据 import pymysql import struct from numpy import * a=['']*20 #存图像 分类数据 b=[[0]*76800]*20#存 ...
- 网页调用vlc并播放网络视频
环境:windows/android/ios windows端保存以下内容为reg文件并运行 Windows Registry Editor Version 5.00 [HKEY_CLASSES_RO ...
- springmvc值传递
1.页面向后台传值 A.HttpServletRequest方式: package com.rong.controller; import javax.annotation.Resource; imp ...
- XHTML语法规范
<head> <meta charset="utf-8" /> <title>xhtml语法规范</title> </head ...
- 第六周PSP &进度条
团队项目PSP 一.表格: C类型 C内容 S开始时间 E结束时间 I时间间隔 T净时间(mins) 预计花费时间(mins) 讨论 讨论alpha完成情况并总结 9:40 11:20 17 ...
- JAVA字节流(读写文件)
InputStream此抽象类是表示字节输入流的所有类的超类.需要定义 InputStream 的子类的应用程序必须始终提供返回下一个输入字节的方法. int available()返回此输入流方法的 ...
- TDDL实践
使用入门-数据源配置 数据源配置,tddl的入口,从datasource切入 <bean id="tddlDataSource" class="com.taobao ...
- SpingCloud之feign框架调用
1.生产者(没有什么特殊性) pom.xml <?xml version="1.0" encoding="UTF-8"?> <project ...
- FZU2125_简单的等式
题目想到了就是一个水题. 提示一下,S(x,m)是一个很小的数.(不超过100) 这样直接枚举这个数,然后求方程的整数解,并且判断是否满足条件即可. ——————(一开始还用Pollard大整数分解+ ...