深度学习知识点:RNN

文章目录

  • 1.简单介绍
  • 2.网络结构
  • 3.应对梯度消失

1.简单介绍

循环神经网络(RNN,Recurrent Neural Network)是一类用于处理序列数据的神经网络。与传统网络相比,变化不是特别大,不如CNN的变化那么大。
为什么要有循环神经网络:
传统神经网络:输入一个数据处理一个数据,互不干扰
但是有些数据是连贯性的,比如一个句子(我今天早上8点醒的),就不可能将每一个字或一些词单独处理,而是在处理这个字的同时还要考虑到与前面字的关系,因此循环神经网络就可以解决这一问题。

描述 图1: 传统神经网络

2.网络结构

RNN 不是刚性地记忆所有固定长度的序列,而是通过隐藏状态来存储之前时间步的信息。
也就是说在循环神经网络的隐藏层中,输入的数据走向有两个:输出和等待,等待是指等待第二个数据的到来并对第二个数据的隐藏特征产生影响。

描述 图2: 循环神经网络

可以看出,典型的 RNN 是有环结构(图3a)。一个典型的 RNN 网络架构包含一个输入,一个输出和一个神经网络单元 。和普通的前馈神经网络的区别在于:RNN 的神经网络单元不但与输入和输出存在联系,而且自身也存在一个循环 / 回路 / 环路 / 回环 (loop)。这种回路允许信息从网络中的一步传递到下一步。 同时,RNN 还能按时间序列展开循环 (unroll the loop) 为图2b:

描述 图3: a)等号左:整体网络;b)等号右:整体网络的分解

由上图可知,上一个时刻的网络状态将会作用于到下一个时刻的网络状态,还表明 RNN 和序列数据密切相关。同时,RNN 要求每一个时刻都有一个输入,但是不一定每个时刻都需要有输出。 最终我们需要的只是h t的结果,举个例子:拿出手写数据集中的一张照片,将其分割成784维的向量,我们只需要在最后一维向量输入进去后看整体的结果是属于0-9的哪种类别即可,最后的输出结果隐含了前面的信息,所以中间隐藏层的结果我们并不需要知道。 进一步地,公式化 RNN 的结构如下:

描述 图4: RNN结构推导式

在图中有一条单向流动的信息流是从输入单元到达隐藏单元的,与此同时另一条单向流动的信息流从隐藏单元到达输出单元。在某些情况下,RNNs 会打破后者的限制,引导信息从输出单元返回隐藏单元,这些被称为 “Back Projections”,并且隐藏层的输入还包括上一隐藏层的状态,即隐藏层内的节点可以自连也可以互连(这实际上就是 LSTM)。

循环神经网络的输入是序列数据,每个训练样本是一个时间序列,包含多个相同维度的向量。网络的参数如何通过训练确定?这里就要使用解决 RNN 训练问题的 BPTT(Back Propagation Through Time)算法。
右侧为计算时便于理解记忆而产生的结构。简单说,x 为输入层,o 为输出层,s 为隐含层,而 t 指第几次的计算;V、W、U为权重(在 RNN 中,每一层都共享参数U、V、W,降低了网络中需要学习的参数,提高学习效率。 xt 表示 t 时刻的输入, St表示 t 时刻的隐状态, Ot表示 t 时刻的输出。

  • 输入单元(input units): { x 0 , ⋅ ⋅ ⋅ , x t − 1 , x t , x t + 1 , ⋅ ⋅ ⋅ } \{x_{0}, \cdot \cdot \cdot, x_{t-1}, x_{t}, x_{t+1}, \cdot \cdot \cdot\} {x0,,xt1,xt,xt+1,}

  • 隐藏单元(hidden units): { s 0 , ⋅ ⋅ ⋅ , s t − 1 , s t , s t + 1 , ⋅ ⋅ ⋅ } \{s_{0}, \cdot \cdot \cdot, s_{t-1}, s_{t}, s_{t+1}, \cdot \cdot \cdot\} {s0,,st1,st,st+1,}

  • 输出单元(output units): { o 0 , ⋅ ⋅ ⋅ , o t − 1 , o t , o t + 1 , ⋅ ⋅ ⋅ } \{o_{0}, \cdot \cdot \cdot, o_{t-1}, o_{t}, o_{t+1}, \cdot \cdot \cdot\} {o0,,ot1,ot,ot+1,}

  • 输入层: x t x_{t} xt 表示时刻 t t t 的输入。

t 次的中间的隐含层状态为:

s t = f ( U ⋅ x t + W ⋅ s t − 1 ) s_{t} = f(U \cdot x_{t} + W \cdot s_{t-1}) st=f(Uxt+Wst1)

  • f f f 是非线性激活函数,比如 t a n h tanh tanh

输出层

o t = s o f t m a x ( V ⋅ s t ) o_{t} = softmax(V \cdot s_{t}) ot=softmax(Vst)

  • softmax 函数是归一化的指数函数,使每个元素的范围都在 0 到 1 之间 ,并且所有元素的和为 1。

反向传播
E 3 E_3 E3举例,当反向传播时,不仅会传递回隐层 s 3 s_3 s3,还会向输入层 x 3 x_3 x3进行传递,只要是反向有参数的地方就会更新。

描述

3.应对梯度消失

在进行反向传播时,循环神经网络也面临梯度消失或者梯度爆炸问题,这种问题表现在时间轴上。如果输入序列的长度很长,人们很难进行有效的参数更新。比如:我今天早上8点起床,中午吃了粘豆包,晚上开车去了电影院。我去电影院这个动作和早上中午的并没有很大关系,但是RNN在计算时是没有取舍的。

通常来说梯度爆炸更容易处理一些。梯度爆炸时我们可以设置一个梯度阈值,当梯度超过这个阈值的时候可以直接截取。

应对梯度消失问题的解决方案:

  • 合理地初始化权重值。初始化权重,使每个神经元尽可能不要取极大或极小值,以躲开梯度消失的区域。
  • 使用激活函数 ReLu,代替 sigmoid 和 tanh。
  • 使用其他结构的 RNNs,比如长短时记忆网络(LSTM)和 门控循环单元 (GRU),这是最流行的做法。

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

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

相关文章

(leetcode算法题)287. 寻找重复数(经典题目,二分解法)

如果一个题目限定了数据范围是[1, n]内的整数,那么这个题目可以思考的就是 nums[i]和 i 的关系,769. 最多能完成排序的块 这个题就使用到了子数组中最大值和 连续[0, n - 1]的关系 而对于本题来说,也可以思考[1, n] 和 nums[i] 的关系&…

获得PostgreSQL中级认证后,可以从事哪些工作岗位?

获得 PostgreSQL 中级认证后,可以获得的岗位 数据库管理类 数据库管理员(DBA):负责 PostgreSQL 数据库的日常维护、监控、备份与恢复、性能优化、安全管理等工作。确保数据库的稳定运行和数据的安全性、完整性,及时处理…

4.1、二纤单向、二纤双向、四纤双向,网络级保护

1、线性复用段保护(LMSP) 就像是给网络业务传输准备的一个 “保险”。在 SDH 和 MSTP 网络里,业务信号要通过一段一段的路(复用段)来传输,LMSP 就是为了保证这些路出问题的时候,业务还能正常走。…

【spark源码修改】hive3.1.3 spark3.5.4编译,需要修改源码,最终编译成功

【spark源码修改】hive3.1.3 spark3.5.4编译,需要修改源码,最终编译成功 1. 准备安装包与maven编译环境1.1 安装环境准备1.2 修改pom1.3 打包命令2. 编译与问题解决2.1 开始编译 失败, 缺包pentaho-aggdesigner-algorithm:pom:5.1.5-jhyde2.2 Hive Spark Remote Client 模块…

SQL-leetcode-584. 寻找用户推荐人

584. 寻找用户推荐人 表: Customer -------------------- | Column Name | Type | -------------------- | id | int | | name | varchar | | referee_id | int | -------------------- 在 SQL 中,id 是该表的主键列。 该表的每一行表示一个客户的 id、姓名以及推…

【数据库】一、数据库系统概述

文章目录 一、数据库系统概述1 基本概念2 现实世界的信息化过程3 数据库系统内部体系结构4 数据库系统外部体系结构5 数据管理方式 一、数据库系统概述 1 基本概念 数据:描述事物的符号记录 数据库(DB):长期存储在计算机内的、…

Scala语言的面向对象编程

Scala语言的面向对象编程 面向对象编程(Object-Oriented Programming,OOP)是一种编程范式,它使用“对象”来组织代码,这些对象能够包含数据(属性)以及功能(方法)。Scala…

【JVM-2.1】如何使用JMC监控工具:详细步骤与实战指南

Java Mission Control(JMC)是Oracle提供的一个高级图形化监控工具,专为Java应用程序的性能分析和故障排查设计。JMC不仅提供了实时监控功能,还支持飞行记录器(Flight Recorder)功能,能够记录JVM…

QT c++ 样式 设置 标签(QLabel)的渐变色美化

上一篇文章中描述了按钮的纯色&#xff0c;本文描述标签的渐变色美化。 1.头文件 #ifndef WIDGET_H #define WIDGET_H #include <QWidget> //#include "CustomButton.h"#include <QVBoxLayout> #include <QLinearGradient> #include <QLabel…

设计模式 行为型 观察者模式(Observer Pattern)与 常见技术框架应用 解析

观察者模式&#xff08;Observer Pattern&#xff09;是一种行为设计模式&#xff0c;它定义了一种一对多的依赖关系&#xff0c;让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时&#xff0c;会通知所有观察者对象&#xff0c;使它们能够自动更新。 一…

03_Redis基本操作

1.Redis查询命令 1.1 官网命查询命令 为了便于学习Redis,官方将其用于操作不同数据类型的命令进行了分类整理。你可以通过访问Redis官方网站上的命令参考页面https://redis.io/commands来查阅这些分组的命令,这有助于更系统地理解和使用Redis的各项功能。 1.2 HELP查询命令…

system securiry: supervisor password required

报错解释&#xff1a; 这个错误表明系统安全模块&#xff08;如SELinux或AppArmor&#xff09;需要超级用户&#xff08;通常是root&#xff09;的密码来确认一个操作。这通常发生在尝试进行某些需要高级权限的系统更改时。 解决方法&#xff1a; 如果你拥有root权限&#xff0…

Ubuntu 如何查看盘是机械盘还是固态盘

在 Ubuntu 系统中&#xff0c;您可以通过以下方法来确定硬盘是机械硬盘&#xff08;HDD&#xff09;还是固态硬盘&#xff08;SSD&#xff09;&#xff1a; 使用 lsblk 命令&#xff1a; 打开终端&#xff0c;输入以下命令&#xff1a; lsblk -d -o name,rota该命令将列出所…

探索式测试

探索式测试是一种软件测试风格&#xff0c;它强调独立测试人员的个人自由和职责&#xff0c;为了持续优化其工作的价值&#xff0c;将测试学习、测试设计、测试执行和测试结果分析作为相互支持的活动&#xff0c;在整个项目实现过程中并行地执行。 选择合适的探索式测试方法我…

uniapp 微信小程序内嵌h5实时通信

描述&#xff1a; 小程序webview内嵌的h5需要向小程序实时发送消息&#xff0c;有人说postMessage可以实现&#xff0c;所以试验一下&#xff0c;结果是实现不了实时&#xff0c;只能在特定时机后退、组件销毁、分享时小程序才能接收到信息&#xff08;小程序为了安全等考虑做了…

php 使用simplexml_load_string转换xml数据格式失败

本文介绍如何使用php函数解析xml数据为数组。 <?php$a <xml><ToUserName><![CDATA[ww8b77afac71336111]]></ToUserName><FromUserName><![CDATA[sys]]></FromUserName><CreateTime>1736328669</CreateTime><Ms…

HOW - Form 表单 label 和 wrapper 对齐场景

一、背景 在日常使用 表单 时&#xff0c;我们一般有如下布局&#xff1a; 可以通过 Form 表单提供的配置直接设置&#xff1a; <Formform{form}labelCol{{ span: 4 }}wrapperCol{{ span: 20 }}onFinish{handleSubmit}><Form.Itemlabel"输入框"name"…

深入探索AI核心模型:CNN、RNN、GAN与Transformer

在人工智能的飞速发展中&#xff0c;众多深度学习模型和算法不断涌现&#xff0c;推动了许多领域的进步。特别是在图像识别、自然语言处理、生成建模等方向&#xff0c;AI模型的应用越来越广泛。本文将介绍几种最常用的AI模型&#xff0c;包括卷积神经网络&#xff08;CNN&…

樱桃键盘win键按了没反应怎么处理

‌游戏模式‌&#xff1a;部分樱桃键盘在进入游戏模式后会禁用Win键&#xff0c;以防止在游戏过程中误触。可以通过按下Fn F9键来切换游戏模式和办公模式&#xff0c;确保键盘处于办公模式下&#xff0c;Win键即可恢复正常功能。‌ &#xff08;至此我的问题已解决&#xff0c…

解析若依 `R.java` 类——ruoyi-common-core

文章目录 1. 类的整体功能2. 代码解析2.1 成员变量和常量2.2 静态方法构造响应对象2.3 内部私有方法 restResult2.4 工具方法 3. 开发中的应用扩展3.1 接口规范化3.2 快速响应构造3.3 自定义状态码3.4 自定义扩展 R.java 是若依框架中通用的 API 响应封装类&#xff0c;主要用于…