©PaperWeekly 原创 · 作者|苏剑林
单位|追一科技
研究方向|NLP、神经网络
Attention 机制的 复杂度是一个老大难问题了,改变这一复杂度的思路主要有两种:一是走稀疏化的思路,比如我们以往介绍过的 Sparse Attention 以及 Google 前几个月搞出来的 Big Bird [1] ,等等;二是走线性化的思路,这部分工作我们之前总结在线性 Attention 的探索:Attention 必须有个 Softmax 吗?中,读者可以翻看一下。
本文则介绍一项新的改进工作 Performer,出自 Google 的文章 Rethinking Attention with Performers,它的目标相当霸气:通过随机投影,在不损失精度的情况下,将 Attention 的复杂度线性化。
论文标题:
Rethinking Attention with Performers
论文链接:
https://arxiv.org/abs/2009.14794
说直接点,就是理想情况下我们可以不用重新训练模型,输出结果也不会有明显变化,但是复杂度降到了 !看起来真的是“天上掉馅饼”般的改进了,真的有这么美好吗?
Attention
我们知道,Attention 的一般定义为:
对于标准的 Scaled-Dot Attention 来说, (有时候指数部分还会多个缩放因子,这里我们就不显式写出来了),将整个序列的运算写成矩阵形式就是:
我们主要关心 Self Attention 场景,所以一般有 。在上式中, 这一步相当于要对 个向量对做内积,得到 个实数,因此不管时间还是空间复杂度都是 的。
而对于线性 Attention 来说, ,其中 是值域非负的激活函数。这样一来,Attention 的核心计算量(式(1)中的分子部分)就变成了:
上式左端的复杂度依然是 的,由于矩阵乘法满足结合律,我们可以先算后面两个矩阵的乘法,这样复杂度就可以降为