为了账号安全,请及时绑定邮箱和手机立即绑定

RNN与LSTM之间的介绍和公式梳理

标签:
人工智能

最近在整理tensorflow,经常用到RNN与lSTM,故整理如下:
-RNN:循环神经网络(Recurrent Neural Networks)
-LSTM:长短时记忆网络(Long Short-Term Memory)

在看这篇文章之前,如果之前没有接触过-神经网络,请先阅读-神经网络调优
RNNs的目的使用来处理序列数据。其在自然语言中贡献巨大,中文分词、词性标注、命名实体识别、机器翻译、语音识别都属于序列挖掘的范畴。序列挖掘的特点就是某一步的输出不仅依赖于这一步的输入,还依赖于其他步的输入或输出。在序列挖掘领域传统的机器学习方法有HMM(Hidden Markov Model,隐马尔可夫模型)和CRF(Conditional Random Field,条件随机场),近年来又开始流行深度学习算法RNN(Recurrent Neural Networks,循环神经网络)。
https://img1.sycdn.imooc.com//5b3b85c90001ac0e07950319.jpg
你可以这样理解:
LSTM有多种变换形式,但我们只讲解一个简单的。一个Cell由三个Gate(input、forget、output)和一个cell单元组成。Gate使用一个sigmoid激活函数,而input和cell state通常会使用tanh来转换。
https://img1.sycdn.imooc.com//5b3b85d10001637e08670142.jpg
其中S(t+1) = tanh( U*X(t+1) + W*S(t)),[tanh激活函数]

(http://blog.csdn.net/hhtnan/article/details/78316785)
如果上面不理解,请查看下面这个整理如下:
https://img1.sycdn.imooc.com//5b3b85d90001b63109600720.jpg
https://img1.sycdn.imooc.com//5b3b85e10001715b09600720.jpg
https://img1.sycdn.imooc.com//5b3b85e90001b61f09600720.jpg
https://img1.sycdn.imooc.com//5b3b85f10001fddd09600720.jpg
https://img1.sycdn.imooc.com//5b3b85fa0001c0df09600720.jpg
https://img1.sycdn.imooc.com//5b3b86030001b7af09600720.jpghttps://img1.sycdn.imooc.com//5b3b861c0001c11709600720.jpg
https://img1.sycdn.imooc.com//5b3b862400016ec109600720.jpg

RNN的变体

1.双向RNN

https://img1.sycdn.imooc.com//5b3b862d0001d05106520426.jpg
双向RNN认为otot不仅依赖于序列之前的元素,也跟tt之后的元素有关,这在序列挖掘中也是很常见的事实。

2.深层双向RNN

https://img1.sycdn.imooc.com//5b3b863600015d5a02720300.jpg
在双向RNN的基础上,每一步由原来的一个隐藏层变成了多个隐藏层。

RNN的问题所在

https://img1.sycdn.imooc.com//5b3b86410001ddfb09600720.jpg
https://img1.sycdn.imooc.com//5b3b864a0001232209600720.jpghttps://img1.sycdn.imooc.com//5b3b86540001a18e09600720.jpghttps://img1.sycdn.imooc.com//5b3b865d0001c85d09600720.jpg
https://img1.sycdn.imooc.com//5b3b86660001ddef08740166.jpg

LSTM

由于梯度消失/梯度爆炸的问题传统RNN在实际中很难处理长期依赖,而LSTM(Long Short Term Memory)则绕开了这些问题依然可以从语料中学习到长期依赖关系。比如“I grew up in France… I speak fluent (French)”要预测()中应该填哪个词时,跟很久之前的”France”有密切关系。

传统RNN每一步的隐藏单元只是执行一个简单的tanh或ReLU操作。
https://img1.sycdn.imooc.com//5b3b867000016ed322420839.jpg
LSTM每个循环的模块内又有4层结构:3个sigmoid层,1个tanh层
https://img1.sycdn.imooc.com//5b3b868000012a9622330839.jpg
LSTM每个模块的4层结构后文会详细说明,先来解释一下基本的图标。https://img1.sycdn.imooc.com//5b3b868b0001fd1009500177.jpg
粉色的圆圈表示一个二目运算。两个箭头汇合成一个箭头表示2个向量首尾相连拼接在一起。一个箭头分叉成2个箭头表示一个数据被复制成2份,分发到不同的地方去。

LSTM内部结构详解

LSTM的关键是细胞状态C,一条水平线贯穿于图形的上方,这条线上只有些少量的线性操作,信息在上面流传很容易保持。https://img1.sycdn.imooc.com//5b3b86950001e16c12400383.jpg
图 细胞状态的传送带
第一层是个忘记层,决定细胞状态中丢弃什么信息。把ht−1ht−1和xtxt拼接起来,传给一个sigmoid函数,该函数输出0到1之间的值,这个值乘到细胞状态Ct−1Ct−1上去。sigmoid函数的输出值直接决定了状态信息保留多少。比如当我们要预测下一个词是什么时,细胞状态可能包含当前主语的性别,因此正确的代词可以被选择出来。当我们看到新的主语,我们希望忘记旧的主语。
https://img1.sycdn.imooc.com//5b3b869f0001af2612400383.jpg
图 更新细胞状态
一步的细胞状态Ct−1Ct−1已经被忘记了一部分,接下来本步应该把哪些信息新加到细胞状态中呢?这里又包含2层:一个tanh层用来产生更新值的候选项C~tC~t,tanh的输出在[-1,1]上,说明细胞状态在某些维度上需要加强,在某些维度上需要减弱;还有一个sigmoid层(输入门层),它的输出值要乘到tanh层的输出上,起到一个缩放的作用,极端情况下sigmoid输出0说明相应维度上的细胞状态不需要更新。在那个预测下一个词的例子中,我们希望增加新的主语的性别到细胞状态中,来替代旧的需要忘记的主语。
https://img1.sycdn.imooc.com//5b3b86aa0001100312400383.jpg
图 生成新的细胞状态
现在可以让旧的细胞状态Ct−1Ct−1与ftft(f是forget忘记门的意思)相乘来丢弃一部分信息,然后再加个需要更新的部分it∗C~tit∗C~t(i是input输入门的意思),这就生成了新的细胞状态CtCt。
https://img1.sycdn.imooc.com//5b3b86b30001030412400383.jpg
图  循环模块的输出
最后该决定输出什么了。输出值跟细胞状态有关,把CtCt输给一个tanh函数得到输出值的候选项。候选项中的哪些部分最终会被输出由一个sigmoid层来决定。在那个预测下一个词的例子中,如果细胞状态告诉我们当前代词是第三人称,那我们就可以预测下一词可能是一个第三人称的动词。

LSTM实现
原理推到 参数更新方法 。核心是实现了dL(t)dh(t)dL(t)dh(t)和dL(t+1)ds(t)dL(t+1)ds(t)反向递归计算。

对应的github代码

GRU

GRU(Gated Recurrent Unit)是LSTM最流行的一个变体,比LSTM模型要简单。
https://img1.sycdn.imooc.com//5b3b86bf000198ed18260564.jpg

RNN与LSTM之间的联系
https://img1.sycdn.imooc.com//5b3b86c90001d2b909600720.jpghttps://img1.sycdn.imooc.com//5b3b86d300012c6e09600720.jpghttps://img1.sycdn.imooc.com//5b3b86dc0001cf3809600720.jpg

探讨与思考

https://img1.sycdn.imooc.com//5b3b86e50001874c09600720.jpg
https://img1.sycdn.imooc.com//5b3b86ee0001277f09600720.jpg

应用

https://img1.sycdn.imooc.com//5b3b86f8000190c809600720.jpg
https://img1.sycdn.imooc.com//5b3b87030001100312400383.jpg
https://img1.sycdn.imooc.com//5b3b87130001523b09600720.jpg
https://img1.sycdn.imooc.com//5b3b871b000190c809600720.jpg

如有整理错误,欢迎批评指正!


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消