-
2020-07-16 14:31:46
长短时记忆网络LSTM
简介
LSTM长短期记忆网络(Long Short-Term Memory Networks)是一种RNN的变种结构。我们知道循环神经网络以及它的训练算法。我们也知道了循环神经网络很难训练的原因,这导致了它在实际应用中,很难处理长距离的依赖。所以诞生了这么一种改进之后的循环神经网络:长短时记忆网络(Long Short Term Memory Network, LSTM)它成功的解决了原始循环神经网络的缺陷,成为当前最流行的RNN,在语音识别、图片描述、自然语言处理等许多领域中成功应用。但不幸的一面是,LSTM的结构很复杂,因此,我们需要花上一些力气,才能把LSTM以及它的训练算法弄明白。
RNN的结构缺陷
循环神经网络(Recurrent Neural Network,RNN)是一种用于处理序列数据的神经网络。相比一般的神经网络来说,他能够处理序列变化的数据。比如某个单词的意思会因为上文提到的内容不同而有不同的含义,RNN就能够很好地解决这类问题。
RNN结构的特性是其共享一组(U,W,b),不管你的RNN有多大,(U,W,b)都是同一组,那我们只有一组的话,在(U,W,b)不变的情况下,梯度在反向传播的过程中,不断连乘,数值不是越来越大就是越来越小。这样就出现了梯度爆炸或者梯度消失的情况,所以往往用RNN去训练模型得不到预期的结果。
我们就可以看到,从上图的t-3时刻开始,梯度已经几乎减少到0了。那么,从这个时刻开始再往之前走,得到的梯度(几乎为零)就不会对最终的梯度值有任何贡献,这就相当于无论t-3时刻之前的网络状态h是什么,在训练中都不会对权重数组W的更新产生影响,也就是网络事实上已经忽略了t-3时刻之前的状态。这就是原始RNN无法处理长距离依赖的原因。LSTM结构
与RNN相比,LSTM的神经元还是基于输入x和上一级的隐藏层输出h来计算,只不过内部结构变了,也就是神经元的运算公式变了,而外部结构并没有任何变化,因此之前提及的RNN各种机构都能用LSTM来替换。
长短时记忆网络的思路就是:原始RNN的隐藏层只有一个状态,即h,它对于短期的输入非常敏感。那么,假如我们再增加一个状态,即c,让它来保存长期的状态,那么问题不就解决了么?如下图所示:
新增加的状态c,称为单元状态(cell state)。我们把上图按照时间维度展开:
上图仅仅是一个示意图,我们可以看出,在t时刻,LSTM的输入有三个:当前时刻网络的输入值Xt、上一时刻LSTM的输出值ht-1、以及上一时刻的单元状态ct-1;LSTM的输出有两个:当前时刻LSTM输出值ht、和当前时刻的单元状态ct。注意x、h、c都是向量。LSTM的关键,就是怎样控制长期状态c。在这里,LSTM的思路是使用三个控制开关。第一个开关,负责控制继续保存长期状态c;第二个开关,负责控制把即时状态输入到长期状态c;第三个开关,负责控制是否把长期状态c作为当前的LSTM的输出。三个开关的作用如下图所示:
接下来,我们要描述一下,输出h和单元状态c的具体计算方法。长短时记忆网络的前向计算
前面描述的开关是怎样在算法中实现的呢?这就用到了门(gate)的概念。门实际上就是一层全连接层,它的输入是一个向量,输出是一个0到1之间的实数向量。假设W是门的权重向量,b是偏置项,那么门可以表示为:
门的使用,就是用门的输出向量按元素乘以我们需要控制的那个向量。因为门的输出是0到1之间的实数向量,那么,当门输出为0时,任何向量与之相乘都会得到0向量,这就相当于啥都不能通过;输出为1时,任何向量与之相乘都不会有任何改变,这就相当于啥都可以通过。因为sigmoid函数的值域是(0,1),所以门的状态都是半开半闭的。LSTM用两个门来控制单元状态c的内容,一个是遗忘门(forget gate),它决定了上一时刻的单元状态ct-1有多少保留到当前时刻ct;另一个是输入门(input gate),它决定了当前时刻网络的输入xt有多少保存到单元状态ct。LSTM用输出门(output gate)来控制单元状态ct有多少输出到LSTM的当前输出值ht。
LSTM内部主要有三个阶段:
- 忘记阶段。这个阶段主要是对上一个节点传进来的输入进行选择性忘记。简单来说就是会 “忘记不重要的,记住重要的”。
具体来说是通过计算得到的zf(f表示forget)来作为忘记门控,来控制上一个状态的 ct-1 哪些需要留哪些需要忘。
- 选择记忆阶段。这个阶段将这个阶段的输入有选择性地进行“记忆”。主要是会对输入xt 进行选择记忆。哪些重要则着重记录下来,哪些不重要,则少记一些。当前的输入内容由前面计算得到的z 表示。而选择的门控信号则是由 zi(i代表information)来进行控制。
将上面两步得到的结果相加,即可得到传输给下一个状态的ct。也就是上图中的第一个公式。
3. 输出阶段。这个阶段将决定哪些将会被当成当前状态的输出。主要是通过 z0 来进行控制的。并且还对上一阶段得到的c0进行了放缩(通过一个tanh激活函数进行变化)。与普通RNN类似,输出 yt往往最终也是通过 ht 变化得到。
总结
以上,就是LSTM的内部结构。通过门控状态来控制传输状态,记住需要长时间记忆的,忘记不重要的信息;而不像普通的RNN那样只能够“呆萌”地仅有一种记忆叠加方式。对很多需要“长期记忆”的任务来说,尤其好用。
引用:https://zybuluo.com/hanbingtao/note/581764
更多相关内容 -
基于python和tensorflow的双向长短时记忆网络代码
2020-02-27 21:37:49基于python3、tensorflow库的bilstm程序。双向长短时记忆网络。python文件。 -
长短时记忆网络(LSTM)
2021-07-07 06:56:10长短时记忆网络 循环神经网络很难训练的原因导致它的实际应用中很处理长距离的依赖。本文将介绍改进后的循环神经网络:长短时记忆网络(LongShortTermMemoryNetwork,LSTM), 原始RNN的隐藏层只有一个... -
基于深度长短时记忆网络的区域级超短期负荷预测方法_张宇帆.pdf
2020-10-17 16:47:04资源,提出了一种针对区域级负荷的深度长短时记忆网络超 短期预测方法,该方法包括输入数据的预处理、深度长短时 记忆(long short-term memory,LSTM)网络的构建以及模型 的训练和超参数的寻找等步骤。其中采用随机... -
基于卷积神经网络与双向长短时记忆网络组合模型的短时交通流预测.pdf
2021-09-25 19:05:58基于卷积神经网络与双向长短时记忆网络组合模型的短时交通流预测.pdf -
长短时记忆神经网络(LSTM)介绍及公式推导
2018-07-08 16:18:15长短时记忆网络(Long Short Term Memory Network, LSTM),它有效地解决了原始循环神经网络(RNN)的缺陷,在语音识别、图片描述、自然语言处理等许多领域中成功应用。本文讲解由三个Gate(input、forget、output)和一... -
深度学习之循环神经网络(8)长短时记忆网络(LSTM)
2021-10-06 21:34:33深度学习之循环神经网络(8)长短时记忆网络(LSTM)0. LSTM原理1. 遗忘门2. 输入门3. 刷新Memory4. 输出门5. 小结 循环神经网络除了训练困难,还有一个更严重的问题,那就是短时记忆(Short-term memory)。考虑...
循环神经网络除了训练困难,还有一个更严重的问题,那就是 短时记忆(Short-term memory)。考虑一个长句子:
今天天气太美好了,尽管路上发生了一件不愉快的事,…,我马上调整好状态,开开心心地准备迎接美好的一天。
根据我们的理解,之所以能够“ 开开心心地准备迎接美好的一天”,在于句子最开始处点明了“ 今天天气太美好了”。可见人类是能够很好地理解长句子的,但是循环神经网络却不一定。研究人员发现,循环神经网络在处理较长的句子时,往往只能够理解有限长度内的信息,而对于位于较长范围内的有用信息往往不能很好地利用起来。我们把这种现象叫做短时记忆。
那么,能不能够延长这种短时记忆,使得循环神经网络可以有效利用较大范围内的训练数据,从而提升性能呢?1997年,瑞士人工智能科学家J u ¨ \ddot{\text{u}} u¨rgen Schmidhuber 提出了 长短时记忆网络(Long Short-Term Memory,简称LSTM)。LSTM相对于基础的RNN网络来说,记忆能力更强,更擅长处理较长的序列信号数据,LSTM提出后,被广泛应用在序列预测、自然语言处理等任务中,几乎取代了基础的RNN模型。
接下来,我们将介绍更加流行、更加强大的LSTM网络。
0. LSTM原理
基础的RNN网络结构如下图所示,上一个时间戳的状态向量 h t − 1 \boldsymbol h_{t-1} ht−1与当前时间戳的输入 x t \boldsymbol x_t xt经过线性变换后,通过激活函数 tanh \text{tanh} tanh后得到新的状态向量 h t \boldsymbol h_t ht。
基础RNN结构框图
相对于基础的RNN网络只有一个状态向量 h t \boldsymbol h_t ht,LSTM新增了一个状态向量 c t \boldsymbol c_t ct,同时引入了门控(Gate)机制,通过门控单元来控制信息的遗忘和刷新,如下图所示:
LSTM结构框图
在LSTM中,有两个状态向量 c \boldsymbol c c和 h \boldsymbol h h,其中 c \boldsymbol c c作为LSTM的内部状态向量,可以理解为LSTM的内部状态向量Memory,而 h \boldsymbol h h表示LSTM的输出向量。相对于基础的RNN来说,LSTM把内部Memory和输出分开为两个变量,同时利用三个门控:输入门(Input Gate)、遗忘门(Forget Gate)和输出门(Output Gate)来控制内部信息的流动。
门控机制可以理解为控制数据流通量的一种手段,类比于水阀门:当水阀门全部打开时,水流畅通无阻地通过;当水阀门全部关闭时,水流完全被隔断。在LSTM中,阀门开合程度利用门控值向量 g \boldsymbol g g表示,如下图所示,通过 σ ( g ) σ(\boldsymbol g) σ(g)激活函数将门控制压缩到 [ 0 , 1 ] [0,1] [0,1]之间的区间,当 σ ( g ) = 0 σ(\boldsymbol g)=0 σ(g)=0时,门控全部关闭,输出 o = 0 \boldsymbol o=0 o=0;当 σ ( g ) = 1 σ(\boldsymbol g)=1 σ(g)=1时,门控全部打开,输出 o = x \boldsymbol o=\boldsymbol x o=x。通过门控机制可以较好地控制数据的流量程度。
门控机制
下面我们分别来介绍三个门控的原理及其作用。
1. 遗忘门
遗忘门作用于LSTM状态向量 c \boldsymbol c c上面,用于控制上一个时间戳的记忆 c t − 1 \boldsymbol c_{t-1} ct−1对当前时间戳的影响。遗忘门的控制变量 g f \boldsymbol g_f gf由
g f = σ ( W f [ h t − 1 , x t ] + b f ) \boldsymbol g_f=σ(\boldsymbol W_f [\boldsymbol h_{t-1},\boldsymbol x_t ]+\boldsymbol b_f) gf=σ(Wf[ht−1,xt]+bf)
产生,如下图所示:
遗忘门
其中 W f \boldsymbol W_f Wf和 b f \boldsymbol b_f bf为遗忘门的参数张量,可由反向传播算法自动优化, σ σ σ激活函数,一般使用Sigmoid函数。当门控 g f = 1 \boldsymbol g_f=1 gf=1时,遗忘门全部打开,LSTM接受上一个状态 c t − 1 \boldsymbol c_{t-1} ct−1,输出为0的向量。这也是遗忘门的名字由来。
经过遗忘门后,LSTM的状态向量变为 g f c t − 1 \boldsymbol g_f \boldsymbol c_{t-1} gfct−1。
2. 输入门
输入门用于控制LSTM对输入的接收程度。首先通过对当前时间戳的输入 x t \boldsymbol x_t xt和上一个时间戳的输出 h t − 1 \boldsymbol h_{t-1} ht−1做非线性变换得到新的输入向量 c ~ t \tilde{\boldsymbol c}_t c~t:
c ~ t = tanh ( W c [ h t − 1 , x t ] + b c ) \tilde{\boldsymbol c}_t=\text{tanh}(\boldsymbol W_c [\boldsymbol h_{t-1},\boldsymbol x_t ]+\boldsymbol b_c) c~t=tanh(Wc[ht−1,xt]+bc)
其中 W c \boldsymbol W_c Wc和 b c \boldsymbol b_c bc为输入门的参数,需要通过反向传播算法自动优化, tanh \text{tanh} tanh为激活函数,用于将输入标准化到 [ − 1 , 1 ] [-1,1] [−1,1]区间。 c ~ t \tilde{\boldsymbol c}_t c~t并不会全部刷新进入LSTM的Memory,而是通过输入门控制接受输入的量。输入门的控制变量同样来自于输入 x t \boldsymbol x_t xt和输出 h t − 1 \boldsymbol h_{t-1} ht−1:
g i = σ ( W i [ h t − 1 , x t ] + b i ) \boldsymbol g_i=σ(\boldsymbol W_i [\boldsymbol h_{t-1},\boldsymbol x_t ]+\boldsymbol b_i) gi=σ(Wi[ht−1,xt]+bi)
其中 W i \boldsymbol W_i Wi和 b i \boldsymbol b_i bi为输入门的参数,需要通过反向传播算法自动优化, σ σ σ为激活函数,一般使用Sigmoid函数。输入门控制变量 g i \boldsymbol g_i gi决定了LSTM对当前时间戳的新输入 c ~ t \tilde{\boldsymbol c}_t c~t的接受程度:当 g i \boldsymbol g_i gi=0时,LSTM不接受任何新的输入 c ~ t \tilde{\boldsymbol c}_t c~t;当 g i = 1 \boldsymbol g_i=1 gi=1时,LSTM全部接受新输入 c ~ t \tilde{\boldsymbol c}_t c~t,如下图所示:
输入门
经过输入门后,待写入Memory的向量为 g i c ~ t \boldsymbol g_i \tilde{\boldsymbol c}_t gic~t。
3. 刷新Memory
在遗忘门和输入门的控制下,LSTM有选择地读取了上一个时间戳的记忆 c t − 1 \boldsymbol c_{t-1} ct−1和当前时间戳的新输入 c ~ t \tilde{\boldsymbol c}_t c~t,状态向量 c t \boldsymbol c_t ct的刷新方式为:
c t = g i c ~ t + g f c t − 1 \boldsymbol c_t=\boldsymbol g_i \tilde{\boldsymbol c}_t+\boldsymbol g_f \boldsymbol c_{t-1} ct=gic~t+gfct−1
得到的新状态向量 c t \boldsymbol c_t ct即为当前时间戳的状态向量。如下图所示:
刷新Memory
4. 输出门
LSTM的内部状态向量 c t \boldsymbol c_t ct并不会直接用于输出,这一点和基础的RNN不一样。基础的RNN网络的状态向量 h \boldsymbol h h既用于记忆,又用于输出,所以基础的RNN可以理解为状态向量 c \boldsymbol c c和输出向量 h \boldsymbol h h是同一个对象。在LSTM内部,状态向量并不会全部输出,而是在输出门的作用下有选择地输出。输出门的门控变量 g o \boldsymbol g_o go为:
g o = σ ( W o [ h t − 1 , x t ] + b o ) \boldsymbol g_o=σ(\boldsymbol W_o [\boldsymbol h_{t-1},\boldsymbol x_t ]+\boldsymbol b_o) go=σ(Wo[ht−1,xt]+bo)
其中 W o \boldsymbol W_o Wo和 b o \boldsymbol b_o bo为输出门的参数,同样需要通过反向传播算法自动优化, σ σ σ为激活函数,一般使用Sigmoid函数。当输出门 g o = 0 \boldsymbol g_o=0 go=0时,输出关闭,LSTM的内部记忆完全被隔断,无法用作输出,此时输出为0的向量;当输出门 g o = 1 \boldsymbol g_o=1 go=1时,输出完全打开,LSTM的状态向量 c t \boldsymbol c_t ct全部用于输出。LSTM的输出由:
h t = g o ⋅ tanh ( c t ) \boldsymbol h_t=\boldsymbol g_o\cdot \text{tanh}(\boldsymbol c_t) ht=go⋅tanh(ct)
产生,即内存向量 c t \boldsymbol c_t ct经过 tanh \text{tanh} tanh激活函数后与输入门作用,得到LSTM的输出。由于 g o ∈ [ 0 , 1 ] \boldsymbol g_o\in[0,1] go∈[0,1], tanh ( c t ) ∈ [ − 1 , 1 ] \text{tanh}(\boldsymbol c_t )\in[-1,1] tanh(ct)∈[−1,1],因此LSTM的输出 h t ∈ [ − 1 , 1 ] \boldsymbol h_t\in[-1,1] ht∈[−1,1]。
输出门
5. 小结
LSTM虽然状态向量和门控数量较多,计算流程相对复杂。但是由于每个门控功能清晰明确,每个状态的作用也比较好理解。这里将典型的门控行为列举出来,并解释其代码的LSTM行为,如下表所示:
输入门和遗忘门的典型行为 输入门控 遗忘门控 LSTM行为 0 1 只使用记忆 1 1 综合输入和记忆 0 0 清零记忆 1 0 输入覆盖记忆 -
长短时记忆网络在热力站建模中的应用
2021-04-04 01:03:56:针对热力站为多变量、非线性...以包头某热力站大量实时工况 数据通过 tensorflow 框架搭建神经网络模型,仿真对比结果表明,长短时记忆网络建模能有 效的减小建模误差,进一步提高神经网络在热力站系统建模中的精度。 -
长短时记忆网络.zip
2021-03-09 14:51:25长短时记忆网络 -
论文研究-长短时记忆网络在热力站建模中的应用.pdf
2019-09-07 12:02:06针对热力站为多变量、非线性、强...以包头某热力站大量实时工况数据通过tensorflow框架搭建神经网络模型,仿真对比结果表明,长短时记忆网络建模能有效地减小建模误差,进一步提高神经网络在热力站系统建模中的精度。 -
长短时记忆网络(Long short-term memory, LSTM)学习总结
2020-12-02 15:42:23长短时记忆网络(Long short-term memory, LSTM) gif来自:https://cloud.tencent.com/developer/article/1358208 LSTM是循环神经网络RNN的一种变体,先简单提一嘴RNN。 循环神经网络通过使用带自反馈(隐藏层)的...LSTM总结
长短时记忆网络(Long short-term memory, LSTM)
gif来自:https://cloud.tencent.com/developer/article/1358208
LSTM是循环神经网络RNN的一种变体,先简单提一嘴RNN。
- 循环神经网络通过使用带自反馈(隐藏层)的神经元,能够处理任意长度的序列。循环神经网络比前馈神经网络更加符合生物神经网络的结构。已经被广泛应用在语音识别、图像处理、语言模型等任务上。所谓自反馈是指序列也就是上面这个图,他可以表示成左边这种简写的形式,也就是他的隐藏层不断地传给下一个时刻,形成一个自反馈这样的机制。
- 每一时刻的输出都取决于当前时刻的输入Xt和上一时刻的隐藏状态ht-1。
- 因为RNN是一个序列模型,所以当这个序列很长的时候问题就出现了,容易梯度消失和梯度爆炸。为了从根本上解决长距离的依赖的问题,就有了长短时记忆网络。
LSTM模型的关键是引入了一组记忆单元,允许网络可以学习何时遗忘历史信息,何时用新信息更新记忆单元。在时刻t时,记忆单元𝐶_𝑡记录了到当前时刻为止的所有历史信息,并受三个“门”控制:输入门𝑖_𝑡 ,遗忘门𝑓_𝑡和输出门𝑜_𝑡 。三个门的元素值在[0,1]之间。
-
记忆单元就是最上边的这条信息传送带,他可以看成是一个细胞的记忆状态。细胞的状态在整条链上运行,只有一些小的线性操作作用其上,信息很容易保持不变的流过整条链。
-
那门控呢是一个有选择的让信息通过的方式,它由一个Sigmoid神经网络层和一个点乘运算组成。Sigmoid神经网络层输出0和1之间的数字,这个数字描述每个组件有多少信息可以通过,0表示不通过任何信息,1表示全部通过,0.5的话就有一半的信息通过。
1. 遗忘门
首先我们看一下什么是遗忘门,遗忘门决定我们要从细胞状态中丢弃什么信息,他是由前一个隐藏状态ht-1和当前输入xt来共同决定的,他为上一个状态ct-1中的每个数字输出0和1之间的值,表示我们要从前一个状态中丢弃什么信息,以一个句子为例,“细胞状态可能包括当前主语的性别,从而决定使用正确的代词(他/她/它),当看到新的主语时,就需要忘记旧主语的性别。”也就是从我们当前的输入来决定应该忘记哪些历史信息。
2. 输入门
输入门是决定我们要在细胞状态中存储什么信息,它分为两部分,第一部分是决定哪些信息要输入,其次是要输入的具体信息,然后组合来创建更新值。输入门也是由前一个状态的隐藏值也就是ht-1和当前时刻的输入xt来共同决定的,
3. 记忆更新
可以看到,当前时刻的细胞状态Ct等于遗忘门乘上一时刻状态加上输入门乘当前输入的信息就得到了最新的状态。4. 输出门
输出门,就是要决定输出哪一部分信息给下一时刻,首先有一个门控, 输出0-1之间的值,然后将细胞状态通过tanh操作乘以这个输出门得到结果,就完成了输出门决定将哪些信息给下一时刻。总结:
-
长短时记忆网络(LSTM)基础
2017-10-09 01:31:38在本文中,我们将介绍一种改进之后的循环神经网络:长短时记忆网络(Long Short Term Memory Network, LSTM),它成功的解决了原始循环神经网络的缺陷,成为当前最流行的RNN,在语音识别、图片描述、自然语言处理等...往期回顾
在上一篇文章中,我们介绍了循环神经网络以及它的训练算法。我们也介绍了循环神经网络很难训练的原因,这导致了它在实际应用中,很难处理长距离的依赖。在本文中,我们将介绍一种改进之后的循环神经网络:长短时记忆网络(Long Short Term Memory Network, LSTM),它成功的解决了原始循环神经网络的缺陷,成为当前最流行的RNN,在语音识别、图片描述、自然语言处理等许多领域中成功应用。但不幸的一面是,LSTM的结构很复杂,因此,我们需要花上一些力气,才能把LSTM以及它的训练算法弄明白。在搞清楚LSTM之后,我们再介绍一种LSTM的变体:GRU (Gated Recurrent Unit)。 它的结构比LSTM简单,而效果却和LSTM一样好,因此,它正在逐渐流行起来。最后,我们仍然会动手实现一个LSTM。
长短时记忆网络是啥
我们首先了解一下长短时记忆网络产生的背景。回顾一下零基础入门深度学习(5) - 循环神经网络中推导的,误差项沿时间反向传播的公式:
δTk=δTt∏i=kt−1diag[f′(neti)]W(1)我们可以根据下面的不等式,来获取 δTk 的模的上界(模可以看做对 δTk 中每一项值的大小的度量):
∥δTk∥⩽⩽∥δTt∥∏i=kt−1∥diag[f′(neti)]∥∥W∥∥δTt∥(βfβW)t−k(2)(3)我们可以看到,误差项 δ 从t时刻传递到k时刻,其值的上界是 βfβw 的指数函数。 βfβw 分别是对角矩阵 diag[f′(neti)] 和矩阵W模的上界。显然,除非 βfβw 乘积的值位于1附近,否则,当t-k很大时(也就是误差传递很多个时刻时),整个式子的值就会变得极小(当 βfβw 乘积小于1)或者极大(当 βfβw 乘积大于1),前者就是梯度消失,后者就是梯度爆炸。虽然科学家们搞出了很多技巧(比如怎样初始化权重),让 βfβw 的值尽可能贴近于1,终究还是难以抵挡指数函数的威力。
梯度消失到底意味着什么?在零基础入门深度学习(5) - 循环神经网络中我们已证明,权重数组W最终的梯度是各个时刻的梯度之和,即:
∇WE=∑k=1t∇WkE=∇WtE+∇Wt−1E+∇Wt−2E+...+∇W1E(4)(5)假设某轮训练中,各时刻的梯度以及最终的梯度之和如下图:
我们就可以看到,从上图的t-3时刻开始,梯度已经几乎减少到0了。那么,从这个时刻开始再往之前走,得到的梯度(几乎为零)就不会对最终的梯度值有任何贡献,这就相当于无论t-3时刻之前的网络状态h是什么,在训练中都不会对权重数组W的更新产生影响,也就是网络事实上已经忽略了t-3时刻之前的状态。这就是原始RNN无法处理长距离依赖的原因。
既然找到了问题的原因,那么我们就能解决它。从问题的定位到解决,科学家们大概花了7、8年时间。终于有一天,Hochreiter和Schmidhuber两位科学家发明出长短时记忆网络,一举解决这个问题。
其实,长短时记忆网络的思路比较简单。原始RNN的隐藏层只有一个状态,即h,它对于短期的输入非常敏感。那么,假如我们再增加一个状态,即c,让它来保存长期的状态,那么问题不就解决了么?如下图所示:
新增加的状态c,称为单元状态(cell state)。我们把上图按照时间维度展开:
上图仅仅是一个示意图,我们可以看出,在t时刻,LSTM的输入有三个:当前时刻网络的输入值 xt 、上一时刻LSTM的输出值 ht−1 、以及上一时刻的单元状态 ct−1 ;LSTM的输出有两个:当前时刻LSTM输出值 ht 、和当前时刻的单元状态 ct 。注意 x 、 h 、 c 都是向量。
LSTM的关键,就是怎样控制长期状态c。在这里,LSTM的思路是使用三个控制开关。第一个开关,负责控制继续保存长期状态c;第二个开关,负责控制把即时状态输入到长期状态c;第三个开关,负责控制是否把长期状态c作为当前的LSTM的输出。三个开关的作用如下图所示:
接下来,我们要描述一下,输出h和单元状态c的具体计算方法。
长短时记忆网络的前向计算
前面描述的开关是怎样在算法中实现的呢?这就用到了门(gate)的概念。门实际上就是一层全连接层,它的输入是一个向量,输出是一个0到1之间的实数向量。假设W是门的权重向量, b 是偏置项,那么门可以表示为:
g(x)=σ(Wx+b)门的使用,就是用门的输出向量按元素乘以我们需要控制的那个向量。因为门的输出是0到1之间的实数向量,那么,当门输出为0时,任何向量与之相乘都会得到0向量,这就相当于啥都不能通过;输出为1时,任何向量与之相乘都不会有任何改变,这就相当于啥都可以通过。因为 σ (也就是sigmoid函数)的值域是(0,1),所以门的状态都是半开半闭的。
LSTM用两个门来控制单元状态c的内容,一个是遗忘门(forget gate),它决定了上一时刻的单元状态 ct−1 有多少保留到当前时刻 ct ;另一个是输入门(input gate),它决定了当前时刻网络的输入 xt 有多少保存到单元状态 ct 。LSTM用输出门(output gate)来控制单元状态 ct 有多少输出到LSTM的当前输出值 ht 。
我们先来看一下遗忘门:
ft=σ(Wf⋅[ht−1,xt]+bf)(式1)上式中, Wf 是遗忘门的权重矩阵, [ht−1,xt] 表示把两个向量连接成一个更长的向量, bf 是遗忘门的偏置项, σ 是sigmoid函数。如果输入的维度是 dx ,隐藏层的维度是 dh ,单元状态的维度是 dc (通常 dc=dh ),则遗忘门的权重矩阵 Wf 维度是 dc×(dh+dx) 。事实上,权重矩阵 Wf 都是两个矩阵拼接而成的:一个是 Wfh ,它对应着输入项 ht−1 ,其维度为 dc×dh ;一个是 Wfx ,它对应着输入项 xt ,其维度为 dc×dx 。 Wf 可以写为:
[Wf][ht−1xt]=[WfhWfx][ht−1xt]=Wfhht−1+Wfxxt(6)(7)下图显示了遗忘门的计算:
接下来看看输入门:
it=σ(Wi⋅[ht−1,xt]+bi)(式2)上式中, Wi 是输入门的权重矩阵, bi 是输入门的偏置项。下图表示了输入门的计算:
接下来,我们计算用于描述当前输入的单元状态 c~t ,它是根据上一次的输出和本次输入来计算的:
c~t=tanh(Wc⋅[ht−1,xt]+bc)(式3)下图是 c~t 的计算:
现在,我们计算当前时刻的单元状态 ct 。它是由上一次的单元状态 ct−1 按元素乘以遗忘门 ft ,再用当前输入的单元状态 c~t 按元素乘以输入门 it ,再将两个积加和产生的:
ct=ft∘ct−1+it∘c~t(式4)符号 ∘ 表示按元素乘。下图是 ct 的计算:
这样,我们就把LSTM关于当前的记忆 c~t 和长期的记忆 ct−1 组合在一起,形成了新的单元状态 ct 。由于遗忘门的控制,它可以保存很久很久之前的信息,由于输入门的控制,它又可以避免当前无关紧要的内容进入记忆。下面,我们要看看输出门,它控制了长期记忆对当前输出的影响:
ot=σ(Wo⋅[ht−1,xt]+bo)(式5)下图表示输出门的计算:
LSTM最终的输出,是由输出门和单元状态共同确定的:
ht=ot∘tanh(ct)(式6)下图表示LSTM最终输出的计算:
式1到式6就是LSTM前向计算的全部公式。至此,我们就把LSTM前向计算讲完了。
-
基于随机非平稳和长短时记忆网络的泊位混合预测
2021-05-06 12:36:22为了缓解大城市中日益突出的停车困难,现如今中国各大城市级停车诱导系统的研究开发势在必行.在停车诱导系统中,作为帮助用户找到最合适的停车场的重要因素,对未来停车位的预测是一个非常重要的智能技术手段.... -
长短时记忆网络LSTM
2018-07-15 12:31:42我们将介绍一种改进之后的循环神经网络:长短时记忆网络(Long Short Term Memory Network, LSTM),它成功的解决了原始循环神经网络的缺陷,成为当前最流行的RNN,在语音识别、图片描述、自然语言处理等许多领域中... -
深度学习(DL)-- LSTM长短时记忆网络算法详解
2019-06-12 13:56:14五、LSTM(Long Short-Term Memory,长短时记忆网络)) 1、长期依赖(Long-Term Dependencies)问题 RNN 的关键点之一就是他们可以用来连接先前的信息到当前的任务上,例如使用过去的视频段来推测对当前段... -
长短时记忆神经网络(LSTM-2)型介绍及公式推导
2018-07-08 16:22:43长短时记忆网络(Long Short Term Memory Network, LSTM),它有效地解决了原始循环神经网络(RNN)的缺陷,在语音识别、图片描述、自然语言处理等许多领域中成功应用。(LSTM-2)型引入了Ct,Ct-1记忆对神经网络的影响... -
自然语言处理之长短时记忆网络(六)
2020-12-05 13:42:34长短时记忆网络的基本概念 长短期记忆网络(LSTM,Long Short-Term Memory)是一种时间循环神经网络,是为了解决一般的RNN(循环神经网络)存在的长期依赖问题而专门设计出来的,所有的RNN都具有一种重复神经网络... -
长短时记忆网络(LSTM)结构
2019-05-20 16:16:201.应用案例: 预测股票每日最高价(一) 预测股票每日最高价(二) -
【机器学习杂记】循环神经网络和长短时记忆网络(RNN & LSTM)
2021-10-29 15:22:04另外,LSTM的全称是Long short-term memory,破折号-是加在short和term之间的,所以LSTM仍是一个短时记忆网络,只不过是比较长的短时记忆网络。 一 RNN RNN的本质就是用之前的hidden layer的输出或者整个network的输... -
(长短时记忆网络 vs. 长短时记忆单元)论文阅读:long short term memory networks for machine reading
2022-03-27 08:49:43本文介绍长短时记忆网络论文的动机、思想和方法。它代替LSTM中的记忆单元,换成了以attention机制实现的memory networks。 -
LSTM(长短时记忆网络)详解
2021-04-19 11:46:31LSTM网络结构 LSTM是RNN(循环神经网络)的变种,其时序结构同RNN类似,主要的区别在于内部逻辑结构的不同。 RNN的时序网络结构 -
零基础入门深度学习(6) - 长短时记忆网络(LSTM)
2020-12-05 11:24:54长短时记忆网络是啥 我们首先了解一下长短时记忆网络产生的背景。回顾一下零基础入门深度学习(5) - 循环神经网络中推导的,误差项沿时间反向传播的公式: 我们可以根据下面的不等式,来获取的模的上界(模可以看做... -
神经网络学习小记录3——利用tensorflow构建长短时记忆网络(LSTM)
2019-08-13 13:24:32神经网络学习小记录3——利用tensorflow构建长短时记忆网络(LSTM)学习前言LSTM简介1、RNN的梯度消失问题2、LSTM的结构3、LSTM独特的门结构tensorflow中RNN的相关函数tf.contrib.rnn.BasicLSTMCelltf.nn.dynamic_... -
【机器学习】长短时记忆网络(LSTM)
2022-04-21 11:21:09长短时记忆网络(Long Short Term Memory Network, LSTM),它成功的解决了原始循环神经网络的缺陷,成为当前最流行的RNN,在语音识别、图片描述、自然语言处理等许多领域中成功应用。 原始RNN无法处理长距离依赖,...