当前位置:   article > 正文

深度学习基础篇之长短记忆递归神经网络(LSTM)_深度学习长短

深度学习长短

循环神经网络(RNN)模型中,我们总结了RNN模型的优缺点。由于RNN有梯度消失的问题,因此很难处理长序列的数据。于是有人对RNN做了改进,得到了RNN的特例LSTM(Long Short-Term Memory),它可以避免常规RNN的梯度消失问题,因此在工业界得到了广泛的应用。

1、从RNN到LSTM

在RNN模型里,RNN具有如下的结构,每个序列索引位置 t t t都有一个隐藏状态 h ( t ) h^{(t)} h(t)
在这里插入图片描述
如果我们略去每层都有的 o ( t ) 、 L ( t ) 、 y ( t ) o^{(t)}、L^{(t)}、y^{(t)} o(t)L(t)y(t),则RNN模型可以简化为下图的形式:
在这里插入图片描述
图中可以清晰的看出隐藏状态 h ( t ) h^{(t)} h(t) x ( t ) x^{(t)} x(t) h ( t − 1 ) h^{(t-1)} h(t1)得到。得到 h ( t ) h^{(t)} h(t)后一方面用于当前层的模型损失,另一方面用于计算下一层的 h ( t + 1 ) h^{(t+1)} h(t+1)

由于RNN梯度消失的问题,大牛们对序列索引位置 t t t的隐藏结构做了改进,通过一些复杂结构避免了梯度的消失问题,这样的特殊RNN就是我们的LSTM。由于LSTM有很多的变种,这里以我们最常见的LSTM为例讲述,LSTM的结构如下图:
在这里插入图片描述
可以看到LSTM的结构比RNN复杂的多,下面具体讲下LSTM模型的结构。

2、LSTM模型结构解析

上面我们给出了LSTM的模型结构,下面我们就一点点的剖析LSTM模型在每个序列索引位置 t t t时刻的内部结构。

从上图可以看出,在每个序列索引位置 t t t时刻向前传播的除了和RNN一样的隐藏状态 h ( t ) h^{(t)} h(t),还多了另一个隐藏状态,如图中上面的横线。这个隐藏状态我们一般称之为细胞状态(Cell State),记为 C ( t ) C^{(t)} C(t)。如下图所示:
在这里插入图片描述
除了细胞状态,LSTM图中还有很多各种各样的结构,这些结构一般被称为门控结构(Gate)。LSTM在每个序列索引位置 t t t的门一般包括遗忘门、输入门和输出门三种,每个门的用途如下图所示。
在这里插入图片描述

2.1 LSTM之遗忘门

遗忘门(forget gate)顾名思义,是控制是否遗忘的,在LSTM中以一定概率控制是否遗忘上一层的隐藏细胞状态,遗忘门子结构如下图所示:
在这里插入描述
图中的输入包括上一序列的隐藏状态 h ( t − 1 ) h^{(t-1)} h(t1)和本序列的 x ( t ) x^{(t)} x(t),通过激活函数sigmoid得到遗忘门 f ( t ) f^{(t)} f(t)。由于sigmoid的输出 f ( t ) f^{(t)} f(t)在[0, 1]之间,因此这里的输出 f ( t ) f^{(t)} f(t)代表了遗忘上一层隐藏细胞状态的概率。数学表达式为:
f ( t ) = σ ( W f h ( t − 1 ) + U f x ( t ) + b f ) f^{(t)} = \sigma(W_fh^{(t-1)}+U_fx^{(t)}+b_f) f(t)=σ(Wfh(t1)+Ufx(t)+bf)
其中 W f W_f Wf U f U_f Uf b f b_f bf为线性关系的系数和偏倚,和RNN中的类似, σ \sigma σ为sigmoid的激活函数。

2.2 LSTM之输入门

输入门(input gate)负责处理当前序列位置的输入,它的子结构如下图:
在这里插入图片描述
从图中可以看到输入门由两部分组成,第一部分使用了sigmoid激活函数,输出为 i ( t ) i^{(t)} i(t),第二部分使用了tanh激活函数,输出为 a ( t ) a^{(t)} a(t),两者的结果会在后面相乘再去更新细胞状态,用数学表达式为:
i ( t ) = σ ( W i h ( t − 1 ) + U i x ( t ) + b i ) i^{(t)} = \sigma(W_ih^{(t-1)}+U_ix^{(t)}+b_i) i(t)=σ(Wih(t1)+Uix(t)+bi)
a ( t ) = t a n h ( W a h ( t − 1 ) + U a x ( t ) + b a ) a^{(t)} = tanh(W_ah^{(t-1)}+U_ax^{(t)}+b_a) a(t)=tanh(Wah(t1)+Uax(t)+ba)

2.3 LSTM之细胞状态更新

在研究LSTM输出门之前,我们要先看看LSTM之细胞状态。前面的遗忘门和输入门的结果都会作用于细胞状态 C ( t ) C^{(t)} C(t)。下面看一下如何从 C ( t − 1 ) C^{(t-1)} C(t1)得到 C ( t ) C^{(t)} C(t),如下图所示:
在这里插入图片描述
细胞状态 C ( t ) C^{(t)} C(t)由两部分组成,第一部分是 C ( t − 1 ) C^{(t-1)} C(t1)和遗忘门输出 f ( t ) f^{(t)} f(t)的乘积,第二部分是输入门的 i ( t ) i^{(t)} i(t) a ( t ) a^{(t)} a(t)的乘积,即:
C ( t ) = C ( t − 1 ) ⊙ + i ( t ) ⊙ a ( t ) C^{(t)} = C^{(t-1) }\odot + i^{(t)}\odot a^{(t)} C(t)=C(t1)+i(t)a(t)
其中, ⊙ \odot 是Hadamard积,Hadamard积是矩阵的一类运算,假如 C = A ⊙ B C = A \odot B C=AB,其中A的元素为 a i j a_{ij} aij,B的元素为 b i j b_{ij} bij,则 C = a i j ∗ b i j C = a_{ij}*b_{ij} C=aijbij,也就是矩阵A和B的每个相同位置相乘。

2.4 LSTM之输出门

有了新的隐藏细胞状态 C ( t ) C^{(t)} C(t),就可以计算输出门了,子结构如下:
在这里插入图片描述
从图中可以看出,隐藏状态 h ( t ) h^{(t)} h(t)的更新由两部分组成,第一部分是 o ( t ) o^{(t)} o(t),它是由上一序列的隐藏状态 h ( t − 1 ) h^{(t-1)} h(t1)和本序列的数据 x ( t ) x^{(t)} x(t),以及激活函数sigmoid得到。第二部分由隐藏状态 C ( t ) C^{(t)} C(t)和tanh激活函数组成,即:
o ( t ) = σ ( W o h t − 1 + U o x ( t ) + b o ) o^{(t)} = \sigma(W_oh^{t-1}+U_ox^{(t)}+b_o) o(t)=σ(Woht1+Uox(t)+bo)
h ( t ) = o ( t ) ⊙ t a n h ( C ( t ) ) h^{(t)} = o^{(t)}\odot tanh(C^{(t)}) h(t)=o(t)tanh(C(t))

3、LSTM的前向传播算法

现在我们来总结下LSTM前向传播算法,LSTM模型有两个隐藏状态 h ( t ) h^{(t)} h(t) C ( t ) C^{(t)} C(t),模型参数几乎是RNN的4倍,因为现在多了 W f U f b f W a U a b a W i U i b i W o U o b o W_fU_fb_fW_aU_ab_aWiU_ib_iW_oU_ob_o WfUfbfWaUabaWiUibiWoUobo这些参数。

前向传播过程在每个序列索引位置的过程为:
1)更新遗忘门输出: f ( t ) = σ ( W f h ( t − 1 ) + U f x ( t ) + b f ) f^{(t)} = \sigma(W_fh^{(t-1)}+U_fx^{(t)}+b_f) f(t)=σ(Wfh(t1)+Ufx(t)+bf)
2)更新输入门两部分输出: i ( t ) = σ ( W i h ( t − 1 ) + U i x ( t ) + b i ) i^{(t)} = \sigma(W_ih^{(t-1)}+U_ix^{(t)}+b_i) i(t)=σ(Wih(t1)+Uix(t)+bi) a ( t ) = t a n h ( W a h ( t − 1 ) + U a x ( t ) + b a ) a^{(t)} = tanh(W_ah^{(t-1)}+U_ax^{(t)}+b_a) a(t)=tanh(Wah(t1)+Uax(t)+ba)
3)更新细胞状态: C ( t ) = C ( t − 1 ) ⊙ + i ( t ) ⊙ a ( t ) C^{(t)} = C^{(t-1) }\odot + i^{(t)}\odot a^{(t)} C(t)=C(t1)+i(t)a(t)

4)更新输出门输出: o ( t ) = σ ( W o h t − 1 + U o x ( t ) + b o ) o^{(t)} = \sigma(W_oh^{t-1}+U_ox^{(t)}+b_o) o(t)=σ(Woht1+Uox(t)+bo) h ( t ) = o ( t ) ⊙ t a n h ( C ( t ) ) h^{(t)} = o^{(t)}\odot tanh(C^{(t)}) h(t)=o(t)tanh(C(t))
5)更新当前序列索引预测输出: y ^ ( t ) = σ ( V h ( t ) + c ) \hat{y}^{(t)} = \sigma(Vh^{(t)} + c) y^(t)=σ(Vh(t)+c)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/95880
推荐阅读
相关标签
  

闽ICP备14008679号