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)结构。spa

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

LSTM

LSTM (Long Short Term Memory networks)的“门”结构能够截取“不应截取的信息”,结构以下:orm

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

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

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

 
 其中,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的状况。

相关文章
相关标签/搜索