当前位置: 首页 > news >正文

【深度学习: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+ez)来表达。
  • Tanh:用公式 g ( z ) = ( e − z – e − z ) / ( e − z + e − z ) g(z) = (e^-z – e^-z)/(e^-z + e^-z) g(z)=(ezez)/(ez+ez) 来表达。
  • 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&#xf…...

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> // 创建对象&#xff1a; var persona {fi…...

【SpringBoot】常用注解

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

【模拟电路】软件Circuit JS

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

从入门到精通,30天带你学会C++【第十天:猜数游戏】

目录 Everyday English 前言 实战1——猜数游戏 综合指标 游玩方法 代码实现 最终代码 试玩时间 必胜策略 具体演示 结尾 Everyday English All good things come to those who wait. 时间不负有心人 前言 今天是2024年的第一天&#xff0c;新一年&#xff0c;新…...

使用ASP.NET MiniAPI 调试未匹配请求路径

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

数据结构: 位图

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

Nginx 反向代理负载均衡

Nginx 反向代理负载均衡 普通的负载均衡软件&#xff0c;如 LVS&#xff0c;其实现的功能只是对请求数据包的转发、传递&#xff0c;从负载均衡下的节点服务器来看&#xff0c;接收到的请求还是来自访问负载均衡器的客户端的真实用户&#xff1b;而反向代理就不一样了&#xf…...

SAP FIORI 初步了解

1、对网上存在的部分资料进行收集 一套适合 SAP UI5 开发人员循序渐进的学习教程 SAP Fiori 的学习路线指南 如何根据角色批量激活SAP Fiori服务 关于S/4和Fiori&#xff0c;你必须知道的10件事 SAP Fiori开发教程 SAP FIORI教程 面向ABAP开发人员&#xff0c;SAPUI5 Fiori开发…...

chrome浏览器记录不住网站登录状态,退出后再打开就需要重新登陆的解决办法

chrome浏览器记录不住网站登录状态&#xff0c;退出后再打开就需要重新登陆&#xff0c;比较繁琐。 解决办法&#xff1a; 1、chrome浏览器右上角三个竖的点&#xff0c;然后进入“设置”&#xff08;Settings&#xff09;&#xff0c;选择“隐私与安全”&#xff08;Privacy…...

Linux lpd命令教程:打印服务管理技巧全解析(附实例教程和注意事项)

Linux lpd命令介绍 lpd是Linux操作系统中的一个命令&#xff0c;全称为line printer daemon&#xff0c;其主要职责是管理和控制打印任务。lpd可以接收打印任务请求并将这些请求放入打印任务队列中。当打印机空闲时&#xff0c;lpd会自动将任务队列中的打印请求发送给打印机以…...

利用STM32和可控硅控制220V加热电路

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

在高并发场景下,缓存“雪崩”了怎么办

1. 缓存雪崩的常见原因 缓存“雪崩”是指&#xff0c;因为部分缓存节点不可用&#xff0c;而导致整个缓存系统&#xff08;甚至是整个服务系统&#xff09;不可用。缓存“雪崩”主要分为以下两种情况&#xff1a; 因缓存不支持 rehash 而导致的缓存“雪崩”缓存支持 rehash 时…...

golang循环变量捕获问题​​

在 Go 语言中&#xff0c;当在循环中启动协程&#xff08;goroutine&#xff09;时&#xff0c;如果在协程闭包中直接引用循环变量&#xff0c;可能会遇到一个常见的陷阱 - ​​循环变量捕获问题​​。让我详细解释一下&#xff1a; 问题背景 看这个代码片段&#xff1a; fo…...

React Native 导航系统实战(React Navigation)

导航系统实战&#xff08;React Navigation&#xff09; React Navigation 是 React Native 应用中最常用的导航库之一&#xff0c;它提供了多种导航模式&#xff0c;如堆栈导航&#xff08;Stack Navigator&#xff09;、标签导航&#xff08;Tab Navigator&#xff09;和抽屉…...

day52 ResNet18 CBAM

在深度学习的旅程中&#xff0c;我们不断探索如何提升模型的性能。今天&#xff0c;我将分享我在 ResNet18 模型中插入 CBAM&#xff08;Convolutional Block Attention Module&#xff09;模块&#xff0c;并采用分阶段微调策略的实践过程。通过这个过程&#xff0c;我不仅提升…...

【位运算】消失的两个数字(hard)

消失的两个数字&#xff08;hard&#xff09; 题⽬描述&#xff1a;解法&#xff08;位运算&#xff09;&#xff1a;Java 算法代码&#xff1a;更简便代码 题⽬链接&#xff1a;⾯试题 17.19. 消失的两个数字 题⽬描述&#xff1a; 给定⼀个数组&#xff0c;包含从 1 到 N 所有…...

MVC 数据库

MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...

聊一聊接口测试的意义有哪些?

目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开&#xff0c;首…...

C#学习第29天:表达式树(Expression Trees)

目录 什么是表达式树&#xff1f; 核心概念 1.表达式树的构建 2. 表达式树与Lambda表达式 3.解析和访问表达式树 4.动态条件查询 表达式树的优势 1.动态构建查询 2.LINQ 提供程序支持&#xff1a; 3.性能优化 4.元数据处理 5.代码转换和重写 适用场景 代码复杂性…...

比较数据迁移后MySQL数据库和OceanBase数据仓库中的表

设计一个MySQL数据库和OceanBase数据仓库的表数据比较的详细程序流程,两张表是相同的结构,都有整型主键id字段,需要每次从数据库分批取得2000条数据,用于比较,比较操作的同时可以再取2000条数据,等上一次比较完成之后,开始比较,直到比较完所有的数据。比较操作需要比较…...

Docker拉取MySQL后数据库连接失败的解决方案

在使用Docker部署MySQL时&#xff0c;拉取并启动容器后&#xff0c;有时可能会遇到数据库连接失败的问题。这种问题可能由多种原因导致&#xff0c;包括配置错误、网络设置问题、权限问题等。本文将分析可能的原因&#xff0c;并提供解决方案。 一、确认MySQL容器的运行状态 …...

Linux中《基础IO》详细介绍

目录 理解"文件"狭义理解广义理解文件操作的归类认知系统角度文件类别 回顾C文件接口打开文件写文件读文件稍作修改&#xff0c;实现简单cat命令 输出信息到显示器&#xff0c;你有哪些方法stdin & stdout & stderr打开文件的方式 系统⽂件I/O⼀种传递标志位…...