与截断BPTT方法不同的是,我们的方法缓存的是一个隐藏状态序列,而不是最后一个隐藏状态,并且需要与相对位置编码技术一起应用。除了实现超长上下文和解决碎片问题外,递归方案的另一个好处是计算速度显著加快。在评估期间,来自前一段的表示可以被重用,而不是像在vanilla模型中那样从头计算。在我们在enwiki8上的实验中,Transformer-XL在评估过程中比vanilla模型快了1800多倍。
最后,递归式方案不需要局限于前一段。理论上,可以在GPU内存允许的情况下尽可能多地缓存之前的段,并在处理当前段时重用所有这些段作为额外的上下文。
当我们重用状态时,如何保持位置信息的一致性是一个难题。如果使用标准的Transformer的位置编码,模型无法分辨出位置的差异。为了防止这种错误情况发生,基本的思想是仅仅编码隐藏状态中的相对位置信息。从概念上讲,位置编码关于信息如何收集,提供模型一个暂时的线索或者偏见。为了达到同样的目的,我们可以将相同的信息注入到每一层的注意评分中,而不是将偏见静态地嵌入到初始嵌入中。
标准的Transformer中注意力分数:
\[\begin{aligned} \mathbf{A}_{i, j}^{\mathrm{abs}} &=\underbrace{\mathbf{E}_{x_i}^{\top} \mathbf{W}_q^{\top} \mathbf{W}_k \mathbf{E}_{x_j}}_{(a)}+\underbrace{\mathbf{E}_{x_i}^{\top} \mathbf{W}_q^{\top} \mathbf{W}_k \mathbf{U}_j}_{(b)} \\ &+\underbrace{\mathbf{U}_i^{\top} \mathbf{W}_q^{\top} \mathbf{W}_k \mathbf{E}_{x_j}}_{(c)}+\underbrace{\mathbf{U}_i^{\top} \mathbf{W}_q^{\top} \mathbf{W}_k \mathbf{U}_j}_{(d)} \end{aligned}\]本文改进后的注意力分数表示为:
\[\begin{aligned} \mathbf{A}_{i, j}^{\mathrm{rel}} &=\underbrace{\mathbf{E}_{x_i}^{\top} \mathbf{W}_q^{\top} \mathbf{W}_{k, E} \mathbf{E}_{x_j}}_{(a)}+\underbrace{\mathbf{E}_{x_i}^{\top} \mathbf{W}_q^{\top} \mathbf{W}_{k, R} \mathbf{R}_{i-j}}_{(b)} \\ &+\underbrace{u^{\top} \mathbf{W}_{k, E} \mathbf{E}_{x_j}}_{(c)}+\underbrace{v^{\top} \mathbf{W}_{k, R} \mathbf{R}_{i-j}}_{(d)} . \end{aligned}\]对比来看,主要有三点变化:
从另一个角度来解读这个公式的话,可以将attention的计算分为如下四个部分:
数据集和实验设置
主实验,提供详尽的实验分析
Transformer-XL获得了较强的困惑结果,模型的依赖性比rnn和Transformer要长,在评估过程中实现了大幅度的加速,并能够生成连贯的文本文章。设想Transformer-XL在文本生成、无监督特征学习、图像和语音建模等领域的有趣应用。
不足: