深度学习中的循环神经网络LSTM详解

article/2025/9/22 11:14:52

(一)、什么是循环神经网络LSTM?
LSTM指的是长短期记忆网络(Long Short Term Memory),它是循环神经网络中最知名和成功的扩展。由于循环神经网络有梯度消失和梯度爆炸的问题,学习能力有限,在实际任务中的效果很难达到预期。为了增强循环神经网络的学习能力,缓解网络的梯度消失等问题,LSTM神经网络便横空出世了。LSTM可以对有价值的信息进行长期记忆,不仅减小循环神经网络的学习难度,并且由于其增加了长时记忆,在一定程度上也缓解了梯度消失的问题。(注:梯度爆炸的问题用一般的梯度裁剪方法就可以解决)。

(二)、LSTM实现长短期记忆的原理是什么?
在这里插入图片描述

2.1 LSTM网络内部结构示意图

与传统的循环神经网络相比,LSTM在 h t − 1 h_{t-1} ht1 x t x_t xt的基础上加了一个cell state(即长时记忆状态 c t − 1 c_{t-1} ct1)来计算 h t h_t ht,并且对网络模型内部进行了更加精心的设计,加入了遗忘门 f t f_t ft、输入门 i t i_t it、输出门 o t o_t ot三个门神经元以及一个内部记忆神经元 c ~ t \tilde{c}_t c~t(上图2.1中的LSTM网络模型内部黄色的 σ \sigma σ从左到右分别指的是 f t f_t ft i t i_t it o t o_t ot,黄色的 tanh ⁡ \tanh tanh则指的是 c ~ t \tilde{c}_t c~t)。遗忘门神经元 f t f_t ft控制前一步记忆单元中信息有多大程度上被遗忘掉;输入门神经元 i t i_t it控制当前记忆中的信息以多大程度更新到记忆单元中;输出门神经元 o t o_t ot控制当前的hidden state(即短时记忆单元)的输出有多大程度取决于当前的长时记忆单元。在一个训练好的网络中,当输入的序列没有重要信息时,LSTM遗忘门的值接近于1,输入门的值接近于0,此时过去的信息将会保留,从而实现了长时记忆的功能;当输入的序列中出现了重要信息时,LSTM应当将其存入记忆中,此时其输入门的值会接近于1;当输入的序列中出现了重要信息,且该信息意味着之前的记忆不再重要时,则输入门的值会接近于1,而遗忘门的值会接近于0,这样旧的记忆就会遗忘,新的重要信息被记忆。经过这样的设计,整个网络更容易学习到序列之间的长期依赖。

(三)、LSTM的原理公式是什么?
经典的LSTM中,第t步的更新计算公式如下( ⊙ \odot 表示元素点乘):
{ 输 入 : x i n p u t = c o n c a t [ h t − 1 , x t ] 遗 忘 门 神 经 元 : f t = σ ( x i n p u t W f + b f ) 遗 忘 后 的 长 时 记 忆 : c t − 1 ′ = f t ⊙ c t − 1 记 忆 门 神 经 元 : c ~ t = tanh ⁡ ( x i n p u t W c + b c ) 输 入 门 神 经 元 : i t = σ ( x i n p u t W i + b i ) 输 入 后 的 记 忆 : c ~ t ′ = i t ⊙ c t ~ t 时 刻 的 长 时 记 忆 : c t = c t − 1 ′ + c ~ t ′ 输 出 门 神 经 元 : o t = σ ( x i n p u t W o + b o ) t 时 刻 的 短 期 记 忆 : h t = o t ⊙ tanh ⁡ ( c t ) \begin{cases} 输入:x_{input}=concat[h_{t-1},x_t]\\ 遗忘门神经元:f_t=\sigma(x_{input}W_f+b_f) \\ 遗忘后的长时记忆:c'_{t-1}=f_t\odot c_{t-1} \\ 记忆门神经元:\tilde{c}_t=\tanh(x_{input}W_c+b_c)\\ 输入门神经元:i_t=\sigma(x_{input}W_i+b_i)\\ 输入后的记忆:{\tilde{c}'_t}=i_t\odot \tilde{c_t}\\ t时刻的长时记忆:c_t=c'_{t-1}+{\tilde{c}'_t}\\ 输出门神经元:o_t=\sigma(x_{input}W_o+b_o)\\ t时刻的短期记忆:h_t=o_t\odot \tanh{(c_t)}\\ \end{cases} xinput=concat[ht1,xt]ft=σ(xinputWf+bf)ct1=ftct1c~t=tanh(xinputWc+bc)it=σ(xinputWi+bi)c~t=itct~tct=ct1+c~tot=σ(xinputWo+bo)tht=ottanh(ct)
其中输入 x i n p u t x_{input} xinput是通过对上一时刻 t − 1 t-1 t1的短期记忆状态 h t − 1 h_{t-1} ht1以及当前时刻 t t t的字(词)向量输入 x t x_t xt进行特征维度的 c o n c a t concat concat所获得的。 σ \sigma σ指的是 s i g m o i d sigmoid sigmoid函数,遗忘门、输入门以及输出门神经元的输出结果是向量,由于三个门神经元均采用 s i g m o i d sigmoid sigmoid作为激活函数,所以输出向量的每个元素均在0~1之间,用于控制各维度流过阀门的信息量;记忆门神经元的输出结果仍为向量,且与遗忘门、输入门以及输出门神经元的输出向量维度等同,由于记忆门神经元使用的激活函数是 tanh ⁡ \tanh tanh,所以其输出向量的每个元素均在-1~1之间。 W f W_f Wf b f b_f bf W i W_i Wi b i b_i bi W c W_c Wc b c b_c bc W o W_o Wo b o b_o bo是各个门神经元的参数,是在训练过程中需要学习得到的。与传统的循环神经网络所不同的是,LSTM循环神经网络新增了长时记忆单元,从上一个长时记忆单元的状态 c t − 1 c_{t-1} ct1到当前的长时记忆单元 c t c_{t} ct不仅取决于激活函数 tanh ⁡ \tanh tanh计算得到的状态,而且还由输入门和遗忘门神经元来共同控制。

(四)、LSTM为什么选择 s i g m o i d sigmoid sigmoid作为遗忘门、输入门以及输出门神经元的激活函数,又为什么选择 tanh ⁡ \tanh tanh作为记忆门神经元的激活函数?
我们可以注意到,无论是 s i g m o i d sigmoid sigmoid还是 tanh ⁡ \tanh tanh,它们均属于饱和函数,也就是说当输入达到一定值的情况下,输出就不会明显变化了。比如,当输入小于一定值时, s i g m o i d sigmoid sigmoid输出几乎接近于0, tanh ⁡ \tanh tanh输出几乎接近于-1;当输入大于一定值时, s i g m o i d sigmoid sigmoid tanh ⁡ \tanh tanh输出均接近于1。
(1). 如果使用非饱和的激活函数,例如 r e l u relu relu,我们很难实现门控效果。 s o g m o i d sogmoid sogmoid的函数输出在0~1之间,且输入较大或较小时,其输出会非常接近1或0,从而保证该门是开或关。故选择 s i g m o i d sigmoid sigmoid作为遗忘门、输入门以及输出门神经元的激活函数最合适不过。
(2). tanh ⁡ \tanh tanh函数的输出在-1~1之间,并且中心为0,这与大多数场景下特征分布是0中心吻合,并且, tanh ⁡ \tanh tanh在输入为0附近的时相比 s i g m o i d sigmoid sigmoid函数有更大的梯度。通常使模型收敛更快。

(五)、常问问题一:LSTM有几个输入几个输出?
三个输入:序列中的字(词)向量输入 x t x_t xt、短时记忆状态输入 h t − 1 h_{t-1} ht1以及长时记忆状态输入 c t − 1 c_{t-1} ct1
两个输出:短时记忆状态输出 h t h_t ht和长时记忆状态输出 c t c_t ct

(六)、常问问题二:LSTM有几个神经元,分别使用什么激活函数?
四个神经元:遗忘门、输入门、输出门以及记忆门神经元,其中遗忘门、输入门以及输出门神经元使用 s i g m o i d sigmoid sigmoid作为激活函数,实现门控效果;记忆门神经元使用 tanh ⁡ \tanh tanh作为激活函数,来吻合0中心特征分布,并且 tanh ⁡ \tanh tanh函数在0中心有较大梯度,提高模型收敛速度。

(七)、如何构建双向LSTM?
在这里插入图片描述

7.1 双向LSTM结构示意图

(1). 初始化两个新的LSTM,一个LSTM将序列正序输入,另一个LSTM将序列反序输入,然后将对应字(词)向量的LSTM输出的结果进行concat,并将concat的结果作为该字(词)向量的新特征向量。
注:这个concat的输入,既可以说是LSTM网络结果输出,也可以说是LSTM短时记忆状态输出。若考虑长时记忆状态的concat,则应是两个序列的最后一个长时记忆状态进行concat,详细见(3)总结

(2). E x a m p l e Example Example:假如有一个序列为"大梦想家",我们正序输入即将"大",“梦”,“想”,“家"的字向量按照顺序依次输入到第一个LSTM神经网络,与此同时将"家”,“想”,“梦”,"大"的字向量按照顺序依次输入到第二个LSTM神经网络,然后将得到的"大"对应的第一个LSTM向量输出与"大"对应的第二个LSTM向量的输出进行concat。

(3). 总结
1.在上面的 E x a m p l e Example Example中,我们不难看出,对于正序输入的"大"字向量来说,其输出并没有其他字向量的信息,而对于反序输入的"大"字向量来说,其输出包含了"家",“想”,"梦"所有在反序中"大"字向量前面的字向量信息。将这两个"大"所得到的LSTM网络输出进行concat,于是"大"字向量获得了concat后的新特征向量,该特征向量拥有了序列的全局信息,即拥有全局视野。
2.对于双向LSTM来说,若我们考虑将第一个LSTM在正序序列输入的情况下,所输出的最后一个长时记忆状态,即对应的"家"的输出状态与第二个LSTM在反序序列输入的情况下,所输出的最后一个长时记忆状态,即对应的"大"的输出状态进行concat,这样所得到的hidden_state以及cell_state将具有更持久的记忆,即记忆能力更强。


http://chatgpt.dhexx.cn/article/XcsyOO0V.shtml

相关文章

【神经网络】学习笔记三—LSTM简介篇

1. RNN和LSTM结构对比 RNN: 循环神经网络(Recurrent Neural Network,RNN)是一种用于处理序列数据的神经网络。相比一般的神经网络来说,他能够处理序列变化的数据。比如某个单词的意思会因为上文提到的内容不同而有不…

深度学习-LSTM网络-代码-示例

一、 LSTM网络原理 要点介绍 (1)LSTM网络用来处理带“序列”(sequence)性质的数据,比如时间序列的数据,像每天的股价走势情况,机械振动信号的时域波形,以及类似于自然语言这种本身带有顺序性质的由有序单…

LSTM模型介绍

递归神经网络(RNN) 人类不会每时每刻都开始思考。 当你阅读这篇文章时,你会根据你对之前单词的理解来理解每个单词。 你不会忘掉掉所有东西,然后再从头开始思考。 你的想法有持久性。 传统的神经网络不能做到这一点,…

人人都能用Python写出LSTM-RNN的代码![你的神经网络学习最佳起步]

0. 前言 本文翻译自博客: iamtrask.github.io ,这次翻译已经获得trask本人的同意与支持,在此特别感谢trask。本文属于作者一边学习一边翻译的作品,所以在用词、理论方面难免会出现很多错误,假如您发现错误或者不合适…

LSTM神经网络算法

RNN RNN 是包含循环的网络,允许信息的持久化。 在下面的示例图中,神经网络的模块,A,正在读取某个输入 x_i,并输出一个值 h_i。循环可以使得信息可以从当前步传递到下一步。 RNN 可以被看做是同一神经网络的多次复制&…

Understanding LSTM Networks(LSTM的网络结构)

Recurrent Neural Networks 人类不是每时每刻都从头开始思考的。当你读这篇文章的时候,你理解每个单词是基于你对以前单词的理解。你不会把所有的东西都扔掉,然后从头开始思考。你的思想有毅力。传统的神经网络无法做到这一点,这似乎是一个主…

理解 LSTM 网络

递归神经网络人类并不是每时每刻都从头开始思考。正如你阅读这篇文章的时候,你是在理解前面词语的基础上来理解每个词。你不会丢弃所有已知的信息而从头开始思考。你的思想具有持续性。传统的神经网络不能做到这点,而且这似乎也是它的主要缺陷。比如&…

LSTM网络的简单理解

目录 RNN递归神经网络LSTM神经网络结构变形1.peephole connections结构2.在忘记门与输入门之间引入一个耦合3.门循环单元(GRU) 今天对LSTM网络进行学习。 在理解LSTM网络之前,我们首先要对Recurrent Neural Networks(RNNs&#xf…

循环神经网络与LSTM

1. 循环神经网络 ①基本结构 在传统的神经网络模型中,是从输入层到隐含层再到输出层,层与层之间是全连接的,每层之间的节点是无连接的。但是这种普通的神经网络对于很多问题却无能无力。例如,你要预测句子的下一个单词是什么&am…

实例 :教你使用简单神经网络和LSTM进行时间序列预测(附代码)

翻译:张玲 校对:丁楠雅 本文约1500字,建议阅读5分钟。 作者基于波动性标准普尔500数据集和Keras深度学习网络框架,利用python代码演示RNN和LSTM RNN的构建过程,便于你快速搭建时间序列的预测模型。 图片来源&#xff…

【LSTM】深入浅出讲解长短时记忆神经网络(结构、原理)

本文收录于《深入浅出讲解自然语言处理》专栏,此专栏聚焦于自然语言处理领域的各大经典算法,将持续更新,欢迎大家订阅!​​个人主页:有梦想的程序星空​​个人介绍:小编是人工智能领域硕士,全栈…

深入理解LSTM神经网络

本文内容及图片主要参考:Understanding LSTM Networks LSTM核心思想 LSTM最早由 Hochreiter & Schmidhuber 在1997年提出,设计初衷是希望能够解决神经网络中的长期依赖问题,让记住长期信息成为神经网络的默认行为,而不是需要…

LSTM神经网络实战

上一遍博客简单的介绍了LSTM神经网络的工作原理, 有兴趣的打开了解一下: https://blog.csdn.net/weixin_52486467/article/details/126301845 显目介绍: 一、问题背景 电力系统负荷(电力需求量,即有功功率&#xf…

LSTM -长短期记忆网络(RNN循环神经网络)

文章目录 基本概念及其公式输入门、输出门、遗忘门候选记忆元记忆元隐状态 从零开始实现 LSTM初始化模型参数定义模型训练和预测 简洁实现小结 基本概念及其公式 LSTM,即(long short-term Memory)长短期记忆网络,也是RNN循环神经网络的一种改进方法&…

机器学习之LSTM的Python实现

什么是LSTM? LSTM(长短期记忆人工神经网络),是一种可以学习长期依赖特殊的RNN(循环神经网络)。 传统循环网络RNN虽然可以通过记忆体,实现短期记忆,进行连续数据的预测。但是当连续…

神经网络:LSTM基础学习

1、LSTM简介 在时间序列数据学习中,传统的循环神经网络(RNN)存在较多的学习瓶颈和技术缺陷,而长短时记忆(LSTM)神经网络克服了循环神经网络的缺陷,使其在长时间序列数据学习训练中能克服梯度爆炸…

Lstm(循环神经网络)

算法模型Lstm(循环神经网络): 简介 LSTM和RNN相似,它们都是在前向传播的过程中处理流经细胞的数据,不同之处在于 LSTM 中细胞的结构和运算有所变化。 LSTM结构: 遗忘门: 遗忘门的功能是决定应丢弃或保留哪些信息。…

基于MATLAB的LSTM神经网络时序预测

参考博客及文献:4 Strategies for Multi-Step Time Series Forecasting Multivariate Time Series Forecasting with LSTMs in Keras (machinelearningmastery.com) LSTM进阶:使用LSTM进行多维多步的时间序列预测_lstm多维多部预测_一只小EZ的博客-CSD…

LSTM神经网络图解

LSTM神经网络图详解 (1)遗忘门,用于计算信息的遗忘(保留)程度,通过sigmoid处理后为0到1的值,1表示全部保留,0表示全部忘记。 f t σ ( W f ⋅ [ h t − 1 , x t ] b f ) f_{t}\si…

【神经网络】LSTM

1.什么是LSTM 长短期记忆(Long short-term memory, LSTM)是一种特殊的RNN,主要是为了解决长序列训练过程中的梯度消失和梯度爆炸问题。简单来说,相比普通的RNN,LSTM能够在更长的序列中有更好的表现。 LSTM区别于RNN地方…