【深度学习】常见模型-循环神经网络(Recurrent Neural Network, RNN)

循环神经网络(RNN)

概念简介

循环神经网络(Recurrent Neural Network, RNN)是一种用于处理序列数据(如时间序列、文本序列等)的神经网络模型。与传统神经网络不同,RNN 的结构具有记忆能力,可以通过隐状态(hidden state)对输入序列的上下文信息进行建模。它在自然语言处理(NLP)、语音识别、时间序列预测等领域中应用广泛。


核心特性

  1. 序列建模能力:能够捕捉输入数据的时间依赖性,适合处理具有时间或顺序关系的数据。
  2. 参数共享:在序列的每个时间步(time step)上,RNN 使用相同的权重矩阵进行计算。
  3. 循环结构:通过隐状态将过去的信息传递到当前时间步。

RNN 的基本计算过程为:

h_t = f(W_x x_t + W_h h_{t-1} + b)

其中:

  • h_t:当前时间步的隐状态。
  • x_t:当前时间步的输入。
  • W_x, W_h, b:权重矩阵和偏置。
  • f:激活函数(常用 tanh 或 ReLU)。

RNN 的局限性

  1. 梯度消失和梯度爆炸:在处理长序列时,误差梯度可能在反向传播过程中消失或爆炸,导致模型难以训练。
  2. 长时依赖问题:RNN 难以捕捉序列中相隔较远的依赖信息。

为解决这些问题,改进模型如 LSTM(长短期记忆网络)和 GRU(门控循环单元)被提出。


关键变体

  1. LSTM(Long Short-Term Memory)
    • 引入门机制(输入门、遗忘门和输出门)来选择性记忆或遗忘信息。
    • 能够更好地处理长序列依赖问题。
  2. GRU(Gated Recurrent Unit)
    • 是 LSTM 的简化版本,计算效率更高。

RNN 的结构

  1. 输入层:接收序列数据(如文本序列或时间序列)。
  2. 隐藏层:递归地将上一个时间步的状态作为当前时间步的输入。
  3. 输出层:根据任务需要输出预测结果(如分类、生成序列等)。

代码实现

以下是一个使用 Keras 实现简单 RNN 的示例:

1. 基本 RNN
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import SimpleRNN, Dense# 构建模型
model = Sequential([# RNN 层SimpleRNN(units=50, input_shape=(10, 1), activation='tanh'),# 全连接层Dense(units=1, activation='linear')  # 输出层
])# 编译模型
model.compile(optimizer='adam', loss='mse')
model.summary()

运行结果 

Model: "sequential"
_________________________________________________________________Layer (type)                Output Shape              Param #   
=================================================================simple_rnn (SimpleRNN)      (None, 50)                2600      dense (Dense)               (None, 1)                 51        =================================================================
Total params: 2651 (10.36 KB)
Trainable params: 2651 (10.36 KB)
Non-trainable params: 0 (0.00 Byte)
_________________________________________________________________

2. 使用 LSTM
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import LSTM
from tensorflow.keras.layers import Densemodel = Sequential([# LSTM 层LSTM(units=50, input_shape=(10, 1)),# 全连接层Dense(units=1, activation='linear')
])model.compile(optimizer='adam', loss='mse')
model.summary()

运行结果 

Model: "sequential"
_________________________________________________________________Layer (type)                Output Shape              Param #   
=================================================================lstm (LSTM)                 (None, 50)                10400     dense (Dense)               (None, 1)                 51        =================================================================
Total params: 10451 (40.82 KB)
Trainable params: 10451 (40.82 KB)
Non-trainable params: 0 (0.00 Byte)
_________________________________________________________________Process finished with exit code 0

3. 使用 GRU
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import GRU
from tensorflow.keras.layers import Densemodel = Sequential([# GRU 层GRU(units=50, input_shape=(10, 1)),# 全连接层Dense(units=1, activation='linear')
])model.compile(optimizer='adam', loss='mse')
model.summary()

 运行结果 

Model: "sequential"
_________________________________________________________________Layer (type)                Output Shape              Param #   
=================================================================gru (GRU)                   (None, 50)                7950      dense (Dense)               (None, 1)                 51        =================================================================
Total params: 8001 (31.25 KB)
Trainable params: 8001 (31.25 KB)
Non-trainable params: 0 (0.00 Byte)
_________________________________________________________________

应用场景

  1. 自然语言处理(NLP)

    • 机器翻译
    • 情感分析
    • 文本生成
    • 语法错误纠正
  2. 时间序列分析

    • 股票价格预测
    • 气象数据分析
    • 销售量预测
  3. 语音处理

    • 语音识别
    • 声音生成
  4. 视频分析

    • 动作识别
    • 视频字幕生成

优缺点

优点
  • 能够自然地处理序列数据。
  • 参数共享使其计算效率较高。
  • 灵活性强,适用于多种任务(分类、生成等)。
缺点
  • 对长序列的依赖建模能力有限。
  • 梯度消失和梯度爆炸问题需要额外的正则化或改进模型(如 LSTM 和 GRU)。

RNN 是深度学习中一类重要的神经网络,尤其在处理时间依赖性或顺序相关的数据方面表现出色。虽然其基本形式存在一些局限,但通过改进版本(如 LSTM 和 GRU)克服了这些问题,为解决复杂序列问题提供了强大的工具。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/893489.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Matlab总提示内存不够用,明明小于电脑内存

目录 前言情况1(改matlab最大内存限制)情况2(重启电脑)情况3 前言 在使用matlab中,有时候需要占用的内存并没有超过电脑内存依旧会报错,提示内存不够用,可以尝试下面几种方法,总有一…

数据结构(Java)——二叉树

1.概念 二叉树是一种树形数据结构,其中每个节点最多有两个子节点,通常被称为左子节点和右子节点。二叉树可以是空的(即没有节点),或者由一个根节点以及零个或多个左子树和右子树组成,其中左子树和右子树也分…

Windows电脑上记录工作待办清单的工具用哪个?

在Windows电脑上记录日常工作待办清单的工具用哪一个比较好呢?想要工作效率高,借助Windows电脑上的待办清单工具,可以帮助大家快速完成各项任务,今天给大家盘点几款工作待办清单工具。 Windows自带的便笺Stickynotes Windows自…

H266/VVC 量化编码中 JCCR 技术

色度联合编码 JCCR VVC 支持色度分量联合编码(Joint Coding of Chroma Residual,JCCR), 两个色度残差联合编码。通过 TU 的标志位 tu_joint_cbcr_residual_flag 指定该工 具,并通过 CBF 来隐式传输所选的模式。仅当 TU 的至少一个色度分量的 …

云原生时代,如何构建高效分布式监控系统

文章目录 一.监控现状二.Thanos原理分析SidecarQuerierStoreCompactor 三.Sidecar or ReceiverThanos Receiver工作原理 四.分布式运维架构 一.监控现状 Prometheus是CNCF基金会管理的一个开源监控项目,由于其良好的架构设计和完善的生态,迅速成为了监控…

DAY3,模拟终端

题目 实现一个终端的功能,注意需要带有cd功能 思路 如何 C语言执行shell命令? 使用进程替换exec函数;;使用system函数。 如何 切换工作目录? 使用chdir函数切换工作目录。 其…

一键视频转文字/音频转文字,浏览器右键提取B站视频文案,不限时长免费无限次可用

上篇文章阿虚分享了自己的「短视频」笔记方案 短视频文件小,易存储,所以阿虚建议是直接将原视频插入到笔记当中 而长视频文件大,很难像短视频一样操作。阿虚之前的建议是提取重要部分视频转长截图,或者视频转GIF 但上述方案仔细…

【C++】详细讲解继承(上)

C面向对象的三大特性:封装,继承,多态。现在我们就介绍一下继承。 1.继承的概念及定义 1.1 继承的概念 继承机制是⾯向对象程序设计使代码可以 复⽤ 的最重要的⼿段。我们前面接触到的都是 函数 层次的复用,遇到过的 类 层次的复…

AIGC专栏18——EasyAnimateV5.1版本详解 应用Qwen2 VL作为文本编码器,支持轨迹控制与相机镜头控制

AIGC专栏18——EasyAnimateV5.1版本详解 应用Qwen2 VL作为文本编码器,支持轨迹控制与相机镜头控制 学习前言相关地址汇总源码下载地址HF测试链接MS测试链接 测试效果Image to VideoText to Video轨迹控制镜头控制 EasyAnimate详解技术储备Qwen2 VLStable Diffusion …

1905电影网中国地区电影数据分析(一) - 数据采集、清洗与存储

文章目录 前言一、数据采集步骤及python库使用版本1. python库使用版本2. 数据采集步骤 二、数据采集网页分析1. 分析采集的字段和URL1.1 分析要爬取的数据字段1.2 分析每部电影的URL1.2 分析每页的URL 2. 字段元素标签定位 三、数据采集代码实现1. 爬取1905电影网分类信息2. 爬…

【25】Word:林涵-科普文章❗

目录 题目​ NO1.2.3 NO4.5.6 NO7.8 NO9.10 NO11.12 不连续选择:按住ctrl按键,不连续选择连续选择:按住shift按键,选择第一个,选择最后一个。中间部分全部被选择 题目 NO1.2.3 布局→纸张方向:横向…

P6周:VGG-16算法-Pytorch实现人脸识别

🍨 本文为🔗365天深度学习训练营中的学习记录博客🍖 原作者:K同学啊 我的环境 语言环境:Python 3.8.12 编译器:jupyter notebook 深度学习环境:torch 1.12.0cu113 一、前期准备 1.设置GPU im…

【Rust自学】14.4. 发布crate到crates.io

喜欢的话别忘了点赞、收藏加关注哦(加关注即可阅读全文),对接下来的教程有兴趣的可以关注专栏。谢谢喵!(・ω・) 14.4.1. 创建并设置crates.io账号 在发布任何 crate 之前,你需要在 crates.io并…

数据结构——实验八·学生管理系统

嗨~~欢迎来到Tubishu的博客🌸如果你也是一名在校大学生,正在寻找各种编程资源,那么你就来对地方啦🌟 Tubishu是一名计算机本科生,会不定期整理和分享学习中的优质资源,希望能为你的编程之路添砖加瓦⭐&…

IBM湖仓一体与向量数据库:访问MinIO控制台(Accessing the MinIO console)

_1、从密钥中复制S3凭证并保存 (Copy the S3 credentials from the secret and save it ) oc extract secret/ibm-lh-config-secret -n ${PROJECT_CPD_INST_OPERANDS} --to- --keysenv.properties | grep -E "LH_S3_ACCESS_KEY|LH_S3_SECRET_KEY&q…

Ragas-RAG能力评测

Ragas是一个框架,它可以帮助你从不同的方面评估你的问答(QA)流程。它为你提供了一些指标来评估你的问答系统的不同方面,具体包括: 评估检索(context)的指标:提供了上下文相关性&…

基于ESP32-IDF驱动GPIO输出控制LED

基于ESP32-IDF驱动GPIO输出控制LED 文章目录 基于ESP32-IDF驱动GPIO输出控制LED一、点亮LED3.1 LED电路3.2 配置GPIO函数gpio_config()原型和头文件3.3 设置GPIO引脚电平状态函数gpio_set_level()原型和头文件3.4 代码实现并编译烧录 一、点亮LED 3.1 LED电路 可以看到&#x…

使用ffmpeg提高mp4压缩比,减小文件体积【windows+ffmpeg+batch脚本】

文章目录 关于前情提要FFmpeg是什么使用脚本运行FFmpeg首先,下载ffmpeg.exe然后在视频相同位置写一个bat脚本运行压缩脚本 关于 个人博客,里面偶尔更新,最近比较忙。发一些总结的帖子和思考。 江湖有缘相见🤝。如果读者想和我交…

Vue3初学之Element Plus Dialog对话框,Message组件,MessageBox组件

Dialog的使用&#xff1a; 控制弹窗的显示和隐藏 <template><div><el-button click"dialogVisible true">打开弹窗</el-button><el-dialogv-model"dialogVisible"title"提示"width"30%":before-close&qu…

自然语言处理(NLP)-总览图学习

文章目录 自然语言处理&#xff08;NLP&#xff09;-总览图学习1.一张总览图的学习1. 语音学&#xff08;Phonology&#xff09;2. 形态学&#xff08;Morphology&#xff09;3. 句法学&#xff08;Syntax&#xff09;4. 语义学&#xff08;Semantics&#xff09;5. 推理&#…