深入解析序列模型:全面阐释 RNN、LSTM 与 Seq2Seq 的秘密

探索序列建模的基础知识和应用。

简介

序列建模是许多领域的一个重要问题,包括自然语言处理 (NLP)、语音识别和语音合成、时间序列预测、音乐生成和「生物信息学」。所有这些任务的共同点是它们需要坚持。接下来的事情的预测是基于历史的。例如,在“哈桑以前踢足球,而且他踢得非常好”的序列中。只有将“哈桑”的信息推进到该特定点,才能对“他”进行预测。因此,您需要某种历史记录块来存储以前的信息并将其用于进一步的预测。传统的人工神经网络在这方面失败了,因为它们无法携带先前的信息。这就催生了一种名为“循环神经网络(RNN)”的新架构。

循环神经网络

循环神经网络是一种深度学习神经网络,它会记住输入序列,将其存储在记忆状态中,并预测未来的单词/句子。它们中有循环,允许信息持续存在。

alt

上面显示的单层 RNN 具有输入 x 和输出 y,以及隐藏单元 h。该图的右侧部分以展开的方式显示了 RNN。考虑隐藏单元h(t)的情况;它接收两个输入。一个是x(t),另一个是h(t-1)。这样,信息就得以传承。

该 RNN 架构的修改版本可用于解决不同类型的序列问题。序列问题大致可分为以下几类:

alt

多对多架构可用于视频字幕和机器翻译。一对多用于图像字幕,多对一用于情感分析任务。这些只是这些修改后的架构的一些应用。

RNN 的缺点

  1. 梯度消失/爆炸:总损失是所有时间戳损失的总和。因此,在反向传播过程中,我们对权重求偏导数。应用链式法则,最终给出了一种形式,我们可以在其中计算相邻时间戳处隐藏状态的偏导数的乘积。由于这种乘法,我们的梯度可以呈指数级减小,并且参数的更新相当小。这就是梯度消失问题。当梯度呈指数增长时,参数更新不稳定且不可预测。这就是梯度爆炸问题。这两个问题都阻碍了 RNN 的训练。
  2. 长期依赖性:RNN 可以轻松地在小间隙中传递信息,但是当最后一个单词依赖于长句子的第一个单词时,RNN 会因间隙过大而失败。

为了克服上述问题,我们可以使用梯度裁剪、跳跃连接、权重初始化技术、梯度正则化和门控架构(如 LSTM 和 GRU)。

长短期记忆

LSTM 是一种深度学习神经网络,具有隐藏状态和细胞状态两种不同的状态。它具有三种不同类型的门,即输入门、遗忘门和输出门。这些门调节进出记忆单元的信息流,使 LSTM 能够根据需要选择性地记住或忘记信息。

alt

现在我将解释 LSTM 的工作原理。一个 LSTM 单元采用输入 x(t)、隐藏状态 h(t-1)、单元状态 c(t-1)。基于 h(t-1) 和 x(t),它首先决定使用遗忘门丢弃哪些信息。然后我们决定哪些新信息应该存储在单元状态中。我们通过使用输入门和输入节点找到了这一点。然后我们通过首先忘记然后添加新信息来更新单元状态 c(t-1)。最后,我们使用更新的单元状态 c(t)、输入 x(t)、隐藏状态 h(t) 和输出门来计算输出。

LSTM 面临过度拟合、内存限制和计算复杂性。建议对 LSTM 架构进行许多小的修改。一种架构是门控循环单元 (GRU):

alt

序列到序列

Seq2Seq 是一种特殊类型的序列建模,用于机器翻译、文本生成、摘要等。其架构的设计方式使其可以接受可变数量的输入并产生可变数量的输出。它有一个编码器和解码器。编码器和解码器都有一个循环神经网络。

alt

在上图中,您可以看到编码器在每个时间戳处获取一个输入标记,然后更新其隐藏状态。编码器从给定句子中捕获的所有信息都通过编码器的最后一个隐藏状态传递到解码器。最后一个隐藏状态称为上下文向量。它充当整个输入序列的摘要。解码器 RNN 获取编码器生成的上下文向量,并逐个生成输出序列令牌。在每个时间步,解码器接收先前的输出令牌(或初始时间步期间的开始令牌)及其隐藏状态。解码器的隐藏状态根据先前的隐藏状态和先前生成的令牌进行更新。解码器逐个生成输出序列标记,直到满足特定条件,例如达到最大长度或生成序列结束标记。

Seq2Seq的缺点

  1. 上下文压缩:来自输入序列的所有信息必须压缩到上下文向量的大小。因此,损失细粒度的细节。
  2. 短期记忆限制:他们努力从遥远的时间步骤捕获和保留信息,从而难以处理长序列和捕获长期依赖性。
  3. 偏见:在培训期间,经常使用称为“teacher forcing”的技术对SEQ2SEQ模型进行训练,在该技术中,将解码器与地面真相输出tokens一起提供为每个时间步骤的输入。但是,在推理或测试期间,该模型根据其自身的预测生成输出tokens。训练和推理之间的这种差异可能导致暴露偏见,从而导致模型在推断期间表现出色。

总结

考虑到以上所有因素,循环神经网络确实在序列建模方面做出了很大的改变。为了克服它的缺点,我们提出了 LSTM 和 GRU。但最具革命性的变化是注意力机制的出现。

本文由 mdnice 多平台发布

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

面试题-6

1.精灵图和base64的区别是什么? 精灵图:把多张小图整合到一张大图上,利用定位的一些属性把小图显示在页面上,当访问页面可以减少请求,提高加载速度 base64:传输8bit字节代码的编码方式,把原本二进制形式转为64个字符的单位,最后组成字符串 …

Linux 串口应用编程

1 串口 API Linux串口通信: 在 Linux 系统中,操作设备的统一接口就是: open/ioctl/read/write 。 对于 UART ,又在 ioctl 之上封装了很多函数,主要是用来设置行规程。所以对于 UART ,编程的套路就是…

iceberg学习笔记(2)—— 与Hive集成

前置知识: 1.了解hadoop基础知识,并能够搭建hadoop集群 2.了解hive基础知识 3.Iceberg学习笔记(1)—— 基础知识-CSDN博客 可以参考: Hadoop基础入门(1):框架概述及集群环境搭建_TH…

Chrome添加扩展程序

Crx4Chrome 下载crx 打开扩展程序 如果拖动crx文件到扩展程序提示只能通过Chrome应用商店添加此项内容 修改crx文件后缀为zip并解压,再拖动到扩展程序

CXL崛起:2024启航,2025年开启新时代

在2019年,Intel主导联合多家阿里巴巴、Facebook(也就是改名后Meta)、谷歌、Dell、华为、思科、微软、HPE最初的八巨头,发布了新的互联协议CXL,全称Comupte Express Link。由于在服务器领域享有绝对领导地位,Intel一经号令&#xf…

消息中间的应用场景

1、异步处理 比如用户在电商网站下单,下单完成后会给用户推送短信或邮件,发短信和邮件的过程就可以异步完成。因为下单付款是核心业务,发邮件和短信并不属于核心功能,并且可能耗时较长,所以针对这种业务场景可以选择先…

【Qt开发流程】之程序主窗口

描述 就目前的应用程序而言,一般包含菜单栏、工具栏、状态栏、中央区域等。 qt窗口部件类图如下: 一个主窗口提供了一个构建应用程序用户界面的框架。 Qt有QMainWindow及其相关类来管理主窗口。 QMainWindow有自己的布局,可以向其中添加QTo…

测试之路,女孩子软件测试-职业规划建议,路就在脚下...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 1、测试岗是不是加…

Upwork 新手使用指南——如何快速在Upwork上接单

Upwork 这个自由职业平台不知道大家听说过没,在 Upwork,如果你是自由职业者,你可以接单;如果你是客户,你可以找人干活。但对于新手来说,怎么使用 Upwork 并且用好 Upwork 是一大难题。因此今天给大家分享 U…

Mistral 7B 比Llama 2更好的开源大模型 (四)

Mistral 7B在平衡高性能和保持大型语言模型高效的目标方面迈出了重要的一步。通过我们的工作,我们的目标是帮助社区创建更实惠、更高效、更高性能的语言模型,这些模型可以在广泛的现实世界应用程序中使用。 Mistral 7B在实践中,对于16K和W=4096的序列长度,对FlashAttentio…

Modbus转Profinet网关在污水处理系统中连接PLC和变频器Modbus通信案例

污水处理系统中使用Modbus转Profinet网关可以连接PLC和变频器,实现二者之间的通信。该网关的作用是将PLC与变频器之间的Modbus协议转换为Profinet协议,使两者可以相互沟通。在污水处理系统中,PLC控制污水处理的各个过程,而变频器则…

机器学习二元分类 二元交叉熵 二元分类例子

二元交叉熵损失函数 深度学习中的二元分类损失函数通常采用二元交叉熵(Binary Cross-Entropy)作为损失函数。 二元交叉熵损失函数的基本公式是: L(y, y_pred) -y * log(y_pred) - (1 - y) * log(1 - y_pred)其中,y是真实标签&…

【性能测试】稳定性测试要点-监控关键指标总结(超细整理)

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 1、稳定性测试的要…

接口与抽象类的区别

Java中的接口(Interface)和抽象类(Abstract Class)都是实现抽象化的关键机制,但它们在用途和功能上有着明显的区别。以下是接口和抽象类之间的主要区别: 抽象类(Abstract Class) 含…

Docker之虚悬镜像(查看、删除)

虚悬镜像: 仓库名、标签都是的镜像,俗称dangling image 查看 docker image ls -f danglingtrue删除 虚悬镜像已经失去存在价值,可以删除 docker image prune

LeetCode977.有序数组的平方(双指针法、暴力法、列表推导式)

LeetCode977.有序数组的平方 1.问题描述2.解题思路3.代码4.知识点 1.问题描述 给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。 示例 1: 输入:nums [-4,-1,0,3,10] …

要事第一:如何通过6个步骤确定项目的优先级

当收到很多项目请求并且每个请求都是重中之重时,该怎么办?从最易完成的开始?还是先解决最大的问题? 实际上两种做法都不对。确定项目优先级的更好方法是评估以下内容,而不是关注项目规模或完成时长: ● 每…

3.8-镜像的发布

如果我们想将image push到docker hub里面,那么我们的image的名字一定要是这种格式:docker hub id/imageName,例如:lvdapiaoliang/hello-docker docker hub个人账户设置地址: 在push之前要先登录: docker l…

pycharm2023 实现鼠标点击某行,调试时代码运行至相应行

按下图取消 Breakpoints Over Line Numbers即可,然后调试时点击某行,代码就会运行至某行