《原始论文:Transformer-XL: Attentive Language Models Beyond a Fixed-Length Context》

一、概述

一句话简介:Transformer-XL架构在vanilla Transformer的基础上引入了两点创新:循环机制(Recurrence Mechanism)和相对位置编码(Relative Positional Encoding),以克服vanilla Transformer的长距离获取弱的缺点。

要正确理解一篇文章,有时需要参考出现在几千个单词前面的一个单词或一个句子。这是一个长期依赖性(long-range dependence)的例子,这是序列数据中常见的现象,处理许多现实世界的任务都必须理解这种依赖。

虽然人类很自然地就会这样做,但是用神经网络建模长期依赖关系仍然很具挑战性。

基于Gating的RNN和梯度裁剪(gradient clipping)技术提高了对长期依赖关性建模的能力,但仍不足以完全解决这个问题。

应对这个挑战的一种方法是使用Transformers,它允许数据单元之间直接连接,能够更好地捕获长期依赖关系。

Transformer 是谷歌在 17 年做机器翻译任务的 “Attention is all you need” 论文中提出的,引起了相当大的反响,业内有“每一位从事 NLP 研发的同仁都应该透彻搞明白 Transformer”的说法。

1、Transformer结构特点:

  1. 全部用self-attention的自注意力机制。
  2. 在self-attention的基础上改进了Multi-Attention和Mask Multi-Attention两种多头注意力机制。
  3. 网络由多个层组成,每个层都由多头注意力机制和前馈网络构成。
  4. 由于在全局进行注意力机制的计算,忽略了序列中最重要的位置信息,添加了位置编码(Position Encoding),使用正弦函数完成,为每个部分的位置生成位置向量。

Transformer模型在输入时采用的是固定长度序列输入,且Transformer模型的时间复杂度和句子/序列长度的平方成正比(每一层的复杂度:O(n2⋅d)O(n^2·d)O(n2d)nnn 为句子/序列长度,ddd 为词向量维度),因此一般序列长度都限制在最大512,因为太大的长度,模型训练的时间消耗太大。

此外Transformer模型又不像RNN这种结构,可以将最后时间输出的隐层向量作为整个序列的表示,然后作为下一序列的初始化输入。所以用Transformer训练语言模型时,不同的序列之间是没有联系的,因此这样的Transformer在长距离依赖的捕获能力是不够的,此外在处理长文本的时候,若是将文本分为多个固定长度的片段,对于连续的文本,这无异于将文本的整体性破坏了,导致了文本的碎片化,这也是Transformer-XL被提出的原因。

2、Vanilla Transformer

Transformer 作为一种特征提取器,在NLP中有广泛的应用。但是 Transformer 需要对输入序列设置一个固定的长度,比如在BERT中,默认长度是512。如果文本序列长度短于固定长度,可以通过填充的方式来解决。如果序列长度超过固定长度,处理起来就比较麻烦。

一种处理方式,就是将文本划分为多个segments。

  • 训练的时候,对每个segment单独处理,segments之间没有联系,如下图(a)所示。
  • 在预测的时候,会对固定长度的segment做计算,一般取最后一个位置的隐向量作为输出。为了充分利用上下文关系,在每做完一次预测之后,就对整个序列向右移动一个位置,再做一次计算,如下图(b)所示,这导致计算效率非常低。


该模型容易发现有以下缺点:

  1. 上下文长度受限:字符之间的最大依赖距离受输入长度的限制,模型看不到出现在几个句子之前的单词。
  2. 上下文碎片:对于长度超过512个字符的文本,都是从头开始单独训练的。段与段之间没有上下文依赖性,会让训练效率低下,也会影响模型的性能。
  3. 推理速度慢:在测试阶段,每次预测下一个单词,都需要重新构建一遍上下文,并从头开始计算,这样的计算速度非常慢。
  4. Vallina model不同segement对应的相同的位置如果采用同样的 positonal encoding就会导致难以区分。
  5. Vallina model在预测的时候每次都只能预测一个postion 的概率,这样预测的效率低下。

在语言建模中,Transformers目前使用固定长度的上下文来实现,即将一个长的文本序列截断为几百个字符的固定长度片段,然后分别处理每个片段。

如下图所示,VanillaTransformer模型在训练时具有固定长度上下文:

这造成了两个关键的限制:

  • 算法无法建模超过固定长度的依赖关系
  • 被分割的片段通常不考虑句子边界,导致上下文碎片化,从而导致优化低效。即使是对于长期依赖性不显著的较短序列,这也是特别麻烦的。

为了解决这些限制,谷歌提出一个新的架构:Transformer-XL,它使自然语言的理解超出了固定长度的上下文。Transformer-XL是基于Vanilla Transformer这个模型进行的改进。

3、TransformerXL的历史意义


Transformer-xl采用了片段级递归机制,从而提高了语言模型的长距离依赖,对长文本的编码更加有效。 Transformer-xl在文本生成任务上具有不错的效果。

  1. Transformer在获取长度依赖上受制于固定长度,本文提出了Transformer-xl模型能解决该问题。
  2. Transformer-xl模型提出了片段级递归机制 和 相对位置编码,并且能够解决片段之间联系丢失的问题。
  3. Transformer-xl模型在学习长度依赖的问题上比rnn要长80%、比vallina transformer要长450%,和start-of-the-art的bpc/ppl结果相比,在enwiki8上的结果0.99、在text8上的结果为1.08、在WikiText-103上的结果为18.3、在one-billion上的结果为21.8、在Penn Treebank上的结果为54.5。

Transformer-XL在各种主要的语言建模(LM)基准测试中获得新的最优(SoTA)结果,包括长序列和短序列上的字符级和单词级任务。实验证明, Transformer-XL 有以下优势:

  1. Transformer-XL学习的依赖关系比RNN长约80%,比vanilla Transformers模型长450%,尽管后者在性能上比RNN好,但由于固定长度上下文的限制,对于建模长期依赖关系并不是最好的。
  2. 由于不需要重复计算,Transformer-XL在语言建模任务的评估期间比vanilla Transformer快1800+倍。
  3. 由于建模长期依赖关系的能力,Transformer-XL在长序列上具有更好的困惑度(Perplexity, 预测样本方面更准确),并且通过解决上下文碎片化问题,在短序列上也具有更好的性能。
  4. Transformer-XL在5个数据集上的结果如下:
  5. Transformer-xl模型预测时的Attention的长度可以和训练时的长度不一样;比如训练时设置为384,预测时设置为1600,这样预测的速度会更快;

二、TransformerXL结构解析

Transformer-XL架构在vanilla Transformer的基础上引入了两点创新来克服vanilla Transformer的缺点。:

  • 片段级递归机制(Segment-Level Recurrence Mechanism);
  • 相对位置编码(Relative Positional Encoding);

与vanilla Transformer相比,Transformer-XL的另一个优势是它可以被用于单词级字符级的语言建模。

VanillaTransformer模型在训练时具有固定长度上下文 TransformerXL训练阶段为新段前面的token提供了必要的上下文

当这两种方法结合使用时,在评估时, Transformer-XL比vanilla Transformer模型具有更长的有效上下文。

在评估期间具有固定长度上下文的vanilla Transformer 在评估期间具有segment-level 递归的Transformer-XL
移动步长为1个token 移动步长为一个segment

1、Segment 循环机制

与vanilla Transformer的基本思路一样,Transformer-XL仍然是使用分段的方式进行建模,但其与vanilla Transformer的本质不同是在于引入了段与段之间的循环机制,使得当前段在建模的时候能够利用之前段的信息来实现长期依赖性。如下图所示:

在训练期间,为前一个 Segment 计算的 Representation 被修复并缓存,以便在模型处理下一个新的 Segment 时作为扩展上下文重新利用。这个额外的连接将最大可能依赖关系长度增加了N倍(N个Segment的长度),其中N表示网络的深度,因为上下文信息现在可以跨片段边界流动。

在训练阶段,处理后面的段时,每个隐藏层都会接收两个输入:

  1. 该段的前面隐藏层的输出,与vanilla Transformer相同(上图的灰色线)。
  2. 前面段的隐藏层的输出(上图的绿色线),可以使模型创建长期依赖关系。

此外,这种递归机制还解决了上下文碎片问题,为新段前面的token提供了必要的上下文。

RNN 的语言模型的 Recurrence Dependency在同一层layer之间,而TransformerXL可以在不同layer之间,因此 Depency Length为 O(N×L)O(N×L)O(N×L)

这两个输入会被拼接,然后用于计算当前段的Key和Value矩阵。对于某个段的某一层的具体计算公式如下:

  • 第一个式子:

    • τττ 表示上一片段,τ+1τ+1τ+1 表示下一片段。
    • 将上一片段的输出缓存起来,然后直接和下一片段的隐层拼接在一起,得到上面的第一个式子。
    • 在这里SG()的含义是stop-gradient。当进行到 τ+1τ+1τ+1 时间步时,不再对 τττ Segment的梯度再次计算,因为在 τττ 时刻已经计算过了;
  • 第二个式子
    • 计算Query的时候只是用本segment的信息hτ+1n−1h_{\tau+1}^{n-1}hτ+1n1,而计算Key和Value的时候用的是h~τ+1n−1\tilde{h}_{\tau+1}^{n-1}h~τ+1n1
    • 引入了上一片段的隐层表示只会用在key和value上,对于query还是保持原来的样子(得到中间的表达式形态)。
    • 这样做也好理解,query只是表示查询的词,而key,value表示的是这个查询的词的相关信息,我们要改变的是只是信息,因此只要在key,value中引入上一片段的信息就可以了。
  • 第三个式子
    • τ+1τ+1τ+1 时间步的 Q、K、V喂给 Transformer-Layer;剩下的就和Transformer一致

原则上只要 GPU 内存允许,该方法可以利用前面更多段的信息,测试阶段也可以获得更长的依赖(类似于 DenseNet)。

在测试阶段,与vanilla Transformer相比,其速度也会更快:在vanilla Transformer中,一次只能前进一个step,并且需要重新构建段,并全部从头开始计算;而在Transformer-XL中,每次可以前进一整个段,并利用之前段的数据来预测当前段的输出。

2、相对位置编码

天真地应用 segment-level recurrence是行不通的,因为当我们重用前面的段时,位置编码是不一致的。

例如,考虑一个具有上下文位置[0,1,2,3]的旧段。当处理一个新的段时,我们将两个段合并,得到位置[0,1,2,3,0,1,2,3],其中每个位置id的语义在整个序列中是不连贯的。

在Transformer中,一个重要的地方在于其考虑了序列的位置信息。在分段的情况下,如果仅仅对于每个段仍直接使用Transformer中的位置编码,即每个不同段在同一个位置上的表示使用相同的位置编码,就会出现问题。(下式中U表示位置向量)


为此,我们提出了一种新的相对位置编码方案,使递归机制成为可能。

此外,与其他相对位置编码方案不同,我们的公式使用具有learnable transformations的固定嵌入,而不是earnable embeddings,因此在测试时更适用于较长的序列。

论文对于这个问题,提出了一种新的位置编码的方式,即会根据词之间的相对距离而非像Transformer中的绝对位置进行编码。Transformer中的attention权重计算公式如下:

将其展开可以分解成下面四个部分。 第一层的计算查询和键之间的attention分数的方式为:

E表示embedding,U 表示位置向量。在Transformer-XL中,对上述的attention计算方式进行了变换,转为相对位置的计算,而且不仅仅在第一层这么计算,在每一层都是这样计算。

对比来看:

  1. 在(b)和(d)这两项中,将所有绝对位置向量都转为相对位置向量 ,与Transformer一样,这是一个固定的编码向量,不需要学习。
  2. 在(c)这一项中,将查询的向量 UiTWqTU_i^TW_q^TUiTWqT 转为一个需要学习的参数向量 uuu,因为在考虑相对位置的时候,不需要查询绝对位置 iii,因此对于任意的 iii,都可以采用同样的向量。同理,在(d)这一项中,也是一样
  3. 将Key的权重变换矩阵 WkW_kWk 转为 Wk,EW_{k,E}Wk,EWk,RW_{k,R}Wk,R,分别作为 Content-based key vectors和 Location-based key vectors。

从另一个角度来解读这个公式的话,可以将attention的计算分为如下四个部分:

  1. 基于内容的"寻址",即没有添加原始位置编码的原始分数。
  2. 基于内容的位置偏置,即相对于当前内容的位置偏差。
  3. 全局的内容偏置,用于衡量key的重要性。
  4. 全局的位置偏置,根据query和key之间的距离调整重要性。

将上面的式子合并后,可以得到:

上面整个即使Transformer-XL的两个改变:前面是内容,后面是位置。

3、整体公式计算

结合上面两个创新点,将Transformer-XL模型的整体计算公式整理如下,这里考虑一个N层的只有一个注意力头的模型:

4、计算小Trick:Efficient Computation of the Attention with Relative Positional Embedding

四、论文相关

1、模型特点

在 AI-Rfou 等人提出的vanilla Transformer上做了两点创新:

  1. 引入循环机制(Recurrence Mechanism)
  2. 相对位置编码(Relative Positional Encoding),这个是解决上面创新带来的问题而产生的。

2、优点

  1. 与vanilla Transformer相比,Transformer-XL的另一个优势是它可以被用于单词级和字符级的语言建模【说明:这个没有理解从哪方面体现的】。在几种不同的数据集(大/小,字符级别/单词级别等)均实现了最先进的语言建模结果。
  2. 结合了深度学习的两个重要概念——循环机制和注意力机制,允许模型学习长期依赖性,且可能可以扩展到需要该能力的其他深度学习领域,例如音频分析(如每秒16k样本的语音数据)等。
  3. 在inference阶段非常快,比之前最先进的利用Transformer模型进行语言建模的方法快300~1800倍。
  4. 有详尽的源码!含TensorFlow和PyTorch版本的,并且有TensorFlow预训练好的模型及各个数据集上详尽的超参数设置。

3、不足

尚未在具体的NLP任务如情感分析、QA等上应用。
没有给出与其他的基于Transformer的模型,如BERT等,对比有何优势。
在Github源码中提到,目前的sota结果是在TPU大集群上训练得出,对于我等渣机器党就只能玩玩base模式了。

enwik8和text8数据集




参考资料:
The Transformer Family
【NLP-16】Transformer-XL
7. Transformer-XL原理介绍
一文看懂 9 种Transformer结构!
谷歌升级版Transformer官方解读:更大、更强,解决长文本问题(开源)
Transformer一统江湖:自然语言处理三大特征抽取器比较
谷歌升级版Transformer官方解读:更大、更强,解决长文本问题(开源)
Transformer-XL: Unleashing the Potential of Attention Models

NLP-生成模型-2019:TransformerXL【对Vanilla Transformer的改进:片段级递归机制、相对位置编码】【超出固定长度上下文的注意力语言模型】相关推荐

  1. NLP-生成模型-2018:Vanilla Transformer【将长文本序列划截断为多个固定长度的段;段与段之间没有上下文依赖性;无法建模字符之间超过固定长度的依赖,关系导致上下文碎片化】

    一.Vanilla Transformer的结构 首先,作者要解决的问题是字级别的LM,相比词级别的LM,字级别LM明显需要依赖的距离特别长,比如说一句话某个位置是应该使用she还是he,是依赖于前面 ...

  2. 【阿里云课程】生成模型之GAN优化目标设计与改进

    大家好,继续更新有三AI与阿里天池联合推出的深度学习系列课程,本次更新内容为第11课中的一节,介绍如下: GAN优化目标设计与改进 本次课程是阿里天池联合有三AI推出的深度学习系列课程第11期,深度生 ...

  3. Transformer升级之路:博采众长的旋转式位置编码

    ©PaperWeekly 原创 · 作者|苏剑林 单位|追一科技 研究方向|NLP.神经网络 上一篇文章中,我们对原始的 Sinusoidal 位置编码做了较为详细的推导和理解,总的感觉是 Sinus ...

  4. 【Transformer 相关理论深入理解】注意力机制、自注意力机制、多头注意力机制、位置编码

    目录 前言 一.注意力机制:Attention 二.自注意力机制:Self-Attention 三.多头注意力机制:Multi-Head Self-Attention 四.位置编码:Positiona ...

  5. NLP/CV模型跨界,视觉Transformer赶超CNN?

    在计算机视觉领域中,卷积神经网络(CNN)一直占据主流地位.不过,不断有研究者尝试将 NLP 领域的 Transformer 进行跨界研究,有的还实现了相当不错的结果.近日,一篇匿名的 ICLR 20 ...

  6. Transformer又出新变体∞-former:无限长期记忆,任意长度上下文

    点击上方"AI遇见机器学习",选择"星标"公众号 重磅干货,第一时间送达 来自:机器之心 任意长度的上下文都能 hold 住?这里有一个名为∞-former 的 ...

  7. Transformer架构:位置编码

    2017年,Google的Vaswani 等人提出了一种新颖的纯注意力序列到序列架构,闻名学术界与工业界的 Transformer 架构横空出世.它的可并行化训练能力和优越的性能使其成为自然语言处理领 ...

  8. Transformer升级之路:二维位置的旋转式位置编码

    ©PaperWeekly 原创 · 作者 | 苏剑林 单位 | 追一科技 研究方向 | NLP.神经网络 在之前的文章 Transformer 升级之路:博采众长的旋转式位置编码中我们提出了旋转式位置 ...

  9. NLP模型卡-Transformer-XL

    一:模型简介 全名是 Transfomer extra long,顾名思义,主要是为了解决Bert或Transformer中只能在固定的长度的上下文中学习依赖关系的问题,主要提出了segment-le ...

最新文章

  1. Qt 静态编译后的exe太大, 可以这样压缩.
  2. mysql 导入单个表_MySQL 备份恢复(导入导出)单个 innodb表
  3. SAP KKBC_ORD报表中Plan和Target的区别
  4. 小米5x的Android,小米5X支持NFC功能吗? 小米5X有nfc吗
  5. linux shell 等待输入_shell中获得用户的输入
  6. 51NOD 1594:Gcd and Phi——题解
  7. 关于grep,egrep正则表达式的常用用法
  8. mysql心得体会一百字_MYSQL CPU 100%实例详解
  9. yolo数据集txt标注转voc数据集xml标注格式
  10. java语法结构库,万字解析!
  11. 3-12岁经典必读书
  12. java计算机毕业设计教务管理系统源码+mysql数据库+系统+lw文档+部署
  13. inventor中齿条怎么画_标准齿轮及齿条绘制方法
  14. java提取jks文件提取私钥_如何从JKS文件中取出PEM格式证书
  15. iOS逆向:【ARM 移位操作】(LSL、ASL、LSR、ASR、ROR、RRX)
  16. 安卓微信跳转页面、重定向页面空白,ios系统正常、pc正常、安卓浏览器正常。
  17. 手把手教你学习R语言
  18. options请求(复杂请求)
  19. phpyun人才系统v6.2视频面试聊天功能怎么申请App Key来保障正常使用
  20. 怎么删除win10系统的更新缓存文件?

热门文章

  1. 如何快速下载Google play里软件APK
  2. 配置对即时负载的优化
  3. python爬取b站评论_Python爬虫框架:scrapy抓取B站博人传评论数据
  4. 几种服务分层架构及其对象命名规范
  5. Teamin群协作如何在微信上更好实现团队协作?
  6. sumo添加车辆_Sumo入门和Traci接口教程
  7. Springboot中上一个定时任务没执行完,是否会影响下一个定时任务执行分析及结论
  8. 视频直播质量的评测和实现分享
  9. Python 如何突破反爬虫指纹 JA3
  10. editplus如何设置保存后不生成备份文件