循环神经网络与LSTM

article/2025/9/22 11:43:20

1. 循环神经网络

①基本结构

在传统的神经网络模型中,是从输入层到隐含层再到输出层,层与层之间是全连接的,每层之间的节点是无连接的。但是这种普通的神经网络对于很多问题却无能无力。例如,你要预测句子的下一个单词是什么,一般需要用到前面的单词,因为一个句子中前后单词并不是独立的。RNN(Recurrent Neuron Network)是一种对序列数据建模的神经网络,即一个序列当前的输出与前面的输出也有关。具体的表现形式为网络会对前面的信息进行记忆并应用于当前输出的计算中,即隐藏层之间的节点不再无连接而是有连接的,并且隐藏层的输入不仅包括输入层的输出还包括上一时刻隐藏层的输出。下面是一个RNN模型的示例图,其中:

  • xt 是t时刻的输入,例如单词中相应的one-hot向量
  • st 是t时刻的隐状态(memory),基于上一时刻的隐状态和当前输入得到: st=f(Uxt+Wst1) ,其中 f 一般是非线性的激活函数,在计算s0时,即第一个单词的隐藏层状态,需要用到 s1 ,但是其并不存在,在实现中一般置为0
  • ot 表示t时刻的输出,如下个单词的向量表示, ot=softmax(Vst)
  • 需要注意的是:在传统神经网络中,每一个网络层的参数是不共享的。而在RNN中,所有层次均共享同样的参数(例如上例中的 U,V,W )。其反应出RNN中的每一步都在做相同的事,只是输入不同,因此大大地降低了网络中需要学习的参数。

图片名称

普通神经网络和卷积神经网络的一个显而易见的局限就是他们接收一个固定尺寸的向量作为输入(比如一张图像),并且产生一个固定尺寸的向量作为输出(比如针对不同分类的概率)。不仅如此,这些模型甚至对于上述映射的演算操作的步骤也是固定的(比如模型中的层数)。RNN的不同之处在于其允许我们对向量的序列进行操作:输入可以是序列,输出也可以是序列,在最一般化的情况下输入输出都可以是序列。下面是一些直观的例子:

图片名称

上图中每个正方形代表一个向量,箭头代表函数(比如矩阵乘法)。输入向量是红色,输出向量是蓝色,绿色向量装的是RNN的状态。从左至右为:

  1. 非RNN的普通过程,从固定尺寸的输入到固定尺寸的输出(比如图像分类)。
  2. 输出是序列(例如图像标注:输入是一张图像,输出是单词的序列)。
  3. 输入是序列(例如情绪分析:输入是一个句子,输出是对句子属于正面还是负面情绪的分类)。
  4. 输入输出都是序列(比如机器翻译:RNN输入一个英文句子输出一个法文句子)。
  5. 同步的输入输出序列(比如视频分类中,我们将对视频的每一帧都打标签)。

通过一个有趣的应用来更深入地加以体会:我们将利用RNN训练一个字母级别的语言模型。也就是说,给RNN输入巨量的文本,然后让其建模并根据一个序列中的前一个字母,给出下一个字母的概率分布。在下面的例子中,假设我们的字母表只由4个字母组成“helo”,然后利用训练序列“hello”训练RNN。该训练序列实际上是由4个训练样本组成:1.当h为上文时,下文字母选择的概率应该是e最高。2.l应该是he的下文。3.l应该是hel文本的下文。4.o应该是hell文本的下文。

图片名称

具体来说,该RNN的输入输出是4维,表示字典长度,隐层神经元数量是3个。我们将会把每个字母编码进一个1到k的向量(除对应字母为1外其余为0),然后利用 step 方法一次一个地将其输入给RNN。随后将观察到4维向量的序列(一个字母一个维度),我们希望绿色数字大,红色数字小。我们将这些输出向量理解为RNN关于序列下一个字母预测的信心程度。

②训练过程

循环神经网络的参数训练可以通过随时间进行反向传播(Backpropagation Through Time,BPTT)算法,BPTT算法是针对循环层的训练算法,它的基本原理和BP算法是一样的,也包含同样的三个步骤:

  1. 前向计算每个神经元的输出值;
  2. 反向计算每个神经元的误差项值,它是误差函数E对神经元j的加权输入的偏导数;
  3. 计算每个权重的梯度,最后再用随机梯度下降算法更新权重。

(1)前向计算

我们假设输入向量x的维度是m,输出向量s的维度是n,则矩阵U的维度是n×m,矩阵W的维度是n×n。下面是前向计算展开成矩阵的样子,在这里我们用手写体字母表示向量的一个元素,它的下标表示它是这个向量的第几个元素,它的上标表示第几个时刻:

(2)误差项的计算



同理,上式第二项也是一个Jacobian矩阵:

其中,diag[a]表示根据向量a创建一个对角矩阵。最后,将两项合在一起,可得:

式3就是将误差项沿时间反向传播的算法,循环层将误差项反向传递到上一层网络,与普通的全连接层是完全一样的


式4就是将误差项传递到上一层算法

(3)权重梯度的计算


按照上面的规律就可以生成式5里面的矩阵。

式6就是计算循环层权重矩阵W的梯度的公式。

③梯度爆炸与梯度消失

式3中令 γ=||Wdiag[f(neti)]|| ,如果 γ>1 ,当 kt+1 会造成梯度爆炸问题;相反,如果 γ<1 ,当 kt+1 时会出现和深度前馈神经网络类似的梯度消失问题。换而言之,导数的链式法则导致了连乘的形式,从而造成梯度消失与梯度爆炸。而LSTM能避免RNN的梯度消失问题,其使用“累加”的形式计算状态,这种累加形式导致导数也是累加形式,因此避免了梯度消失。

2. 长短时记忆神经网络(LSTM)

①LSTM 的核心思想

Long Short-Term Memory Neural Network—— 一般就叫做 LSTM ,是一种 RNN 特殊的类型,可以学习长期依赖信息。LSTM 由Hochreiter & Schmidhuber (1997)提出,并在近期被Alex Graves进行了改良和推广。在很多问题,LSTM 都取得相当巨大的成功,并得到了广泛的使用。LSTM 通过刻意的设计来避免长期依赖问题。记住长期的信息在实践中是 LSTM 的默认行为,而非需要付出很大代价才能获得的能力!
所有 RNN 都具有一种重复神经网络模块的链式的形式。在标准的 RNN 中,这个重复的模块只有一个非常简单的结构,例如一个 tanh 层。

LSTM 同样是这样的结构,但是重复的模块拥有一个不同的结构。不同于 单一神经网络层,这里是有四个,以一种非常特殊的方式进行交互。

我们先来熟悉一下图中使用的各种元素的图标:在上面的图例中,每一条黑线传输着一整个向量,从一个节点的输出到其他节点的输入。粉色的圈代表 pointwise 的操作,诸如向量的和,而黄色的矩阵就是学习到的神经网络层。合在一起的线表示向量的连接,分开的线表示内容被复制,然后分发到不同的位置。

LSTM 的关键就是细胞状态,水平线在图上方贯穿运行。
细胞状态类似于传送带。直接在整个链上运行,只有一些少量的线性交互。信息在上面流传保持不变会很容易。

LSTM 有通过精心设计的称作为“门”的结构来去除或者增加信息到细胞状态的能力。门是一种让信息选择式通过的方法。他们包含一个 sigmoid 神经网络层和一个 pointwise 乘法操作。

Sigmoid 层输出 0 到 1 之间的数值,描述每个部分有多少量可以通过。0 代表“不许任何量通过”,1 就指“允许任意量通过”!

LSTM 拥有三个门(输入门,遗忘门,输出门),来保护和控制细胞状态。

②逐步理解 LSTM

在我们 LSTM 中的第一步是决定我们会从细胞状态中丢弃什么信息。这个决定通过遗忘层完成。该门会读取 ht1 xt ,输出一个在 0 到 1 之间的数值给每个在细胞状态 Ct1 中的数字。1 表示“完全保留”,0 表示“完全舍弃”。
让我们回到语言模型的例子中来基于已经看到的预测下一个词。在这个问题中,细胞状态可能包含当前主语的性别,因此正确的代词可以被选择出来。当我们看到新的主语,我们希望忘记旧的主语。

下一步是确定什么样的新信息被存放在细胞状态中。这里包含两个部分。第一,sigmoid 层称 “输入门层” 决定什么值我们将要更新。然后,一个 tanh 层创建一个新的候选值向量, C~t ,会被加入到状态中。下一步,我们会讲这两个信息来产生对状态的更新。
在我们语言模型的例子中,我们希望增加新的主语的性别到细胞状态中,来替代旧的需要忘记的主语。

现在是更新旧细胞状态的时间了, Ct1 更新为 Ct 。前面的步骤已经决定了将会做什么,我们现在就是实际去完成。
我们把旧状态与 ft 相乘,丢弃掉我们确定需要丢弃的信息。接着加上 itC~t 。这就是新的候选值,根据我们决定更新每个状态的程度进行变化。
在语言模型的例子中,这就是我们实际根据前面确定的目标,丢弃旧代词的性别信息并添加新的信息的地方。

最终,我们需要确定输出什么值。这个输出将会基于我们的细胞状态,但是也是一个过滤后的版本。首先,我们运行一个 sigmoid 层来确定细胞状态的哪个部分将输出出去。接着,我们把细胞状态通过 tanh 进行处理(得到一个在 -1 到 1 之间的值)并将它和 sigmoid 门的输出相乘,最终我们仅仅会输出我们确定输出的那部分。
在语言模型的例子中,因为他就看到了一个 代词,可能需要输出与一个 动词 相关的信息。例如,可能输出是否代词是单数还是负数,这样如果是动词的话,我们也知道动词需要进行的词形变化。

3. 参考资料

  • https://zhuanlan.zhihu.com/p/27485750
  • http://karpathy.github.io/2015/05/21/rnn-effectiveness/
  • http://mt.sohu.com/20161110/n472772642.shtml
  • http://www.jianshu.com/p/9dc9f41f0b29

http://chatgpt.dhexx.cn/article/6TrhTluU.shtml

相关文章

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

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

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

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

深入理解LSTM神经网络

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

LSTM神经网络实战

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

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

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

机器学习之LSTM的Python实现

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

神经网络:LSTM基础学习

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

Lstm(循环神经网络)

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

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

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

LSTM神经网络图解

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

【神经网络】LSTM

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

[深入浅出] LSTM神经网络

由来 人类并不是每时每刻都从一片空白的大脑开始他们的思考。在你阅读这篇文章时候&#xff0c;你都是基于自己已经拥有的对先前所见词的理解来推断当前词的真实含义。我们不会将所有的东西都全部丢弃&#xff0c;然后用空白的大脑进行思考。我们的思想拥有持久性。 传统的神经…

简单理解LSTM神经网络

递归神经网络 在传统神经网络中&#xff0c;模型不会关注上一时刻的处理会有什么信息可以用于下一时刻&#xff0c;每一次都只会关注当前时刻的处理。举个例子来说&#xff0c;我们想对一部影片中每一刻出现的事件进行分类&#xff0c;如果我们知道电影前面的事件信息&#xf…

LSTM神经网络

LSTM被广泛用于许多序列任务&#xff08;包括天然气负荷预测&#xff0c;股票市场预测&#xff0c;语言建模&#xff0c;机器翻译&#xff09;&#xff0c;并且比其他序列模型&#xff08;例如RNN&#xff09;表现更好&#xff0c;尤其是在有大量数据的情况下。 LSTM经过精心设…

(神经网络深度学习)--循环神经网络LSTM

一、什么是LSTM&#xff1a; 如果你经过上面的文章看懂了RNN的内部原理&#xff0c;那么LSTM对你来说就很简单了&#xff0c;首先大概介绍一下LSTM&#xff0c;是四个单词的缩写&#xff0c;Long short-term memory&#xff0c;翻译过来就是长短期记忆&#xff0c;是RNN的一种…

机器学习——人工神经网络模型LSTM

LSTM的学习 学习目标&#xff1a; 1理解什么是人工神经网络。2深入理解LSTM&#xff08;长短期记忆网络&#xff09;3Code 浅析人工神经网络&#xff1a; 在谈人工神经网络模型之前我们先来了解一下生理上的神经网络。 下面是一张对比图&#xff1a; Neural Science Compute…

LSTM神经网络详解

LSTM 长短时记忆网络(Long Short Term Memory Network, LSTM)&#xff0c;是一种改进之后的循环神经网络&#xff0c;可以解决RNN无法处理长距离的依赖的问题&#xff0c;目前比较流行。 长短时记忆网络的思路&#xff1a; 原始 RNN 的隐藏层只有一个状态&#xff0c;即h&am…

LSTM神经网络介绍

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 引言一、介绍1.1什么是LSTM?1.2基础知识1.2.1门控机制1.2.2 相关激活函数1.2.3网络参数介绍 二、LSTM网络架构2.1架构图 三、LSTM的门3.1遗忘门3.2输入门3.3输出门…

大白话理解LSTM神经网络(附实例讲解)

前言 本文章为个人学习笔记整理&#xff0c;所学习的内容来自b站up主老弓的学习日记&#xff0c;附有实例讲解。 归类 长短期记忆神经网络&#xff08;LSTM&#xff09;是一种特殊的循环神经网络(RNN)。原始的RNN在训练中&#xff0c;随着训练时间的加长以及网络层数的增多&a…

Idea如何导入一个SpringBoot项目

最近公司要求开发工具要用Idea&#xff0c;作为一个eclipse的老员工&#xff0c;记录一下Idea中遇到的坑 刚开始用Idea从Git上导入一个项目时&#xff0c;遇到了很多坑&#xff0c;网上有很多方法&#xff0c;我不多做介绍。只说明一下我使用的方法。 1.本地新建一个文件夹&a…