【机器学习】循环神经网络(RNN)介绍

2024-08-31 20:36

本文主要是介绍【机器学习】循环神经网络(RNN)介绍,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!


鑫宝Code

🌈个人主页: 鑫宝Code
🔥热门专栏: 闲话杂谈| 炫酷HTML | JavaScript基础
💫个人格言: "如无必要,勿增实体"


文章目录

  • 循环神经网络(RNN)介绍
    • 什么是RNN?
    • RNN的基本原理
      • 递归神经网络单元
      • 前向传播
      • 反向传播(BPTT)
    • RNN变体
      • LSTM
      • GRU
      • 其他RNN变体
    • RNN在序列建模中的应用
    • 小结

循环神经网络(RNN)介绍

什么是RNN?

循环神经网络(Recurrent Neural Network, RNN)是一种特殊类型的人工神经网络,专门设计用于处理序列数据,如文本、语音、视频等。与传统的前馈神经网络不同,RNN在隐藏层之间引入了循环连接,使得网络能够捕捉序列数据中的动态行为和时间依赖性。

在这里插入图片描述

上图展示了一个简单的RNN结构,其中 x t x_t xt 表示时间步 t t t 的输入, h t h_t ht 表示时间步 t t t 的隐藏状态, o t o_t ot 表示时间步 t t t 的输出。可以看到,隐藏状态 h t h_t ht 不仅取决于当前输入 x t x_t xt,还取决于前一时间步的隐藏状态 h t − 1 h_{t-1} ht1,这就形成了一个循环结构,使得RNN能够捕捉序列数据中的长期依赖关系。

RNN的基本原理

在这里插入图片描述

递归神经网络单元

RNN的核心是一个递归神经网络单元,它根据当前输入 x t x_t xt 和前一时间步的隐藏状态 h t − 1 h_{t-1} ht1 计算当前时间步的隐藏状态 h t h_t ht,计算公式如下:

h t = f ( x t , h t − 1 ) h_t = f(x_t, h_{t-1}) ht=f(xt,ht1)

其中, f f f 是一个非线性函数,通常使用 tanh 或 ReLU 作为激活函数。

前向传播

在前向传播过程中,RNN按照时间步骤依次计算每个时间步的隐藏状态和输出,具体过程如下:

  1. 初始化隐藏状态 h 0 h_0 h0,通常将其设置为全0向量。
  2. 对于每个时间步 t t t:
    • 计算当前时间步的隐藏状态: h t = f ( x t , h t − 1 ) h_t = f(x_t, h_{t-1}) ht=f(xt,ht1)
    • 计算当前时间步的输出: o t = g ( h t ) o_t = g(h_t) ot=g(ht),其中 g g g 是一个输出函数,如softmax或线性函数。

反向传播(BPTT)

RNN的训练过程使用反向传播算法,但由于引入了循环连接,需要使用一种称为"反向传播through

time"(BPTT)的特殊算法。BPTT的基本思想是:

  1. 前向传播计算每个时间步的隐藏状态和输出。
  2. 在最后一个时间步,计算输出与目标值之间的误差。
  3. 从最后一个时间步开始,反向计算每个时间步的误差梯度。
  4. 使用这些梯度更新RNN的权重。

BPTT算法的复杂度与序列长度成正比,这导致了RNN在处理长序列时容易出现梯度消失或梯度爆炸的问题。

RNN变体

为了解决简单RNN存在的梯度问题,研究人员提出了多种RNN变体,其中最著名的有LSTM(Long Short-Term Memory)和GRU(Gated Recurrent Unit)。
在这里插入图片描述

LSTM

LSTM是一种特殊的RNN,它通过精心设计的门控机制,能够更好地捕捉长期依赖关系。LSTM的核心思想是使用三个门(遗忘门、输入门和输出门)来控制信息的流动,从而避免梯度消失或爆炸的问题。

LSTM的前向传播过程可以用以下公式表示:

f t = σ ( W f ⋅ [ h t − 1 , x t ] + b f ) 遗忘门 i t = σ ( W i ⋅ [ h t − 1 , x t ] + b i ) 输入门 C ~ t = tanh ⁡ ( W C ⋅ [ h t − 1 , x t ] + b C ) 候选细胞状态 C t = f t ⊙ C t − 1 + i t ⊙ C ~ t 细胞状态 o t = σ ( W o ⋅ [ h t − 1 , x t ] + b o ) 输出门 h t = o t ⊙ tanh ⁡ ( C t ) 隐藏状态 \begin{aligned} f_t &= \sigma(W_f\cdot[h_{t-1}, x_t] + b_f) & \text{遗忘门} \\ i_t &= \sigma(W_i\cdot[h_{t-1}, x_t] + b_i) & \text{输入门} \\ \tilde{C}_t &= \tanh(W_C\cdot[h_{t-1}, x_t] + b_C) & \text{候选细胞状态} \\ C_t &= f_t \odot C_{t-1} + i_t \odot \tilde{C}_t & \text{细胞状态} \\ o_t &= \sigma(W_o\cdot[h_{t-1}, x_t] + b_o) & \text{输出门} \\ h_t &= o_t \odot \tanh(C_t) & \text{隐藏状态} \end{aligned} ftitC~tCtotht=σ(Wf[ht1,xt]+bf)=σ(Wi[ht1,xt]+bi)=tanh(WC[ht1,xt]+bC)=ftCt1+itC~t=σ(Wo[ht1,xt]+bo)=ottanh(Ct)遗忘门输入门候选细胞状态细胞状态输出门隐藏状态

其中, σ \sigma σ 表示sigmoid函数, ⊙ \odot 表示元素wise乘积, W W W b b b 分别表示权重和偏置。

GRU

GRU(Gated Recurrent Unit)是另一种流行的RNN变体,它相比LSTM结构更加简单,计算量也更小。GRU通过重置门和更新门来控制信息的流动,公式如下:

r t = σ ( W r ⋅ [ h t − 1 , x t ] ) 重置门 z t = σ ( W z ⋅ [ h t − 1 , x t ] ) 更新门 h ~ t = tanh ⁡ ( W h ⋅ [ r t ⊙ h t − 1 , x t ] ) 候选隐藏状态 h t = ( 1 − z t ) ⊙ h t − 1 + z t ⊙ h ~ t 隐藏状态 \begin{aligned} r_t &= \sigma(W_r\cdot[h_{t-1}, x_t]) & \text{重置门} \\ z_t &= \sigma(W_z\cdot[h_{t-1}, x_t]) & \text{更新门} \\ \tilde{h}_t &= \tanh(W_h\cdot[r_t \odot h_{t-1}, x_t]) & \text{候选隐藏状态} \\ h_t &= (1 - z_t) \odot h_{t-1} + z_t \odot \tilde{h}_t & \text{隐藏状态} \end{aligned} rtzth~tht=σ(Wr[ht1,xt])=σ(Wz[ht1,xt])=tanh(Wh[rtht1,xt])=(1zt)ht1+zth~t重置门更新门候选隐藏状态隐藏状态

GRU相比LSTM计算更高效,但在某些任务上的表现略差于LSTM。

其他RNN变体

除了LSTM和GRU,还有一些其他的RNN变体,如:

  • Bi-directional RNN: 能够同时捕捉序列的前向和后向信息。
  • Deep RNN: 将多层RNN堆叠在一起,以提高模型的表达能力。
  • Attention-based RNN: 引入注意力机制,使模型能够更好地关注序列中的关键部分。
  • Clockwork RNN: 通过分层循环机制,减少计算复杂度。

RNN在序列建模中的应用

由于RNN擅长处理序列数据,因此它在许多序列建模任务中发挥着重要作用,包括:

  1. 语言模型: 用于预测文本序列中的下一个单词或字符。
  2. 机器翻译: 将一种语言的句子翻译成另一种语言。
  3. 语音识别: 将语音信号转录为文本。
  4. 手写识别: 将手写字符序列转换为计算机可识别的文本。
  5. 时间序列预测: 预测未来的时间序列数据,如股票价格、天气等。

小结

循环神经网络(RNN)是一种强大的序列建模工具,它通过引入循环连接,使网络能够捕捉序列数据中的动态行为和长期依赖关系。虽然简单RNN存在梯度消失/爆炸的问题,但后来提出的LSTM、GRU等变体很好地解决了这一问题。RNN及其变体已被广泛应用于自然语言处理、语音识别、时间序列预测等领域,取得了卓越的成绩。

虽然RNN在处理序列数据方面表现出色,但它也存在一些局限性,如无法完全并行化计算、对长序列的依赖性建模能力有限等。因此,近年来出现了一些新的序列建模架构,如Transformer等,它们在某些任务上表现更加出色。但无论如何,RNN仍然是序列建模领域的基础和重要组成部分,了解RNN的原理和发展对于深入学习更先进的序列建模方法至关重要。

End

这篇关于【机器学习】循环神经网络(RNN)介绍的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

JAVA中while循环的使用与注意事项

《JAVA中while循环的使用与注意事项》:本文主要介绍while循环在编程中的应用,包括其基本结构、语句示例、适用场景以及注意事项,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录while循环1. 什么是while循环2. while循环的语句3.while循环的适用场景以及优势4. 注意

Python中的异步:async 和 await以及操作中的事件循环、回调和异常

《Python中的异步:async和await以及操作中的事件循环、回调和异常》在现代编程中,异步操作在处理I/O密集型任务时,可以显著提高程序的性能和响应速度,Python提供了asyn... 目录引言什么是异步操作?python 中的异步编程基础async 和 await 关键字asyncio 模块理论

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

性能测试介绍

性能测试是一种测试方法,旨在评估系统、应用程序或组件在现实场景中的性能表现和可靠性。它通常用于衡量系统在不同负载条件下的响应时间、吞吐量、资源利用率、稳定性和可扩展性等关键指标。 为什么要进行性能测试 通过性能测试,可以确定系统是否能够满足预期的性能要求,找出性能瓶颈和潜在的问题,并进行优化和调整。 发现性能瓶颈:性能测试可以帮助发现系统的性能瓶颈,即系统在高负载或高并发情况下可能出现的问题

水位雨量在线监测系统概述及应用介绍

在当今社会,随着科技的飞速发展,各种智能监测系统已成为保障公共安全、促进资源管理和环境保护的重要工具。其中,水位雨量在线监测系统作为自然灾害预警、水资源管理及水利工程运行的关键技术,其重要性不言而喻。 一、水位雨量在线监测系统的基本原理 水位雨量在线监测系统主要由数据采集单元、数据传输网络、数据处理中心及用户终端四大部分构成,形成了一个完整的闭环系统。 数据采集单元:这是系统的“眼睛”,

Hadoop数据压缩使用介绍

一、压缩原则 (1)运算密集型的Job,少用压缩 (2)IO密集型的Job,多用压缩 二、压缩算法比较 三、压缩位置选择 四、压缩参数配置 1)为了支持多种压缩/解压缩算法,Hadoop引入了编码/解码器 2)要在Hadoop中启用压缩,可以配置如下参数

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

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

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