一个自然的想法是:如果 的每个元素都是非负的,那么内积自然也就是非负的。为了完成这点,我们可以给 各自加个激活函数 ,即:其中 是值域非负的激活函数。本文开头提到的论文 Transformers are RNNs: Fast Autoregressive Transformers with Linear Attention [5] 选择的是 。非要讲故事的话,式(4)可以联想到“核方法(kernal method)”,尤其是 时 就相当于一个核函数,而 就是通过核函数所定义的内积。这方面的思考可以参考论文 Transformer dissection: An unified understanding for transformer’s attention via the lens of kernel [6],此处不做过多延伸。
2.2 妙用Softmax
另一篇更早的文章 Efficient Attention: Attention with Linear Complexities [7] 则给出了一个更有意思的选择。它留意到在 中,,如果“ 在 d 那一维是归一化的、并且 在 n 那一维是归一化的”,那么 就是自动满足归一化了,所以它给出的选择是:其中 分别指在第一个(n)、第二个维度(d)进行 Softmax 运算。也就是说,这时候我们是各自给 加 Softmax,而不是 算完之后才加 Softmax。其实可以证明这个形式也是式(4)的一个特例,此时对应于 ,读者可以自行推导一下。2.3 自己的构思在这里,笔者给出自己的一种构思。这个构思的出发点不再是式(4),而是源于我们对原始定义(2)的近似。由泰勒展开我们有:如果 ,那么就可以保证右端的非负性,而从可以让 。到这里读者可能已经想到了,想要保证 ,只需要分别对 做 归一化。所以,笔者最终提出的方案就是:这不同于形式(4),但理论上它应该是最接近原始的 Scaled-Dot Attention 了。
近来也有类似的工作发出来,比如IBM的PoWER-BERT: Accelerating BERT Inference via Progressive Word-vector Elimination [8] 和 Google 的 Funnel-Transformer: Filtering out Sequential Redundancy for Efficient Language Processing [9] 。
Attention机制最早是在视觉图像领域提出来的,但是真正火起来应该算是google mind团队的这篇论文《Recurrent Models of Visual Attention》[14],他们在RNN模型上使用了attention机制来进行图像分类。随后,Bahdanau等人在论文《Neural Machine Translation by Jointly Learning to Align and Translate》 [1]中,使用类似attention的机制在机器翻译任务上将翻译和对齐同时进行,他们的工作算是是第一个提出attention机制应用到NLP领域中。接着类似的基于attention机制的RNN模型扩展开始应用到各种NLP任务中。最近,如何在CNN中使用attention机制也成为了大家的研究热点。下图表示了attention研究进展的大概趋势。