目录

  • 1、RNN的原理
  • 2、LSTM


1、RNN的原理

在使用深度学习处理时序数据时,RNN是经常用到的模型之一。RNN之所以在时序数据上有着优异的表现是因为RNN在 RNN多变量时间序列数据分类 rnn处理时间序列_深度学习 时间片时会将RNN多变量时间序列数据分类 rnn处理时间序列_时间片_02时间片的隐节点作为当前时间片的输入。这样有效的原因是之前时间片的信息也用于计算当前时间片的内容,而传统DNN模型的隐节点的输出只取决于当前时间片的输入特征。RNN结构如下图:



RNN多变量时间序列数据分类 rnn处理时间序列_深度学习_03

图1:RNN结构图

公式如下(RNN多变量时间序列数据分类 rnn处理时间序列_深度学习_04均为参数):

RNN多变量时间序列数据分类 rnn处理时间序列_权值矩阵_05

其中隐节点RNN多变量时间序列数据分类 rnn处理时间序列_时间片_06主要有两个作用:

  1. 计算下个时间片的隐节点状态RNN多变量时间序列数据分类 rnn处理时间序列_RNN多变量时间序列数据分类_07
  2. 计算在该时刻的预测值RNN多变量时间序列数据分类 rnn处理时间序列_时间片_08

RNN的优缺点:

在深度学习领域中(尤其是RNN),“长期依赖“问题是普遍存在的。长期依赖产生的原因是当神经网络的节点经过许多阶段的计算后,之前比较长的时间片的特征已经被覆盖,导致产生梯度消失/爆炸

产生梯度消失和梯度爆炸是由于RNN的权值矩阵循环相乘导致的,相同函数的多次组合会导致极端的非线性行为。梯度消失和梯度爆炸主要存在RNN中,因为RNN中每个时间片使用相同的权值矩阵。对于一个DNN,虽然也涉及多个矩阵的相乘,但是通过精心设计权值的比例可以避免梯度消失和梯度爆炸的问题 。

处理梯度爆炸可以采用梯度截断的方法。所谓梯度截断是指将梯度值超过阈值RNN多变量时间序列数据分类 rnn处理时间序列_深度学习_09的梯度手动降到RNN多变量时间序列数据分类 rnn处理时间序列_深度学习_09

梯度消失不能简单的通过类似梯度截断的阈值式方法来解决,因为长期依赖的现象也会产生很小的梯度。例如,对于时序数据RNN多变量时间序列数据分类 rnn处理时间序列_权值矩阵_11,我们希望 RNN多变量时间序列数据分类 rnn处理时间序列_深度学习_12时刻能够读到 RNN多变量时间序列数据分类 rnn处理时间序列_深度学习_13时刻的特征,在这期间内我们自然不希望隐层节点状态发生很大的变化,所以 RNN多变量时间序列数据分类 rnn处理时间序列_权值矩阵_14时刻的梯度要尽可能的小才能保证梯度变化小。很明显,如果我们刻意提高小梯度的值将会使模型失去捕捉长期依赖的能力。

2、LSTM

LSTM全称是Long Short Term Memory,顾名思义,它是具有记忆长短期信息的神经网络。LSTM提出的动机是为了解决上面我们提到的长期依赖问题。

而LSTM之所以能够解决RNN的长期依赖问题,是因为LSTM引入了门(gate)机制用于控制特征的流通和损失。对于上面的例子,LSTM可以做到在RNN多变量时间序列数据分类 rnn处理时间序列_深度学习_12时刻将RNN多变量时间序列数据分类 rnn处理时间序列_深度学习_13时刻的特征传过来,这样就可以非常有效的判断RNN多变量时间序列数据分类 rnn处理时间序列_深度学习_12时刻使用单数还是复数了。LSTM是由一系列LSTM单元(LSTM Unit)组成,其链式结构如下图。



RNN多变量时间序列数据分类 rnn处理时间序列_权值矩阵_18

图3:LSTM单元 其中,每个黄色方框表示一个神经网络层,由权值,偏置以及激活函数组成;每个粉色圆圈表示元素级别操作;箭头表示向量流向;相交的箭头表示向量的拼接;分叉的箭头表示向量的复制。总结如下图:


RNN多变量时间序列数据分类 rnn处理时间序列_RNN多变量时间序列数据分类_19

图4:LSTM的符号含义

LSTM的核心部分是在图3中最上边类似于传送带的部分(图5),这一部分一般叫做单元状态(cell state)它自始至终存在于LSTM的整个链式系统中。



RNN多变量时间序列数据分类 rnn处理时间序列_神经网络_20

图5:LSTM的单元状态

其中
RNN多变量时间序列数据分类 rnn处理时间序列_RNN多变量时间序列数据分类_21

其中RNN多变量时间序列数据分类 rnn处理时间序列_RNN多变量时间序列数据分类_22叫做遗忘门,表示RNN多变量时间序列数据分类 rnn处理时间序列_RNN多变量时间序列数据分类_23的哪些特征被用于计算 RNN多变量时间序列数据分类 rnn处理时间序列_深度学习_24RNN多变量时间序列数据分类 rnn处理时间序列_RNN多变量时间序列数据分类_22 是一个向量,向量的每个元素均位于RNN多变量时间序列数据分类 rnn处理时间序列_神经网络_26范围内。通常我们使用 RNN多变量时间序列数据分类 rnn处理时间序列_RNN多变量时间序列数据分类_27作为激活函数,RNN多变量时间序列数据分类 rnn处理时间序列_RNN多变量时间序列数据分类_27的输出是一个介于RNN多变量时间序列数据分类 rnn处理时间序列_神经网络_26区间内的值,但是当你观察一个训练好的LSTM时,你会发现门的值绝大多数都非常接近0或者1,其余的值少之又少。其中 RNN多变量时间序列数据分类 rnn处理时间序列_深度学习_30 是LSTM最重要的门机制,表示 RNN多变量时间序列数据分类 rnn处理时间序列_RNN多变量时间序列数据分类_22RNN多变量时间序列数据分类 rnn处理时间序列_RNN多变量时间序列数据分类_23



RNN多变量时间序列数据分类 rnn处理时间序列_权值矩阵_33

图6:LSTM的遗忘门

输入门(如下图7所示),RNN多变量时间序列数据分类 rnn处理时间序列_时间片_34表示单元状态更新值,由输入数据RNN多变量时间序列数据分类 rnn处理时间序列_权值矩阵_35和隐节点RNN多变量时间序列数据分类 rnn处理时间序列_时间片_06经由一个神经网络层得到,单元状态更新值的激活函数通常使用RNN多变量时间序列数据分类 rnn处理时间序列_RNN多变量时间序列数据分类_37RNN多变量时间序列数据分类 rnn处理时间序列_深度学习_38叫做输入门,同RNN多变量时间序列数据分类 rnn处理时间序列_RNN多变量时间序列数据分类_22一样也是一个元素介于RNN多变量时间序列数据分类 rnn处理时间序列_神经网络_26区间内的向量,同样由RNN多变量时间序列数据分类 rnn处理时间序列_权值矩阵_35RNN多变量时间序列数据分类 rnn处理时间序列_时间片_06经由RNN多变量时间序列数据分类 rnn处理时间序列_RNN多变量时间序列数据分类_27激活函数计算而成。



RNN多变量时间序列数据分类 rnn处理时间序列_深度学习_44

图7:LSTM的输入门和单元状态更新值计算方式

RNN多变量时间序列数据分类 rnn处理时间序列_深度学习_38用于控制RNN多变量时间序列数据分类 rnn处理时间序列_时间片_34的哪些特征用于更新RNN多变量时间序列数据分类 rnn处理时间序列_深度学习_24,使用方式和RNN多变量时间序列数据分类 rnn处理时间序列_RNN多变量时间序列数据分类_22相同(图8)。



RNN多变量时间序列数据分类 rnn处理时间序列_神经网络_49

图8:LSTM的输入门作用方式

最后,为了计算预测值RNN多变量时间序列数据分类 rnn处理时间序列_深度学习_50和生成下个时间片完整的输入,我们需要计算隐节点的输出RNN多变量时间序列数据分类 rnn处理时间序列_权值矩阵_51(图9)。



RNN多变量时间序列数据分类 rnn处理时间序列_深度学习_52

图9:LSTM的输出门

RNN多变量时间序列数据分类 rnn处理时间序列_权值矩阵_51由输出门RNN多变量时间序列数据分类 rnn处理时间序列_权值矩阵_54和单元状态RNN多变量时间序列数据分类 rnn处理时间序列_深度学习_24得到,其中RNN多变量时间序列数据分类 rnn处理时间序列_权值矩阵_54的计算方式和 RNN多变量时间序列数据分类 rnn处理时间序列_RNN多变量时间序列数据分类_22以及RNN多变量时间序列数据分类 rnn处理时间序列_深度学习_38相同。有论文指出,通过将RNN多变量时间序列数据分类 rnn处理时间序列_神经网络_59的均值初始化为RNN多变量时间序列数据分类 rnn处理时间序列_时间片_60,可以使LSTM达到同GRU近似的效果。在LSTM中,门的重要性排序是遗忘门 > 输入门 > 输出门。



RNN多变量时间序列数据分类 rnn处理时间序列_神经网络_61

图10:LSTM计算全流程