记忆网络RNN、LSTM与GRU

原创 2017年05月09日 20:40:50

这里写图片描述

一般的神经网络输入和输出的维度大小都是固定的,针对序列类型(尤其是变长的序列)的输入或输出数据束手无策。RNN通过采用具有记忆的隐含层单元解决了序列数据的训练问题。LSTM、GRU属于RNN的改进,解决了RNN中梯度消失爆炸的问题,属于序列数据训练的常用方案。

RNN

结构

传统的神经网络的输入和输出都是确定的,RNN的输入和输出都是不确定的sequence数据。其结构如下:

这里写图片描述
这里写图片描述

具体地,RNN有隐含层,隐含层也是记忆层,其状态(权值)会传递到下一个状态中。

htyt=σ(xtWxh+ht1Whh)=σ(htWhy)

训练

训练步骤如下:

  1. 构建损失函数
  2. 求损失函数对权值的梯度
  3. 采用梯度下降法更新权值参数

关于损失函数,根据需要选择构建即可,下面提供两种常见的损失函数:

CC=12n=1N||ynŷ n||2=12n=1Nlogynrn

关于梯度下降,采用BPTT(Backpropagation through time)算法,该算法的核心是对每一个时间戳,计算该时间戳中权重的梯度,然后更新权重。需要注意的是,不同时间戳同样权重的梯度可能是不一样的,如下图所示都减去,相当于更新同一块内存区域中的权重。

这里写图片描述
这里写图片描述

应用

  • 多对多:词性标注pos tagging、语音识别、name entity recognition(区分poeple、organizations、places、information extration(区分place of departure、destination、time of departure、time of arrival, other)、机器翻译
  • 多对一:情感分析
  • 一对多:caption generation

这里写图片描述

这里写图片描述
这里写图片描述

这里写图片描述

这里写图片描述

RNN Variants

RNN的变种大致包含下面3个思路:

  • 增加隐含层的输入参数:例如除了ht1,xt,还可以包含yt1作为输入。
  • 增加隐含层的深度
  • 双向RNN

这里写图片描述
这里写图片描述
这里写图片描述

LSTM

结构

  • 单个时间戳,RNN输入1个x,输出1个y
  • 单个时间戳,LSTM输入4个x,输出1个y

相比RNN,LSTM的输入多了3个x,对应3个gate,这3个gate分别是:

  • input gate:控制输入
  • forget gate:控制cell
  • output gate:控制输出

涉及到的激活函数共5个,其中3个控制gate的(通常用sigmoid函数,模拟gate的开闭状态),1个作用于输入上,一个作用于cell的输出上。

这里写图片描述

LSTM单个时间戳的具体执行如下:

  • 输入:4个输入x,1个cell的状态c
  • 输出:1个输出a,1个更新的cell状态c

ca=g(z)f(zi)+cf(zf)=h(c)f(zo)

梯度消失及梯度爆炸

首先,要明白RNN中梯度消失与梯度爆炸的原因:在时间戳的更新中,cell的状态不断乘以Whh。简单起见,视Whh为scalar值w,那么y=xwnyw=nxwn1。根据w的值与1的大小关系,梯度会消失或者爆炸。

接下来,要明白LSTM如何解决RNN中梯度消失与爆炸的问题。

针对梯度消失,RNN中当获取c的梯度后,因为c=cw,为了backward获得c的梯度,要将c的梯度乘以w;LSTM中存在梯度的快速通道,获取c的梯度后,因为c=g(z)f(zi)+cf(zf),当forget gate打开时,c=g(z)f(zi)+cc的梯度可以直接传递给c
总结来说,LSTM相比RNN,将c,c的更新关系从乘法变成了加法,因此不用乘以权值系数wc的梯度可以直接传递给c,解决了梯度消失的问题。

针对梯度爆炸,即使将c,c的关系由乘法变成了加法,仍然解决不了梯度爆炸。原因便是梯度的路径不止一条,如下图所示,红色的块仍然可能造成梯度爆炸。LSTM解决这个问题的方法是clip,也就是设置梯度最大值,超过最大值的按最大值计。

这里写图片描述

GRU

结构

GRU相比LSTM的3个gate,只用了两个gate:

  • update gate:zt
  • reset gate:rt

这里写图片描述

这里写图片描述

RNN, LSTM, GRU 公式总结

RNN参考 RNN wiki 的描述,根据隐层 hth_t 接受的是上时刻的隐层(hidden layer) ht−1h_{t-1} 还是上时刻的输出(output layer)yt−1y_{t-1}...
  • zhangxb35
  • zhangxb35
  • 2017年04月11日 17:09
  • 5237

RNN LSTM与GRU深度学习模型学习笔记

RNN(Recurrent Neural Network), LSTM(Long Short-Term Memory)与GRU(Gated Recurrent Unit)都是自然语言处理领域常见的深度...
  • u012033027
  • u012033027
  • 2017年01月09日 20:39
  • 5514

循环神经网络教程 第四部分 用Python 和 Theano实现GRU/LSTM RNN

本教程的github代码在本文中,我们将了解LSTM(长期短期内存)网络和GRU(门控循环单元)。 LSTM是1997年由Sepp Hochreiter和JürgenSchmidhuber首次提出的,...
  • u013713117
  • u013713117
  • 2016年12月31日 17:32
  • 1432

深度学习之六,基于RNN(GRU,LSTM)的语言模型分析与theano代码实现

引言前面已经介绍过RNN的基本结构,最基本的RNN在传统的BP神经网络上,增加了时序信息,也使得神经网络不再局限于固定维度的输入和输出这个束缚,但是从RNN的BPTT推导过程中,可以看到,传统RNN在...
  • u010223750
  • u010223750
  • 2016年05月26日 21:49
  • 23780

关于lstm和gru的一些简单资料,讲得比较容易理解

Recurrent Neural Networks 人类并不是每时每刻都从一片空白的大脑开始他们的思考。在你阅读这篇文章时候,你都是基于自己已经拥有的对先前所见词的理解来推断当前词的真实含义。我们不...
  • u011954647
  • u011954647
  • 2016年08月31日 09:56
  • 12610

深度学习与自然语言处理(7)_斯坦福cs224d 语言模型,RNN,LSTM与GRU

说明:本文为斯坦福大学CS224d课程的中文版内容笔记,已得到斯坦福大学课程@Richard Socher教授的授权翻译与发表 1.语言模型 语言模型用于对特定序列的一系列词汇的出现概率进行计算。...
  • yaoqiang2011
  • yaoqiang2011
  • 2016年07月17日 15:27
  • 28526

从NN到RNN再到LSTM(3): 长短时记忆LSTM简介及计算

本文将简要介绍RNN存在的梯度消失和梯度爆炸问题,然后介绍长短时记忆(Long Short-Term memory,LSTM)的相关公式及推导过程。 转载请注明出处:http://blog.csdn....
  • u011414416
  • u011414416
  • 2015年07月02日 11:48
  • 10003

RNN,LSTM与GRU

 1.语言模型 语言模型用于对特定序列的一系列词汇的出现概率进行计算。一个长度为m的词汇序列{w1,…,wm}的联合概率被表示为P(w1,…,wm)。由于在得到具体的词汇之前我们会先知道词汇的...
  • ch1209498273
  • ch1209498273
  • 2017年11月15日 00:08
  • 172

RNN学习笔记(六)-GRU,LSTM 代码实现

RNN学习笔记(六)-GRU,LSTM 代码实现
  • rtygbwwwerr
  • rtygbwwwerr
  • 2016年04月22日 18:07
  • 3480

深度学习笔记——基于双向RNN(LSTM、GRU)和Attention Model的句子对匹配方法

本文主要是结合RNN和Attention Model做一些关于句子对匹配的模型总结。
  • mpk_no1
  • mpk_no1
  • 2017年08月06日 23:06
  • 1833
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:记忆网络RNN、LSTM与GRU
举报原因:
原因补充:

(最多只允许输入30个字)