1、Attention计算中SoftMax的强制采样问题
标签:Attention机制
文章《8年了,Transformer注意力机制一直有Bug?》指出Softmax函数用于离散选择问题(分类、生成的词预测等)时表现良好,具备合理性,但应用于Attention的权重计算时会造成“信息过剩”。
具体地,当某个网络层状态下,如当前词不需要与序列中所有词之间有太强的相关性,使用Attention的Softmax归一化则会造成不必要信息的混入。为什么会出现词的“低信息需求”情况呢?原因是Transformer中的注意力往往都是多头注意力机制,某个词在某些头中可能需要“积极”地与序列所有词做交互,而在某些其它头可能无需交互,不需要过多特征,这种情况下需要给向量留有“弱信息”的操作空间。因此提出Softmax Super-Mod计算方法,如下:
相比一般的Softmax,上图的
S
o
f
t
m
a
x
1
Softmax_1
Softmax1在分母中增加了常数1,目的是为前面所说的“空信息”保留一定变化,使得当前词对所有位置的词都能保持“冷漠”状态,而不是一般Softmax的强制归一化,迫使当前词在任何情况下都必须拿到“总量”为1的值编码。
Softmax在大多数情况下都运行良好,唯一的小 Bug 也只是让注意力头没法“乖乖闭嘴”。在当前词需要降低与所有词交互的情况下, S o f t m a x 1 Softmax_1 Softmax1可以将所有位置的 α \alpha α注意力大小降低到一个较小值,从而获得“弱信息”。而在需要交互的情况下,由于分母只是增加了1,不会对权重造成较大影响,可以正常地捕捉需要的值向量。
由于
S
o
f
t
m
a
x
1
Softmax_1
Softmax1 的导数正值特性,所以我们始终拥有非零梯度,同时函数还具备和原来一样的属性,即Attention的相对值不变:
作者最后希望大家能给出Attention的权重峰度和激活无穷范数多轮运行后的实际影响,帮助他把论文发了。
2.Attention角度的长度外推优化
标签:Attention机制,熵不变性,长度外推
长度外推是近年来Transformer类模型优化的一个热门话题,长度外推指的是预测时的输入长度大于训练时的最大输入长度,一般长度外推的优化需要从位置编码入手。早期的绝对位置编码如Sinusoidal无法保证在长度扩展(2倍或以上)后还有较好的性能;而一些相对位置编码(如XLNET、T5上的)虽然也有长度限制前提,但通过一些微调也能获得外推能力;而后来出现的局部注意力ALIBI及其改进版本KERPLE、Sandwich就具有良好的长度外推性,不受绝对位置影响,但局部注意力却使模型捕捉不到远距离信息,同时上述几种方案只能表达出相对距离,无法感知位置先后(即
(
x
m
,
x
n
)
和
(
x
n
,
x
m
)
的位置编码一样
(x_m, x_n)和(x_n, x_m)的位置编码一样
(xm,xn)和(xn,xm)的位置编码一样);RoPE是一种以坐标旋转为原理的相对编码,可以通过内插或外推两种方法推广到长序列。
而这里介绍的是从Scaled Dot-Product Attention计算上优化长度外推性,具体可以参考苏神的从熵不变性看Attention的Scale操作。里面提到若要确保模型对长文本的良好性能,Attention的计算应具备适配于序列长度的“熵不变性”,这个熵在这里怎么定义呢?具体就是如果Attention的熵较大时,往往导致权重更均匀地分配在多个token上,造成“注意力不集中”的问题,影响模型的性能;如果熵较小时,权重可以正常聚焦在目标token. 此外Attention熵的不稳定会导致权重值容易偏向1,带来梯度消失问题。
对此提出在点积后加一个放缩项
l
o
g
n
log n
logn,n即序列长度,并给出新的Scaled Dot-Product Attention计算方式如下:
A
t
t
e
n
t
i
o
n
(
Q
,
K
,
V
)
=
S
o
f
t
m
a
x
(
κ
⋅
l
o
g
n
d
Q
K
T
)
V
Attention(Q, K, V)=Softmax(\frac {κ\sdot log n}{d} QK^T)V
Attention(Q,K,V)=Softmax(dκ⋅lognQKT)V
相比原始的计算多了
κ
⋅
l
o
g
n
κ\sdot log n
κ⋅logn项,实质上是对点积结果的一种放缩,以调节Softmax后的权重分布平滑性。κ是超参数,其确定如下:作者以512的长度做基准,因为512是当今模型训练最常用的输入长度。在长度为512时,使注意力的点积计算与原始Transformer一致,由此确定了
κ
=
d
l
o
g
512
κ=\frac {\sqrt d}{log512}
κ=log512d,y因而上式整理后为:
A
t
t
e
n
t
i
o
n
(
Q
,
K
,
V
)
=
S
o
f
t
m
a
x
(
l
o
g
512
n
d
Q
K
T
)
V
Attention(Q, K, V)=Softmax(\frac {log_{512} n}{\sqrt d} QK^T)V
Attention(Q,K,V)=Softmax(dlog512nQKT)V
分析一下上述公式,看看是怎么做到“熵不变性”的。当n=512时,Attention点积计算与原始计算保持一致,模型通过正常的权重分布获得值编码表示;当n<512时,由于长度较短,注意力的查询空间变小,因此注意力也变得更加“集中”,为了抵消这种影响, l o g 512 n log_{512} n log512n也相应变小,我们都知道对于Softmax(x)函数,当 x 1 , x 2 , . . . , x n x_1, x_2, ... ,x_n x1,x2,...,xn的绝对值整体缩小时,经Softmax(x)计算之后的特征分布会更加平滑;相反绝对值扩张时分布会更悬殊。 而n<512时对应着 l o g 512 n < 1 log_{512} n<1 log512n<1,且n一般不可能为1以下的值,因此 0 < l o g 512 n < 1 0<log_{512} n<1 0<log512n<1,对应着点积值缩小,Softmax之后的注意力能平滑些,这正好抵消了长度短时Attention熵减小的影响。
相反在长度外推情况时,对于n>512的条件下, l o g 512 n > 1 log_{512} n>1 log512n>1,对应着点积的扩张,Softmax之后的注意力分布更突兀,较大的注意力值能够进一步加强,这也有效地缓解了长度增加时Attention熵增加导致的注意力衰退问题。
参考链接
- https://mp.weixin.qq.com/s/YbxgL5XBz95ziioxJ7f2pA
- https://kexue.fm/archives/8823