Transformer-XL论文笔记

论文地址:Transformer-XL:: Attentive Language Models Beyond a Fixed-Length Context

摘要

Transformer具有学习长期依赖的能力,但是在语言模型的设置中,受限于固定长度的上下文。在本文,我们提出xl,能够学习超过固定长度的依赖,并且不破坏时间上的统一性。它包含一个a segment-level recurrence mechanism 以及novel position encoding scheme, 我们的方法不仅能学习更长期的依赖,还能解决context fragmentation problem,剩下的就是吹牛逼

1.介绍

语言建模需要长期依赖,具有一些成功的例子,例如:unsupervised pretraining.然而,深度学习中,从序列数据学习长期依赖一直是一个问题.RNN 尤其是LSTM,被认为是语言模型任务的标准解法,在一benchmark上都取得了一些不错的成果。尽管如此,由于梯度消失和爆炸问题,RNN很难优化,LSTM中的门机制和 gradient clipping的介绍也很难充分处理这个问题。之前的工作还表明LSTM LM 平均学习200个上下文单词。
在另一方面,Atention机制使得优化变得更简单,并且能够学习长期依赖。有人通过一系列辅助损失函数设计了在字符LM上的深度Transformer,比LSTM性能好很多。尽管如此,他是在固定长度的分段上进行的,段与段之间没有关联。因为这个固定长度的上下文,模型不能捕捉在预定义长度之外的更长期依赖。此外,固定长度的片段是通过选择一个连续的符号块来创建的,而不考虑句子或任何其他语义边界。因此,模型缺乏能预测前几个单词的足够的上下文信息,导致优化效率低下,性能低下,我们将这个问题定义为context fragmentation.
为了解决前述固定长度上下文向量的问题,我们提出了Transformer-XL (meaning extra long),我们将时序的概念引入了我们的网络。特别地,我们并不为每一个分段从头计算hidden states,而是重复使用之前分段的hidden states.这个重复使用的hidden states 相当于当前分段的一个memory,在分段之间构建起一个时序关联。因此,建模长期依赖变得可能,因为信息可以在时序之间进行传播,此外,从之前的分段传递信息也可以解决context fragmentation.的问题。更重要的是,为了状态重用并不引起时序混乱,相对位置编码很重要,并且能更好的泛化对训练时未见过的长句子。

2.相关工作

为了捕捉语言模型的长期依赖,很多工作都是把更长的上下文喂进网络中。在序列建模任务中,捕捉长期依赖的问题依然存在,有很多LSTM的改编,一直在致力于研究减轻梯度消失问题,例如更好的初始化,辅助损失函数,等等,我们的模型基于transformer,并证明了 LM确实会从模型学习长期依赖的能力中受益。

3.模型

给定一个(x1,x2,xT)的token corpus,语言模型的任务是估计联合概率,通常被自回归因式分解为一系列乘积。在本篇论文中,我们采用标准的方法来建模这个条件概率。具体来说,将想x

3.1 vanilla Transformer 语言模型

为了将transformer 或者是self-attention应用到语言模型任务到LM中,其中重要的一个方面就是把任意长的context 编码为固定长度的表示,给与无限的内存和计算资源,一个简单的途径是使用unconditional Transformer decoder来处理序列,但是这在实践中是不可能的。
一个可行但是粗俗的途径是将整个语料划分为可以处理的更好的分段,只在每个分段内进行训练,忽略之前分段的上下文信息,我们将之称之为vanilla model,在这种范式下面,信息在前向和后向两个方向上都不存在流动。这种固定长度的context有两个限制,最可能的最大依赖长度受分段长度的限制,在字符级别的lm上主要是几百,因此,尽管self-attention机制较小程度地受到梯度消失问题,这个vanilla model却没有很充分的利用这个优势,其次,尽管我们可以使用padding 来尊重句子或者语义边界,在实践上,我们只是简单将句子进行固定长度分块,以提高效率,然而这会导致我们上文提到的context fragmentation.问题。
在评估时,the vanilla model消耗固定长度分段的context,但只在最后一步做评估,并且新的分段必须从头处理。这个过程确保了每一次预测都利用了最大程度的上下文长度,并且解决了context fragmentation.的问题,但是这种太慢了,我们提出的模型可以很明显的提高评估速度

3.2 Segment-Level Recurrence with State Reuse

为了处理长度固定的上下文限制,我们将时序机制引入transformer,在训练过程中,上一个段的隐藏状态序列被固定,并缓存以在模型处理下一个新段时作为被扩展的上下文重用。尽管梯度依然存在,这个额外增加的输入让模型学习到了更长的依赖,并且避免了context fragmentation问题。
具体如下:Transformer-XL论文笔记_第1张图片

和标准的transformer相比,我们的模型的主要不同之处,主要是当前段的 key value 值的计算依赖于扩展的上下文向量,也就是说包含在缓存的上一个段上一层的h值。
是用这样的时序机制应用到语料中每两个相邻的段中,在隐层状态中创造了一个分段级别的时序。因此,有效的上下文会超过两个分段。然而,我们注意到两个连续分段之间的时序依赖其实向下跨越了一个层,结果,最大的依赖长度为O(N × L)。并且应当和相对编码一起使用。除了超长向下文问题和碎片问题,时序机制的另一个优点就是更快的评估速度,在评估期间,之前分段的信息可以被重复使用而不是从头计算。
在本次试验中,在预测时,我们可以使用之前很多分段的信息,在训练时,为1 ,在预测时,增长几倍

3.2 Relative Positional Encodings

我们发现之前文章里的idea 非常的吸引人,但是为了重用状态,有一个关键性的技术问题我们还没有解决。就是,我们在重用状态时,如何保证位置信息的一致性呢?如果我们系统地将 vinalla model 中的编码方式拿过来的话,不同分段之间相同位置的编码是一样的我们无法区分这样不同的分段,这会造成性能下降
为了改善这种失败的模式,解决途径是在hidden states中使用相对位置编码。在概念上来说,这种编码给模型给了模型关于如何汇聚信息,就是attend 哪些位置,一种时序上的线索或者偏移。出于同一个目的,我们可以不在embedding 中包含位置信息,而是将其注入attention score中。例如,

你可能感兴趣的:(nlp)