【深度学习:Recurrent Neural Networks】循环神经网络(RNN)的简要概述
【深度学习】循环神经网络(RNN):连接过去与未来的桥梁
- 循环神经网络简介
- 什么是循环神经网络 (RNN)?
- 传统 RNN 的架构
- 循环神经网络如何工作?
- 常用激活函数
- RNN的优点和缺点
- RNN 的优点:
- RNN 的缺点:
- 循环神经网络与前馈神经网络
- 随时间反向传播 (BPTT)
- 标准 RNN 的两个问题
- RNN 应用
- 基本 Python 实现(RNN 与 Keras)
- 经常问的问题
- 结论
苹果的Siri和谷歌的语音搜索都使用递归神经网络(RNN),这是最先进的顺序数据方法。这是第一个具有内部存储器的算法,可以记住其输入,使其非常适合机器学习中涉及顺序数据的问题。它是在过去几年中导致深度学习取得惊人进步的算法之一。在本文中,我们将介绍递归神经网络的基础知识,以及最紧迫的困难以及如何解决它们。
循环神经网络简介
用于对顺序数据进行建模的深度学习方法是循环神经网络 (RNN)。在注意力模型出现之前,RNN是处理顺序数据的标准建议。深度前馈模型可能需要序列中每个元素的特定参数。它也可能无法泛化为可变长度序列。
递归神经网络对序列的每个元素使用相同的权重,从而减少了参数的数量,并允许模型泛化为不同长度的序列。由于其设计,RNN 泛化到序列数据以外的结构化数据,例如地理或图形数据。
与许多其他深度学习技术一样,循环神经网络相对较旧。它们最初是在 20 世纪 80 年代开发的,但直到最近我们才充分认识到它们的潜力。 20 世纪 90 年代长短期记忆 (LSTM) 的出现,加上计算能力的提高和我们现在必须处理的大量数据,确实将 RNN 推到了最前沿。
什么是循环神经网络 (RNN)?
神经网络在人工智能、机器学习和深度学习领域模仿人脑的功能,使计算机程序能够识别模式并解决常见问题。
RNN 是一种可用于对序列数据建模的神经网络。 RNN 由前馈网络组成,其行为与人脑相似。简而言之,循环神经网络可以以其他算法无法做到的方式预测顺序数据。
标准神经网络中的所有输入和输出都是相互独立的,但是在某些情况下,例如在预测短语的下一个单词时,前面的单词是必要的,因此必须记住前面的单词。结果,RNN 应运而生,它使用隐藏层来克服这个问题。 RNN 最重要的组成部分是隐藏状态,它记住有关序列的特定信息。
RNN 有一个内存,用于存储有关计算的所有信息。它对每个输入采用相同的设置,因为它通过在所有输入或隐藏层上执行相同的任务来产生相同的结果。
传统 RNN 的架构
RNN 是一种具有隐藏状态并允许将过去的输出用作输入的神经网络。他们通常是这样的:
RNN 架构可能会根据您要解决的问题而有所不同。从具有单个输入和输出的那些到具有多个输入和输出的那些(之间存在差异)。
下面是一些 RNN 架构的示例,可以帮助您更好地理解这一点。
- 一对一:这里只有一对。传统神经网络使用一对一架构。 一对多:一对多网络中的单个输入可能会产生大量输出。例如,在音乐制作中使用了太多的网络。
- 多对一:在这种情况下,单个输出是通过组合来自不同时间步骤的多个输入来生成的。情感分析和情绪识别使用这样的网络,其中类别标签由单词序列确定。
- 多对多:对于多对多,有多种选择。两个输入产生三个输出。机器翻译系统,例如英语到法语的翻译系统,反之亦然,使用多对多网络。
循环神经网络如何工作?
循环神经网络中的信息通过循环循环到中间隐藏层。
输入层 x 接收并处理神经网络的输入,然后将其传递到中间层。
中间层 h 可以找到多个隐藏层,每个隐藏层都有自己的激活函数、权重和偏差。如果不同隐藏层的各种参数不受前一层的影响,即神经网络中没有记忆,则可以使用循环神经网络。
不同的激活函数、权重和偏差将由循环神经网络标准化,确保每个隐藏层具有相同的特征。它不会构建大量隐藏层,而是仅创建一个隐藏层并根据需要循环多次。
常用激活函数
神经元的激活函数决定了它是应该打开还是关闭。非线性函数通常将神经元的输出转换为 0 到 1 或 -1 到 1 之间的数字。
以下是一些最常用的功能:
- Sigmoid:用公式 g ( z ) = 1 / ( 1 + e − z ) g(z) = 1/(1 + e^-z) g(z)=1/(1+e−z)来表达。
- Tanh:用公式 g ( z ) = ( e − z – e − z ) / ( e − z + e − z ) g(z) = (e^-z – e^-z)/(e^-z + e^-z) g(z)=(e−z–e−z)/(e−z+e−z) 来表达。
- Relu:用公式 g ( z ) = m a x ( 0 , z ) g(z) = max(0 , z) g(z)=max(0,z) 来表达。
RNN的优点和缺点
RNN 的优点:
有效处理顺序数据,包括文本、语音和时间序列。
与前馈神经网络不同,处理任意长度的输入。
跨时间步共享权重,提高训练效率。
RNN 的缺点:
容易出现梯度消失和爆炸问题,阻碍学习。
训练可能具有挑战性,尤其是对于长序列。
计算速度比其他神经网络架构慢。
循环神经网络与前馈神经网络
前馈神经网络只有一条信息流路线:从输入层到输出层,经过隐藏层。数据以直线路径在网络中流动,不会两次经过同一节点。
RNN 和前馈神经网络之间的信息流如下两图所示。
前馈神经网络对接下来发生的事情的预测很差,因为它们没有接收到的信息的记忆。因为前馈网络只是分析当前输入,所以它不知道时间顺序。除了受过的训练之外,它对过去发生的事情没有任何记忆。
该信息通过循环处于 RNN 循环中。在做出判断之前,它会评估当前的输入以及从过去的输入中学到的知识。另一方面,循环神经网络可能会由于内部记忆而回忆起来。它产生输出,复制它,然后将其返回到网络。
随时间反向传播 (BPTT)
当我们将反向传播算法应用于以时间序列数据作为输入的循环神经网络时,我们将其称为时间反向传播。
在普通 RNN 中,每次将单个输入发送到网络中,并获得单个输出。另一方面,反向传播使用当前输入和先前输入作为输入。这称为时间步长,一个时间步长将由同时进入 RNN 的多个时间序列数据点组成。
神经网络的输出用于计算和收集错误,一旦它在时间集上进行训练并给出输出。然后,网络将回滚,并重新计算和调整权重以解决故障。
标准 RNN 的两个问题
RNN 必须克服两个关键挑战,但为了理解它们,必须首先了解什么是梯度。
就其输入而言,梯度是偏导数。如果您不确定这意味着什么,请考虑这一点:梯度量化了当输入稍微改变时函数的输出变化的程度。
函数的斜率也称为梯度。斜率越陡,模型学习的速度越快,梯度就越高。另一方面,如果斜率为零,模型将停止学习。梯度用于测量所有权重相对于误差变化的变化。
- 梯度爆炸: 当算法无缘无故地给权重赋予荒谬的高优先级时,就会发生梯度爆炸。幸运的是,截断或压缩梯度是解决此问题的简单方法。
- 梯度消失: 当梯度值太小时,就会发生梯度消失,导致模型停止学习或花费太长时间。这是 20 世纪 90 年代的一个大问题,而且它比梯度爆炸更难解决。幸运的是,Sepp Hochreiter 和 Juergen Schmidhuber 的 LSTM 概念解决了这个问题。
RNN 应用
循环神经网络用于解决涉及序列数据的各种问题。序列数据有许多不同类型,但以下是最常见的:音频、文本、视频、生物序列。
使用 RNN 模型和序列数据集,您可以解决各种问题,包括:
- Speech recognition 语音识别
- Generation of music 音乐的产生
- Automated Translations 自动翻译
- Analysis of video action 视频动作分析
- Sequence study of the genome and DNA 基因组和DNA的序列研究
基本 Python 实现(RNN 与 Keras)
Import the required libraries 导入所需的库
import numpy as np
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers
这是一个简单的序列模型,它处理整数序列,将每个整数嵌入到 64 维向量中,然后使用 LSTM 层来处理向量序列。
model = keras.Sequential()
model.add(layers.Embedding(input_dim=1000, output_dim=64))
model.add(layers.LSTM(128))
model.add(layers.Dense(10))
model.summary()
Output: 输出:
Model: “sequential”
Layer (type) Output Shape Param #
=================================================================
embedding (Embedding) (None, None, 64) 64000
=_________________________________________________________________
lstm (LSTM) (None, 128) 98816
=_________________________________________________________________
dense (Dense) (None, 10) 1290
=================================================================
Total params: 164,106
Trainable params: 164,106
Non-trainable params: 0
经常问的问题
Q1. 什么是循环神经网络?
答:循环神经网络 (RNN) 是一种人工神经网络,旨在处理顺序数据,例如时间序列或自然语言。它们具有反馈连接,使它们能够保留先前时间步骤的信息,从而能够捕获时间依赖性。这使得 RNN 非常适合语言建模、语音识别和顺序数据分析等任务。
Q2. 递归神经网络是如何工作的?
答:循环神经网络 (RNN) 通过逐步处理顺序数据来工作。它维护一个充当存储器的隐藏状态,该状态在每个时间步使用输入数据和先前的隐藏状态进行更新。隐藏状态允许网络从过去的输入中捕获信息,使其适合顺序任务。 RNN 在所有时间步上使用相同的权重集,从而允许它们在整个序列中共享信息。然而,传统的 RNN 存在梯度消失和爆炸问题,这可能会阻碍它们捕获长期依赖关系的能力。
结论
递归神经网络是一种多功能工具,可用于多种情况。它们被用于语言建模和文本生成器的各种方法中。它们还用于语音识别。
这种类型的神经网络用于为与卷积神经网络配对时未标记的图像创建标签。这种组合的效果令人难以置信。
然而,循环神经网络有一个缺陷。他们在学习远程依赖关系方面遇到困难,这意味着他们无法理解由多个步骤分隔的数据之间的关系。
例如,当预测单词时,我们可能需要更多的上下文,而不仅仅是一个先前的单词。这称为梯度消失问题,可以使用一种称为长短期记忆网络 (LSTM) 的特殊类型的循环神经网络来解决,这是一个更大的主题,将在以后的文章中讨论。
相关文章:

【深度学习:Recurrent Neural Networks】循环神经网络(RNN)的简要概述
【深度学习】循环神经网络(RNN):连接过去与未来的桥梁 循环神经网络简介什么是循环神经网络 (RNN)?传统 RNN 的架构循环神经网络如何工作?常用激活函数RNN的优点和缺点RNN 的优点:RNN 的缺点: 循…...

HTML 基础
文章目录 01-标签语法标签结构 03-HTML骨架04-标签的关系05-注释06-标题标签07-段落标签08-换行和水平线09-文本格式化标签10-图像标签图像属性 11-路径相对路径绝对路径 12-超链接标签13-音频14-视频 01-标签语法 HTML 超文本标记语言——HyperText Markup Language。 超文本…...

大学物理II-作业1【题解】
1.【单选题】——考查高斯定理 下面关于高斯定理描述正确的是(D )。 A.高斯面上的电场强度是由高斯面内的电荷激发的 B.高斯面上的各点电场强度为零时,高斯面内一定没有电荷 C.通过高斯面的电通量为零时,高斯面上各点电场强度…...

Unity引擎有哪些优点
Unity引擎是一款跨平台的游戏引擎,拥有很多的优点,如跨平台支持、强大的工具和编辑器、灵活的脚本支持、丰富的资源库和强大的社区生态系统等,让他成为众多开发者选择的游戏开发引擎。下面我简单的介绍一下Unity引擎的优点。 跨平台支持 跨…...

【华为机试】2023年真题B卷(python)-猴子爬山
一、题目 题目描述: 一天一只顽猴想去从山脚爬到山顶,途中经过一个有个N个台阶的阶梯,但是这猴子有一个习惯: 每一次只能跳1步或跳3步,试问猴子通过这个阶梯有多少种不同的跳跃方式? 二、输入输出 输入描述…...

【Harmony OS - Stage应用模型】
基本概念 大类分为: Ability Module: 功能模块 、Library Module: 共享功能模块 编译时概念: Ability Module在编译时打包生成HAP(Harmony Ability Package),一个应用可能会有多个HAP…...

Java 8 中的 Stream 轻松遍历树形结构!
可能平常会遇到一些需求,比如构建菜单,构建树形结构,数据库一般就使用父id来表示,为了降低数据库的查询压力,我们可以使用Java8中的Stream流一次性把数据查出来,然后通过流式处理,我们一起来看看…...

Openwrt修改Dropbear ssh root密码
使用ssh工具连接路由器 输入:passwd root 输入新密码 重复新密码 设置完成 rootImmortalWrt:~# passwd root Changing password for root New password:...

js 对象
js 对象定义 <!DOCTYPE html> <html> <body><h1>JavaScript 对象创建</h1><p id"demo1"></p> <p>new</p> <p id"demo"></p><script> // 创建对象: var persona {fi…...

【SpringBoot】常用注解
RequestBody:自动将请求体中的 json 数据转换为实体类对象。 这个例子凑巧传入的json属性键名和User键名一致,可以直接使用User实体类对象,如果键名不一致则需要用一个Map 类接收参数: PutMapping("/update")public R…...

【模拟电路】软件Circuit JS
一、模拟电路软件Circuit JS 二、Circuit JS软件配置 三、Circuit JS 软件 常见的快捷键 四、Circuit JS软件基础使用 五、Circuit JS软件使用讲解 欧姆定律电阻的串联和并联电容器的充放电过程电感器和实现理想超导的概念电容阻止电压的突变,电感阻止电流的突变LR…...

从入门到精通,30天带你学会C++【第十天:猜数游戏】
目录 Everyday English 前言 实战1——猜数游戏 综合指标 游玩方法 代码实现 最终代码 试玩时间 必胜策略 具体演示 结尾 Everyday English All good things come to those who wait. 时间不负有心人 前言 今天是2024年的第一天,新一年,新…...

使用ASP.NET MiniAPI 调试未匹配请求路径
本文将介绍如何在使用ASP.NET MiniAPI时调试未匹配到的请求路径。我们将详细讨论使用MapFallback方法、中间件等工具来解决此类问题。 1. 引言 ASP.NET MiniAPI是一个轻量级的Web API框架,它可以让我们快速地构建和部署RESTful服务。然而,在开发过程中如…...

数据结构: 位图
位图 概念 用一个bit为来标识数据在不在 功能 节省空间快速查找一个数在不在一个集合中排序 去重求两个集合的交集,并集操作系统中的磁盘标记 简单实现 1.设计思想:一个bit位标识一个数据, 使用char(8bit位)集合来模拟 2.预备工作:a.计算这个数在第几个char b.是这个ch…...

Nginx 反向代理负载均衡
Nginx 反向代理负载均衡 普通的负载均衡软件,如 LVS,其实现的功能只是对请求数据包的转发、传递,从负载均衡下的节点服务器来看,接收到的请求还是来自访问负载均衡器的客户端的真实用户;而反向代理就不一样了…...
SAP FIORI 初步了解
1、对网上存在的部分资料进行收集 一套适合 SAP UI5 开发人员循序渐进的学习教程 SAP Fiori 的学习路线指南 如何根据角色批量激活SAP Fiori服务 关于S/4和Fiori,你必须知道的10件事 SAP Fiori开发教程 SAP FIORI教程 面向ABAP开发人员,SAPUI5 Fiori开发…...

chrome浏览器记录不住网站登录状态,退出后再打开就需要重新登陆的解决办法
chrome浏览器记录不住网站登录状态,退出后再打开就需要重新登陆,比较繁琐。 解决办法: 1、chrome浏览器右上角三个竖的点,然后进入“设置”(Settings),选择“隐私与安全”(Privacy…...
Linux lpd命令教程:打印服务管理技巧全解析(附实例教程和注意事项)
Linux lpd命令介绍 lpd是Linux操作系统中的一个命令,全称为line printer daemon,其主要职责是管理和控制打印任务。lpd可以接收打印任务请求并将这些请求放入打印任务队列中。当打印机空闲时,lpd会自动将任务队列中的打印请求发送给打印机以…...

利用STM32和可控硅控制220V加热电路
利用STM32和可控硅控制220V加热电路 Chapter1 利用STM32和可控硅控制220V加热电路一、错误原理图二、正确原理图 Chapter2 可控硅驱动芯片MOC3081/3061Chapter3 一个MOC3061的可控硅触发电路的分析Chapter4 可控硅的两种触发方式:移相触发和过零触发1、过零触发2、移…...

在高并发场景下,缓存“雪崩”了怎么办
1. 缓存雪崩的常见原因 缓存“雪崩”是指,因为部分缓存节点不可用,而导致整个缓存系统(甚至是整个服务系统)不可用。缓存“雪崩”主要分为以下两种情况: 因缓存不支持 rehash 而导致的缓存“雪崩”缓存支持 rehash 时…...

利用最小二乘法找圆心和半径
#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...
React 第五十五节 Router 中 useAsyncError的使用详解
前言 useAsyncError 是 React Router v6.4 引入的一个钩子,用于处理异步操作(如数据加载)中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误:捕获在 loader 或 action 中发生的异步错误替…...
【决胜公务员考试】求职OMG——见面课测验1
2025最新版!!!6.8截至答题,大家注意呀! 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:( B ) A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...
GitHub 趋势日报 (2025年06月08日)
📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...

c#开发AI模型对话
AI模型 前面已经介绍了一般AI模型本地部署,直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型,但是目前国内可能使用不多,至少实践例子很少看见。开发训练模型就不介绍了&am…...
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...

图表类系列各种样式PPT模版分享
图标图表系列PPT模版,柱状图PPT模版,线状图PPT模版,折线图PPT模版,饼状图PPT模版,雷达图PPT模版,树状图PPT模版 图表类系列各种样式PPT模版分享:图表系列PPT模板https://pan.quark.cn/s/20d40aa…...
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南 在数字化营销时代,邮件列表效度、用户参与度和网站性能等指标往往决定着创业公司的增长成败。今天,我们将深入解析邮件打开率、网站可用性、页面参与时…...

MySQL 知识小结(一)
一、my.cnf配置详解 我们知道安装MySQL有两种方式来安装咱们的MySQL数据库,分别是二进制安装编译数据库或者使用三方yum来进行安装,第三方yum的安装相对于二进制压缩包的安装更快捷,但是文件存放起来数据比较冗余,用二进制能够更好管理咱们M…...
【JavaSE】多线程基础学习笔记
多线程基础 -线程相关概念 程序(Program) 是为完成特定任务、用某种语言编写的一组指令的集合简单的说:就是我们写的代码 进程 进程是指运行中的程序,比如我们使用QQ,就启动了一个进程,操作系统就会为该进程分配内存…...