0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

RNN存在的问题及其改进方法,并介绍更多复杂的RNN变体

电子工程师 来源:lq 2019-05-05 16:05 次阅读

主要内容

上节学习了语言模型和循环神经网络(RNN)。这一节主要讨论RNN存在的问题及其改进方法,并介绍更多复杂的RNN变体。

梯度问题梯度消失梯度爆炸梯度剪裁LSTMGRURNN变体双向RNN多层RNN梯度补充梯度向量化梯度推广:雅可比矩阵链式法则重要等式下节预告阅读更多

梯度问题

梯度消失

梯度消失

根据链式法则:

梯度可以分解成若干中间梯度的乘积。现在的问题是,如果这三项数值量级都很小,那么反向传播越远,则梯度信号越弱!这就是梯度消失问题!

形式化表述:

由于:

所以:

考虑第i步损失,对之前的某步j的隐层状态求梯度。表示如下:

考虑矩阵的L2范数:

这里的关键是矩阵。Pascanu等人证明,如果的最大特征值小于1,经过多次自乘后,梯度会表现出指数级缩小。由于使用sigmoid非线性激活函数,上界恰好是1,所以会出现梯度消失。

如果梯度随距离明显减弱,则无法判断t步和t+n步数据之间的依赖关系。

举例:

When she tried to print her tickets, she found that the printer was out of toner. She went to the stationery store to buy more toner. It was very overpriced. After installing the toner into the printer, she finally printed her__

RNN语言模型需要学习第7步"tickets"和末尾"tickets"之间的依赖关系。但如果梯度过小,则模型无法学习这种依赖关系,进而在测试时也无法预测长距离的依赖关系。

再来看一个例子:

The writer of the books __

现在有两个选项:(is) (are)。正确的应该是is。语义上,"is"和"writer"的距离更近;但顺序上,"are"和"books"的距离更近。由于梯度消失的问题,RNN语言模型更善于学习顺序距离近的关系,这可能导致学习错误,从而导致预测错误。

梯度爆炸

同梯度消失相对的是梯度爆炸,这是由于矩阵最大特征值>1。如果梯度过大,则会导致SGD更新过大:这不利于参数调整(损失较大)。

在极端情况下,如果步长过大,还会导致训练中出现Inf或NaN。

梯度剪裁

梯度爆炸的解决办法是,如果梯度范数超过某个阈值,则进行缩小,然后再SGD更新。相当于,方向不变,调小步子。

梯度剪裁示意

LSTM

RNN的主要问题是无法学会保存很多时间步前的信息

1997年Hochreiter和Schmidhuber提出Long Short-Term Memory(LSTM),这也是一种RNN,用以解决梯度消失的问题。

与RNN只有一种状态相比,LSTM在第t步,共有两种状态:hidden state 和 cell state  

两者都是n维向量

cell用于存储长距离信息,亦称为记忆单元

LSTM可以擦除、写入和读取 cell信息

信息的擦/写/读由相应的门进行控制

gate也是n维向量

每一步t,gate各个元素可以是open(1), closed(0),或二者之间。如果门打开,则表示信息通过;如果门关闭,则表示信息不能通过

gate是动态的,其值根据当前语境计算

现根据t步输入,计算hidden state 和 cell state  

遗忘门:决定保留或忘记之前cell state的哪些内容

输入门:决定当前cell的哪些内容写入cell

输出门:决定当前cell的哪些内容输出到hidden state

新cell内容:要写入cell的新内容

cell state:擦掉(忘记)上个cell state的部分内容,写入(输入)新cell内容

hidden state:读取(输出)cell的某些内容

具体如下图所示:

LSTM cell

LSTM结构让RNN更容易保存很多步以前的信息

LSTM并不保证不出现梯度消失/梯度爆炸

LSTM实际上是非常成功的

2013-2015年,LSTM取得了一流的效果

手写识别、语音识别、机器翻译、句法分析、看图说话

LSTM由于效果好,成为主流方法

2019年,在某些领域,其他方法(如Transformer)成为了主流方法

WMT 2016,总结报告出现RNN 44次

WMT 2018,总结报告出现 RNN 9次,Transformer 63次。

GRU

2014年Cho 等人提出GRU(Gated Recurrent Units),在保留LSTM优点的同时,去除其不必要的繁杂。在每一步t,只有输入和hidden state ,没有cell state:

update gate:决定更新hidden state的哪些部分内容,相当于LSTM中的遗忘门和输入门。

reset gate:决定前一hidden state哪些部分用于计算新hidden state的内容

新hidden state内容:reset gate选择前一hidden state的有用信息,并输入新的hidden state

hidden state:综合了前一hidden state和当前hidden state的内容,并在两者之间寻找平衡点

和LSTM一样,GRU也更容易保存长期信息。

除此之外,研究人员提出了很多门控RNN,但LSTM和GRU使用最为广泛。

LSTM和GRU的最大区别是,后者计算速度更快,参数更少。但并没有严格证据表明孰优孰劣。所以在实践中,可以先使用LSTM,然后再试试GRU。

RNN变体

梯度爆炸/消失不仅仅是RNN存在的问题。由于链式法则和非线性激活函数,所有神经网络(包括前向和卷积神经网络),尤其是深度神经网络,都会出现梯度消失/爆炸问题。这导致低层网络训练非常缓慢。那么解决办法就是在神经网络之间添加直接连接,使梯度传播更顺畅。

例如:

残差连接,亦称ResNet。它直接将输入信息原封不动地加在其他隐层上。

残差网络构件

稠密连接,亦称DenseNet,把所有层都连接起来。效果更好。

稠密连接:每一层以之前所有层feature-maps为输入

高速连接,亦称HighwayNet,类似于残差连接,但identity连接和transformation层由动态门控制

结论:虽然梯度消失/爆炸是个普遍存在的问题,但由于相同矩阵连续相乘导致RNN尤其不稳定。

双向RNN

在情绪分类任务中,假如输入是某个影评,我们希望了解是好评还是差评。一般可以使用简单RNN进行情绪分类。RNN可以编码句子。RNN的隐层状态就是句子表示。

下图蓝色方框的隐藏状态可以看作词"terribly"的语境表示。

情绪分析任务

但是这些语境表示仅仅考虑了词的左侧语境。很明显,"terribly"右侧的"exciting"修改了"terribly"的词义,将整个句子的负面情绪扭转为正面情绪。右侧语境同样重要!这导致了双向RNN的出现。

双向RNN由两个RNN组成:正向RNN和反向RNN。反向RNN和正向RNN一样,只不过它从右到左开始编码。在隐层状态,则将两个RNN输出进行拼接。

双向RNN

在第t步:

正向RNN:

反向RNN:

隐层状态拼接:

通常正向RNN和反向RNN权重不同。

下面是双向RNN简化图。

双向RNN简化图

注意:只有当输入序列完整时,才适用双向RNN。例如语言模型就不能使用双向RNN,因为在语言模型中,只能使用左侧语境。

最近很火的BERT(BidirectionalEncoder Representations from Transformers)就使用了双向信息。后面还会谈到BERT。

多层RNN

虽然RNN展开后在一个维度已经很深了,我们还可以在另外一个维度增加深度,这就是多层RNN。

多层RNN可以实现更加复杂的表示。低层RNN计算低层特征;高层RNN计算高层特征。

多层RNN

在实践中,高性能RNN通常都是多层RNN(但一般达不到前向网络或卷积网络的深度)。

例如,在2017年的论文中,Britz 等人发现,在神经机器翻译中,encoder RNN 最好使用2-4层,decoder RNN 最好使用4层。要训练更深的RNN,则需要跨层连接或稠密连接。

基于Transformer的神经网络(如BERT)则高达24层。

总结:

LSTM效果很好,GRU速度很快

梯度剪裁可以避免NaN

如果有完整信息,尽量使用双向RNN

如果有计算资源,尽量使用多层RNN,层数过多时,则需要跨层/稠密连接。

梯度补充

以下作为CS224N-2019-3的补充。梯度计算是神经网络训练的核心。逐个推导神经网络各个参数的梯度冗长复杂,因此有必要使用矩阵/向量形式进行计算。

梯度向量化

给定1个输出和n个输入的函数:其梯度就是每个输入的偏导的向量:

梯度推广:雅可比矩阵

给定m个输出和n个输入的函数:其偏导数就是mxn矩阵,即雅可比梯度矩阵。:

其中单个元素就是普通的标量梯度:雅可比矩阵非常有用。

链式法则

一元函数:导数相乘

多元函数:雅可比矩阵相乘

重要等式

矩阵乘以列向量,对列向量求梯度(?)

行向量乘以矩阵,对行向量求梯度(?)

对向量本身求梯度

(?)使用链式法则时,该项会消掉,因为矩阵或向量乘以单位矩阵,还是原矩阵或向量。

对向量各个元素施加同一函数后,对向量求梯度

(?)

矩阵乘以列向量,对矩阵求梯度(?)

行向量乘以矩阵,对矩阵求梯度(?)

交叉熵损失,对logits求梯度

(?)

这些等式可用于快速计算很多神经网络的梯度。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 神经网络
    +关注

    关注

    42

    文章

    4762

    浏览量

    100534
  • 梯度
    +关注

    关注

    0

    文章

    30

    浏览量

    10309
  • rnn
    rnn
    +关注

    关注

    0

    文章

    88

    浏览量

    6872

原文标题:梯度消失和神奇RNN(CS224N-2019-7)

文章出处:【微信号:gh_b11486d178ef,微信公众号:语言和智能】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    FPGA也能做RNN

    的重要事件。标准的RNN可以保留和使用最近的过去信息,但是不能学习长期的依赖关系。并且由于存在梯度消失和爆炸的问题,传统的RNN无法训练较长的序列。为了解决上述问题,LSTM添加了记忆控制单元来决定何时
    发表于 07-31 10:11

    利用RNN进行文章生成

    利用RNN进行文章生成
    发表于 05-24 08:35

    递归神经网络(RNN

    RNN的代码,了解RNN内部发生的情况。以下代码包含RNN类:除了上述代码中的单词RNN之外,其他一切听起来与在前面章节中使用的非常类似,
    发表于 07-20 09:27

    放弃 RNN 和 LSTM 吧,它们真的不好用

    2014 年 RNN/LSTM 起死回生。自此,RNN/LSTM 及其变种逐渐被广大用户接受和认可。起初,LSTM 和 RNN 只是一种解决序列学习和序列翻译问题的
    的头像 发表于 04-25 09:43 2.1w次阅读

    循环神经网络(RNN)和(LSTM)初学者指南

    最近,有一篇入门文章引发了不少关注。文章中详细介绍了循环神经网络(RNN),及其变体长短期记忆(LSTM)背后的原理。
    发表于 02-05 13:43 903次阅读

    神经网络中最经典的RNN模型介绍

    强大的Bert模型家族,都是站在RNN的肩上,不断演化、变强的。 这篇文章,阐述了RNN的方方面面,包括模型结构,优缺点,RNN模型的几种应用,RNN常使用的激活函数,
    的头像 发表于 05-10 10:22 1.2w次阅读
    神经网络中最经典的<b class='flag-5'>RNN</b>模型<b class='flag-5'>介绍</b>

    深度分析RNN的模型结构,优缺点以及RNN模型的几种应用

    强大的Bert模型家族,都是站在RNN的肩上,不断演化、变强的。 这篇文章,阐述了RNN的方方面面,包括模型结构,优缺点,RNN模型的几种应用,RNN常使用的激活函数,
    的头像 发表于 05-13 10:47 2.4w次阅读
    深度分析<b class='flag-5'>RNN</b>的模型结构,优缺点以及<b class='flag-5'>RNN</b>模型的几种应用

    精选 25 个 RNN 问题

    ,非常适合RNN。与其他神经网络不同,RNN具有内部存储器,允许它们保留来自先前输入的信息,根据整个序列的上下文做出预测或决策。在本文中,我们将探讨RNN的架构、它
    的头像 发表于 12-15 08:28 599次阅读
    精选 25 个 <b class='flag-5'>RNN</b> 问题

    rnn神经网络基本原理

    序列预测等领域有着广泛的应用。本文将详细介绍RNN的基本原理、结构、优化方法和应用场景。 RNN的基本原理 1.1 循环结构 RNN的核心思
    的头像 发表于 07-04 15:02 632次阅读

    rnn神经网络模型原理

    的应用。本文将介绍RNN的原理、结构、优化方法以及实际应用。 RNN的基本原理 1.1 循环结构 RNN的核心特点是具有循环结构,即网络中的
    的头像 发表于 07-04 15:40 492次阅读

    rnn是什么神经网络

    RNN(Recurrent Neural Network,循环神经网络)是一种具有循环连接的神经网络,它能够处理序列数据,并且具有记忆能力。与传统的前馈神经网络(Feedforward Neural
    的头像 发表于 07-05 09:49 574次阅读

    LSTM神经网络与传统RNN的区别

    在深度学习领域,循环神经网络(RNN)因其能够处理序列数据而受到广泛关注。然而,传统RNN在处理长序列时存在梯度消失或梯度爆炸的问题。为了解决这一问题,LSTM(长短期记忆)神经网络应运而生。 循环
    的头像 发表于 11-13 09:58 183次阅读

    如何使用RNN进行时间序列预测

    时间序列预测在金融、气象、销售预测等领域有着广泛的应用。传统的时间序列分析方法,如ARIMA和指数平滑,虽然在某些情况下表现良好,但在处理非线性和复杂模式时可能不够灵活。递归神经网络(RNN)提供了
    的头像 发表于 11-15 09:45 164次阅读

    RNN的基本原理与实现

    RNN,即循环神经网络(Recurrent Neural Network),是一种特殊类型的人工神经网络,专门设计用于处理序列数据,如文本、语音、视频等。以下是对RNN基本原理与实现的介绍: 一
    的头像 发表于 11-15 09:49 223次阅读

    RNN与LSTM模型的比较分析

    RNN(循环神经网络)与LSTM(长短期记忆网络)模型在深度学习领域都具有处理序列数据的能力,但它们在结构、功能和应用上存在显著的差异。以下是对RNN与LSTM模型的比较分析: 一、基本原理与结构
    的头像 发表于 11-15 10:05 199次阅读