RNN已经发展十分成熟,但仍然有许多认知仅仅停留在“RNN具有处理时间序列的输入”,对于RNN的框架结构,以及为什么演变到LSTM,LSTM如何演变到GRU却是十分含糊。本篇博客,旨在记录笔者对RNN的理解和LSTM的认知,主要从结构上、和部分公式角度理解RNN和LSTM结构。主要学习内容来自《深度学习》伊恩 古德费洛。
1 RNN 结构
RNN(Recurrent neural network)是一类用于处理序列数据的神经网络。循环神经网络以不同的方式共享参数。输出的每一项是前一项的函数。输出的每一项对先前的输出应用相同的更新规则而产生。循环神经网络中一些重要的设计模式包括以下几种:
(1)每个时间步都有输出,并且隐藏单元之间有循环连接的循环网络;
(2)每个时间步都产生一个输出,只有当前时刻的输出到下个时刻的隐藏单元之间有循环连接的循环网络。
(3)隐藏单元之间存在循环连接,但读取整个序列后产生单个输出的循环网络。
对于(1),各层计算公式如下:
2 LSTM结构
长短期记忆:引入自循环的巧妙构思长时间持续流动的路径,其中一个关键的扩展自循环的权重是视上下文而定,而非固定的。门控自循环的权重,累积的时间长度可以动态地改变。
input gate:
forget gate:
output gate:
new memory cell :
final memory cell :
final hidden state :
结构图如图:
3 GRU结构
GRU相较于LSTM仅有两个单元门,其公式如下:
reset gate:
update gate :
new memory :
final hidden state :
4 总结
(1)RNN存在梯度爆炸或者梯度消失问题,对于长句子存在无法记忆前面信息的问题。
(2)LSTM针对RNN存在的梯度爆炸或梯度消失有一定的改进,但对于长句子仍然存在效果不好的情况。
(3)GRU相对于LSTM,门控少一些,参数量减少,小数据量时或者数据量不够大时,效果与LSTM相当或者稍微好一些,但数据量较大时,LSTM效果更好。
(4)tensorflow中rnn模块,存在静态和动态的写法,单向和双向的写法,根据自己的需求进行设定。rnn cell输出单元通常是tuple,需要进行修改。