Sharing Attention Weights for Fast Transformer
2019, IJCAI.
这篇论文的主要思想是通过共享注意力权重来加速Transformer。(关于Transformer,网上已有很多优秀的解读了,不了解的可以看看这篇。)
作者在10个公开数据集上进行了实验,对比其他baselines,至少能够提速1.3倍。
Introduction
由于Transformer可并行化计算的特性,使其被广泛运用于自然语言处理任务中。
但是,虽然Transformer在训练阶段速度很快,但是其在测试推理阶段的速度却是大打折扣的。因为在测试阶段,decoder的decoding过程无法并行计算,每一次只能预测出一个单词,然后再利用这个单词预测下一个单词。这种auto-regressive decoding由于无法并行计算,所以时间开销是很大的。当堆叠多层注意力层时,情况会更加糟糕。
近年来,也有学者针对上述问题提出了一些解决的方法。比如,ANN[1](Average Attention Network)使用加注意力机制和平均注意力模型来替代点积注意力机制;NMT[2](Non-Autoregressive Transformer)在传统Transformer的基础上提出一种非自回归解码的模型。但是这些方法要么失去了显式建模词与词之间相关性的能力,要么就是模型结构过于复杂难以训练。
与上述方法不同,这篇论文提出的SAN(shared attention network)是通过在层间共享注意力权重来加速Transformer。因为作者观察到,序列中不同位置的注意力分数,在不同的注意力层表现出相似的分布规律。因此在层间共享注意力权重能够减少冗余计算,提升模型的计算速度,同时还能减少内存占用。
SAN的思想很简单,因此很容易实现,并且能够应用于现有的各种Transformer变体中。
Shared Attention Networks
Standard Transformer:
在层间共享注意力权重的前提是,他们各自原本的注意力权重十分相近,否则在两者差距很大的情况下共享注意力权重会大大减弱模型的性能。
令 S [ i ] S_{[i]} S[i]表示为注意力权重矩阵的第 i i i列,代表了在获得位置 i i i的编码向量时,其他各个位置的注意力权重。在 S [ i ] S_{[i]} S[i]中, S i , j S_{i,j} Si,j表示融合位置 j j