LSTM和GRU vs 循环神经网络RNN

news2024/9/25 13:17:44

1、考虑下列三种情况下,对比一下普通RNN的表现和LSTM和GRU表现:

(1)早期观测值对预测未来观测者具有非常重要的意义。

 考虑一个极端情况,其中第一个观测值包含一个校验和, 目标是在序列的末尾辨别校验和是否正确。 在这种情况下,第一个词元的影响至关重要。

RNN的表现:将不得不给这个观测值指定一个非常大的梯度, 因为它会影响所有后续的观测值。

LSTM和GRU的表现:提供某些机制能够在一个记忆元里存储重要的早期信息。

(2) 一些词元没有相关的观测值。

例如,在对网页内容进行情感分析时, 可能有一些辅助HTML代码与网页传达的情绪无关。

RNN的表现:没有机制来跳过隐状态表示中的此类词元。

LSTM和GRU的表现:有一些机制来跳过隐状态表示中的此类词元。

(3)序列的各个部分之间存在逻辑中断。

例如,书的章节之间可能会有过渡存在, 或者证券的熊市和牛市之间可能会有过渡存在。

RNN的表现:在这种情况下,没有办法来重置我们的内部状态表示。

LSTM和GRU的表现:在这种情况下,有一法来重置我们的内部状态表示。

2、LSTM和GRU能力相对占优的原理和机制

(1)GRU

支持隐状态的门控。 这意味着模型有专门的机制来确定应该何时更新隐状态, 以及应该何时重置隐状态。 这些机制是可学习的,并且能够解决了上面列出的问题。 例如,如果第一个词元非常重要, 模型将学会在第一次观测之后不更新隐状态。 同样,模型也可以学会跳过不相关的临时观测。 最后,模型还将学会在需要的时候重置隐状态。 

下面具体讨论各类门控的作用。

重置门有助于捕获序列中的短期依赖关系。

更新门有助于捕获序列中的长期依赖关系。

重置门的数学表达式:

对于给定的时间步t,假设输入是一个小批量\textbf{X}_{t}\in \mathbb{R}^{n\times d}(样本数n,输入数d),前一个时间步的隐状态是\mathbf{H}_{t-1}\in \mathbb{R}^{n\times h}(隐藏单元数h)。

那么,重置门\textbf{R}_{t}\in \mathbb{R}^{n\times h}和更新门\textbf{Z}_{t}\in \mathbb{R}^{n\times h}的计算方式如下所示:

\textbf{R}_{t}=\sigma \left ( \mathbf{X}_{t}\mathbf{W}_{xr}+\mathbf{H}_{t-1}\mathbf{W}_{hr}+\mathbf{b}_{r} \right )

\textbf{Z}_{t}=\sigma \left ( \mathbf{X}_{t}\mathbf{W}_{xz}+\mathbf{H}_{t-1}\mathbf{W}_{hz}+\mathbf{b}_{z} \right )

其中,\textbf{W}_{xr}\in \mathbb{R}^{d\times h}\textbf{W}_{xz}\in \mathbb{R}^{d\times h}\textbf{W}_{hr}\in \mathbb{R}^{h\times h}\textbf{W}_{hz}\in \mathbb{R}^{h\times h}是权重参数,\mathbf{b}_{r}\in \mathbb{R}^{1\times h}\mathbf{b}_{z}\in \mathbb{R}^{1\times h}是偏置参数。\sigma表示sigmoid函数,将输入值转换到区间(0,1)内。

将重置门\textbf{R}_{t}与常规隐状态更新机制集成,得到时间步t的候选隐状态\mathbf{\widetilde{H}}_{t}\in \mathbb{R}^{n\times h}

\mathbf{\widetilde{H}}_{t}=tanh\left ( \mathbf{X}_{t}\mathbf{W}_{xh}+\left (\textbf{R}_{t}\bigodot \mathbf{H}_{t-1} \right )\mathbf{W}_{hz}+\mathbf{b}_{h} \right )

候选隐状态结合更新门\textbf{Z}_{t},形成新的隐状态\mathbf{\widetilde{H}}_{t}\in \mathbb{R}^{n\times h}

\mathbf{H}_{t}=\mathbf{Z}_{t}\bigodot \mathbf{H}_{t-1}+\left (1-\mathbf{Z}_{t} \right )\bigodot \mathbf{\widetilde{H}}_{t}

每当更新门\textbf{Z}_{t}接近1时,模型就倾向只保留旧状态。 此时,来自\textbf{X}_{t}的信息基本上被忽略, 从而有效地跳过了依赖链条中的时间步t。 相反,当\textbf{Z}_{t}接近0时, 新的隐状态\textbf{H}_{t}就会接近候选隐状态\mathbf{\widetilde{H}}_{t}。 这些设计可以帮助我们处理循环神经网络中的梯度消失问题, 并更好地捕获时间步距离很长的序列的依赖关系。 例如,如果整个子序列的所有时间步的更新门都接近于1, 则无论序列的长度如何,在序列起始时间步的旧隐状态都将很容易保留并传递到序列结束。

(2)LSTM

a、设计灵感

       LSTM(长短期记忆网络)的设计灵感来源于传统的人工神经网络在处理序列数据时存在的问题,特别是梯度消失和梯度爆炸的问题。

       在传统的RNN(循环神经网络)中,信息在网络中的传递是通过隐状态向量进行的。然而,在处理长序列数据时,由于反向传播过程中梯度的不断乘积,会导致梯度消失或梯度爆炸的问题,使得网络无法有效地学习到长期依赖关系。

       为了解决这个问题,Hochreiter和Schmidhuber提出了LSTM网络。LSTM网络引入了“门”的概念,包括输入门、遗忘门和输出门,这些门可以控制信息在神经元之间的流动,并允许网络在需要的时候存储和更新长期记忆。

       具体来说,LSTM网络中的每个单元包含一个细胞状态,该状态可以在时间步之间传递并被修改。输入门、遗忘门和输出门分别控制细胞状态的更新、清除和读取操作。通过这三个门的巧妙设计,LSTM网络能够在处理长序列数据时有效地避免梯度消失和梯度爆炸的问题,同时保留长期依赖关系的信息。

       因此,LSTM的设计灵感主要来自于对传统RNN在处理序列数据时存在问题的深入理解和解决思路,以及对如何更好地模拟人类大脑处理序列信息机制的探索和创新。

b、数学表达式

       下面我们来具体看看输入门、遗忘门和输出门以及记忆细胞元的数学表达式:

假设有h个隐藏单元,批量大小为n,输入数为d。因此,输入为\textbf{X}_{t}\in \mathbb{R}^{n\times d},前一个时间步的隐状态为\textbf{H}_{t-1}\in \mathbb{R}^{n\times h}。时间步t的门被定义为:输入门\textbf{I}_{t}\in \mathbb{R}^{n\times h},遗忘门\textbf{F}_{t}\in \mathbb{R}^{n\times h},输出门\textbf{O}_{t}\in \mathbb{R}^{n\times h}。各种门的计算方法如下:

\textbf{I}_{t}=\sigma \left ( \mathbf{X}_{t}\mathbf{W}_{xi}+\mathbf{H}_{t-1}\mathbf{W}_{hi}+\mathbf{b}_{i} \right )

\textbf{F}_{t}=\sigma \left ( \mathbf{X}_{t}\mathbf{W}_{xf}+\mathbf{H}_{t-1}\mathbf{W}_{hf}+\mathbf{b}_{f} \right )

\textbf{O}_{t}=\sigma \left ( \mathbf{X}_{t}\mathbf{W}_{xo}+\mathbf{H}_{t-1}\mathbf{W}_{ho}+\mathbf{b}_{o} \right )

其中,\textbf{W}_{xi},\textbf{W}_{xf},\textbf{W}_{xo}\in \mathbb{R}^{d\times h}​​​​和\textbf{W}_{hi},\textbf{W}_{hf},\textbf{W}_{ho}\in \mathbb{R}^{h\times h}是权重参数,\textbf{b}_{i},\textbf{b}_{f},\textbf{b}_{o}\in \mathbb{R}^{1\times h}是偏置参数。

       候选记忆细胞元\widetilde{\textbf{C}}_{t}\in \mathbb{R}^{n\times h}的计算表达式为:

\widetilde{\textbf{C}}_{t}=tanh \left ( \mathbf{X}_{t}\mathbf{W}_{xc}+\mathbf{H}_{t-1}\mathbf{W}_{hc}+\mathbf{b}_{c} \right )

其中,\textbf{W}_{xc}\in \mathbb{R}^{d\times h}\textbf{W}_{hc}\in \mathbb{R}^{h\times h}是权重参数,\textbf{b}_{c}\in \mathbb{R}^{1\times h}是偏置参数。

       记忆元细胞\textbf{C}_{t}\in \mathbb{R}^{n\times h}的计算表达式为:

\textbf{C}_{t}=\textbf{F}_{t}\bigodot \textbf{C}_{t-1}+\textbf{I}_{t}\bigodot\widetilde{\textbf{C}}_{t}

在上述设计中,输入门\textbf{I}_{t}控制采用多少来自\widetilde{\textbf{C}}_{t}的新数据,而遗忘门\textbf{F}_{t}控制保留多少过去的记忆元\textbf{C}_{t-1}\in\mathbb{R}^{n\times h}的内容。

如果遗忘门始终为1且输入门始终为0, 则过去的记忆元\textbf{C}_{t-1}将随时间被保存并传递到当前时间步。 引入这种设计是为了缓解梯度消失问题, 并更好地捕获序列中的长距离依赖关系。

        隐状态\textbf{H}_{t}\in \mathbb{R}^{n\times h}的计算表达式为:

\textbf{H}_{t}=\textbf{O}_{t}\bigodot tanh\left (\textbf{C}_{t} \right )

       在上述设计中,只要输出门接近1,我们就能够有效地将所有记忆信息传递给预测部分, 而对于输出门接近0,我们只保留记忆元内的所有信息,而不需要更新隐状态。

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

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

相关文章

Scala安装

Scala安装使用 windows安装,配置环境变量 以下载Scala2.11为例,操作在Windows中安装Scala。 官网下载scala2.11:All Available Versions | The Scala Programming Language下载好后安装。双击msi包安装,记住安装的路径。配置环境变量(和配…

精品Nodejs实现的微信小程序的校园跑腿系统-快递收取件

《[含文档PPT源码等]精品Nodejs实现的微信小程序的校园跑腿系统[包运行成功]》该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程、包运行成功! 软件开发环境及开发工具: 操作系统:Windows 10、Windows 7、Windows 8 …

C++:list增删查改模拟实现

C:list增删查改模拟实现 前言一、list底层双链表验证、节点构造1.1 list底层数据结构1. 2 节点构造 二、迭代器封装实现(重点、难点)2.1 前置说明2.2 迭代器实现 三、list实现3.1 基本框架3.2 迭代器和const迭代器3.2 构造函数、析构函数、拷贝构造、赋值…

解决FTP传输慢的问题(ftp传输慢为什么)

在企业运营中,使用FTP进行文件或数据传输是相当普遍的做法。尽管FTP是一种传统的文件传输工具,但在实际应用中,我们可能会面临传输速度缓慢的问题,这不仅影响工作效率,还浪费时间。为了解决这一问题,我们可…

Vue中Render函数、_ref属性、_props配置的使用

Render函数 由于导入的vue为vue.runtime.xxx.js是运行版的vue.只包含:核心功能:没有模板解析器 完整版的Vue为vue.js包含:核心功能模板解析器 vue.runtime.esm.js中的esm为ES6的模块化 //导入的vue并非完整的vue,这样做的好处是…

实战:朴素贝叶斯文本分类器搭建与性能评估

💗💗💗欢迎来到我的博客,你将找到有关如何使用技术解决问题的文章,也会找到某个技术的学习路线。无论你是何种职业,我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章,也欢…

Druid源码阅读-DruidStatInterceptor实现

上次我们在druid-spring-boot-starter里面看到有一个DruidSpringAopConfiguration的配置类,然后引入了DruidStatInterceptor这样一个切面逻辑。今天我们就来看一下这个类的实现。 DruidStatInterceptor 这个类的包路径下入com.alibaba.druid.support.spring.stat。…

服务器代码上传到gitlab

服务器代码上传到gitlab 安装Git工具linux:安装Git,使用自带的源安装 yum install git生成密钥文件:使用ssh-keygen生成密钥文件.ssh/id_rsa.pub ssh-keygen 使用cat命令查看密钥,将下面的密钥复制一份 在gitlab上建立一个和…

2023年12月16日~12月22日(自适应反馈机制下基于卷积神经网络的高清晰反射波反演算法:CNN-RWI)

标题:Adaptive Feedback Convolutional-Neural-Network-Based High-Resolution Reflection-Waveform Inversion 全波形反演(FWI)是一种非线性拟合观测地震记录从而获得高清晰速度模型的最优化算法。FWI能够通过拟合浅层初至波和反射波获得较准…

浅学JWT跨域认证

Json Web令牌简称JWT 由HeaderPayloadSignature组成 Header JWT头是一个描述JWT元数据的JSON对象,alg属性表示签名使用的算法,默认为HMAC SHA256(写为HS256);typ属性表示令牌的类型,JWT令牌统一写为JWT。…

湘沪数字产业(上海)协同创新中心正式启动!

前言 随着全球化的加速和市场竞争的日益激烈,产业协作已成为推动科技创新和经济发展的重要手段。在创新驱动战略的推动下,全国形成了在科创核心城市建设科创中心的浪潮,旨在充分利用不同区域的产业优势,加强产业协作,…

BFS解决FloodFill算法相关leetcode算法题

文章目录 1.图像渲染2.岛屿数量3.岛屿的最大面积4.被围绕的区域 1.图像渲染 图像渲染 class Solution {int dx[4] {0,0,1,-1};int dy[4] {1,-1,0,0}; public:vector<vector<int>> floodFill(vector<vector<int>>& image, int sr, int sc, int…

计算机视觉技术-使用图像增广进行训练

让我们使用图像增广来训练模型。 这里&#xff0c;我们使用CIFAR-10数据集&#xff0c;而不是我们之前使用的Fashion-MNIST数据集。 这是因为Fashion-MNIST数据集中对象的位置和大小已被规范化&#xff0c;而CIFAR-10数据集中对象的颜色和大小差异更明显。 CIFAR-10数据集中的前…

【MIMO 从入门到精通】[P4]【MIMO Communications】

前言&#xff1a; Explains the main approaches to multi-input multi-output (MIMO) communications, including Beamforming, Zero Forcing, and MMSE. * Note that at the 9:19min mark, I made a slight "voice typo", where I should have said: "you nee…

AI进化太快了!Stability AI开源视频生成大模型Stable Video Diffusion

对于 Stable Diffusion&#xff0c;想必读者朋友们对此都不陌生。 自 Stability AI 公司发布 SD&#xff08;全称&#xff1a;Stable Diffusion) 以来&#xff0c;受到了很多人的喜爱。 SDXL 效果 随后技术升级&#xff0c;又发布了 SDXL&#xff0c;名字很有喜感&#xff0c…

计网04-网络传输介质

物理层&#xff08;网卡、传输介质&#xff09; 一、信号 &#xff11;、概念 进行网络通信在线缆中传输的就是信号&#xff0c;网线传输电信号&#xff0c;光纤传输光信号。 信息&#xff1a;对现实事物存在的某种认识数据&#xff1a;描述某些属性的具体的量子&#xff0…

C/C++学习笔记十三 C++中的重载运算符

1、什么是运算符重载&#xff1f; 运算符重载是 C 中的一项功能&#xff0c;使运算符&#xff08;例如 、- 等&#xff09;能够处理用户定义的数据类型。这种机制称为编译时多态性&#xff0c;并提供了为不同数据类型定制运算符行为的优点。 例如&#xff0c;我们可以重载“”运…

基于SpringBoot实现一个可扩展的事件总线

基于SpringBoot实现一个可扩展的事件总线 前言 在日常开发中&#xff0c;我们经常会用到事件总线&#xff0c;SpringBoot通过事件多播器的形式为我们提供了一个事件总线&#xff0c;但是在开发中我们经常会用到其他的实现&#xff0c;比如Guava、Disruptor的。我们将基于Spri…

迪杰斯特拉算法详解

迪杰斯特拉算法详解 首先要知道的是&#xff0c;迪杰斯特拉算法是求解单源最短路径的&#xff0c;就是在一个图中&#xff08;无向图和有向图均可&#xff09;&#xff0c;指定一个源点&#xff0c;求出来这个源点到其他各个节点的最短路径。 存图 首先&#xff0c;我需要用…