当前Transformer架构用的最多的注意力机制,全称为“Scaled Dot-Product Attention”,其中“Scaled”是因为在Q,K转置相乘之后还要除以一个d再做Softmax(下面均不失一般性地假设Q,K,VRn×d):
Attention(Q,K,V)=softmax(QKd)V

《浅谈Transformer的初始化、参数化与标准化》中,我们已经初步解释了除以d的缘由。而在这篇文章中,笔者将从“熵不变性”的角度来理解这个缩放操作,并且得到一个新的缩放因子。在MLM的实验显示,新的缩放因子具有更好的长度外推性能

熵不变性 #

我们将一般的Scaled Dot-Product Attention改写成
oi=nj=1ai,jvj,ai,j=eλqikjnj=1eλqikj
其中λ是缩放因子,它跟qi,kj无关,但原则上可以跟长度n、维度d等参数有关,目前主流的就是λ=1/d

本文提出一个观点:

为了使得模型结果能够更好地泛化到未知长度,Attention机制的设计应该使得ai,j尽量具备熵不变性

怎么理解这句话呢?首先,泛化到未知长度,指的是预测长度和训练不一致时也能有不错的效果,比如n=64训练然后外推到n=128,256测试。我们知道,使用RoPE之类的相对位置编码的模型,对长度具有比较好的外推性,但我们依然可以通过更好的设计来增强这种外推性,比如熵不变性就是其中之一。

具体来说,ai,j可以视为i为条件、j为随机变量的条件分布,它的熵为
Hi=nj=1ai,jlogai,j
熵不变性是指,Hi应该对长度n不敏感。更具体一点,就是如果在已有的token基础上,再补充几个token,那么新算出来各个ai,j自然也会有所改变,但我们希望Hi不要有太大改变。

为什么希望熵不变呢?我们知道,熵是不确定性的度量(参考《“熵”不起:从熵、最大熵原理到最大熵模型(一)》),换个角度想,我们可以将不确定性视为注意力的“聚焦程度”:如果熵为0,那么注意力将聚焦到某一个token上,如果熵为logn,那么注意力均匀分布到所有token上。我们希望熵不变,是希望引入新的token后,已有的token依旧能同样地聚焦到原来的token上,而不希望新token的引入过多地“分摊”了原有的注意力,导致求和结果显著发生变化。

新的因子 #

根据熵不变性以及一些合理的假设,我们可以得到一个新的缩放因子,从而得到一种Scaled Dot-Product Attention:
Attention(Q,K,V)=softmax(κlogndQK)V
这里的κ是一个跟n,d都无关的超参数,详细推导过程我们下一节再介绍。为了称呼上的方便,这里将式(1)描述的常规Scaled Dot-Product Attention称为“Attention-O”(Original),而式(4)以及下面的式(5)描述的变体称为“Attention-E”(Entropy Invariance)。

可能有读者对引入了一个新参数感到不满意,其实这个不难解决。我们知道当前主流的预训练长度就是512,所以我们假设主流的参数都是为n=512调试好的,所以当n=512的时候,上式应退化为普通的Scaled Dot-Product Attention,即κlog512d=1d,推出κ=dlog512,代入上式整理后得到
Attention(Q,K,V)=softmax(log512ndQK)V
这就去掉了超参数λ,下面的实验也是用这个版本。

为了验证该改动是否真如预期那样能提高Transformer的外推效果,笔者分别用Attention-O和Attention-E分别训练了一个RoFormer small版本,训练任务为MLM,训练长度为64,然后在不同长度的验证集下比较MLM的准确率,结果如下:
Attention的长度外推实验n=64n=128n=256n=5121024Attention-O43.2736.5323.0215.1211.54Attention-E43.1141.1734.0420.1513.58
从实验结果可以看出,在与训练长度一致n=64的情况下,Attention-O和Attention-E的效果是很接近的,但是外推到更大的测试长度时,则明显拉开了差距,比如n=256时Attention-E要比Attention-O高10个百分点以上的准确率,可真不是一星半点了。

推导过程 #

这一节我们介绍式(4)的推导过程。事实上,推导过程和假设都跟《最小熵原理(六):词向量的维度应该怎么选择?》中的几乎是一样的。

首先,我们代入ai,j的表达式,就可以得到:
Hi=nj=1ai,jlogai,j=lognj=1eλqikjnj=1eλqikj(λqikj)nj=1eλqikj
要注意,我们仅仅是要做一个半定量的估计,以确定适合的λ来抵消部分长度的影响,让熵完全不受长度影响是做不到的。所以,我们可以做一些假设,比如假设kj是一个随机变量,那么可以写出
nj=1eλqikj=n×1nnj=1eλqikjnEj[eλqikj]
将所有求和都用同样的近似代替,我们得到
Hilogn+logEj[eλqikj]λEj[eλqikj(qikj)]Ej[eλqikj]
留意到一般情况下qi,kj都是Layer Norm出来之后再接一个Dense层,而Dense层接近正交变换(参考《从几何视角来理解模型参数的初始化策略》),所以我们近似地假设qi,kj都是模长为d的向量,所以qikj=dcos(qi,kj);然后进一步假设kj均匀地分布在半径为d的球面上,那么对kj的期望可以转化为对qi,kj夹角的期望,即
Hilogn+logEθ[eλdcosθ]λdEθ[eλdcosθcosθ]Eθ[eλdcosθ]
其中θ服从的分布就是球面上任意两个向量之间的夹角分布,我们在《n维空间下两个随机向量的夹角分布》讨论过。接下来可以像《最小熵原理(六):词向量的维度应该怎么选择?》的“近似估计”一样,用拉普拉斯近似得到
Hilogn0.24λd+O(1)
因此,为了抵消长度n的影响,我们让logn0.24λd=0,从而得出λ=logn/(0.24d)。当然,我们知道这只是估计,所以没必要保留系数0.24了,倒不如直接引入超参数κ,使得
λ=κlognd
这就是对应式(4)了。

相关结果 #

在阅读ACL2022的投稿论文时,发现上面有一篇《Overcoming a Theoretical Limitation of Self-Attention》,给出了相近的结果(论文4.3节的公式1):
Attention(Q,K,V)=softmax(logndQK)V
不过,该论文并没有太深刻的理论分析,只是构建了两个特殊的case来测试Attention的性能,测试发现往缩放因子乘上logn有助于泛化长度,所以就提出来了。

然而可以看出,如果按照默认约定log用自然对数的话,那么上式很明显是不合理的,因为当n较大时,缩放因子过大,会导致严重的梯度消失。只不过该论文只是在机器翻译上做实验,测得都是n=20级别的序列,所以就没有显示出梯度消失问题。

文章总结 #

本文从熵不变性的角度重新推导了Scaled Dot-Product Attention中的Scale操作,得到了一个新的缩放因子。初步的实验结果显示,新的缩放因子不改变已有的训练性能,并且对长度外推具有更好的结果。

转载到请包括本文地址:https://spaces.ac.cn/archives/8823

更详细的转载事宜请参考:《科学空间FAQ》

如果您还有什么疑惑或建议,欢迎在下方评论区继续讨论。

如果您觉得本文还不错,欢迎分享/打赏本文。打赏并非要从中获得收益,而是希望知道科学空间获得了多少读者的真心关注。当然,如果你无视它,也不会影响你的阅读。再次表示欢迎和感谢!

如果您需要引用本文,请参考:

苏剑林. (Dec. 21, 2021). 《从熵不变性看Attention的Scale操作 》[Blog post]. Retrieved from https://spaces.ac.cn/archives/8823

@online{kexuefm-8823,
        title={从熵不变性看Attention的Scale操作},
        author={苏剑林},
        year={2021},
        month={Dec},
        url={\url{https://spaces.ac.cn/archives/8823}},
}