【深度学习: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) 的特殊类型的循环神经网络来解决,这是一个更大的主题,将在以后的文章中讨论。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

关于Python里xlwings库对Excel表格的操作(二十五)

这篇小笔记主要记录如何【如何使用xlwings库的“Chart”类创建一个新图表】。 前面的小笔记已整理成目录,可点链接去目录寻找所需更方便。 【目录部分内容如下】【点击此处可进入目录】 (1)如何安装导入xlwings库; (2…

认识Linux指令之 “cp” 指令

01.cp指令(重要) 语法:cp [选项] 源文件或目录 目标文件或目录 功能: 复制文件或目录 说明: cp指令用于复制文件或目录,如同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录,则它会把…

极速文件搜索工具Everything结合内网穿透实现远程搜索本地文件

文章目录 前言1.软件安装完成后,打开Everything2.登录cpolar官网 设置空白数据隧道3.将空白数据隧道与本地Everything软件结合起来总结 前言 要搭建一个在线资料库,我们需要两个软件的支持,分别是cpolar(用于搭建内网穿透数据隧道…

2023-12-19 LeetCode每日一题(寻找峰值 II)

2023-12-19每日一题 一、题目编号 1901. 寻找峰值 II二、题目链接 点击跳转到题目位置 三、题目描述 一个 2D 网格中的 峰值 是指那些 严格大于 其相邻格子(上、下、左、右)的元素。 给你一个 从 0 开始编号 的 m x n 矩阵 mat ,其中任意两个相邻格子的值都 不…

开发Chrome插件获取当前页面Cookie

前言 看《重来》的时候有提到,把自己的需求做成产品,给更多人提供价值。 就是本篇的文章的由来。 我的需求场景,因为要用postman测公司开发的接口,公司接口通过cookie做鉴权, 所以我每次都要f12,然后从Ne…

go slice源码探索(切片、copy、扩容)和go编译源码分析

文章目录 概要一、数据结构二、初始化2.1、字面量2.2、下标截取2.2.1、截取原理 2.3、make关键字2.3.1、编译时 三、复制3.1、copy源码 四、扩容4.1、append源码 五:切片的GC六:切片使用注意事项七:参考 概要 Go语言的切片(slice…

算法(3)——二分查找

一、什么是二分查找 二分查找也称折半查找,是在一组有序(升序/降序)的数据中查找一个元素,它是一种效率较高的查找方法。 二、二分查找的原理 1、查找的目标数据元素必须是有序的。没有顺序的数据,二分法就失去意义。 2、数据元素通常是数值…

Linux调试工具—gdb

🎬慕斯主页:修仙—别有洞天 ♈️今日夜电波:HEART BEAT—YOASOBI 2:20━━━━━━️💟──────── 5:35 🔄 ◀️ ⏸ ▶️ ☰ …

基于grpc从零开始搭建一个准生产分布式应用(9) - Service业务逻辑层实现

开始前必读:​​基于grpc从零开始搭建一个准生产分布式应用(0) - quickStart​​ 前面章节的GRPC内基本是一个空实现,本章就实现下service业务逻辑层代码,因例子比较简单代码量也不算大,本章代码任务:1、用spring实现…

Big-endian与Little-endian详尽说明

大端与小端存储详尽说明 大端与小端存储详尽说明 大端与小端存储详尽说明一. 什么是字节序二. 什么是大端存储模式三. 什么是小端存储模式四. 大小端各自的特点五. 为什么会有大小端模式之分六. 为什么要注意大小端问题六. 大小端判定程序七. 大端小端的转换1)16位大…

华清远见作业第十八天——IO(第一天)

思维导图&#xff1a; 使用fgets统计一个文件的行号 代码&#xff1a; #include<stdio.h> #include<string.h> #include<stdlib.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> int main(int argc, const char *a…

【Java】JUC并发编程(重量锁、轻量锁、偏向锁)

JUC并发编程 预备&#xff1a; 创建一个maven工程&#xff0c;导入lombok和logback的依赖。 1、基础概念 1、进程与线程 **进程&#xff1a;**程序由指令和数据组成&#xff0c;但这些指令要运行&#xff0c;数据要读写&#xff0c;就必须将指令加载至 CPU &#xff0c;数…

CRM客户关系管理系统

系统开发环境以及版本 操作系统&#xff1a; Windows_7集成开发工具&#xff1a; Eclipse EE_4.7编译环境&#xff1a;JDK_1.8Web服务器&#xff1a;Tomcat_9.0数据库&#xff1a;MySQL_5.7.23 系统框架 spring框架springmvc框架mybatis框架Logback日志框架安全验证框架maven框…

第7课 利用FFmpeg将摄像头画面与麦克风数据合成后推送到rtmp服务器

上节课我们已经拿到了摄像头数据和麦克风数据&#xff0c;这节课我们来看一下如何将二者合并起来推送到rtmp服务器。推送音视频合成流到rtmp服务器地址的流程如下&#xff1a; 1.创建输出流 //初始化输出流上下文 avformat_alloc_output_context2(&outFormatCtx, NULL, &…

Linux学习笔记(一)

如果有自己的物理服务器请先查看这篇文章 文章目录 网卡配置Linux基础指令ls:列出目录内容cd(mkdir.rmkdir): 切换文件夹(创建,删除操作)cp:复制文件或目录mv:文件/文件夹移动cat:查看文件vi:文件查看编辑man:查看命令手册more: 查看文件内容less : 查看文件内容 ps: 显示当前进…

LangChain(0.0.340)官方文档十一:Agents之Agent Types

LangChain官网、LangChain官方文档 、langchain Github、langchain API文档、llm-universe《Agent Types》、《Examples using AgentType》 文章目录 一、快速入门1.1 概念1.2 基本示例1.2.1 配置LangSmith1.2.2 使用LCEL语法创建Agents1.2.3 使用自定义runtime执行1.2.4 使用A…

分布式IO在工业自动化中的应用

传统的自动化产线及物流系统主要是利用PLC来处理数据&#xff0c;并将这些数据保存在PC当中。但是随着互联网技术的迅速发展&#xff0c;越来越多的系统集成商利用分布式IO模块&#xff0c;实现从控制器到自动化最底层之间的IO通信。 分布式IO在工业自动化中的应用 分布式IO是用…

【Android】自定义View组件,并实现在 Compose、Kotlin、Xml 中调用

从事 Android 开发以来&#xff0c;很少有过自定义 View 的相关开发需求&#xff0c;大部分 UI 都是可以集成某些官方组件&#xff0c;在组件的基础上完成能够大大缩短开发时间。但今天我要讲的是&#xff1a;如何使用 Android 开发一个Compose、Xml都可以调用的组件&#xff1…

[蓝桥 2023] 位乘积计数

问题描述 给定两个正整数 n 和 m&#xff0c;请你计算出&#xff0c;从 1到 n 的所有整数中&#xff0c;满足每一位上的数字乘积小于等于 m 的数字的个数。 例如&#xff0c;当 n12&#xff0c;m3 时&#xff0c;满足条件的数字有 1,2,3,10,11,12 共 6 个。 输入格式 输出格…

[LLM]大模型训练(二)--DeepSpeed使用

安装DeepSpeed与集成 DeepSpeed可以通过pip安装&#xff0c;无需指定PyTorch和CUDA的版本。DeepSpeed内包含需要自定义的CUDA算子&#xff0c;将通过即时编译的方式在运行时构建。 pip install deepspeed DeepSpeed与HuggingFace Transformers直接集成。使用者可以通过在模型…