RNN-LSTM-GRU对比简析

♣ RNN

Recurrent Neural Network:循环神经网络,每一时间步的网络结构一致,且当前的输出是下一时间的输入。
RNN-LSTM-GRU对比简析_第1张图片 Ian Googfellow Deep Learning

最经典的多对多结构:
RNN-LSTM-GRU对比简析_第2张图片 1. 每一时间步,U、V、W参数共享
2. 当前输入包括上一步的隐藏层输出,隐藏层包含了历史丰富的特征
3. 输入x与label y 维度一致
前向更新方程如下:
RNN-LSTM-GRU对比简析_第3张图片 可见,只有前面序列更新完成,才能更新之后的序列,也就是说,RNN在更新时,是串行的。

梯度反向传播BPTT过程:

RNN-LSTM-GRU对比简析_第4张图片

U、V、W、b参数的梯度更新都需要后续的序列的梯度传播,而且是包含后续梯度的连乘项。

RNN步骤之间共享参数,最终的输出包含参数比如W的n次幂。
当序列很长时,如果W的特征值大于1,会使数值很大;如果小于1,最终输出很小。
而这些又会影响到反向传播的梯度大小,可能出现梯度爆炸(很大)或梯度消失(很小)的情况。梯度异常,机器学习就变得很困难。
相关实验表明,梯度下降SGD在序列长度为为10或20时,学习已经很难凑效。

RNN是深度时序模型的基石,重点在于参数共享、延迟传递,输入输出还有很多场景。
RNN-LSTM-GRU对比简析_第5张图片
x固定,y可变。 图片标注

RNN-LSTM-GRU对比简析_第6张图片
y固定, x可变。编码, Embedding。

RNN-LSTM-GRU对比简析_第7张图片 双向RNN,上下文

RNN-LSTM-GRU对比简析_第8张图片 编码-解码,机器翻译

♣ LSTM

Long Short-Term Memory:基于长短期记忆的RNN。
普通的RNN具有梯度保障或消失的问题,LSTM就是通过引入线性自循环单元cell,保持梯度的长期存在。

结合以下两张图,理解起来比较方便:
RNN-LSTM-GRU对比简析_第9张图片 Klaus Greff LSTM & Colah’s Blog

1. 先忽略下图中的蓝线部分,是LSTM的一种变体。
2. 去掉所有逻辑门,这样下图就剩下中间虚线所框部分。
3. 可以这样简单地理解LSTM:
在RNN的基础上,多了一个线性自连接循环单元Cell,其更新方式是c_t+1 = c_t + Δ,有一点很关键,Cell单元能够恰好记录之前4. 所有的状态,即t+1时刻包含着之前1~t时刻的所有信息,而且系数为1,这样在循环网络前向更新的时候,信息就能一直向后传递,不会出现信息爆炸或消失。
线性自连接循环Cell就是LSTM最具想象力的设计。
所有信息都缓存到Cell,是冗余的,而且内存是个问题。
逻辑门输出(0, 1)之间的值,表示流入或流出Cell的信息,多大程度上使用Cell循环保留信息。
遗忘门过滤没有关联的历史信息,输入门筛选有用输入信息,当有多个Cell时,输出门筛选Cell输出,如下示意图可参考理解。
注意与上图标记的不同,这里的out_t对应于上图的c_t, 且没有遗忘门。
RNN-LSTM-GRU对比简析_第10张图片 Hochreiter LSTM 1997

LSTM正式的更新过程如下:
RNN-LSTM-GRU对比简析_第11张图片 Colah’s Blog

♣ GRU

Gated Recurrent Unit:基于门控循环单元的RNN。
GRU是LSTM的简单版本,合并内部自循环Cell与隐藏层hidden,合并遗忘门、输入门为更新门z,新增重置门r,删除输出门。

更新方式如下:
RNN-LSTM-GRU对比简析_第12张图片 colah's blog & gru paper

直接由更新门控制时序信息流传递,比如更新门等于0,其实就是线性自循环Cell。
当前输入X的信息直接由重置门筛选关联的hidden层特征。

GRU比LSTM结构简单,模型与数据匹配的话,学习训练就比较快;但LSTM表达能力更强,可控制粒度更细。
当满足业务需求的情况下,自然优先选择结构简单的模型。

♣ 代码示例

PaddlePaddle StaticRNN(输入定长) 使用代码示例如下,主要关注输入输出使用方式。
RNN-LSTM-GRU对比简析_第13张图片 PaddlePaddle API文档

LSTM的使用示例:
RNN-LSTM-GRU对比简析_第14张图片 PaddlePaddle API文档

双向LSTM,比如某应用场景:
RNN-LSTM-GRU对比简析_第15张图片 代码示意如下:
RNN-LSTM-GRU对比简析_第16张图片 PaddlePaddle models 源码

GRU结构上与RNN、LSTM类似,代码都是一致的。

强化学习中经常与环境交互,一般采用一小步模块,比如lstm_unit:
RNN-LSTM-GRU对比简析_第17张图片 PaddlePaddle API文档

 

♣ 应用案例

时序模型在NLP、用户行为方面,应用十分广泛。
RNN-LSTM-GRU对比简析_第18张图片 hidasib GRU4Rec:推荐系统

RNN-LSTM-GRU对比简析_第19张图片 BiDAF:BiLSTM用于阅读理解编解码

♣ 总结

时序模型RNN在时间维度上,共用模型结构,共享模型参数,通过自身循环,试图捕捉输入的上下文特征。
整体来看,时序模型,运算速度不能彻底并行,但却有很强的表达能力,可以近似任何函数。

你可能感兴趣的:(机器学习)