Transformer-XL模型简单介绍

news2024/11/15 12:18:43

目录

一、前言

二、整体概要

三、细节描述

 3.1 状态复用的块级别循环

3.2 相对位置编码

四、论文链接


一、前言

以自注意力机制为核心的 Transformer 模型是各种预训练语言模型中的主要组成部分。自注意力机制能够构建序列中各个元素之间的上下文关联程度,挖掘深层次的语义信息。然而,自注意力机制的时空复杂度为O(n^{2}),即时间和空间消耗会随着输入序列的长度呈平方级增长。这种问题的存在使得预训练语言模型处理长文本的效率较低。

传统处理长文本的方法一般是切分输入文本,其中每份的大小设置为预训练语言模型能够单次处理的最大长度(如512)。 最终将多片文本的决策结果进行综合(如对分类结果进行投票)或者拼接(如序列标注或生成任务)得到最终结果 。然而,这种方法不能很好地构建文本块之间的联系,挖掘长距离文本依赖的能力较弱。因此,更好的方法还是需要从根本上提高预训练语言模型单次能够处理的最大文本长度,从而能够更加充分地利用自注意力机制。针对这一挑战,Transformer-XL模型给出了解决方法。

二、整体概要

前面介绍到,Transformer 中处理长文本的传统策略是将文本切分成固定长度的块,并单独编码每个块,块与块之间没有信息交互。下图给出了块长度为4的一个示例。可以看到在训练阶段,Transformer分别对第一块中的序列x1 、x 2 、x 3 、x 4 与第二块中的序列x 5 、x 6 、x 7 、x 8 进行建模。而在测试阶段,由于每次处理的最大长度为4,当模型在处理序列x2 、x 3 、x 4 、x 5 时,无法构建与历史x 1 的关系。另外,由于需要以滑动窗口的方式处理整个序列,所以这种方法的效率也非常低
 

 

为了优化对长文本的建模,Transformer-XL提出了两种改进策略——状态复用的块级别循环(Segment-level Recurrence with State Reuse)和相对位置编码(Relative Positional Encodings)。接下来针对这两种改进策略进行介绍。

三、细节描述

 3.1 状态复用的块级别循环

假设两个连续的长度为n的块分别为s_{\tau} =x_{\tau,1} \cdot \cdot \cdot x_{\tau,n}s_{\tau+1} =x_{\tau+1,1} \cdot \cdot \cdot x_{\tau+1,n},第τ 块在第l 层Transformer的隐含层输出为 h_{\tau }^{[l]}\in \mathbb{R}^{n\times d}(d为隐含层维度大小)。计算第τ+1块在第l层 Transformer的隐含层输出 h_{\tau+1 }^{[l]}
 

式中,函数SG(·)表示停止梯度传输;操作符  ◦  表示沿长度维度进行拼接; W 表示全连接权重。与传统Transformer的主要不同点在 于,键k_{\tau+1 }^{[l]} 和值v_{\tau+1 }^{[l]} 依赖于扩展的上下文信息h_{\tau+1 }^{[l-1]} 以及上一个块h_{\tau }^{[l-1]} 的缓存信息
 
这种状态复用的块级别循环机制应用于语料库中每两个连续的片段,本质上是在隐含状态下产生一个片段级的循环。因此,在这种机制下,Transformer利用的有效上下文可以远远超出两个块。需要注意的是, h_{\tau+1 }^{[l]}h_{\tau}^{[l-1]}之间的循环依赖性使得存在向下一层的计算依赖,这与传统的循环神经网络(RNN)中的同层循环机制(即只存在相同层之间的循环)是不同的。因此,最大可能的依赖长度随块的长度n和层数L呈线性增长(与开头提到的平方级增长形成对比),即O(nL) ,如下图(b)中的阴影部分所示。这种机制和RNN中常用的随时间反向传播机制(Back Propagation Through Time,BPTT)类似。然而,在这里是将整个序列的隐含层状态全部缓存,而不是像BPTT机制中只会保留最后一个状态。
 

另外,这种设计除了能够处理更长的文本序列,还能加快测试速度。作者通过一系列的实验表明,Transformer-XL相比传统Transformer,能够在测试阶段达到1800倍以上的加速。

3.2 相对位置编码

虽然状态复用的块级别循环技术能够将不同块之间的信息联系起来,但在实际应用中还存在一个非常重要的问题:如何区分不同块中的相同位置(如第\tau块和第\tau +1块中的第二个位置)?采用传统Transformer中的绝对位置编码方法是不可行的,其原因可通过下式说明:

式中, v_{\tau }\in \mathbb{R}^{n\times d}表示块s_{\tau } 对应的词向量;v^{p}表示位置向量;f 表示变换函数。 可以看到对于不同的块,使用的位置向量是一样的。例如,对于第  τ 块中的x_{\tau,i} 和第 τ+1 块中的x_{\tau+1,i} 的位置信息是完全相同的,而这 显然是不合理的。
 
为了解决这个问题,Transformer-XL引入了 相对位置编码 策略。位置信息的重要性主要体现在注意力矩阵的计算上,用于构建不同词之间的关联关系。应用相对位置编码后,第i个词与第j个词的注意力值a_{i,j}为:

 

 

式中,W 和u\in \mathbb{R}^{d}表示可训练的权重; v_{x_{i}}表示词xi对应的词向量;R\in \mathbb{R}^{N\times d}表示相对位置矩阵(N表示最大编码长度),是一个不可训练的正弦编码矩阵,其第i行表示相对位置间隔为i的位置向量。接下来针对上式中的各个部分进行介绍。

基于内容的相关度(a):计算查询xi与键xj的内容之间关联信息;

内容相关的位置偏置(b):计算查询xi的内容与键xj的位置编码之间的关联信息,R_{i-j}表示两者的相对位置信息,表示取R中的第i−j行;

全局内容偏置(c):计算查询xi的位置编码与键xj的内容之间的关联信息;

全局位置偏置(d):计算查询xi与键xj的位置编码之间关联信息。

想深入学习的读者可以参考下方论文链接了解更多细节部分,同时模型代码也一并附加到文章顶部。

四、论文链接

https://arxiv.org/abs/1901.02860

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

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

相关文章

java 2023秒杀项目 day(1) 面经

java 2023杀项目 day(1) 面经 一、秒杀项目1.1 如何设计秒杀系统1.2 数据库 二、业务2.1 登录2.2.1 密码加密 2.2.2 密码参数校验2.2.3 分布式session2.2.3.1 解决方案 2.2.4 参数解析器 2.3 异常处理2.3.1 ControllerAdvicerExceptionHandler 2.4 秒杀2.4.1 逻辑2.4.1 秒杀前判…

图像处理——以支票识别为例

用到环境 1、pycharm community edition 2022.3.2 2、Python 3.10 后续应该会在资源上传项目,需要的话可以私信我。 流程 图1 扩展实验“金额识别”流程图 正文 导入 cv2、pytesseract、re 和 locale 模块。 使用 cv2.imread() 函数加载名为 cheque.jpg 的支票图像…

ROS:结构

目录 前言一、设计者二、维护者三、系统架构四、ROS自身结构 前言 从不同的角度,对ROS架构的描述也是不同的,一般我们可以从设计者、维护者、系统结构与自身结构4个角度来描述ROS结构: 一、设计者 ROS设计者将ROS描述为“ROS Plumbing Tools Capab…

数仓工具Hive 概述

Hive Hive简介Hive架构HiveSQL语法不同之处建表语句查询语句 Hive查看执行计划Hive文件格式 Hive简介 Hive是由Facebook开源,基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张表,并提供类SQL查询功能。 通过Hive可以将mapred…

数字IC前端学习笔记:仲裁轮询(三)

相关文章 数字IC前端学习笔记:LSFR(线性反馈移位寄存器) 数字IC前端学习笔记:跨时钟域信号同步 数字IC前端学习笔记:信号同步和边沿检测 数字IC前端学习笔记:锁存器Latch的综合 数字IC前端学习笔记&am…

mitmproxy抓包原理

文章目录 mitmproxy原理详解1 mitmproxy 基本原理2 作为中间代理获取HTTP请求信息2.1 应对显式HTTP请求2.2 应对隐式HTTP请求 3 作为中间代理获取HTTPS请求信息3.1 显式HTTPS请求1) 获取远程主机名2) 处理主题备用名称SAN3) 处理服务器名称指示SNI4) 显式HTTPS请求信息获取整个…

基于深度学习的高精度烟雾检测识别系统(PyTorch+Pyside6+YOLOv5模型)

摘要:基于深度学习的高精度烟雾检测识别系统可用于日常生活中或野外来检测与定位烟雾目标,利用深度学习算法可实现图片、视频、摄像头等方式的烟雾目标检测识别,另外支持结果可视化与图片或视频检测结果的导出。本系统采用YOLOv5目标检测模型…

为什么数据库字段建议设置为NOT NULL?

目录 一、性能 二、开发的友好性 三、聚合函数不准确 四、null与其它值计算 五、distinct、group by、order by的问题 六、索引问题 七、其它问题 一、性能 如果查询中包含可为null的列,对MYSQL来说更难优化,因为可为null的列使得索引、索引统计…

NUCLEO-F411RE RT-Thread 体验 (9) - GCC环境 PWM的驱动移植以及简单使用

NUCLEO-F411RE RT-Thread 体验 (9) - GCC环境 PWM的驱动移植以及简单使用 驱动移植 驱动位于drv_pwm.c文件中,components层代码位于rt_drv_pwm.c中。 修改Makefile文件 修改配置文件rtconfig.h LED2链接PA5,而TIM2_CHANNEL1可从PA5输出PWM&#xff0…

ubuntu命令

查看当前用户 whoami 进入root权限 sudo su 修改用户名密码 sudo passwd username #修改用户密码 //username是用户设置用户名,记得替换 sudo passwd root #修改root密码 https://blog.csdn.net/m0_54647521/article/details/127521032 重启…

图形编辑器开发:以光标位置缩放画布

大家好,我是前端西瓜哥。 画布缩放是图形设计工具中很重要的基础能力。 通过它,我们可以像举着一台摄影机,在图形所在的世界到处游逛,透过镜头,可以只看自己想看的图形;可以拉近摄影机,看到图…

SpringBoot 如何使用 @ControllerAdvice 注解进行全局异常处理

SpringBoot 如何使用 ControllerAdvice 注解进行全局异常处理 在 Web 开发中,异常处理是非常重要的一环。在 SpringBoot 框架中,我们通常使用 ExceptionHandler 注解来处理 Controller 层的异常。但是,如果想要处理全局异常,我们…

【MySql】MySql事务常见操作

文章目录 准备工作事务常见操作方式总结 准备工作 将mysql的默认隔离级别设置成读未提交 set global transaction isolation level read uncommitted;注意:设置完毕之后,需要重启终端,进行查看 select tx_isolation 创建测试表 mysql>…

HTML5 的新特性

html基础知识html基础知识_上半场结束,中场已休息,下半场ing的博客-CSDN博客html5的新特性HTML5 的新特性_上半场结束,中场已休息,下半场ing的博客-CSDN博客 目录 1.0 HTML5 的新特性 1.1 HTML5 新增的语义化标签 1.2 HTML5 新增的…

LabVIEW何得知是谁在连接远程前面板

LabVIEW何得知是谁在连接远程前面板 想要知道连接远程前面板的用户的身份。如何来得知用户的身份和他们连接远程前面板的时间? 解答: 可以使用Remote Panel: Connections To Clients属性或者Remote Panel Client Connections方法来得知连接远程面板用户的身份。Re…

TypeScript ~ TS 掌握编译文件配置项 ⑤

作者 : SYFStrive 博客首页 : HomePage 📜: TypeScript ~ TS 📌:个人社区(欢迎大佬们加入) 👉:社区链接🔗 📌:觉得文章不错可以点点关注 &…

【2023,学点儿新Java-20】流程控制语句关键字及其介绍:while、do、break、continue、return

前情回顾: 【2023,学点儿新Java-19】Java特殊空类型关键字 | Java流程控制语句关键字 | switch-case 选择结构的执行过程&注意点 | 详解:for循环的普通和增强版本【2023,学点儿新Java-18】Java关键字汇总说明 |附&#xff1a…

chatgpt赋能python:Python新手常见的报错提示及解决方法

Python新手常见的报错提示及解决方法 Python是一种非常流行的编程语言。对于新手来说,Python在学习过程中可能会遇到许多报错提示,这些提示可能会让人感到很困惑。本文将介绍Python新手常见的报错提示,并提供解决方法。 IndentationError: …

ninja的简单使用

文章目录 Ninja安装windows环境Linux环境 入门使用与CMake一起使用 Ninja安装 windows环境 问题的解决通常有多种方法。按照结果的好坏程度,可以将解决方法简单的划分为,上中下三个层次,见:为什么谋士总喜欢提上中下三策? 在w…

SpringBoot 如何使用 @RestControllerAdvice 注解进行 RESTful 异常处理

SpringBoot 如何使用 RestControllerAdvice 注解进行 RESTful 异常处理 在 SpringBoot 应用程序中,RESTful 异常处理是一个非常重要的话题。当 RESTful API 出现异常时,我们需要对异常进行处理,以保证 API 的稳定性和可靠性。SpringBoot 提供…