您的位置:首页 > 理论基础 > 计算机网络

记忆网络RNN、LSTM与GRU

2017-05-09 20:40 330 查看
RNN
结构

训练

应用

RNN Variants

LSTM
结构

梯度消失及梯度爆炸

GRU
结构



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

RNN

结构

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





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

htyt=σ(xtWxh+ht−1Whh)=σ(htWhy)

训练

训练步骤如下:

构建损失函数

求损失函数对权值的梯度

采用梯度下降法更新权值参数

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

CC=12∑n=1N||yn−ŷ n||2=12∑n=1N−logynrn

关于梯度下降,采用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个思路:

增加隐含层的输入参数:例如除了ht−1,xt,还可以包含yt−1作为输入。

增加隐含层的深度

双向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′

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

梯度消失及梯度爆炸

首先,要明白RNN中梯度消失与梯度爆炸的原因:在时间戳的更新中,cell的状态不断乘以Whh。简单起见,视Whh为scalar值w,那么y=xwn,∂y∂w=nxwn−1。根据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)+c。c′的梯度可以直接传递给c。

总结来说,LSTM相比RNN,将c,c′的更新关系从乘法变成了加法,因此不用乘以权值系数w,c′的梯度可以直接传递给c,解决了梯度消失的问题。

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



GRU

结构

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

update gate:zt

reset gate:rt



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  RNN LSTM
相关文章推荐