当前位置: 首页 > news >正文

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变得深刻。以上所有内容都可以在维基百科的下图中说明:

图片来源:Jeblad — 自己的作品,CC BY-SA 4.0,

        我不是这些图表的忠实粉丝的原因是因为它们可以用标量输入x和h来解释,这至少是误导性的。

        第二,不清楚可训练矩阵在哪里。基本上,当你在RNN旅程中考虑这些图表时,试着认为xh每次使用时都会乘以权重矩阵。

就个人而言,我更喜欢深入研究方程式。幸运的是,数学从不说谎!

简而言之,复位门(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 而不是变压器

一、说明 深度学习往往感觉像是在雪山上找到自己的道路。拥有坚实的原则会让你对做出决定更有信心。我们都去过那里 在上一篇文章中&#xff0c;我们彻底介绍并检查了 LSTM 单元的各个方面。有人可能会争辩说&#xff0c;RNN方法已经过时了&#xff0c;研究它们是没有意义的。的…...

Linux音频了解

ALPHA I.MX6U 开发板支持音频&#xff0c;板上搭载了音频编解码芯片 WM8960&#xff0c;支持播放以及录音功能&#xff01; 本章将会讨论如下主题内容。 ⚫ Linux 下 ALSA 框架概述&#xff1b; ⚫ alsa-lib 库介绍&#xff1b; ⚫ alsa-lib 库移植&#xff1b; ⚫ alsa-l…...

精心整理了优秀的GitHub开源项目,包含前端、后端、AI人工智能、游戏、黑客工具、网络工具、AI医疗等等,空闲的时候方便看看提高自己的视野

精心整理了优秀的GitHub开源项目&#xff0c;包含前端、后端、AI人工智能、游戏、黑客工具、网络工具、AI医疗等等&#xff0c;空闲的时候方便看看提高自己的视野。 刚开源就变成新星的 igl&#xff0c;不仅获得了 2k star&#xff0c;也能提高你开发游戏的效率&#xff0c;摆…...

Leetcode54螺旋矩阵

思路&#xff1a;用set记录走过的地方&#xff0c;记下走的方向&#xff0c;根据方向碰壁变换 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();才能获取表格的相关信息 没解决怎么获取选中的行的行号&#xff0c;采用自己记的方式实习的。 利用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

快捷键支持&#xff1a; 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&#xff1a;海量日志收集系统【上篇——LogAgent实现】 下篇&#xff1a;Go实现LogCollect&#xff1a;海量日志收集系统【下篇——开发LogTransfer】 项目架构图&#xff1a; 0 项目背景与方案选择 背景 当公司发展的越来越大&#xff0c;业务越来越复杂…...

MySQL (1)

目录 操作须知 数据类型 1 DDL 1.1 操作库 1.2 操作表 1.3 操作字段(ALTER TABLE 表名) 2 DML 3 DQL(见下章) 操作须知 ※ MySQL在windows环境不区分大小写,但在Linux环境严格区分大小写 ※ 不同的数据库可能存在同名的表,可以给表前加"数据库前缀" //例:…...

MR混合现实汽车维修情景实训教学演示

MR混合现实技术应用于汽车维修课堂中&#xff0c;能够赋予学生更加真实&#xff0c;逼真地学习环境&#xff0c;让学生在情景体验中不断提高自己的专业能力。 MR混合现实汽车维修情景实训教学演示具体体现在&#xff1a; 1. 虚拟维修指导&#xff1a;利用MR技术&#xff0c;可…...

ChatGPT在航空航天工程和太空探索中的潜在应用如何?

ChatGPT在航空航天工程和太空探索领域具有广泛的潜在应用。这些应用可以涵盖从设计和模拟到任务控制和数据分析的多个方面。本文将探讨ChatGPT在航空航天和太空探索中的各种可能应用&#xff0c;包括设计优化、任务规划、智能导航、卫星通信、数据分析和太空探测器运行。 ### …...

算法基础第三章

算法基础第三章 1、dfs(深度搜索)1.1、 递归回溯1.2、递归剪枝&#xff08;剪枝就是判断接下来的递归都不会满足条件&#xff0c;直接回溯&#xff0c;不再继续往下无意义的递归&#xff09; 2、bfs(广度搜索)2.1、最优路径&#xff08;只适合于边权都相等的题&#xff09; 3、…...

ElementUI浅尝辄止20:Pagination 分页

分页组件常见于管理系统的列表查询页面&#xff0c;数据量巨大时需要分页的操作。 当数据量过多时&#xff0c;使用分页分解数据。 1.如何使用&#xff1f; /*设置layout&#xff0c;表示需要显示的内容&#xff0c;用逗号分隔&#xff0c;布局元素会依次显示。prev表示上一页…...

Docker从认识到实践再到底层原理(二-1)|容器技术发展史+虚拟化容器概念和简介

前言 那么这里博主先安利一些干货满满的专栏了&#xff01; 首先是博主的高质量博客的汇总&#xff0c;这个专栏里面的博客&#xff0c;都是博主最最用心写的一部分&#xff0c;干货满满&#xff0c;希望对大家有帮助。 高质量博客汇总 然后就是博主最近最花时间的一个专栏…...

什么是大模型?1750亿、700GB的GPT大模型大在哪?

文章目录 什么是大模型&#xff1f;1750亿、700GB的GPT大模型大在哪&#xff1f; 什么是大模型&#xff1f; 在人工智能领域&#xff0c;模型是指一种对数据进行处理和分析的数学结构。模型越复杂&#xff0c;能够处理的数据量和处理的准确性都会得到提高。 随着人工智能技术…...

剑指 Offer 10- II. 青蛙跳台阶问题

剑指 Offer 10- II. 青蛙跳台阶问题 和 剑指 Offer 10- I. 斐波那契数列 很像&#xff0c;改一下初始值就行了。 方法一 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的特点和优势 首先&#xff0c;Oracle 10g/11g具有以下几个特点&#xff1a; 1. 可靠性和稳定性&#xff1a;Oracle 10g采用了多种技术来确保数据的可靠性和稳定性&#xff0c;如ACID事务处理和数据备份与恢复机制。它还提供了高可用性的解决方案&#xff0c;如…...

golang-bufio 缓冲写

1. 缓冲写 在阅读这篇博客之前&#xff0c;请先阅读上一篇&#xff1a;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

访问浏览器出现无法访问此页面&#xff0c;找不到DNS地址&#xff0c;则可以通过如下方式修改DNS 按下windows键R键(两个键一起按) 出现下面窗口 输入control按回车键(Enter键)就会出现下面的窗口 DNS可以填下面这些&#xff1a; 114.114.114.114 和 114.114.115.115 阿里DNS&a…...

Linux驱动之Linux自带的LED灯驱动

目录 一、简介 二、使能Linux自带LED驱动 三、Linux内核自带LED驱动框架 四、设备树节点编写 五、运行测试 一、简介 前面我们都是自己编写 LED 灯驱动&#xff0c;其实像 LED 灯这样非常基础的设备驱动&#xff0c; Linux 内核已经集成了。 Linux 内核的 LED 灯驱动采用 …...

C盘清理 “ProgramData\Microsoft\Search“ 文件夹过大

修改索引存放位置 进入控制面板->查找方式改成大图标&#xff0c; 选择索引选项 进入高级 填写新的索引位置 删除C盘索引信息 删除C:\ProgramData\Microsoft\Search\Data\Applications 下面的文件夹 如果报索引正在使用&#xff0c;参照第一步替换索引位置。关闭索引...

深入了解字符串处理算法与文本操作技巧

深入了解字符串处理算法与文本操作技巧 引言 字符串处理是计算机科学和数据处理的核心领域之一。本博客将深入介绍一些常见的字符串处理算法和文本操作技巧&#xff0c;包括字符串匹配、搜索、正则表达式、字符串操作和文本标准化等。 暴力匹配算法 什么是暴力匹配&#xf…...

Python爬虫:打开盈利大门的利器

导言&#xff1a; 随着互联网的迅速发展&#xff0c;越来越多的企业和个人开始意识到数据的重要性。而Python爬虫作为一种自动化获取互联网信息的技术&#xff0c;为人们提供了更便捷、高效的数据获取方式。本文将介绍基于Python爬虫的五种盈利模式&#xff0c;并提供实际案例…...

17.CSS发光按钮悬停特效

效果 源码 <!DOCTYPE html> <html> <head><title>CSS Modern Button</title><link rel="stylesheet" type="text/css" href="style.css"> </head> <body><a href="#" style=&quo…...

CSS中如何实现弹性盒子布局(Flexbox)的换行和排序功能?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 换行&#xff08;Flexbox Wrapping&#xff09;⭐ 示例&#xff1a;实现换行⭐ 排序&#xff08;Flexbox Ordering&#xff09;⭐ 示例&#xff1a;实现排序⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得…...

spark底层为什么选择使用scala语言开发

Spark 底层使用 Scala 开发有以下几个原因&#xff1a; 基于Scala的语言特性 集成性&#xff1a;Scala 是一种运行在 Java 虚拟机&#xff08;JVM&#xff09;上的静态类型编程语言&#xff0c;可以与 Java 代码无缝集成。由于 Spark 涉及到与大量 Java 生态系统的交互&#x…...

基于RabbitMQ的模拟消息队列之三——硬盘数据管理

文章目录 一、数据库管理1.设计数据库2.添加sqlite依赖3.配置application.properties文件4.创建接口MetaMapper5.创建MetaMapper.xml文件6.数据库操作7.封装数据库操作 二、文件管理1.消息持久化2.消息文件格式3.序列化/反序列化4.创建文件管理类MessageFileManager5.垃圾回收 …...

DHorse v1.3.2 发布,基于 k8s 的发布平台

版本说明 新增特性 构建版本、部署应用时的线程池可配置化&#xff1b; 优化特性 构建版本跳过单元测试&#xff1b; 解决问题 解决Vue应用详情页面报错的问题&#xff1b;解决Linux环境下脚本运行失败的问题&#xff1b;解决下载Maven安装文件失败的问题&#xff1b; 升…...

在vue.config.js中配置文件路径代理名

今天在公司项目中看到一个非常有趣的导入路径 crud 先是一蒙 这是个啥 突然想起一个被自己遗漏的知识点 在vue.config.js中配置路径指向 这里 我们随便找一个vue项目 在src下找到 components 目录 如果没有就创建一个 下面找到HelloWorld.vue 如果没有也是自己创建一个就好 然…...

深度学习优化算法相关文章

综述性文章 一个框架看懂优化算法之异同 SGD/AdaGrad/Adam 从 SGD 到 Adam —— 深度学习优化算法概览(一)...