TensorFlow(十一):递归神经网络(RNN与LSTM)

RNN

RNN(Recurrent Neural Networks,循环神经网络)不仅会学习当前时刻的信息,也会依赖之前的序列信息。由于其特殊的网络模型结构解决了信息保存的问题。所以RNN对处理时间序列和语言文本序列问题有独特的优势。递归神经网络都具有一连串重复神经网络模块的形式。在标准的RNNs中,这种重复模块有一种非常简单的结构。

那么S(t+1) = tanh( U*X(t+1) + W*S(t))。tanh激活函数图像如下:

激活函数tanh把状态S值映射到-1和1之间.

RNN通过BPTT算法反向传播误差,它与BP相似,只不过与时间有关。RNN同样通过随机梯度下降(Stochastic gradient descent)算法使得代价函数(损失函数)值达到最小。

BBPT算法规则如下:

但是随着时间间隔不断增大时,RNN会丧失学习到连接很远的信息能力(梯度消失)。原因如下:

RNN的激活函数tanh可以将所有值映射到-1至1之间,以及在利用梯度下降算法调优时利用链式法则,那么会造成很多个小于1的项连乘就很快的逼近零。

依赖于我们的激活函数和网络参数,也可能会产生梯度爆炸(如激活函数是Relu,而LSTM采用的激活函数是sigmoid和tanh,从而避免了梯度爆炸的情况)。一般靠裁剪后的优化算法即可解决,比如gradient clipping(如果梯度的范数大于某个给定值,将梯度同比收缩)。

合适的初始化矩阵W可以减小梯度消失效应,正则化也能起作用。更好的方法是选择ReLU而不是sigmoid和tanh作为激活函数。ReLU的导数是常数值0或1,所以不可能会引起梯度消失。更通用的方案时采用长短时记忆(LSTM)或门限递归单元(GRU)结构。

那么,接下来我们来了解LSTM是如何解决梯度消失问题的

LSTM

LSTM (Long Short Term Memory networks)的“门”结构可以截取“不该截取的信息”,结构如下:

在上面的图中,每条线表示一个完整向量,从一个节点的输出到其他节点的输入。粉红色圆圈代表逐点操作,比如向量加法,而黄色框框表示的是已学习的神经网络层。线条合并表示串联,线条分叉表示内容复制并输入到不同地方。

LSTMs核心理念

LSTMs的关键点是细胞状态,就是穿过图中的水平线。

单元状态有点像是个传送带。它贯穿整个链条,只有一些线性相互作用。这很容易让信息以不变的方式向下流动。

其中,C(t-1)相当于上面我们讲的RNN中的S(t-1), C(t)相当于S(t).

LSTM有能力向单元状态中移除或添加信息,通过门结构来管理,包括“遗忘门”,“输出门”,“输入门”。通过门让信息选择性通过,来去除或增加信息到细胞状态. 模块中sigmoid层输出0到1之间的数字,描述了每个成分应该通过门限的程度。0表示“不让任何成分通过”,而1表示“让所有成分通过!”

第一步

上图是遗忘门的展示,首先将上一时刻的输出h(t-1)和这一时刻的输入进x(t)行拼接(concat),然后判断以多大的程度来保留这部分信息(得到概率值).

第二步

上图是输入门结构,i(t)等式表达的是我们以多大概率来更新信息,

表示现在的全部信息。

第三步

首先把旧状态与f(t)相乘,就丢弃掉我们确定需要丢弃的信息,然后将

以确定要更新的信息,通过相加操作得到新的细胞状态Ct.

第四步

LSTM和RNN相同都是利用BPTT传播和随机梯度或者其他优化算法来拟合参数。

至此,我们在这里再次强调一下LSTM是如何解决长时依赖问题的:

在RNN中,当前状态值S(t)= tanh(x(t) * U + W * S(t-1)),正如上面所述在利用梯度下降算法链式求导时是连乘的形式,若其中只要有一个是接近零的,那么总体值就容易为0,导致梯度消失,不能解决长时依赖问题。

而LSTM更新状态值:

是相加的形式,所以不容易出现状态值逐渐接近0的情况。

原文地址:https://www.cnblogs.com/felixwang2/p/9190656.html

时间: 2024-11-02 00:28:34

TensorFlow(十一):递归神经网络(RNN与LSTM)的相关文章

循环和递归神经网络 (RNN) 与 长短时记忆 (LSTM)

即使不是 NLPer,现实中依然会面对很多序列问题. 全文内容来自 Ian Goodfellow, Yoshua Bengio 和 Aaron Courville 3位大老爷的作品"Deep Learning"的其中1章"Sequence Modeling: Recurrent and Recursive Nets" 1. 1986年 Rumelhart 等人提出循环神经网络.循环网络与多层网络相比,会共享每层的权重,从而能够扩展和应用网络于不同长度的序列案例,以及

递归神经网络RNN

递归神经网络 实际属于输入之间可能是存在联系的,所以在多次输入x0.x1........中,每次的中间信息A(也称为机器单元)都保存下来传给下次输入的中间信息A,每次输入的计算结果h0.h1......不一定是目标结果可以不使用,只有最终的ht是想要的预测结果. 递归神经网络适合自然语言处理. 每一步都会对它之前所有的操作进行参数更新,这个与其他的神经网络是不同的. 以E3为例,它的反向传播指向s3,而s3的反向传播指向s2和x3,会对它前面的所有的步都进行更新. 递归神经网络会出现梯度消失(某

深度学习原理与框架-递归神经网络-RNN网络基本框架(代码?) 1.rnn.LSTMCell(生成单层LSTM) 2.rnn.DropoutWrapper(对rnn进行dropout操作) 3.tf.contrib.rnn.MultiRNNCell(堆叠多层LSTM) 4.mlstm_cell.zero_state(state初始化) 5.mlstm_cell(进行LSTM求解)

问题:LSTM的输出值output和state是否是一样的 1. rnn.LSTMCell(num_hidden, reuse=tf.get_variable_scope().reuse)  # 构建单层的LSTM网络 参数说明:num_hidden表示隐藏层的个数,reuse表示LSTM的参数进行复用 2.rnn.DropoutWrapper(cell, output_keep_prob=keep_prob) # 表示对rnn的输出层进行dropout 参数说明:cell表示单层的lstm,o

Tensorflow - Tutorial (7) : 利用 RNN/LSTM 进行手写数字识别

1. 经常使用类 class tf.contrib.rnn.BasicLSTMCell BasicLSTMCell 是最简单的一个LSTM类.没有实现clipping,projection layer.peep-hole等一些LSTM的高级变种,仅作为一个主要的basicline结构存在,假设要使用这些高级变种,需用class tf.contrib.rnn.LSTMCell这个类. 使用方式: lstm = rnn.BasicLSTMCell(lstm_size, forget_bias=1.0

递归神经网络的不可思议的有效性 [ 译 / 转 ]

递归神经网络(Recurrent Neural Networks,RNNs)就像一种神奇的魔法.我至今仍对于我第一次训练递归网络记忆犹新.那个网络是被用于生成图像说明(Image Captioning)的.仅仅进行了几十分钟的训练,我的第一个模型(这个模型中相当一部分超参数都是我随意选取的)就开始能给图片生成看起来非常不错的描述,而这些描述基本上能称得上是有意义的.有时结果的质量和模型复杂度之间的关联性完全超出你的预期,而我的第一次实验就是一个例子.为什么当时这些训练结果看起来如此惊人?是因为大

深入探究递归神经网络:大牛级的训练和优化如何修成?

深入探究递归神经网络:大牛级的训练和优化如何修成? 摘要:不同于传统FNN,RNN无需在层面之间构建,同时引入定向循环,能够更好地处理高维度信息的整体逻辑顺序.本文中,MIT的Nikhil Buduma将带您深入探析RNN的原理.训练和优化等各方面的内容,以及RNN已经获取的一些成就. 在深度学习领域,传统的前馈神经网络(feed-forward neural net,简称FNN)具有出色的表现,取得了许多成功,它曾在许多不同的任务上——包括手写数字识别和目标分类上创造了记录.甚至到了今天,FN

能模仿韩寒小四写作的神奇递归神经网络

作者:寒小阳 && 龙心尘 时间:2016年4月 出处: http://blog.csdn.net/han_xiaoyang/article/details/51253274 http://blog.csdn.net/longxinchen_ml/article/details/51253526 声明:版权所有,转载请联系作者并注明出处 特别鸣谢:北京大学焦剑博士对Recurrent Neural Networks Tutorial part1一文的翻译和部分内容提供 1.引言 在离人工智

《转》循环神经网络(RNN, Recurrent Neural Networks)学习笔记:基础理论

转自 http://blog.csdn.net/xingzhedai/article/details/53144126 更多参考:http://blog.csdn.net/mafeiyu80/article/details/51446558 http://blog.csdn.net/caimouse/article/details/70225998 http://kubicode.me/2017/05/15/Deep%20Learning/Understanding-about-RNN/ RNN

深度学习与自然语言处理(7)_斯坦福cs224d 语言模型,RNN,LSTM与GRU

翻译:@胡杨([email protected]) && @胥可([email protected]) 校对调整:寒小阳 && 龙心尘 时间:2016年7月 出处: http://blog.csdn.net/han_xiaoyang/article/details/51932536 http://blog.csdn.net/longxinchen_ml/article/details/51940065 说明:本文为斯坦福大学CS224d课程的中文版内容笔记,已得到斯坦福大学