最近在整理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,循环神经网络)。
其中S(t+1) = tanh( U*X(t+1) + W*S(t)),tanh激活函数
如果上面不理解,请查看下面这个整理如下:
RNN的变体
1.双向RNN
双向RNN认为otot不仅依赖于序列之前的元素,也跟tt之后的元素有关,这在序列挖掘中也是很常见的事实。
2.深层双向RNN
在双向RNN的基础上,每一步由原来的一个隐藏层变成了多个隐藏层。
RNN的问题所在
LSTM
由于梯度消失/梯度爆炸的问题传统RNN在实际中很难处理长期依赖,而LSTM(Long Short Term Memory)则绕开了这些问题依然可以从语料中学习到长期依赖关系。比如“I grew up in France… I speak fluent (French)”要预测()中应该填哪个词时,跟很久之前的”France”有密切关系。
传统RNN每一步的隐藏单元只是执行一个简单的tanh或ReLU操作。
LSTM每个循环的模块内又有4层结构:3个sigmoid层,1个tanh层
LSTM每个模块的4层结构后文会详细说明,先来解释一下基本的图标。
粉色的圆圈表示一个二目运算。两个箭头汇合成一个箭头表示2个向量首尾相连拼接在一起。一个箭头分叉成2个箭头表示一个数据被复制成2份,分发到不同的地方去。
LSTM内部结构详解
LSTM的关键是细胞状态C,一条水平线贯穿于图形的上方,这条线上只有些少量的线性操作,信息在上面流传很容易保持。
图 细胞状态的传送带
第一层是个忘记层,决定细胞状态中丢弃什么信息。把
图 更新细胞状态
一步的细胞状态
图 生成新的细胞状态
现在可以让旧的细胞状态
图 循环模块的输出
最后该决定输出什么了。输出值跟细胞状态有关,把
LSTM实现
原理推到 参数更新方法 。核心是实现了
对应的github代码。
GRU
GRU(Gated Recurrent Unit)是LSTM最流行的一个变体,比LSTM模型要简单。
RNN与LSTM之间的联系
探讨与思考
应用
如有整理错误,欢迎批评指正!