记忆网络RNNLSTM与GRU
Posted Young_Gy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了记忆网络RNNLSTM与GRU相关的知识,希望对你有一定的参考价值。
一般的神经网络输入和输出的维度大小都是固定的,针对序列类型(尤其是变长的序列)的输入或输出数据束手无策。RNN通过采用具有记忆的隐含层单元解决了序列数据的训练问题。LSTM、GRU属于RNN的改进,解决了RNN中梯度消失爆炸的问题,属于序列数据训练的常用方案。
RNN
结构
传统的神经网络的输入和输出都是确定的,RNN的输入和输出都是不确定的sequence
数据。其结构如下:
具体地,RNN有隐含层,隐含层也是记忆层,其状态(权值)会传递到下一个状态中。
htyt=σ(xtWxh+ht−1Whh)=σ(htWhy)
训练
训练步骤如下:
- 构建损失函数
- 求损失函数对权值的梯度
- 采用梯度下降法更新权值参数
关于损失函数,根据需要选择构建即可,下面提供两种常见的损失函数:
关于梯度下降,采用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
,那么
接下来,要明白LSTM如何解决RNN中梯度消失与爆炸的问题。
针对梯度消失,RNN中当获取