RNN 单元:分析 GRU 方程与 LSTM,以及何时选择 RNN 而不是变压器

一、说明
在上一篇文章中,我们彻底介绍并检查了 LSTM 单元的各个方面。有人可能会争辩说,RNN方法已经过时了,研究它们是没有意义的。的确,最近一类称为变形金刚[5]的方法已经完全确定了自然语言处理领域。然而,深度学习从未停止让我感到惊讶,包括RNN。也许有一天,我们会看到一个巨大的卷土重来。
二、RNN VS 变压器
请记住,在以下情况下,与变形金刚相比,RNN 仍然是最好的选择:
- 序列长度太长。
- 该任务需要实时控制(机器人),否则下一个时间步长无法先验地获得。
- 没有一个巨大的数据集来利用变压器的迁移学习能力。
- 计算机视觉问题是弱监督(动作识别)。是的。混合CNN-RNN方法,以及连接主义时间分类(CTC)损失[6]仍然非常有效。
了解更多关于RNN的其他原因包括混合模型。例如,我最近遇到了一个模型[4],它产生了真实的实值多维医疗数据系列,它结合了递归神经网络和GAN。所以你永远不知道它们在哪里会派上用场。
无论如何,基本原理是要掌握的。这一次,我们将审查并构建门控循环单元(GRU),作为LSTM的自然紧凑变体。最后,我们将根据问题提供有关使用哪个单元格的多个比较见解。
此处提供了随附的笔记本代码。
三、GRU:简化 LSTM 单元
我们已经看到了LSTM如何能够预测顺序数据。最初引入 LSTM 时出现的问题是参数数量过多。让我们首先说,提出的称为 GRU 的 LSTM 变体的动机是简化参数数量和执行的操作。
在我们进入方程之前,让我们澄清一个重要的事实:LSTM和GRU细胞的原理在长期序列建模方面是常见的。首先,我们可以处理任意数量的时间步长,此外,我们试图洗去多余的信息,并合并存储在权重中的内存组件。存储器由隐藏状态向量引入网络,该向量对于每个输入序列都是唯一的,每次从\(t=0\)的零元素向量开始。
现在,让我们看看略有不同的数学!同样,我们将逐步分析它们。我在这里只是将它们作为一个参考点。为:
![]()
其中 N 是每个时间步的特征长度,而:
![]()
其中 H 是隐藏状态维度,GRU 方程如下:

四、公式1:复位门

该门与 LSTM 单元的遗忘门非常相似。生成的重置向量 r 表示将确定将从先前隐藏的时间步中删除哪些内容的信息。与遗忘门一样,我们通过逐元素乘法应用遗忘运算,由 Hadamard 乘积运算符表示。我们将重置向量计算为当前时间步的输入向量以及先前隐藏状态的线性组合。
这两种运算都是用矩阵乘法 (nn.PyTorch 中的线性)。请注意,对于第一个时间步,隐藏状态通常是用零填充的向量。这意味着没有关于过去的信息。最后,应用非线性激活(即Sigmoid)。此外,通过使用激活函数(sigmoid),结果位于(0,1)范围内,这说明了训练稳定性。

GRU 的输入和输出门在所谓的更新门中的合并就在这里发生。我们计算输入向量 x 和先前隐藏状态的另一种表示,但这次使用不同的可训练矩阵和偏差。向量 z 将表示更新向量。
五、等式3:几乎输出分量

向量 n 由两部分组成;第一个是应用于输入的线性层,类似于 LSTM 中的输入门。第二部分由复位向量 r 组成,应用于先前的隐藏状态。请注意,此处的遗忘/重置向量直接应用于隐藏状态,而不是将其应用于 LSTM 单元的细胞向量 c 的中间表示。

首先,在所描述的方程中,请注意 1 基本上是 0 的向量。由于 z 的值位于 (1,1) 范围内,因此 1-z 也属于同一范围。但是,向量 z 的元素具有互补值。很明显,元素级操作应用于 z 和 (<>-z)。
有时我们通过分析极端情况来理解事物。在极端情况下,假设 z 是 1 的向量。那是什么意思?
简单地说,这意味着输入将被忽略,因此下一个隐藏状态将是前一个状态!在相反的情况下,z 将是零元素向量,这意味着之前的隐藏状态几乎被忽略。重要的是,我使用这个词几乎是因为更新向量 n 在应用重置向量后受到先前隐藏状态的影响。尽管如此,复发几乎就消失了!
直观地,共享向量 z 平衡了先前隐藏状态和更新输入向量 n 的影响。
现在,我为什么选择使用共享的世界作为z变得深刻。以上所有内容都可以在维基百科的下图中说明:
我不是这些图表的忠实粉丝的原因是因为它们可以用标量输入x和h来解释,这至少是误导性的。
第二,不清楚可训练矩阵在哪里。基本上,当你在RNN旅程中考虑这些图表时,试着认为x和h每次使用时都会乘以权重矩阵。
就个人而言,我更喜欢深入研究方程式。幸运的是,数学从不说谎!
简而言之,复位门(r 矢量)确定如何将新输入与以前的存储器融合,而更新门定义剩余多少先前存储器。
这就是您需要知道的全部内容,以便深入了解GRU细胞的工作原理。它们的连接方式(在空间和时间上)与 LSTM 完全相同:
隐藏的输出向量将是下一个 GRU 单元/层的输入向量。
可以通过同时以反向方式处理序列并连接隐藏向量来定义双向。
六、LSTM 与 GRU 细胞:使用哪一个?
GRU单元于2014年引入,而LSTM单元于1997年引入,因此GRU的权衡尚未得到如此彻底的探索。在许多任务中,这两种架构都能产生相当的性能 [1]。通常情况下,超参数的调整可能比选择合适的单元格更重要。但是,最好将它们并排比较。
以下是基本的 5 个讨论点:
- 值得一提的是,这两种架构都是为了解决梯度消失问题而提出的。这两种方法都利用不同的方式将以前的时间步长信息与门融合,以防止梯度消失。然而,LSTM 中的梯度流来自三条不同的路径(门),因此直观地,与 GRU 相比,您会观察到梯度下降的可变性更大。
- 如果您想要更快、更紧凑的模型,GRU 可能是您的选择,因为它们的参数更少。因此,在许多应用程序中,它们可以更快地训练。在序列不太大的小规模数据集中,通常选择GRU细胞,因为数据较少,LSTM的表达能力可能不会暴露出来。从这个角度来看,GRU被认为在更简单的结构方面更有效。
- 另一方面,如果您必须处理大型数据集,LSTM 的更大表达能力可能会带来更好的结果。理论上,LSTM细胞应该记住比GRU更长的序列,并在需要建模长程相关性的任务中优于它们。
- 根据方程,可以观察到GRU单元比LSTM少一个门。准确地说,只是一个复位和更新门,而不是 LSTM 的忘记、输入和输出门。
- 基本上,GRU 单元控制信息流,而不必使用单元存储单元(在 LSTM 方程中表示为 c)。它公开整个内存(与 LSTM 不同),没有任何控制。因此,如果这是有益的,则基于手头的任务。
总而言之,答案在于数据。没有明确的赢家可以说哪一个更好。确定哪一个最适合您的问题的唯一方法是训练两者并分析它们的性能。为此,以灵活的方式构建深度学习项目非常重要。
七、结论
在本文中,我们提供了对 GRU 单元的回顾。我们观察到它的独特特征,我们甚至建立了自己的细胞,用于预测正弦序列。后来,我们比较了LSTM和GRU的侧面。这一次,我们将建议进一步阅读一篇有趣的论文,该论文在自然语言处理的背景下分析GRU和LSTMs[3],由Yin et al. 2017撰写。
我们专注于理解RNN,而不是在更花哨的应用程序中部署它们的实现层。
八、引用
[1] Greff, K., Srivastava, R. K., Koutník, J., Steunebrink, B. R., & Schmidhuber, J. (2016).LSTM:搜索空间之旅。 IEEE Transactions on neural Network and Learning Systems, 28(10), 2222–2232.
[2] Chung, J., Gulcehre, C., Cho, K., & Bengio, Y. (2014).门控递归神经网络在序列建模上的实证评估。arXiv预印本arXiv:1412.3555。
[3] Yin, W., Kann, K., Yu, M., & Schütze, H. (2017).用于自然语言处理的CNN和RNN的比较研究。arXiv预印本arXiv:1702.01923。
[4] Esteban, C., Hyland, S. L., & Rätsch, G. (2017).具有递归条件 GAN 的实值(医学)时间序列生成。arXiv预印本arXiv:1706.02633。
[5] 瓦斯瓦尼, 沙泽尔, 帕尔马, 乌什科雷特, J., 琼斯, L., 戈麦斯, A. N., ...&Polosukhin,I.(2017)。注意力就是你所需要的。神经信息处理系统进展(第5998-6008页)。尼古拉斯·阿达洛格鲁
相关文章:
RNN 单元:分析 GRU 方程与 LSTM,以及何时选择 RNN 而不是变压器
一、说明 深度学习往往感觉像是在雪山上找到自己的道路。拥有坚实的原则会让你对做出决定更有信心。我们都去过那里 在上一篇文章中,我们彻底介绍并检查了 LSTM 单元的各个方面。有人可能会争辩说,RNN方法已经过时了,研究它们是没有意义的。的…...
Linux音频了解
ALPHA I.MX6U 开发板支持音频,板上搭载了音频编解码芯片 WM8960,支持播放以及录音功能! 本章将会讨论如下主题内容。 ⚫ Linux 下 ALSA 框架概述; ⚫ alsa-lib 库介绍; ⚫ alsa-lib 库移植; ⚫ alsa-l…...
精心整理了优秀的GitHub开源项目,包含前端、后端、AI人工智能、游戏、黑客工具、网络工具、AI医疗等等,空闲的时候方便看看提高自己的视野
精心整理了优秀的GitHub开源项目,包含前端、后端、AI人工智能、游戏、黑客工具、网络工具、AI医疗等等,空闲的时候方便看看提高自己的视野。 刚开源就变成新星的 igl,不仅获得了 2k star,也能提高你开发游戏的效率,摆…...
Leetcode54螺旋矩阵
思路:用set记录走过的地方,记下走的方向,根据方向碰壁变换 class Solution:def spiralOrder(self, matrix: list[list[int]]) -> list[int]:max_rows len(matrix)max_cols len(matrix[0])block_nums max_cols * max_rowscount 1i 0j…...
element-plus 表格-方法、事件、属性的使用
记录element-plus 表格的使用。方法、事件、属性的使用。因为是vue3的方式用到了const install getCurrentInstance();才能获取表格的相关信息 没解决怎么获取选中的行的行号,采用自己记的方式实习的。 利用row-class-name"setRowClass"实现样式的简单…...
NVME Linux的查询命令-继续更新
NVME Linux的查询命令 查看NVMe设备 # nvme list 查看nvme controller 支持的一些特性 # nvme id-ctrl /dev/nvme0 查看设备smart log信息 # nvme smart-log /dev/nvme0 查看设备error 信息 # nvme error-log /dev/nvme0 设备的所有命名空间 # nvme list-ns /dev/nvmeX 检…...
pyqt5-自定义文本域1
快捷键支持: CTRL鼠标滚轮实现字体大小调整 支持复制当前行 剪切当前行 # 多行文本框 class TextEdit(QTextEdit):def __init__(self, parentNone):super().__init__(parent)self.setStyleSheet("background-color: #262626;color: #d0d0d0;")self.setFon…...
Go实现LogCollect:海量日志收集系统【上篇——LogAgent实现】
Go实现LogCollect:海量日志收集系统【上篇——LogAgent实现】 下篇:Go实现LogCollect:海量日志收集系统【下篇——开发LogTransfer】 项目架构图: 0 项目背景与方案选择 背景 当公司发展的越来越大,业务越来越复杂…...
MySQL (1)
目录 操作须知 数据类型 1 DDL 1.1 操作库 1.2 操作表 1.3 操作字段(ALTER TABLE 表名) 2 DML 3 DQL(见下章) 操作须知 ※ MySQL在windows环境不区分大小写,但在Linux环境严格区分大小写 ※ 不同的数据库可能存在同名的表,可以给表前加"数据库前缀" //例:…...
MR混合现实汽车维修情景实训教学演示
MR混合现实技术应用于汽车维修课堂中,能够赋予学生更加真实,逼真地学习环境,让学生在情景体验中不断提高自己的专业能力。 MR混合现实汽车维修情景实训教学演示具体体现在: 1. 虚拟维修指导:利用MR技术,可…...
ChatGPT在航空航天工程和太空探索中的潜在应用如何?
ChatGPT在航空航天工程和太空探索领域具有广泛的潜在应用。这些应用可以涵盖从设计和模拟到任务控制和数据分析的多个方面。本文将探讨ChatGPT在航空航天和太空探索中的各种可能应用,包括设计优化、任务规划、智能导航、卫星通信、数据分析和太空探测器运行。 ### …...
算法基础第三章
算法基础第三章 1、dfs(深度搜索)1.1、 递归回溯1.2、递归剪枝(剪枝就是判断接下来的递归都不会满足条件,直接回溯,不再继续往下无意义的递归) 2、bfs(广度搜索)2.1、最优路径(只适合于边权都相等的题) 3、…...
ElementUI浅尝辄止20:Pagination 分页
分页组件常见于管理系统的列表查询页面,数据量巨大时需要分页的操作。 当数据量过多时,使用分页分解数据。 1.如何使用? /*设置layout,表示需要显示的内容,用逗号分隔,布局元素会依次显示。prev表示上一页…...
Docker从认识到实践再到底层原理(二-1)|容器技术发展史+虚拟化容器概念和简介
前言 那么这里博主先安利一些干货满满的专栏了! 首先是博主的高质量博客的汇总,这个专栏里面的博客,都是博主最最用心写的一部分,干货满满,希望对大家有帮助。 高质量博客汇总 然后就是博主最近最花时间的一个专栏…...
什么是大模型?1750亿、700GB的GPT大模型大在哪?
文章目录 什么是大模型?1750亿、700GB的GPT大模型大在哪? 什么是大模型? 在人工智能领域,模型是指一种对数据进行处理和分析的数学结构。模型越复杂,能够处理的数据量和处理的准确性都会得到提高。 随着人工智能技术…...
剑指 Offer 10- II. 青蛙跳台阶问题
剑指 Offer 10- II. 青蛙跳台阶问题 和 剑指 Offer 10- I. 斐波那契数列 很像,改一下初始值就行了。 方法一 class Solution {int mod (int) 1e9 7;public int numWays(int n) {if(n < 1) return 1;int[] dp new int[n 1];dp[1] 1;dp[2] 2;for(int i 3…...
oracle10和11功能说明比较
Oracle 10g/11g的特点和优势 首先,Oracle 10g/11g具有以下几个特点: 1. 可靠性和稳定性:Oracle 10g采用了多种技术来确保数据的可靠性和稳定性,如ACID事务处理和数据备份与恢复机制。它还提供了高可用性的解决方案,如…...
golang-bufio 缓冲写
1. 缓冲写 在阅读这篇博客之前,请先阅读上一篇:golang-bufio 缓冲读 // buffered output// Writer implements buffering for an io.Writer object. // If an error occurs writing to a Writer, no more data will be // accepted and all subsequent…...
Windows修改电脑DNS
访问浏览器出现无法访问此页面,找不到DNS地址,则可以通过如下方式修改DNS 按下windows键R键(两个键一起按) 出现下面窗口 输入control按回车键(Enter键)就会出现下面的窗口 DNS可以填下面这些: 114.114.114.114 和 114.114.115.115 阿里DNS&a…...
Linux驱动之Linux自带的LED灯驱动
目录 一、简介 二、使能Linux自带LED驱动 三、Linux内核自带LED驱动框架 四、设备树节点编写 五、运行测试 一、简介 前面我们都是自己编写 LED 灯驱动,其实像 LED 灯这样非常基础的设备驱动, Linux 内核已经集成了。 Linux 内核的 LED 灯驱动采用 …...
深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录
ASP.NET Core 是一个跨平台的开源框架,用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录,以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...
(十)学生端搭建
本次旨在将之前的已完成的部分功能进行拼装到学生端,同时完善学生端的构建。本次工作主要包括: 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...
【Linux】C语言执行shell指令
在C语言中执行Shell指令 在C语言中,有几种方法可以执行Shell指令: 1. 使用system()函数 这是最简单的方法,包含在stdlib.h头文件中: #include <stdlib.h>int main() {system("ls -l"); // 执行ls -l命令retu…...
STM32F4基本定时器使用和原理详解
STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...
UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)
UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中,UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化…...
基于 TAPD 进行项目管理
起因 自己写了个小工具,仓库用的Github。之前在用markdown进行需求管理,现在随着功能的增加,感觉有点难以管理了,所以用TAPD这个工具进行需求、Bug管理。 操作流程 注册 TAPD,需要提供一个企业名新建一个项目&#…...
面向无人机海岸带生态系统监测的语义分割基准数据集
描述:海岸带生态系统的监测是维护生态平衡和可持续发展的重要任务。语义分割技术在遥感影像中的应用为海岸带生态系统的精准监测提供了有效手段。然而,目前该领域仍面临一个挑战,即缺乏公开的专门面向海岸带生态系统的语义分割基准数据集。受…...
在Mathematica中实现Newton-Raphson迭代的收敛时间算法(一般三次多项式)
考察一般的三次多项式,以r为参数: p[z_, r_] : z^3 (r - 1) z - r; roots[r_] : z /. Solve[p[z, r] 0, z]; 此多项式的根为: 尽管看起来这个多项式是特殊的,其实一般的三次多项式都是可以通过线性变换化为这个形式…...
day36-多路IO复用
一、基本概念 (服务器多客户端模型) 定义:单线程或单进程同时监测若干个文件描述符是否可以执行IO操作的能力 作用:应用程序通常需要处理来自多条事件流中的事件,比如我现在用的电脑,需要同时处理键盘鼠标…...
关于easyexcel动态下拉选问题处理
前些日子突然碰到一个问题,说是客户的导入文件模版想支持部分导入内容的下拉选,于是我就找了easyexcel官网寻找解决方案,并没有找到合适的方案,没办法只能自己动手并分享出来,针对Java生成Excel下拉菜单时因选项过多导…...
