Transformer-XL: Attentive Language Models Beyond a Fixed-Length Context_学习笔记

news2025/1/15 13:01:09

Transformer-XL学习笔记

一、Transformer-XL出现的原因

首先说明Transformer的变形版本Transformer-XL出现的原因:
transformer作为一种特提取器,在NLP中有广泛的应用,但是transformer需要对输入的序列设置固定的长度,例如在Bert中,默认设置长度为512,若文本序列长度小于固定长度,可以通过填充0的方式补充序列;若文本序列长度大于固定长度,则会采用不同的处理方式。一种是:在处理时将文本划分为多个segments,训练模型时将对每个segment单独处理,segment之间没有联系(如图1a)。
这样导致的问题是:(1) segment之间独立训练,不同的token之间,最长的依赖关系取决于segment的长度;(2) 由于考虑到效率,在划分segments时,不考虑句子的自然边界,而是根据固定的长度来划分序列,导致分割出来的segments在语义上不是完整的。
在这里插入图片描述
如图1(a) 所示,对于所有的文本序列,我们都可以将其以4作为长度划分成无数的segments,对于每一个segments都可以独立做attention。那么导致的问题是,若x4与x5在文本序列中,语义是连贯的,在划分过后,就会导致训练时连贯的语义被切割。
对此提出的稍微改进是图1(b)部分,在模型预测时,会对固定长度的segment做计算,一般取最后一个位置的隐向量作为输出,为了充分利用上下文关系,在每做完一次预测之后,就对整个序列向右移动一个位置,在做一次计算。每一次的移动步长为1,滑动窗口大小为4,每一步学习的过程中都可以将前三步的信息考虑在内。但缺点是:并没有从根本上改变连贯语义被分割的问题;同时模型计算量巨大。

二、Segment-Level Recurrence(片段级递归机制)

为了解决上面提到的问题,在Transformer的基础上,Transformer-XL提出了一个改进是在对当前segment进行处理时,缓存并利用上一个segment中所有的layer的隐向量序列,而且上一个segment的所有隐向量序列只参与前向计算,不再进行反向传播,这就是所谓的Segment-Level Recurrence

在这里插入图片描述
在上面的描述中只保存了一个segment,实际操作过程中,可以保存尽可能多的segments,只要内存或者显存放得下,在论文中作者训练时只缓存了一个segment,在进行预测时,会缓存多个segments。
在这里插入图片描述
Transformer本身可以设置multi-heads,将两个连续的segments表示为sτ=[xτ,1,xτ,2,……,xτ,L],sτ+1=[xτ+1,1,xτ+1,2,……,xτ+1,L],L表示序列长度。在整个模型中,包含N层Transformer,那么每一个segment中就有N组长度为L的隐向量序列,将第τ个segment的第n层隐向量序列表示为hτn∈RL×d,d是隐向量的维度。那么第τ+1个segment的第n层隐向量序列可以通过上述的计算公式得出,SG表示Stop-gradient,不再对sτ的隐向量做反向传播。

三、Relative Positional Encodings(相对位置编码)

在实现片段级递归时遇到一个问题:如果采用绝对位置编码,不同片段的位置编码是一样的,这很显然是不对的。公式如下:
在这里插入图片描述
E表示片段Sτ的词向量,U1:L表示绝对位置向量,可以看出两个片段之间所用到的位置向量是一样的,如果一个词出现在两个片段中xτ,j、xτ+1,j,按照绝对位置编码方式,他们的表示向量是一样的,难以区分。论文引入相对位置编码机制,计算self-attention公式如下:在这里插入图片描述

  1. 引入相对位置编码,用的是Transformer中的sinusoid encoding matrix,不需要模型自己学习;
  2. μ和ν是需要学习的参数,计算self-attention时,由于query所有位置对应的query向量是一样的,因此不管query的位置如何,对不同单词的attention偏差应保持相同。
  3. Wk,E、Wk,R也是需要学习的参数,分别产生基于内容的key向量和基于位置的key向量

最后经过Masked-Softmax、Layer-Normalization、Positionwise-Feed-Forward得最终的预测结果。

四、结论

Transformer-XL从提高语言模型的长距离依赖建模能力出发,提出了片段级递归机制,设计了更好的相对位置编码机制,对长文本的编码更有效。不仅如此,在评估阶段速度更快,很巧妙。在此基础上,XLNet从无监督预训练方法出发,对比自回归语言模型和自编码语言模型的优缺点,设计出了排队语言模型,在自然语言处理下游任务中大放异彩。预训练语言模型属于自监督学习的范畴,这两篇论文从语言模型的根本问题出发(建模长距离依赖/更好地编码上下文),提出一个主要方法(片段级递归机制/排列语言模型),在实现过程中发现需要重新设计子模块(相对位置编码/双流注意力机制),最后完成significant work,使得设计的任务很有说服力,理论性强。

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

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

相关文章

(考研湖科大教书匠计算机网络)第一章概述-第四节:计算机网络的性能指标

文章目录(1)速率(2)带宽(3)吞吐量(4)时延①:基本概念②:计算公式(5)时延带宽积(6)往返时间RTT(7&a…

dp(六) 线性dp整合 最长(公共子串、公共子序列、上升子序列、回文子串)

1、最大公共子串_牛客题霸_牛客网​编辑 2、最长上升子序列(一)_牛客题霸_牛客网 3、最长回文子串_牛客题霸_牛客网 4、最长公共子序列(二)_牛客题霸_牛客网 #include <iostream> using namespace std; #include<vector>int main() {string str1,str2;cin>>…

mysql数据迁移报错问题

mysql8.0.17备份数据库到mysql5.7.26的There was error(s) while executing the queries问题解决&#xff08;数据库高版本向低版本数据迁移解决&#xff09; 问题背景 要将本地的mysql数据库导入到linux中的mysql中&#xff0c;其中&#xff0c;本地mysql数据库的版本是8.0.…

数字硬件建模SystemVerilog-时序逻辑建模(1)RTL时序逻辑的综合要求

数字门级电路可分为两大类&#xff1a;组合逻辑和时序逻辑。锁存器是组合逻辑和时序逻辑的一个交叉点&#xff0c;在后面会作为单独的主题处理。组合逻辑描述了门级电路&#xff0c;其中逻辑块的输出直接反映到该块的输入值的组合&#xff0c;例如&#xff0c;双输入AND门的输出…

N5247A网络分析仪

18320918653 N5247A Agilent N5247A 网络分析仪主要特性与技术指标 10 MHz 至 67 GHz2 端口或 4 端口&#xff0c;具有两个内置信号源可提供 4 端口 110 GHz 单次扫描解决方案110 dB 系统动态范围&#xff0c;32001 个点&#xff0c;32 个通道&#xff0c;5 MHz 中频带宽高输…

MySQL中深入浅出索引

文章目录前言一、索引的常见模型二、InnoDB的索引模型三、索引的维护四、索引的优化覆盖索引联合索引最左前缀原则索引下推前言 我们在看书的时候&#xff0c;打算回看某一个桥段的内容时。这是你肯定会是先翻看书的目录&#xff0c;从目录确定这段内容的位置&#xff0c;然后…

爬虫利用多线程快速爬取数据

一般单线程爬数据太慢了话&#xff0c;就采用多线程。 一般要根据两种情形来选择 自定义线程线程池 往往最关键的地方在&#xff0c;多个线程并发执行后&#xff0c;是否需要线性的返回结果。也就是先调用的线程&#xff0c;返回的结果要在前面。 或者说&#xff0c;某个对…

mysql简单数据查询——数采数据电量与耗料的日统计

目录 前言 步骤1&#xff1a;date_format函数 步骤2&#xff1a;concat函数 步骤3、4&#xff1a;查询中使用变量 完整代码 前言 在数采数据已写入mysql数据库中后&#xff0c;进行数据处理&#xff0c;统计电量与耗料数据 由于数据库版本较低&#xff0c;无法使用较新的…

华为策略路由实验配置

配置接口相关的IP地址&#xff0c;并配置IGP路由协议使得全网互通 AR1配置接口策略路由 对经过本地转发的路由生效&#xff0c;对本地始发的路由不生效 配置nqa检测下一跳状态 nqa test-instance PC1 icmptrace nqa的管理者为PC1&#xff0c;NQA的测试例名为icmptrace test-…

全国青少年软件编程(Scratch)等级考试二级考试真题2022年12月——持续更新.....

1.一个骰子,从3个不同角度看过去的点数如图所示,请问5的对面是什么点数?( ) A.1 B.3 C.4 D.6 正确答案:A 答案解析: 根据图三,用右手定则,大拇指朝上指向6所对的方向,其余四指握起来表示旋转方向,可以看到先5后2,然后把这个姿势对应到图1中,就知道1的对面是5…

C语言进阶(8)——动态内存空间管理

前言 文章目录前言1.为什么存在动态内存分配2.动态内存函数的介绍2.1 malloc函数2.2 free函数2.3 calloc2.4realloc3 常见的动态内存错误4.经典笔试题题目 1&#xff1a;题目 2&#xff1a;题目 3&#xff1a;题目 4&#xff1a;5.C/C程序的内存开辟6.柔性数组6.1 定义6.2 柔性…

1.5、中断和异常

整体框架 1、中断的概念和作用 当中断发生时&#xff0c;CPU 立即进入核心态\color{red}核心态核心态 当中断发生后&#xff0c;当前运行的进程暂停运行&#xff0c;并由操作系统内核对中断进行处理 对于不同的中断信号&#xff0c;会进行不同的处理 发生了中断&#xff0c…

记录--“非主流” 的纯前端性能优化

这里给大家分享我在网上总结出来的一些知识&#xff0c;希望对大家有所帮助 性能优化一直是前端研究的主要课题之一&#xff0c;因为不仅直接影响用户体验&#xff0c;对于商业性公司&#xff0c;网页性能的优劣更关乎流量变现效率的高低。例如 DoubleClick by Google 发现&…

MD5加密

MD5加密 md5加密 明文 加密变成 128位二进制 --> 32位16进制字符串的密文 MD5特征: 明文一样, 得到密文一样密文一样, 推出明文一样明文不一样, 得到密文不一样 缺点&#xff1a; 现在网上有很多暴力破解的网址&#xff0c;直接使用md5加密还是不太安全 为了提高安全性&am…

Linux常用命令——vmstat命令

在线Linux命令查询工具(http://www.lzltool.com/LinuxCommand) vmstat 显示虚拟内存状态 补充说明 vmstat命令的含义为显示虚拟内存状态&#xff08;“Viryual Memor Statics”&#xff09;&#xff0c;但是它可以报告关于进程、内存、I/O等系统整体运行状态。 语法 vmst…

Java高并发编程实战,异步注解@Async自定义线程池

一、Async注解 Async的作用就是异步处理任务。 在方法上添加Async&#xff0c;表示此方法是异步方法&#xff1b; 在类上添加Async&#xff0c;表示类中的所有方法都是异步方法&#xff1b; 使用此注解的类&#xff0c;必须是Spring管理的类&#xff1b; 需要在启动类或配置类…

ELK日志(1)

Elasticsearch开源分布式搜索引擎&#xff0c;它的特点有&#xff1a;分布式&#xff0c;零配置&#xff0c;自动发现&#xff0c;索引自动分片&#xff0c;索引副本机制&#xff0c;restful 风格接口&#xff0c;多数据源&#xff0c;自动搜索负载等。RESTFUL特点包括&#xf…

MES系统之工控

MES系统之工控 要控制MES系统首先要对他有个了解。MES系统最早由1990年&#xff0c;由美国先进制造研究中心AMR提出的&#xff0c;当时中文意思叫制造执行系统概念。直到1997年&#xff0c;MESA(制造执行系统协会)提出了MES功能组件和继承模型&#xff0c;到20世纪90年代初期&a…

动态内存管”家“

&#x1f40b;动态内存管理&#x1f996;动态内存分配存在的意义&#x1f996;动态内存函数的介绍&#x1f424;malloc和free&#x1f424;calloc&#x1f424;realloc&#x1f996;常见动态内存错误&#x1f424;对空指针的解引用操作&#x1f424;对动态开辟空间的越界访问&a…

springMVC的响应

SpringMVC接收到请求和数据后&#xff0c;进行一些了的处理&#xff0c;当然这个处理可以是转发给Service&#xff0c;Service层再调用Dao层完成的&#xff0c;不管怎样&#xff0c;处理完以后&#xff0c;都需要将结果告知给用户。 对于响应&#xff0c;主要就包含两部分内容&…