一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第14天,点击查看活动详情。
提出原因
为解决self.attention的n方复杂度,以及超长文本获取信息冗余问题,限制输入文本的长度,一般的Transformer在处理超长文本时,训练时segment分开,一个一个训练,预测时,segment步长为1进行移动,效率太低,故改进出了Transformer-XL
为啥叫Transformer-XL
XL—>尺码中的XL,大,这个Transformer机制可以关注长的文本内容。
创新
Transformer-XL结构图:
Transformer-XL架构在vanilla Transformer的基础上引入了两点创新:
- 循环机制(Recurrence Mechanism)
- 相对位置编码(Relative Positional Encoding)。
以克服Vanilla Transformer的缺点。与Vanilla Transformer相比,Transformer-XL的另一个优势是它可以被用于单词级和字符级的语言建模
PS
:Vanilla Transformer是Transformer和Transformer-XL中间过度的一个算法
Vanilla Transformer的三个缺点:
-
上下文长度受限:字符之间的最大依赖距离受输入长度的限制,模型看不到出现在几个句子之前的单词。
-
上下文碎片:对于长度超过512个字符的文本,都是从头开始单独训练的。段与段之间没有上下文依赖性,会让训练效率低下,也会影响模型的性能。
-
推理速度慢:在测试阶段,每次预测下一个单词,都需要重新构建一遍上下文,并从头开始计算,这样的计算速度非常慢。
vanilla Transformer结构图:
循环机制(Recurrence Mechanism)
由上图vanilla Transformer结构图(a)也可以知道,Vanilla Transformer对于长度超过512个字符的文本,都是从头开始单独训练的段与段之间没有上下文依赖性。
因此Transformer-XL引入了段间循环机制来利用前段信息,实现长期依赖
在训练的时候,对于后面一个隐藏层,他都会得到两个输入(个人感觉思想类似于LSTM中后一个神经元就是收到前面一个神经元的影响)
第一个输入:该段的前面节点的输出,与Vanilla Transformer相同(上图的灰色线)。
第二个输入:前面段的节点的输出(上图的绿色线),可以使模型创建长期依赖关系。这部分输出市通过cache的机制传导过来,所以不会参与梯度的计算。原则上只要GPU内存允许,该方法可以利用前面更多段的信息。
预测阶段:
的预测我们可以拿之前预测好的[x1,x2,x3...x10]的结果拿过来,直接预测。同理在预测的时候可以通过套娃的方式从预测好的[x1,x2,x3...x10,x11]得到结果。
相对位置编码
Transformer的位置编码
我们先来简单回顾一下Transformer的位置编码,详情请移步这里[2]。
Transformer采用了正余弦编码
位置指的是一个词向量里数据的位置,pos指的才是单词在语句中的位置。是维数(按我的理解就是一个词向量的长度)。
Transformer-XL 相对位置编码
Transformer位置编码在Transformer-XL上的局限性
在Transformer中,一个重要的地方在于其考虑了序列的位置信息。在分段的情况下,如果仅仅对于每个段仍直接使用Transformer中的位置编码,会导致每个不同段在同一个位置上的表示使用相同的位置编码,就会出现问题。
比如,第i-1与第i-2的第一个字都相同,那么他们的位置编码将为一样,但是显然他们对第i段的建模重要性不同。因此,需要对这种位置进行区分。
相对位置编码
我们知道,Transformer中有查询向量(),关键词向量()的处理,而处理的对象就是添加了位置编码()的Embedding():
-
其中的下标i与j分别代表词i与词j
将上式展开,我们便可以得到
在Transformer-XL中,对上述的attention计算方式进行了变换,转为相对位置的计算,而且不仅仅在第一层这么计算,在每一层都是这样计算。
在(b)和(d)这两项中,将所有绝对位置向量,都转为相对位置向量,与Transformer一样,这是一个固定的编码向量,不需要学习。
在(c)这一项中,将查询的 向量转为一个需要学习的参数向量u,因为在考虑相对位置的时候,不需要查询的绝对位置i,因此对于任意的i,都可以采用同样的向量。同理,在(d)这一项中,也将查询的 ,向量转为另一个需要学习的参数向量v。
将键的权重变换矩阵转为和,分别作为content-based key vectors和location-based key vectors。
可以将Transformer-XL中的attention的计算分为如下四个部分:
- 基于内容的“寻址”,即没有添加原始位置编码的原始分数。
- 基于内容的位置偏置,即相对于当前内容的位置偏差。
- 全局的内容偏置,用于衡量key的重要性。
- 全局的位置偏置,根据query和key之间的距离调整重要性
4. 总结
4.1 优点
- 在几种不同的数据集(大/小,字符级别/单词级别等)均实现了最先进的语言建模结果。
- 结合了深度学习的两个重要概念——循环机制和注意力机制,允许模型学习长期依赖性,且可能可以扩展到需要该能力的其他深度学习领域,例如音频分析(如每秒16k样本的语音数据)等。
- 在inference阶段非常快,比之前最先进的利用Transformer模型进行语言建模的方法快300~1800倍。
4.2 不足
- 尚未在具体的NLP任务如情感分析、QA等上应用。 没有给出与其他的基于Transformer的模型,如BERT等,对比有何优势。
- 训练模型需要用到大量的TPU资源。
参考
[1] www.cnblogs.com/huangyc/p/1…
[2] asthestarsfalll.icu/2021/06/04/…
[3] www.cnblogs.com/shona/p/120…
[4] blog.csdn.net/qq_22795223…
[5] Transformer-XL解读(论文 + PyTorch源码)_Magical_Bubble的博客-CSDN博客