Transformer有学习长期依赖关系的潜力,但在语言建模设置中受到固定长度上下文的限制。我们提出了一种新的神经结构Transformer-XL,它可以在不破坏时间一致性的情况下,使学习依赖超出固定长度。它由段级递归机制和一种新的位置编码方案组成,不仅能够捕获长期依赖关系,而且还解决了上下文碎片问题。
根据经验,LSTM语言模型使用平均200个上下文单词,有进一步的提升空间。在注意力机制中形成的词对之间的直接联系使长距离依赖学习成为可能,但由于上下文的长度是固定的,传统的Transformer不能捕获超出预定义的上下文长度的长距离依赖。此外,固定长度的段是通过选择连续的符号块而创建的,而不考虑句子或任何其他语义边界。因此,该模型缺乏必要的上下文信息,需要很好地预测前几个符号,导致低效的优化和劣质的性能。我们将这个问题称为上下文碎片化。
为了解决上述固定长度上下文的限制,我们提出了一种名为Transformer-XL(意思是超长)的新架构。我们不再为每个新段从头计算隐藏状态,而是重复利用在前面的段中获得的隐藏状态。信息可以通过循环连接进行传播,对长距离依赖关系建模成为可能,传递上一段的信息也可以解决上下文碎片化问题。更重要的是,我们展示了使用相对位置编码而不是绝对编码的必要性,以便在不造成时间混乱的情况下实现状态重用。
模型
给定一个token语料库,语言模型的任务是估计联合概率,通常被自回归分解为。
Vanilla Transformer语言模型
为了将Transformer或self-attention应用于语言建模,核心问题是如何训练Transformer将任意长的上下文有效地编码为固定大小的表示。假设有无限的内存和计算量,一个简单的解决方案是使用无限制的Transformer解码器(类似于前馈神经网络)处理整个上下文序列,但资源往往是有限的。一种可行但粗略的近似方法是将整个语料库分割成更短的可控的大小,并且只在每个部分中训练模型,忽略前面部分中的所有上下文信息。在这种训练模式下,无论是前向还是后向传递,信息都不会跨片段流动。
使用固定上下文长度有两个限制:1)最大的依赖长度可能超过段长度的上限,在字符级语言模型中可能是上百,因此,虽然与神经网络相比,自注意机制受梯度消失问题的影响较小,但Vanilla Transformer模型无法充分利用这一优势;2)简单地将序列分成固定长度的片段将导致上下文碎片问题。
带有状态的段级递归重用
为了解决使用固定长度上下文的局限性,我们建议向Transformer体系结构引入一种递归机制。在训练期间,为前一个段计算的隐藏状态序列被固定并缓存,以便在模型处理下一个新的段时作为扩展上下文重用。虽然梯度仍然保持在一个段内,但是这个额外的输入允许网络利用历史中的信息,从而能够建模长期依赖关系并避免上下文碎片化。设长度为L的两个连续线段为和。将段生成的第n层隐藏状态表示为,则段的第n层隐藏状态如下列公式所示。与传统Trnasformer不同的是,key 和 value 依赖于扩展上下文。
通过将这种递归机制应用于语料库的每两个连续的片段,它本质上是在隐藏状态中创建一个片段级递归。因此,有效的上下文被利用可以远远超过两个部分。但由于周期性的依赖每段之间都向下移动一层,最大的可能依赖长度随层数和段长度线性增长。
除了实现超长上下文和解决碎片问题之外,递归方案的另一个好处是显著加快了计算速度。具体地说,在计算过程中,可以重用前面部分的表示,而不是像普通模型那样从头开始计算。
相对位置编码
在重用隐藏状态时,需要保持位置的一致性。在传统Transformer中,序列顺序的信息由一组绝对位置编码提供。简单将该位置编码应用于我们的重现机制中,隐藏状态序列的计算方法如下:
由于单词embedding和都与位置编码相加,因此模型不能区分和的位置差异。
为了避免这种情况,其基本思想是只对隐藏状态下的相对位置信息进行编码。理论上来说,绝对位置编码给了模型一个偏置,告诉信息如何聚集。出于同样的目的,我们可以将相同的信息注入到每一层的注意评分中,而不是将偏置静态地加入到初始嵌入中。例如,一个query向量不需要知道每个key向量的绝对位置就可以确定片段的时间顺序,它只需要知道每个key向量和它自身之间的相对距离即可,即。可以创建一个相对距离embedding ,其中第行表示两个位置之间i的相对距离。通过将相对距离动态地注入注意力分数,query向量可以通过它们的距离轻易区分和。同时,我们不会丢失任何时间信息,因为绝对位置可以从相对距离递归恢复。
将递归机制与相对位置嵌入相结合,我们最终得到N层Transformer-XL架构如下,对于n=1,..,N:
实验
将Transformer-XL应用于WikiText-103、 enwik8等数据集上的字符级和单词级语言模型上,均获得SOTA结果。