RNN-LSTM-GRU对比简析

♣ RNN

Recurrent Neural Network:循环神经网络,每一时间步的网络结构一致,且当前的输出是下一时间的输入。
 Ian Googfellow Deep Learning

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

梯度反向传播BPTT过程:



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

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

RNN是深度时序模型的基石,重点在于参数共享、延迟传递,输入输出还有很多场景。

x固定,y可变。 图片标注


y固定, x可变。编码, Embedding。

 双向RNN,上下文

 编码-解码,机器翻译

♣ LSTM

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

结合以下两张图,理解起来比较方便:
 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, 且没有遗忘门。
 Hochreiter LSTM 1997

LSTM正式的更新过程如下:
 Colah’s Blog

♣ GRU

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

更新方式如下:
 colah's blog & gru paper

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

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

♣ 代码示例

PaddlePaddle StaticRNN(输入定长) 使用代码示例如下,主要关注输入输出使用方式。
 PaddlePaddle API文档

LSTM的使用示例:
 PaddlePaddle API文档

双向LSTM,比如某应用场景:
 代码示意如下:
 PaddlePaddle models 源码

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

强化学习中经常与环境交互,一般采用一小步模块,比如lstm_unit:
 PaddlePaddle API文档

 

♣ 应用案例

时序模型在NLP、用户行为方面,应用十分广泛。
 hidasib GRU4Rec:推荐系统

 BiDAF:BiLSTM用于阅读理解编解码

♣ 总结

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

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值