cs224n 2019 Lecture 7: Vanishing Gradients and Fancy RNNs
本节课内容概述:
- 本节课主要解释了梯度消失和梯度爆炸问题以及其他类型的RNN
- 上节课将的是RNN以及为什么RNN适用于语言模型。
- 因为它可以记住前面的信息。
- 梯度消失问题导致了新RNN的出现:LSTM和GRU
- 其他修复梯度消失或者梯度爆炸的方法:
- 梯度剪裁
- 跳过连接
- 其他更有趣的RNN:
- 双向RNN
- 多层RNN
首先是梯度消失问题:
应用RNN的时候,如果要求h1的梯度,则会应用链式法则求导,有可能会存在导数越求越小的情况,也就是梯度消失问题。
回忆一下RNN及求梯度的公式:
当求第j步中的梯度时,如果Wh很小,那么求Wh的(i-j)次幂则会更小,导致梯度很小。
如果Wh<1,会有梯度消失问题,Wh>1会有梯度爆炸问题。
为什么梯度消失会成为一个问题?
蓝色箭头的梯度会丢失,因为黄色箭头的梯度更大。
所以h1处的权重更新就会根据黄色箭头的梯度来更新,那么RNN的意义就没有了。因为RNN比起n-gram的优势就是可以利用远处的信息。
举个例子:
我们都知道横线处应该填的是ticket。用RNN进行预测得出来的也应该是ticket,这是根据第一句话的信息得出来的。但是如果RNN存在梯度消失问题,那么它就不能利用第一句话提供的信息,因为对它来说太远了。导致RNN不能利用较长距离的信息进行预测,只能利用较近距离的信息导致答案不准确。
为什么梯度爆炸是个问题?
梯度更新的公式如下:
模型参数是通过求梯度进行更新的,如果梯度太多,会导致θ更新幅度过大,从而轻易的到达INF或者NAN。
如下图所示。当到达一个梯度最大的时候,也就是在陡坡处,正确的参数位置应该是在坡低,但是由于梯度很大,参数更新就会一下子沿着左图的直线方向前进,远远超过了最佳梯度位置。
解决办法:梯度剪裁
如果求得的梯度大于某个阈值,在引用SGD训练优化之前先把梯度减小。方法如下:
RNN的主要问题是:难于保留过长信息。
隐藏状态被不断的重写
如果让RNN有单独的记忆呢?
LSTM:Long Short-Term Memory 长短期记忆
在步骤t,有一个隐藏层ht和一个细胞状态ct,两者的向量长度都为n
细胞c存储长期信息
LSTM从细胞中可以擦除,写和读信息
擦除,写和读的操作可以被三个相应的门控制:
门也是长度为n的向量
在每个步骤中,门可以关闭或者打开
门是动态的,基于当前环境进行改变
有一个输入序列xt,能计算出一个隐藏层状态序列ht,细胞状态ct。在步骤t,各个门和计算公式和解释如下:
- 遗忘门:控制是否忘记之前的细胞状态
- 输入门:控制新细胞的内容
- 输出们:控制细胞输出到隐藏层的内容
- 新细胞内容:根据输入xt产生的细胞的内容
- 细胞状态:使用遗忘门f控制是否忘记之前的细胞状态,使用输入门控制是否使用新产生的细胞内容
- 隐藏状态:从输出门中获得细胞内容
以下的图展示的LSTM的工作过程:
LSTM是如何解决梯度消失问题呢?
LSTM可以保存很多步以前的信息:
如果遗忘门f一直设置为1,那么信息就不会丢失。
虽然LSTM也不能保证没有梯度消失和梯度爆炸问题,但是它提供了一个简单的方式来学习长期依赖。
GRU :Gated Recurrent Units
作为LSTM的一个更简单的替代方案。
在每个时间步,有输入xt和隐藏状态ht,没有细胞状态。
- 更新门:控制隐层状态被更新还是保留上一个隐层状态。
- 重置门:控制之前的隐藏层状态是否被用于计算新的内容
- 新的隐层内容:重置门决定上一步的隐层是否被保留用以计算新的隐层以及使用当前输入内容计算新的隐层内容
- 隐层状态:更新门实时控制上一步的隐层状态是否被保留以及新的隐层状态内容是否应用于当前隐层状态。
LSTM和GRU的比较:
研究者们提出了许多RNN的不同版本,但是只有LSTM和GRU被广泛使用
GUR和LSTM的最大不同是,GRU计算速度更快而且参数更少
没有一定的结论说GRU和LSTM哪个更快
一般来说,LSTM是一个默认的选择,特别是如果数据有很长的依赖,或者有很多训练数据。
经验法则:如果想要更高效的计算,可以换成GRU
梯度消失或者梯度爆炸问题仅仅是RNN的问题吗?
不!它是所有神经架构的问题,包括前馈网络和卷积网络。特别是深度比较深的网络。
由于链式法则和非线性函数的使用,随着传播过程,梯度会消失
这样底层就会很难训练。
解决方案:许多新的前馈网络和卷积网络加了直接的连接
1、比如残差连接,也叫做ResNet,跳跃连接。
有一条线直接跳过了内部的层作为后面的层的输入,如上图所示,F(x)+x
2、比如说密集连接,也叫做DenseNet
将任意层的输出作为之后任意层的输入。
3、比如说高速公路连接,也叫做HightwayNet
和残差连接类似,但是连接的定义和转换的层被动态门控制
源于LSTM产生的,但是被应用于深度的卷积网络
结论:
RNN是不稳定的因为重复使用了相同的权重W
双向RNN
在下面的情感分类任务中,我们把隐层状态视为单词terribly的表示。成为上下文表示。但是这个上下文表示只包含左边部分的信息,不包含右边部分的信息。右边部分信息中的exciting能把terribly这个单词的感情色彩从消极的变成积极的。因为terribly有多个意思:”非常”、“可怕地”,如果不看右边的信息,就会可能把它理解为可怕地,而它真正的意思应该是”非常“
如下图所示,如果采用双向的RNN,那么terribly对应的上下文表示就可以获得左边和右边的信息
双向RNN的公式如下所示:
注意:
双向RNN仅适用于当有办法知道整个输入序列的时候,当只知道左边部分的信息的时候没有办法适用双向RNN,比如不适用与语言模型。但是如果知道完整信息,双向RNN就会很有用,比如bert模型。
多层RNN
RNN在一个维度上是很深的,也可以让它在另一个维度上也很深,这就是多层RNN。
这个将会让网络计算更复杂的表示。
低层次的RNN计算低层次的特征,高层次的RNN计算高层次的特征。
多层RNN也叫做堆叠RNN
- 高性能的RNN通常是多层的,但是没有前馈网络和卷积网络一样深。
- 2-4层的深度对于作为编码器的RNN来说是合适的,4层的深度对于解码器的RNN来说是合适的。
- 之前提到的跳跃连接和密集连接对于训练更深层次的RNN来说是必要的。
- 基于Transformer的网络能达到24层(bert模型)
cs224n 2019 Lecture 7: Vanishing Gradients and Fancy RNNs相关推荐
- cs224n 2019 Lecture 9: Practical Tips for Final Projects
主要内容: 项目的选择:可以选择默认的问答项目,也可以自定义项目 如何发现自定义项目 如何找到数据集 门神经网络序列模型的复习 关于机器翻译的一些话题 查看训练结果和进行评估 一.项目的选择 默认项目 ...
- 循环神经网络教程3-BP算法和梯度消失问题, Part 3 – Backpropagation Through Time and Vanishing Gradients
In the previous part of the tutorial we implemented a RNN from scratch, but didn't go into detail on ...
- 带有神经网络的梯度消失(Vanishing gradients with RNNs)
来源:Coursera吴恩达深度学习课程 基本的RNN算法还有一个很大的问题,就是梯度消失(vanishing gradients)的问题. 如上图,这是个语言模型的例子.有两个句子:"Th ...
- CS224n 2019 Winter 笔记(一):Word Embedding:Word2vec and Glove
CS224n笔记:Word2Vec:CBOW and Skip-Gram 摘要 一.语言模型(Language Model) (一)一元模型(Unary Language Model) (二)二元模型 ...
- CS224n 2019 Winter 笔记(三):句子依存分析(Dependency Parsing)
CS224n 2019 Winter 笔记(三):句子依存分析(Dependency Parsing) 一.概述 二.语言结构的两种Views (一)成分分析(constituent parsing) ...
- CS224N 2019 Assignment 2
Written: Understanding word2vec Let's have a quick refresher on the word2vec algorithm. The key insi ...
- CS224N 2019年课程第一次作业复现
本次作业主要介绍 余弦相似性 两种求词向量的方法 基于计数(词共现矩阵 + SVD) 基于预测(word2vec) 完整代码:CS 224N | Home 一.环境及数据问题 1.gensim安装 p ...
- CS224N 2019 自然语言处理(一)自然语言处理库gensim之Word2vec
笔记摘抄 1. WordNet显示同义词 from nltk.corpus import wordnet as wn# 同义词 poses = {'n': 'noun', 'v': 'verb', ' ...
- 斯坦福CS224n追剧计划【大结局】:NLP和深度学习的未来
一只小狐狸带你解锁炼丹术&NLP秘籍 简介 Stanford CS224n追剧计划是由夕小瑶的卖萌屋发起的开源开放NLP入门项目,借助github和微信群为大家提供同期小伙伴打卡讨论.内容沉淀 ...
- 梯度消失/爆炸与RNN家族的介绍(LSTM GRU B-RNN Multi-RNNs)-基于cs224n的最全总结
vanishing gradients and fancy RNNs(RNN家族与梯度消失) 文章目录 vanishing gradients and fancy RNNs(RNN家族与梯度消失) 内 ...
最新文章
- 下一代防火墙的5个优点
- Struts2的properties配置文件详解
- 重要的开源资源及50个c/c++源代码网站
- 二叉排序树和平衡二叉排序树
- 蚂蚁集团与CCF达成合作成立基金,支持35岁以下青年学者
- ATL CLR MFC Win32的区别
- C# ZPL打印标签
- 企业如何推动组织变革?
- ecshop判断是手机访问还是web访问
- JavaScript对象与内置对象——内置对象(二)
- linux 统计每个ip数量,日子IP统计
- 格里高历日历判断闰年
- scala类的介绍与操作02
- 计算机软件基础模式上课稿,中南大学大学计算机基础模拟试题讲课稿.pdf
- 关于数据存储的三道面试题,你会吗?
- java.sql.SQLException: Io 异常: Socket read timed out
- 黑土地,你让我如此心醉
- php如何查询数据库的表,php如何查询mysql表名字,php查询数据库并输出
- git 分支管理推荐规范
- java程序设计基础笔试题库,智慧职教Java程序设计基础题库及答案
热门文章
- [c++] 什么是平凡类型,标准布局类型,POD类型,聚合体
- excel概率密度函数公式_用excel怎么制作概率密度图_EXCEL 正态分布公式�9�3
- mysql high priv_MYSQL新特性secure_file_priv对读写文件的影响
- 两个路由器配置静态路由只能单边 ping 通
- html编辑个人信息页面,编辑个人信息.html
- ajax readystate为1,Ajax readyState总是等于1
- 第九章:iOS应用的界面编辑
- 常见报错(2)没有为工厂1010订单类型PP01定义参数 消息号 RU010
- 如何使用vsCode+Icarus verilog+GTKwave编写并仿真verilog
- OpenGL光源光照使用范例