LSTM原理介绍
Posted GoAl的博客
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LSTM原理介绍相关的知识,希望对你有一定的参考价值。
相关学习资料:
如何从RNN起步,一步一步通俗理解LSTM_结构之法 算法之道-CSDN博客
LSTM原理详解_技术成长期,需要【韧性】-CSDN博客_lstm原理
LSTM这一篇就够了_yingqubaifumei的博客-CSDN博客
LSTM原理及实现(一)_bill_b的博客-CSDN博客_lstm
6.8. 长短期记忆(LSTM) — 《动手学深度学习》 文档
LSTM算法(Long Short Term Memory, 长短期记忆网络 )
概念介绍
LSTM算法是一种重要的目前使用最多的时间序列算法,是一种特殊的RNN(Recurrent Neural Network,循环神经网络),能够学习长期的依赖关系。主要是为了解决长序列训练过程中的梯度消失和梯度爆炸问题。简单来说,就是相比普通的RNN,LSTM能够在更长的序列中有更好的表现。
网络结构
所有RNN都具有神经网络的重复模块链的形式。 在标准的RNN中,该重复模块将具有非常简单的结构,例如单个tanh层。
1.标准的RNN网络如下图所示
2. LSTM也具有神经网络的重复模块链的形式。只是在CNN的基础上,每个重复模块增加了三个神经网络层,如下图所示:
图中的绿色大框代表单元模块;黄色方框代表神经网络层;粉色圆圈代表逐点操作,例如矢量加法;箭头表示向量转换,从一个节点输出到另一个节点输入;合并的行表示串联,而分叉的行表示要复制的内容,并且副本将到达不同的位置。
和RNN不同的是: RNN中,就是个简单的线性求和的过程. 而LSTM可以通过“门”结构来去除或者增加“细胞状态”的信息,实现了对重要内容的保留和对不重要内容的去除. 通过Sigmoid层输出一个0到1之间的概率值,描述每个部分有多少量可以通过,0表示“不允许任务变量通过”,1表示“运行所有变量通过 ”.
LSTM核心思想
CNN的主线就是这条顶部水平贯穿的线,也就是长期记忆C线(细胞状态),达到了序列学习的目的。而h可以看做是短期记忆,x代表事件信息,也就是输入。LSTM也是以这一条水平贯穿的C线为主线,在此基础上添加三个门,以保护控制单元状态。所以LSTM有删除或向单元状态添加信息的能力,都是由这门的结构来调节控制的。这个门(gate)是一种选择性的让信息通过的方式。它是由Sigmoid神经网络和矩阵逐点乘运算组成。
增加的三个神经网络层就代表LSTM的三个门(遗忘门、记忆门、输出门)。
1.遗忘门
在我们 LSTM 中的第一步是决定我们会从细胞状态中丢弃什么信息。这个决定通过一个称为忘记门层完成。该门会读取h t − 1 h_t−1ht−1和x t x_txt,输出一个在 0到 1之间的数值给每个在细胞状态C t − 1 C_t-1Ct−1中的数字。1 表示“完全保留”,0 表示“完全舍弃”。
其中ht−1表示的是上一个cell的输出,xt表示的是当前细胞的输入。σσ表示sigmod函数。
2.输入门
下一步是决定让多少新的信息加入到 cell 状态 中来。实现这个需要包括两个 步骤:首先,一个叫做“input gate layer ”的 sigmoid 层决定哪些信息需要更新;一个 tanh 层生成一个向量,也就是备选的用来更新的内容,C^t 。在下一步,我们把这两部分联合起来,对 cell 的状态进行一个更新。
现在是更新旧细胞状态的时间了,Ct−1更新为Ct。前面的步骤已经决定了将会做什么,我们现在就是实际去完成。
我们把旧状态与ft相乘,丢弃掉我们确定需要丢弃的信息。接着加上it∗C~t。这就是新的候选值,根据我们决定更新每个状态的程度进行变化。
3.输出门
最终,我们需要确定输出什么值。这个输出将会基于我们的细胞状态,但是也是一个过滤后的版本。首先,我们运行一个 sigmoid 层来确定细胞状态的哪个部分将输出出去。接着,我们把细胞状态通过 tanh 进行处理(得到一个在 -1 到 1 之间的值)并将它和 sigmoid 门的输出相乘,最终我们仅仅会输出我们确定输出的那部分。
LSTM总结:
遗忘门(forget gate)
它决定了上一时刻的单元状态 c_t-1
有多少保留到当前时刻 c_t
输入门(input gate)
它决定了当前时刻网络的输入 x_t
有多少保存到单元状态 c_t
输出门(output gate)
控制单元状态 c_t
有多少输出到 LSTM 的当前输出值 h_t
公式:
遗忘门的计算为:
遗忘门的计算公式中:W_f
是遗忘门的权重矩阵,[h_t-1, x_t]
表示把两个向量连接成一个更长的向量,b_f
是遗忘门的偏置项,σ
是 sigmoid 函数。
输入门的计算:
根据上一次的输出和本次输入来计算当前输入的单元状态:
当前时刻的单元状态 c_t
的计算:由上一次的单元状态 c_t-1
按元素乘以遗忘门 f_t
,再用当前输入的单元状态 c_t
按元素乘以输入门 i_t
,再将两个积加和:这样,就可以把当前的记忆 c_t
和长期的记忆 c_t-1
组合在一起,形成了新的单元状态 c_t
。由于遗忘门的控制,它可以保存很久很久之前的信息,由于输入门的控制,它又可以避免当前无关紧要的内容进入记忆。
输出门的计算:
思想:
三个门控制对前一段信息、输入信息以及输出信息的记忆状态,进而保证网络可以更好地学习到长距离依赖关系。
- 遗忘门(记忆门):通过判断当前输入信息的重要程度决定对过去信息的保留度
- 输入门:通过判断当前输入信息的重要程度决定对输入信息的保留度
- 输出门:当前输出有多大程度取决于当前记忆单元
激活函数:
- 门:sigmoid,0-1分布概率,符合门控的定义。且当输入较大或者较小时,值会接近1或0,进而控制开关。
- 候选记忆:
- 分布在-1~1之间,与大多场景下0中心分布吻合
- 在输入为0有较大的梯度,使模型更快收敛
存在问题:
不可并行,只能从前到后-->attention
LSTM时间序列预测实战:简单粗暴LSTM:LSTM进行时间序列预测_小EZ的博客-CSDN博客_lstm时间序列预测
以上是关于LSTM原理介绍的主要内容,如果未能解决你的问题,请参考以下文章
Matlab基于长短期记忆网络分类LSTM实现多分类预测(Excel可直接替换数据)