当前位置:   article > 正文

Transformer-XL详解

transformer-xl

1. 介绍

为了帮助理解XLNet,本文对其核心框架Transformer-XL作一个解读。本文发表在ACL2019上,论文想要解决的问题:如何赋予编码器捕获长距离依赖的能力。

目前在自然语言处理领域,Transformer的编码能力超越了RNN,但是对长距离依赖的建模能力仍然不足。在基于LSTM的模型中,为了建模长距离依赖,提出了门控机制和梯度裁剪,目前可以编码的最长距离在200左右。在基于Transformer的模型中,允许词之间直接建立联系【self-attention】,能够更好地捕获长期依赖关系,但是还是有限制。

2. Vanilla Transformer

Vanilla Transformer是Transformer和Transformer-XL中间过度的一个算法,所以在介绍Transformer-XL之前我们先来了解下Vanilla Transformer,注意,其使用了Transformer中的Decoder结构,所以下图是单向的

Vanilla Transformer的原理图:
在这里插入图片描述
Vanilla Transformer论文中模型有64层,并仅限于处理 512个字符这种相对较短的输入,因此训练的时候它将输入分成段,并分别从每个段中进行学习,如上图所示。

在测试阶段如需处理较长的输入,该模型会在每一步中将输入向右移动一个字符,以此实现对下一个字符的预测。

Vanilla Transformer的三个缺点

  1. 长度受限:字符之间的最大依赖距离受输入长度的限制,模型看不到出现在几个句子之前的单词。
  2. 上下段间的语义未考虑:段与段之间没有上下文依赖性,会让训练效率低下,也会影响模型的性能
  3. 推理速度慢:在测试阶段,每次预测下一个单词,都需要重新构建一遍上下文,并从头开始计算,这样的计算速度非常慢

3. Transformer-XL

Transformer-XL架构在vanilla Transformer的基础上引入了两点创新

  1. 循环机制(Recurrence Mechanism)
  2. 相对位置编码(Relative Positional Encoding)。

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

3.1 循环机制(Recurrence Mechanism)

Transformer-XL仍然是使用分段的方式进行建模,但其与Vanilla Transformer的本质不同是在于引入了段与段之间的循环机制,使得当前段在建模的时候能够利用之前段的信息来实现长期依赖性。如下图所示:
在这里插入图片描述
在训练阶段,处理后面的段时,每个隐藏层都会接收两类输入

  1. 该段的前面节点的输出,与Vanilla Transformer相同(上图的灰色线)。
  2. 前面段的节点的输出(上图的绿色线),可以使模型创建长期依赖关系。这部分输出是通过cache的机制传导过来,所以不会参与梯度的计算。原则上只要GPU内存允许,该方法可以利用前面更多段的信息。

在预测阶段:
如果预测 x 11 x_{11} x11我们只要拿之前预测好的 [ x 1 , x 2 . . . x 10 ] [x_1,x_2...x_{10}] [x1,x2...x10]的结果拿过来,直接预测。同理在预测 x 12 x_{12} x12的时候,直接在 [ x 1 , x 2 . . . x 10 , x 11 ] [x_1,x_2...x_{10},x_{11}] [x1,x2...x10,x11]的基础上计算,不用像Vanilla Transformer一样每次预测一个字就要重新计算前面固定个数的词。

3.2 相对位置编码

为了更加直观的解释这个部分,我会由浅入深 娓娓道来。
首先我们之前所理解的Attention机制,可以点击这里,看其中的Attention部分的计算过程。

但是需要注意的是,上述文章中的计算过程,是从代码角度,也就是从整个矩阵角度去进行理解计算的,那么对于单个词的计算过程,我们在此进行更详细的阐述。首先见下图:(注意力放在阶段1)
在这里插入图片描述
第一层的计算查询 q i T q_i^T qiT和键 k j k_j kj之间的Attention分数的方式为:
在这里插入图片描述
展开可得:
在这里插入图片描述
在这里插入图片描述
在Transformer中,一个重要的地方在于其考虑了序列的位置信息。
在分段的情况下,如果仅仅对于每个段仍直接使用Transformer中的位置编码,即每个不同段在同一个位置上的表示使用相同的位置编码,就会出现问题。
比如,第 i − 2 i−2 i2段和第 i − 1 i−1 i1段的第一个位置将具有相同的位置编码,但它们对于第 i i i段的建模重要性显然并不同(例如第 i − 2 i−2 i2段中的第一个位置重要性可能要低一些)。因此,需要对这种位置进行区分。

论文对于这个问题,提出了一种新的位置编码的方式,即会根据词之间的相对距离而非像Transformer中的绝对位置进行编码
在这里插入图片描述

4. 总结

4.1 优点

在几种不同的数据集(大/小,字符级别/单词级别等)均实现了最先进的语言建模结果。

结合了深度学习的两个重要概念——循环机制和注意力机制,允许模型学习长期依赖性,且可能可以扩展到需要该能力的其他深度学习领域,例如音频分析(如每秒16k样本的语音数据)等。

在inference阶段非常快,比之前最先进的利用Transformer模型进行语言建模的方法快300~1800倍。

4.2 不足

尚未在具体的NLP任务如情感分析、QA等上进行应用。
没有给出与其他的基于Transformer的模型,如BERT等,对比有何优势
训练模型需要用到大量的TPU资源

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/451216
推荐阅读
相关标签
  

闽ICP备14008679号