RNN 循环神经网络
RNN主要处理有时序关系的变长序列问题。每个神经元在每一时刻都一个特殊的hidden状态h(t),由当前节点的输入I(t)和上一时刻t-1隐藏状态h(t-1)加权求和后经过一个非线性激活函数得到,具体表示成公式如下:
每个神经元t时刻隐状态参数Whh决定了当前神经元以多少比例接受之前所有时刻[0,t-1]的输入信息
阻碍RNN发展的两个严重问题是:梯度爆炸 和 梯度消失、
RNN的对隐状态h(0)进行反向传播:
利用RNN时序上的依赖关系对上式进行展开,得到(注意,下式成立的前提是激活函数简化为线性函数):
继续对进行矩阵奇异值分解(SVD):
因此最后要计算的目标为:
如果时间序列较长,的奇异值如果>1,t个连乘后会非常大,反之则会非常小
基于RNN的这个缺点,引入了LSTM
LSTM (Long-Short-Term-Memory)
LSTM相比RNN其实就是多了一个门(gate)机制和细胞记忆单元(cell-state)用来存储,用来记录信息。
复杂版的LSTM神经元机制LSTM的化简过程
第一次化简
LSTM中有三个门控单元,,因为三者的计算方法都相同,区别只是使用了不同的权重矩阵以便反向传播时对三个门独立更新,因此可以不再特别考虑它们。
输入门、遗忘门、输出门第二次化简
LSTM对各维度特征的门控单元也是独立更新的,为了简化表示,可以只考虑一维的情况。从一维推广到多维是很直观的。化简到一维后,最初的公式中向量内积可以转化成数和向量的乘积。
化简后的cell_state第三次化简
三个门控单元经过sigmoid变化归一化到了[0,1]区间,因此可以看成是二值输出[0,1],也就是说门控单元可以看成是控制信息流通的开关。
sigmoid函数用一张图表示
LSTM中的cell_state其实就相当于RNN中的隐藏神经元。为了方便用图表示,调整一下第二次化简中公式的顺序:
化简后的LSTM遗忘机制由上图可以看出,当时,LSTM退化为RNN
各个控制单元的作用
输出门:用于保存中对有用的信息
输入门:用于判断当前输入是否对context有作用,当时,使用作为输入
遗忘门:用于判断当前cell_state对上一个cell_sate的依赖程度,当前输入如果依赖上文信息,关闭遗忘门即可。
细胞状态:它包含了当前输入和上一时刻细胞状态的信息,并且由于和之间是“短路连接”(由公式可以看出两者之间是线性关系),因此反向传播时,的梯度可以直接传播给,这也是LSTM能够有效缓解RNN中梯度消失和梯度爆炸的关键。
网友评论