循环神经网络RNN及其变体LSTM、GRU

1. 背景

RNN(Recurrent Neural Networks)

CNN利用输入中的空间几何结构信息;RNN利用输入数据的序列化特性。

2. SimpleRNN单元

        传统多层感知机网络假设所有的输入数据之间相互独立,但这对于序列化数据是不成立的。RNN单元用隐藏状态或记忆引入这种依赖,以保存当前的关键信息。任一时刻的隐藏状态值是前一时间步中隐藏状态值和当前时间步中输入值的函数 h_{t}=f(h_{t-1}, x_{t})

        在所有时间步上共享相同的权重向量(U、V、W),极大地减少了RNN网络需要学习的参数个数。其t时间步输出 y_{t}=softmax(Vh_{t})

h_{t}=tanh(Wh_{t-1}+Ux_{t})

        选择tanh作为激活函数,是因为它的二阶导数衰减到0非常缓慢,这保持了激活函数的线性域的斜度,并帮助防止梯度消失问题。

 3. 梯度消失与梯度爆炸

3.1 产生原因

         时延反向传播BPTT(Backpropagation Through Time):因为参数是所有时间步共享的,所以每个输出的梯度不只依赖当前的时间步,也依赖之前的时间步。

在正向传播中,网络在每个时间步产生预测,并将它与标签比较,来计算损失L(t);
在反向传播中,关于参数U、V和W的损失梯度在每个时间步上计算,并用梯度之和来更新参数。

        一个隐藏状态关于它前一个隐藏状态的梯度小于1,跨多个时间步反向传播后,梯度的乘积就会变得越来越小,这就导致了梯度消失问题的出现;反之,梯度比1大很多,会导致梯度爆炸。

3.2 影响

        (1)梯度消失的影响是:相距较远的时间步上的梯度对学习过程没有任何用处,因此RNN不能进行大范围依赖的学习。梯度消失问题在传统NN上也会发生,只是对于RNN网络可见性更高,因为RNN趋于拥有更多的层(时间步),而反向传播在这些层是必然发生的

        (2)梯度爆炸更容易被检测到,梯度会变得非常大以至于不再是数字,训练过程也将崩溃。

3.3 解决方案

(1)缓解梯度消失问题的方法:

1. W权重向量的适当初始化;
2. 使用ReLU替代tanh层;
3. 使用非监督方法与训练网络;
4. 使用LSTM或GRU架构。

(2)梯度爆炸问题可以通过在预定义的阈值上进行梯度裁剪来控制。

4. LSTM长短期记忆网络

        LSTM机构被设计成处理梯度消失问题以及更高效的学习长期依赖。LSTM时间步t隐藏状态的转换(4个层:3个门(i,f,o)+内部隐藏状态g),如下图所示:

遗忘门定义了前一状态 h_{t-1} 的多少部分可以通过;
输入门定义了当前输入 x_{t} 新计算出的状态的多少部分可以通过;
输出门定义了当前状态的多少部分传递给下一层;

5. GRU门控循环单元网络

        GRU是LSTM的一个变体,它保留了LSTM对梯度消失问题的抗力,但它内部结构更加简单,更新隐藏状态时需要的计算也更少,因此训练的更快。GRU单元的门如下:

更新门z定义了保留多少部分上一记忆;
重置门r定义了如何把新的输入和上一记忆结合起来;
和LSTM不同,GRU没有持久化的单元状态。

        GRU和LSTM具有同样出色的性能,GRU训练起来更快并且需要较少的数据就可以泛化
但在数据充足的情况下,LSTM卓越的表示能力可能会产生更好的结果。

6. 双向RNN

        双向RNN是彼此互相堆叠的两个RNN,它们从相反的方向读取输入。每个时间步的输出将
基于两个RNN的隐藏状态。

7. 有状态RNN

        RNN可以是有状态的,它能在训练中维护跨批次的状态信息,即为当前批次的训练数据计算
的状态值,可以用作下一批次训练数据的初始隐藏状态。

优点:更小的网络或更少的训练时间;
缺点:需要负责使用反映数据周期性的批大小来训练网络,并在每个训练期后重置状态。

        另外,因为数据呈现的顺序与有状态网络相关,在网络训练期间数据不能被移动。

1. 需要选择一个反映数据周期性的批大小,因为有状态RNN会将本批数据和下一批排列对齐,所以选择合适的批大小会让网络学得更快。
2. 需要手动控制模型、循环训练模型至要求的轮数。每次迭代训练模型一轮,状态信息跨批次保留。每轮训练后,模型的状态需要手动重设。

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

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

相关文章

六、三台主机免密登录和时钟同步

目录 1、免密登录 1.1 为什么要免密登录 1.2 免密 SSH 登录的原理

TeXworks 初次使用 debug方法

下载Texlive,打开TeXworks editor 编译排版,可能会报很多错: 1. ! Fatal Package fontspec Error: The fontspec package requires either XeTeX or (fontspec) LuaTeX. (fontspec) (fontspec) …

C++ string类(2)—成员访问、插入、删除、替换、查找和交换操作

目录 一、成员访问 1、[ ]&at 2、front( )&back( ) 二、插入元素 三、删除元素 四、替换元素 五、查找元素 1、查找第一次出现位置 2 、在指定范围内查找 六、交换字符串 七、c_str 八、rfind&substr 一、成员访问 1、[ ]&at 虽然二者功能一样&…

数据结构奇妙旅程之顺序表和链表

꒰˃͈꒵˂͈꒱ write in front ꒰˃͈꒵˂͈꒱ ʕ̯•͡˔•̯᷅ʔ大家好,我是xiaoxie.希望你看完之后,有不足之处请多多谅解,让我们一起共同进步૮₍❀ᴗ͈ . ᴗ͈ აxiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客 本文由xiaoxieʕ̯•͡˔•̯᷅ʔ 原创 CSDN …

C++-内联函数

目录 一.什么是内联函数 1.内联函数的概念 2.内联函数的定义 二.C中引入内联函数的原因 三.什么样的函数适合被声明为内联呢? 四.面试题 一.什么是内联函数 1.内联函数的概念 以inline修饰的函数叫做内联函数,编译时C编译器会在调用内联函数的地方展开…

springboot 2.4.4集成 hikari连接池多数据源实例

文章目录 前言一、配置步骤1.1 pom配置1.2 application.properties配置1.3 DataSourceContextHolder类1.4 DynamicDataSource1.5 DataSourceconfig类配置1.6 配置TargetDataSource注解1.7 切面方法1.8 dao的写法 二、测试验证2.1 启动springboot项目2.2 检查数据库连接2.3 debu…

python——进程常用功能

Python的multiprocessing模块提供了强大的并行处理能力,以下是几个功能的详细解释: join(): 在multiprocessing中,join方法用于阻塞主进程直到指定的进程终止。这对于确保所有子进程在程序结束前完成其工作是很有用的。deamon(): 在multipro…

基于51单片机的十字路口交通灯_5s黄灯倒计时闪烁

基于51单片机十字路口交通灯_5s黄灯闪烁 (程序仿真仿真视频) 仿真:proteus 7.8 程序编译器:keil 4/keil 5 编程语言:C语言 设计编号:J006 功能要求 交通灯运行状态: (1&…

硬件基础:二极管

基本定义 二极管的内部其实就是一个PN结。 把PN结封装起来,两边加上两个电极,就组成了半导体二极管。简称二极管(Diode) 二极管和PN结一样,具有单向导通性: 外观和正负极 常见芯片封装如下: 一般…

java 工具类: CompareUtils(比较对象字段值变化)

一、前言 我们在工作中,可能会在日志中记录数据的变化情况或者在公共处理的数据增加一个日志页面,记录每次修改的变化。我们可以根据CompareUtils工具类比较数据前后发生了怎样的变化, 这样我们就可以知道数据做了哪些改变. 二、条件限制 在写这个通用…

ImportError: cannot import name ‘metadata‘ from ‘importlib‘

yolov8 编译问题 ImportError: cannot import name ‘metadata’ from ‘importlib’ 将 from importlib import metadata 更改为 import importlib_metadata as metadata

【WinForm.NET开发】创建 Windows 窗体应用

本文内容 创建项目创建应用程序运行应用程序 本文演示创建一个具有基于 Windows 的用户界面 (UI) 的简单 C# 应用程序。 1、创建项目 首先,创建 C# 应用程序项目。 项目类型随附了所需的全部模板文件,无需添加任何内容。 打开 Visual Studio。在“开…

vs 安装 qt qt扩展

1 安装qt 社区版 免费 Download Qt OSS: Get Qt Online Installer 2 vs安装 qt vs tools 3 vs添加 qt添加 bin/cmake.exe 路径 3.1 扩展 -> qt versions 3.2

【设计模式-4.1】行为型——观察者模式

说明:本文介绍设计模式中行为型设计模式中的,观察者模式; 商家与顾客 观察者模式属于行为型设计模式,关注对象的行为。以商家与顾客为例,商家有商品,顾客来购买商品,如果商家商品卖完了&#…

Vue+ElementUI+C#前后端分离:监控长耗时任务的实践

想象一下,我们正在构建一个Web应用,需要实现一个数据报告的导出功能。这听起来很简单,不是吗?但是,随着深入开发,我们意识到导出过程比预期的要复杂和耗时得多。由于报告的数据量巨大,后端需要花…

PostgreSQL有意思的现象:支持不带列的表

1、前言 以前从没有试过建一张表,不带任何列。在PG中却支持这种语法。这是个什么鬼? 最近,把PG源码扒了下,简单浏览了下最近的一些merge。其中有一个fix: eeb0ebad79 ("Fix the initial sync tables with no columns.&qu…

〖大前端 - 基础入门三大核心之JS篇㊺〗- 定时器和延时器

说明:该文属于 大前端全栈架构白宝书专栏,目前阶段免费,如需要项目实战或者是体系化资源,文末名片加V!作者:不渴望力量的哈士奇(哈哥),十余年工作经验, 从事过全栈研发、产品经理等工作&#xf…

3D场景建模工具

在线工具推荐: 三维数字孪生场景工具 - GLTF/GLB在线编辑器 - Three.js AI自动纹理化开发 - YOLO 虚幻合成数据生成器 - 3D模型在线转换 - 3D模型预览图生成服务 1. 什么是3D场景建模? 3D场景建模是一种通过计算机图形学技术,将现实世…

【Matlab】如何快速入门一项新技能-以Matlab/Simulink入门为例

目录 1. 引言 2. 背景 3. 快速学习并完成开发 3.1 了解需求,知道要干什么 3.2 了解Matlab/Simulink基本功能 第一步,查看Matlab的中文网站中文网站https://www.ilovematlab.cn/resources/对Matlab/Simulink有了一个初步认识。 3.3 实现一个最简单…

PyQt6 QDialogButtonBox组合按钮控件

锋哥原创的PyQt6视频教程: 2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~共计34条视频,包括:2024版 PyQt6 Python桌面开发 视频教程(无废话版…