3. 循环神经网络(RNN)与长短期记忆网络(LSTM)

2024-09-03 19:04

本文主要是介绍3. 循环神经网络(RNN)与长短期记忆网络(LSTM),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

引言

循环神经网络(RNN)和长短期记忆网络(LSTM)是处理序列数据的关键模型,广泛应用于自然语言处理、时间序列预测、语音识别等领域。RNN通过循环结构捕捉序列中的时间依赖关系,而LSTM则通过特殊的记忆单元解决了RNN中的梯度消失问题。本篇博文将深入探讨RNN和LSTM的结构、工作原理,以及其在序列数据处理中的应用。

1. RNN的工作原理及局限性

循环神经网络(RNN)是一类用于处理序列数据的神经网络,其特点在于能够捕捉序列中的时间依赖关系。RNN通过循环结构,使得每个时间步的输出不仅依赖于当前输入,还依赖于前一时间步的输出。

  • RNN的结构:RNN的核心是一个循环单元,循环单元的状态在时间步之间传递。这使得RNN能够记忆前一时间步的信息,并将其与当前输入结合,生成当前的输出。

  • 时间步依赖:RNN的这种时间依赖性使其非常适合处理序列数据,如文本、语音、时间序列等。

  • 局限性:尽管RNN在处理短期依赖时表现良好,但随着序列长度的增加,RNN面临着梯度消失和梯度爆炸问题。这使得RNN难以捕捉长距离的时间依赖关系。

RNN的基本公式:

RNN的基本计算公式如下:

h t = tanh ⁡ ( W h h t − 1 + W x x t + b h ) h_t = \tanh(W_h h_{t-1} + W_x x_t + b_h) ht=tanh(Whht1+Wxxt+bh)
y t = W y h t + b y y_t = W_y h_t + b_y yt=Wyht+by

其中, h t h_t ht是第 t t t时刻的隐藏状态, x t x_t xt是第 t t t时刻的输入, y t y_t yt是第 t t t时刻的输出。

2. LSTM的结构与优势

长短期记忆网络(LSTM)是RNN的变种,旨在解决RNN中的梯度消失和梯度爆炸问题。LSTM通过引入特殊的记忆单元,能够在较长时间范围内保持信息的有效性,从而捕捉长距离依赖关系。

  • LSTM的结构:LSTM引入了细胞状态(Cell State)和三个门控机制(输入门、遗忘门、输出门),通过这些门控机制,LSTM可以控制信息的流入、流出和保留,从而更好地管理长期依赖。

    • 输入门:控制当前输入信息进入细胞状态的量。
    • 遗忘门:决定当前细胞状态中有哪些信息需要被遗忘。
    • 输出门:决定哪些信息从细胞状态输出。
  • LSTM的优势:LSTM通过门控机制有效解决了RNN的梯度消失问题,使得模型能够在处理长序列数据时,仍能保持良好的性能。这使得LSTM在自然语言处理、时间序列预测等领域得到了广泛应用。

LSTM的基本公式:

LSTM的计算过程如下:

f t = σ ( W f ⋅ [ h t − 1 , x t ] + b f ) f_t = \sigma(W_f \cdot [h_{t-1}, x_t] + b_f) ft=σ(Wf[ht1,xt]+bf)
i t = σ ( W i ⋅ [ h t − 1 , x t ] + b i ) i_t = \sigma(W_i \cdot [h_{t-1}, x_t] + b_i) it=σ(Wi[ht1,xt]+bi)
C t ~ = tanh ⁡ ( W C ⋅ [ h t − 1 , x t ] + b C ) \tilde{C_t} = \tanh(W_C \cdot [h_{t-1}, x_t] + b_C) Ct~=tanh(WC[ht1,xt]+bC)
C t = f t ∗ C t − 1 + i t ∗ C t ~ C_t = f_t * C_{t-1} + i_t * \tilde{C_t} Ct=ftCt1+itCt~
o t = σ ( W o ⋅ [ h t − 1 , x t ] + b o ) o_t = \sigma(W_o \cdot [h_{t-1}, x_t] + b_o) ot=σ(Wo[ht1,xt]+bo)
h t = o t ∗ tanh ⁡ ( C t ) h_t = o_t * \tanh(C_t) ht=ottanh(Ct)

其中, C t C_t Ct是细胞状态, h t h_t ht是隐藏状态, f t f_t ft i t i_t it o t o_t ot分别是遗忘门、输入门和输出门的输出。

3. LSTM的实际应用:自然语言处理、时间序列预测

LSTM的广泛应用证明了其在处理复杂序列数据方面的优势。

  • 自然语言处理:LSTM在机器翻译、文本生成、情感分析等自然语言处理任务中表现出色。通过记住长时间跨度的语义信息,LSTM可以生成连贯、符合语法的文本。

  • 时间序列预测:LSTM在金融市场预测、天气预报、能源消耗预测等时间序列任务中具有显著优势。通过捕捉历史数据中的长时间依赖关系,LSTM能够准确预测未来的趋势和变化。

时间序列预测应用示例:

在股票价格预测中,LSTM可以利用过去的价格变化模式,预测未来的股票价格走势,从而为投资决策提供依据。

4. GRU(门控循环单元)与LSTM的对比

GRU(门控循环单元)是另一种RNN变种,与LSTM相比,GRU简化了结构,具有更少的参数,因此在某些任务中表现更为高效。

  • GRU的结构:GRU结合了LSTM的遗忘门和输入门,同时省去了细胞状态,直接将隐藏状态作为唯一的状态。这使得GRU更简单、更易于训练。

  • LSTM vs GRU:尽管LSTM和GRU在许多任务中表现相近,但GRU在处理较短序列或数据量有限的任务时,通常具有更好的训练效率。而LSTM则更适合处理长序列或需要精细记忆的任务。

GRU的基本公式:

GRU的计算过程如下:

z t = σ ( W z ⋅ [ h t − 1 , x t ] + b z ) z_t = \sigma(W_z \cdot [h_{t-1}, x_t] + b_z) zt=σ(Wz[ht1,xt]+bz)
$$
r_t = \sigma(W_r \cdot [h_{

t-1}, x_t] + b_r)

\tilde{h_t} = \tanh(W_h \cdot [r_t * h_{t-1}, x_t] + b_h)

h_t = (1 - z_t) * h_{t-1} + z_t * \tilde{h_t}
$$

其中, z t z_t zt是更新门, r t r_t rt是重置门, h t h_t ht是隐藏状态。

总结

循环神经网络(RNN)和长短期记忆网络(LSTM)为序列数据处理提供了强大的工具,广泛应用于自然语言处理、时间序列预测等领域。LSTM通过其独特的记忆机制,解决了RNN的梯度消失问题,使其在处理长序列任务中表现优异。随着深度学习技术的不断发展,LSTM和GRU等变种模型将继续在序列数据处理中发挥重要作用。

这篇关于3. 循环神经网络(RNN)与长短期记忆网络(LSTM)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1133783

相关文章

好题——hdu2522(小数问题:求1/n的第一个循环节)

好喜欢这题,第一次做小数问题,一开始真心没思路,然后参考了网上的一些资料。 知识点***********************************无限不循环小数即无理数,不能写作两整数之比*****************************(一开始没想到,小学没学好) 此题1/n肯定是一个有限循环小数,了解这些后就能做此题了。 按照除法的机制,用一个函数表示出来就可以了,代码如下

Linux 网络编程 --- 应用层

一、自定义协议和序列化反序列化 代码: 序列化反序列化实现网络版本计算器 二、HTTP协议 1、谈两个简单的预备知识 https://www.baidu.com/ --- 域名 --- 域名解析 --- IP地址 http的端口号为80端口,https的端口号为443 url为统一资源定位符。CSDNhttps://mp.csdn.net/mp_blog/creation/editor

图神经网络模型介绍(1)

我们将图神经网络分为基于谱域的模型和基于空域的模型,并按照发展顺序详解每个类别中的重要模型。 1.1基于谱域的图神经网络         谱域上的图卷积在图学习迈向深度学习的发展历程中起到了关键的作用。本节主要介绍三个具有代表性的谱域图神经网络:谱图卷积网络、切比雪夫网络和图卷积网络。 (1)谱图卷积网络 卷积定理:函数卷积的傅里叶变换是函数傅里叶变换的乘积,即F{f*g}

ASIO网络调试助手之一:简介

多年前,写过几篇《Boost.Asio C++网络编程》的学习文章,一直没机会实践。最近项目中用到了Asio,于是抽空写了个网络调试助手。 开发环境: Win10 Qt5.12.6 + Asio(standalone) + spdlog 支持协议: UDP + TCP Client + TCP Server 独立的Asio(http://www.think-async.com)只包含了头文件,不依

poj 3181 网络流,建图。

题意: 农夫约翰为他的牛准备了F种食物和D种饮料。 每头牛都有各自喜欢的食物和饮料,而每种食物和饮料都只能分配给一头牛。 问最多能有多少头牛可以同时得到喜欢的食物和饮料。 解析: 由于要同时得到喜欢的食物和饮料,所以网络流建图的时候要把牛拆点了。 如下建图: s -> 食物 -> 牛1 -> 牛2 -> 饮料 -> t 所以分配一下点: s  =  0, 牛1= 1~

hdu 4517 floyd+记忆化搜索

题意: 有n(100)个景点,m(1000)条路,时间限制为t(300),起点s,终点e。 访问每个景点需要时间cost_i,每个景点的访问价值为value_i。 点与点之间行走需要花费的时间为g[ i ] [ j ] 。注意点间可能有多条边。 走到一个点时可以选择访问或者不访问,并且当前点的访问价值应该严格大于前一个访问的点。 现在求,从起点出发,到达终点,在时间限制内,能得到的最大

poj 3068 有流量限制的最小费用网络流

题意: m条有向边连接了n个仓库,每条边都有一定费用。 将两种危险品从0运到n-1,除了起点和终点外,危险品不能放在一起,也不能走相同的路径。 求最小的费用是多少。 解析: 抽象出一个源点s一个汇点t,源点与0相连,费用为0,容量为2。 汇点与n - 1相连,费用为0,容量为2。 每条边之间也相连,费用为每条边的费用,容量为1。 建图完毕之后,求一条流量为2的最小费用流就行了

poj 2112 网络流+二分

题意: k台挤奶机,c头牛,每台挤奶机可以挤m头牛。 现在给出每只牛到挤奶机的距离矩阵,求最小化牛的最大路程。 解析: 最大值最小化,最小值最大化,用二分来做。 先求出两点之间的最短距离。 然后二分匹配牛到挤奶机的最大路程,匹配中的判断是在这个最大路程下,是否牛的数量达到c只。 如何求牛的数量呢,用网络流来做。 从源点到牛引一条容量为1的边,然后挤奶机到汇点引一条容量为m的边

poj3750约瑟夫环,循环队列

Description 有N个小孩围成一圈,给他们从1开始依次编号,现指定从第W个开始报数,报到第S个时,该小孩出列,然后从下一个小孩开始报数,仍是报到S个出列,如此重复下去,直到所有的小孩都出列(总人数不足S个时将循环报数),求小孩出列的顺序。 Input 第一行输入小孩的人数N(N<=64) 接下来每行输入一个小孩的名字(人名不超过15个字符) 最后一行输入W,S (W < N),用

配置InfiniBand (IB) 和 RDMA over Converged Ethernet (RoCE) 网络

配置InfiniBand (IB) 和 RDMA over Converged Ethernet (RoCE) 网络 服务器端配置 在服务器端,你需要确保安装了必要的驱动程序和软件包,并且正确配置了网络接口。 安装 OFED 首先,安装 Open Fabrics Enterprise Distribution (OFED),它包含了 InfiniBand 所需的驱动程序和库。 sudo