深度学习-RNN LSTM BI-LSTM

RNN 循环神经网络
RNN主要处理有时序关系的变长序列问题。每个神经元在每一时刻都一个特殊的hidden状态h(t),由当前节点的输入I(t)和上一时刻t-1隐藏状态h(t-1)加权求和后经过一个非线性激活函数得到,具体表示成公式如下:
在这里插入图片描述
每个神经元t时刻隐状态
深度学习-RNN LSTM BI-LSTM_第1张图片
参数Whh决定了当前神经元以多少比例接受之前所有时刻[0,t-1]的输入信息

阻碍RNN发展的两个严重问题是:梯度爆炸 和 梯度消失、

RNN的对隐状态h(0)进行反向传播:
在这里插入图片描述
利用RNN时序上的依赖关系对上式在这里插入图片描述进行展开,得到(注意,下式成立的前提是激活函数简化为线性函数):
在这里插入图片描述
继续对在这里插入图片描述进行矩阵奇异值分解(SVD):
在这里插入图片描述
因此最后要计算的目标为:
在这里插入图片描述
如果时间序列较长,在这里插入图片描述的奇异值如果>1,t个在这里插入图片描述连乘后会非常大,反之则会非常小

基于RNN的这个缺点,引入了LSTM

LSTM (Long-Short-Term-Memory)
LSTM相比RNN其实就是多了一个门(gate)机制和细胞记忆单元(cell-state)用来存储,用来记录信息。
深度学习-RNN LSTM BI-LSTM_第2张图片
深度学习-RNN LSTM BI-LSTM_第3张图片
复杂版的LSTM神经元机制
LSTM的化简过程
第一次化简

LSTM中有三个门控单元,,因为三者的计算方法都相同,区别只是使用了不同的权重矩阵以便反向传播时对三个门独立更新,因此可以不再特别考虑它们。
在这里插入图片描述
输入门、遗忘门、输出门
第二次化简

LSTM对各维度特征的门控单元也是独立更新的,为了简化表示,可以只考虑一维的情况。从一维推广到多维是很直观的。化简到一维后,最初的公式中向量内积可以转化成数和向量的乘积。
在这里插入图片描述
化简后的cell_state
第三次化简

三个门控单元经过sigmoid变化归一化到了[0,1]区间,因此可以看成是二值输出[0,1],也就是说门控单元可以看成是控制信息流通的开关。
深度学习-RNN LSTM BI-LSTM_第4张图片
sigmoid函数
用一张图表示

LSTM中的cell_state其实就相当于RNN中的隐藏神经元。为了方便用图表示,调整一下第二次化简中公式的顺序:
在这里插入图片描述
深度学习-RNN LSTM BI-LSTM_第5张图片
化简后的LSTM遗忘机制
由上图可以看出,当在这里插入图片描述时,LSTM退化为RNN

各个控制单元的作用

输出门在这里插入图片描述:用于保存在这里插入图片描述中对在这里插入图片描述有用的信息

输入门在这里插入图片描述:用于判断当前输入在这里插入图片描述是否对context有作用,当在这里插入图片描述时,使用在这里插入图片描述作为输入

遗忘门在这里插入图片描述:用于判断当前cell_state在这里插入图片描述对上一个cell_sate在这里插入图片描述的依赖程度,当前输入在这里插入图片描述如果依赖上文信息,关闭遗忘门即可。

细胞状态在这里插入图片描述:它包含了当前输入在这里插入图片描述和上一时刻细胞状态在这里插入图片描述的信息,并且由于在这里插入图片描述在这里插入图片描述之间是“短路连接”(由公式可以看出两者之间是线性关系),因此反向传播时,在这里插入图片描述的梯度可以直接传播给在这里插入图片描述,这也是LSTM能够有效缓解RNN中梯度消失和梯度爆炸的关键。

链接:https://www.jianshu.com/p/0040e56baa8f

你可能感兴趣的:(深度学习,深度学习,python,人工智能,神经网络)