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):

因此最后要计算的目标为:

\frac{\delta l}{\delta h_0} =  (\frac{\delta l}{\delta h_0})^\top \frac{\delta l}{\delta h_t} = (\sum_{i=1}^r \sigma _{i}^t u_i v_i^\top)^\top \frac{\delta l}{\delta h_t}  = \sum_{i=1}^r \sigma _{i}^t v_i u_i^\top \frac{\delta l}{\delta h_t}

如果时间序列较长,的奇异值如果>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中梯度消失和梯度爆炸的关键。

你可能感兴趣的:(RNN LSTM BI-LSTM)