1 token对token”是必须的吗
《Synthesizer: Rethinking Self-Attention in Transformer Models》
本质上来看,自注意力就是通过一个n×n的矩阵A和d×d′的矩阵Wv,将原本是n×d的矩阵X,变成了n×d′的矩阵AXWv。其中矩阵A是动态生成的,对于矩阵B,本质上来说它就是X里边两两向量的内积组合,所以我们称它为“token对token”的Attention。
那么,就到了前面提出的问题:“token对token”是必须的吗?能不能通过其他方式来生成这个矩阵B?Google的这篇论文正是“天马行空”了几种新的形式并做了实验,这些形式统称为Synthesizer。
1.1 几种形式变化
- Dense形式
B需要是n×n大小的,而X是n×d的,所以只需要一个d×n的变换矩阵Wa就可以将它变成n×n了,即
B=XWa
这其实就相当于把K固定为常数矩阵W⊤了。当然,原论文还做得更复杂一些,用到了两层Dense层:
B=relu(XW1+b1)W2+b2
- Random形式
刚才说Dense形式相当于把K固定为常数矩阵,我们还能不能更“异想天开”一些:把Q固定为常数矩阵?这时候整个B相当于是一个常数矩阵,即
B=R
原论文中还真是实验了这种形式,称之为Random,顾名思义,就是B是随机初始化的,然后可以选择随训练更新或不更新。
据原论文描述,固定形式的Attention首次出现在论文《Fixed Encoder Self-Attention Patterns in Transformer-Based Machine Translation》,不同点是那里的Attention矩阵是由一个函数算出来的,而Google这篇论文则是完全随机初始化的。从形式上看,Random实际上就相当于可分离卷积(Depthwise Separable Convolution)运算。
- 低秩分解
上面两种新形式,往往会面对着参数过多的问题,所以很自然地就想到通过低秩分解来降低参数量。对于Dense和Random,原论文也提出并验证了对应的低秩分解形式,分别称为Factorized Dense和Factorized Random。Factorized Dense
通过Dense的方式,生成两个n×a,n×b的矩阵B1,B2,其中ab=n;
然后将B1重复b次、然后将B2重复a次,得到对应的n×n矩阵B̃1,B̃2,
最后将它们逐位相乘(个人感觉相乘之前B̃2应该要转置一下比较合理,但原论文并没有提及),合成一个n×n的矩阵:
B=B̃1⊗B̃2Factorized Random
本来是一整个n×n的矩阵R,现在变成两个n×k的矩阵R1,R2,然后
B=R1R⊤2
- 混合模式
到目前为止,连同标准的自注意力,我们有5种不同的生成矩阵B的方案,它们也可以混合起来,即
其中Bi是不同形式的自注意力矩阵,而∑i=1Nαi=1是可学习参数。
1.2 结果分析
前面介绍了统称为Synthesizer的几种新型自注意力形式,它们的共同特点是没有保持“token对token”形式,尤其是Random,则完全抛弃了原有注意力的动态特点,变成了静态的矩阵。
- 机器翻译
表格显示,除了固定的Random外,所有的自注意力形式表现基本上都差不多,而且就算是固定的Random也有看得过去的效果,这表明我们以往对自注意力的认知和解释都太过片面了,并没有揭示自注意力生效的真正原因。
- 摘要对话
在自动摘要这个任务上,标准注意力效果比较好,但是对话生成这个任务上,结果则反过来:标准的自注意力是最差的,Dense(D)和Random(R)是最好的,而当Dense和Random混合了标准的自注意力后(即 D+V 和 R+V),效果也变差了。这说明标准注意力并没有什么“独占鳌头”的优势,而几个Synthesizer看起来是标准注意力的“退化”,但事实上它们互不从属,各有优势。
- 预训练+微调 #
在这个结果中,相比标准自注意力,Dense和Random就显得逊色了,这表明Dense和Random也许会在单一任务上表现得比较好,而迁移能力则比较弱。但是不能否定的是,像Random这样的自注意力,由于直接省去了QK⊤这个矩阵运算,因此计算效率会有明显提升,因此如果能想法子解决这个迁移性问题,说不准Transformer模型家族将会迎来大换血。
摘抄自:Google新作Synthesizer:我们还不够了解自注意力
2 必须有softmax吗
《Transformers are RNNs: Fast Autoregressive Transformers with Linear Attention》,
了解到了线性化Attention(Linear Attention)这个探索点
2.1 定义问题
为了保留Attention相似的分布特性,我们要求sim(qi,kj)≥0恒成立。
如果直接去掉Softmax,那么就是sim(qi,kj)=q⊤ikj,问题是内积无法保证非负性,所以这还不是一个合理的选择。下面我们简单介绍几种可取的方案。
2.2 几种替代方案
值得指出的是,下面介绍的这几种Linear Attention,前两种来自CV领域,第三种是笔者自己构思的,所以都还没有在NLP任务上做过什么实验,各位做模型改进的NLPer们就有实验方向了(_)~~顺便说一下,CV领域有不少对Attention的改进工作(除了下面介绍的外,还有EMANet等),很多内容都值得做NLP的我们参考阅读。
- 核函数形式
一个自然的想法是:如果qi,kj的每个元素都是非负的,那么内积自然也就是非负的。
为了完成这点,我们可以给qi,kj各自加个激活函数ϕ,即sim(qi,kj)=ϕ(qi)⊤φ(kj)(4)
其中ϕ(⋅),φ(⋅)是值域非负的激活函数。
本文开头提到的论文《Transformers are RNNs: Fast Autoregressive Transformers with Linear Attention》选择的是ϕ(x)=φ(x)=elu(x)+1。非要讲故事的话,式(4)可以联想到“核方法(kernal method)”,尤其是ϕ=φ时ϕ就相当于一个核函数,而⟨ϕ(qi),ϕ(kj)⟩就是通过核函数所定义的内积。这方面的思考可以参考论文《Transformer dissection: An unified understanding for transformer’s attention via the lens of kernel》,此处不做过多延伸。
- 妙用Softmax
另一篇更早的文章《Efficient Attention: Attention with Linear Complexities》则给出了一个更有意思的选择。
它留意到在QK⊤中,Q,K,∈ℝn×d,如果“Q在d那一维是归一化的、并且K在n那一维是归一化的”,那么QK⊤就是自动满足归一化了,所以它给出的选择是:
Attention(Q,K,V)=softmax2(Q)softmax1(K)⊤V
其中softmax1、softmax2分别指在第一个(n)、第二个维度(d)进行Softmax运算。也就是说,这时候我们是各自给Q,K加Softmax,而不是QK⊤算完之后才加Softmax。如果直接取ϕ(qi)=softmax(qi),φ(kj)=softmax(kj),那么很显然这个形式也是上述核函数的一个特例。
另外这个设计在CV中出现过不止一次,比如A2-Nets也包含了同样的做法。
- 自己的构思
源于我们对原始定义的近似,如2.1定义问题所示。
由泰勒展开我们有
本文介绍了一些从结构上对Attention进行修改从而降低其计算复杂度的工作,其中最主要的idea是去掉标准Attention中的Softmax,就可以使得Attention的复杂度退化为理想的𝒪(n)级别(Linear Attention)。相比于其他类似的改进结构的工作,这种修改能在把复杂度降到𝒪(n)的同时,依然保留所有的“token-token“的注意力,同时还能保留用于做自回归生成的可能性。