如何理解《注意力机制真的懂得“集中注意力”吗?》

在文章《从熵不变性看Attention的Scale操作》中,我们就从“集中注意力”的角度考察过Attention机制,当时我们以信息熵作为“集中程度”的度量,熵越低,表明Attention越有可能集中在某个token上。

但是,对于一般的Attention机制来说,Attention矩阵可能是非归一化的,比如《FLASH:可能是近来最有意思的高效Transformer设计》介绍的GAU模块,以及《相对位置编码Transformer的一个理论缺陷与对策》所引入的l2归一化Attention,甚至从更一般的Non-Local
Neural
Networks角度来看,Attention矩阵还未必是非负的。这些非归一化的乃至非负的Attention矩阵自然就不适用于信息熵了,因为信息熵是针对概率分布的。

为此,我们考虑在《如何度量数据的稀疏程度?》介绍的l1/l2形式的稀疏程度指标:
S ( x ) = E [ ∣ x ∣ ] E [ x 2 ] S(x) = \frac{E[|x|]}{\sqrt{E[x^2]}} S(x)=E[x2] E[x]

该指标跟信息熵相似,S(x)越小意味着对应的随机向量越稀疏,越稀疏意味着越有可能“一家独大”,这对应于概率中的one
hot分布,跟信息熵不同的是,它适用于一般的随机变量或者向量。
稀疏程度指标 S(x) 是用来衡量一个随机变量或随机向量中非零元素的重要性和数量。这个指标与信息熵有关联,但它的侧重点在于度量数据的稀疏程度,即数据中非零元素的平均能量与整个数据的平均能量之比。
在 l1/l2 形式中,S(x) 被定义为:
S ( x ) = E [ ∣ x ∣ ] E [ x 2 ] S(x) = \frac{E[|x|]}{\sqrt{E[x^2]}} S(x)=E[x2] E[x]
其中 E 表示期望值。S(x) 的值越小,意味着数据 x 的稀疏程度越高。具体来说:

  • E [ ∣ x ∣ ] E[|x|] E[x] 测量的是 x 的绝对值的期望值,这可以理解为数据中非零元素的平均绝对值。
  • E [ x 2 ] \sqrt{E[x^2]} E[x2] 测量的是 x 的平方的期望值的平方根,这可以理解为数据中所有元素(包括零和非零)的平均能量。
    因此,S(x) 能够反映数据中非零元素相对于整个数据的重要性。如果 S(x) 接近于 0,这通常意味着数据非常稀疏,大部分元素都是零,只有少数非零元素对整体能量有显著贡献。这种情况下,数据可能近似于 one-hot 分布,即大部分元素为零,只有一个元素为非零。
    需要注意的是,虽然 S(x) 可以用来衡量稀疏程度,但它并不直接度量信息熵。信息熵通常用于度量一个随机变量的不确定性或信息含量,而 S(x) 更侧重于度量数据中非零元素的重要性和数量。

简化形式 #
对于注意力机制,我们记 a = ( a 1 , a 2 , ⋯ , a n ) a=(a1,a2,⋯,an) a=(a1,a2,,an),其中 a j ∝ f ( q ⋅ k j ) aj∝f(q⋅kj) ajf(qkj),那么
S ( a ) = E k [ ∣ f ( q ⋅ k ) ∣ ] E k [ f 2 ( q ⋅ k ) ] − − − − − − − − − − √ ( 2 ) S(a)=Ek[|f(q⋅k)|]Ek[f2(q⋅k)]−−−−−−−−−−√(2) S(a)=Ek[f(qk)]Ek[f2(qk)](2)

接下来都考虑 n → ∞ n→∞ n的极限。假设 k ∼ N ( μ , σ 2 I ) k∼N(μ,σ2I) kN(μ,σ2I),那么可以设 k = μ + σ ε k=μ+σε k=μ+σε,其中 ε ∼ N ( 0 , I ) ε∼N(0,I) εN(0,I),于是
S ( a ) = E ε [ ∣ f ( q ⋅ μ + σ q ⋅ ε ) ∣ ] E ε [ f 2 ( q ⋅ μ + σ q ⋅ ε ) ] − − − − − − − − − − − − − − − − − √ ( 3 ) S(a)=Eε[|f(q⋅μ+σq⋅ε)|]Eε[f2(q⋅μ+σq⋅ε)]−−−−−−−−−−−−−−−−−√(3) S(a)=[f(qμ+σqε)][f2(qμ+σqε)](3)

注意ε所服从的分布 N ( 0 , I ) N(0,I) N(0,I)是一个各向同性的分布,与《n维空间下两个随机向量的夹角分布》推导的化简思路一样,由于各向同性的原因, q ⋅ ε q⋅ε qε相关的数学期望只与 q q q的模长有关,跟它的方向无关,于是我们可以将 q q q简化为(∥q∥,0,0,⋯,0),那么对ε的数学期望就可以简化为
S ( a ) = E ε [ ∣ f ( q ⋅ μ + σ ∥ q ∥ ε ) ∣ ] E ε [ f 2 ( q ⋅ μ + σ ∥ q ∥ ε ) ] − − − − − − − − − − − − − − − − − √ ( 4 ) S(a)=Eε[|f(q⋅μ+σ∥q∥ε)|]Eε[f2(q⋅μ+σ∥q∥ε)]−−−−−−−−−−−−−−−−−√(4) S(a)=[f(qμ+σqε)][f2(qμ+σqε)](4)

其中ε∼N(0,1)是一个随机标量。

您所描述的简化形式是针对注意力机制中的某个指标 S ( a ) S(a) S(a)。首先,我们记 a = ( a 1 , a 2 , ⋯ , a n ) a=(a1,a2,⋯,an) a=(a1,a2,,an),其中 a j ∝ f ( q ⋅ k j ) aj∝f(q⋅kj) ajf(qkj)。然后,我们考虑 n → ∞ n→∞ n的极限。为了简化计算,假设 k ∼ N ( μ , σ 2 I ) k∼N(μ,σ2I) kN(μ,σ2I),那么可以设 k = μ + σ ε k=μ+σε k=μ+σε,其中 ε ∼ N ( 0 , I ) ε∼N(0,I) εN(0,I)
接下来,我们利用各向同性的性质来简化计算。由于 ε ε ε 所服从的分布 N ( 0 , I ) N(0,I) N(0,I)是一个各向同性的分布,与《n 维空间下两个随机向量的夹角分布》推导的化简思路一样,由于各向同性的原因, q ⋅ ε q⋅ε qε 相关的数学期望只与 q q q 的模长有关,跟它的方向无关。于是我们可以将 q q q 简化为 ( ‖ q ‖ , 0 , 0 , ⋯ , 0 ) (‖q‖,0,0,⋯,0) (q,0,0,,0),那么对 ε ε ε 的数学期望就可以简化为:
S ( a ) = E ε [ ∣ f ( q ⋅ μ + σ ‖ q ‖ ε ) ∣ ] E ε [ f 2 ( q ⋅ μ + σ ‖ q ‖ ε ) ] S(a) = Eε[|f(q⋅μ+σ‖q‖ε)|]Eε[f^2(q⋅μ+σ‖q‖ε)] S(a)=[f(qμ+σqε)][f2(qμ+σqε)]
其中 ε ∼ N ( 0 , 1 ) ε∼N(0,1) εN(0,1) 是一个随机标量。这样,我们就成功地将原本复杂的计算简化为了更易于处理的随机标量计算。

这里是引用现在可以对常见的一些f进行计算对比了。目前最常用的Attention机制是 f = e x p f=exp f=exp,此时求期望只是常规的一维高斯积分,容易算得
S ( a ) = e x p ( − 12 σ 2 ∥ q ∥ 2 ) ( 5 ) S(a)=exp(−12σ2∥q∥2)(5) S(a)=exp(12σ2∥q∥2)(5)

σ → ∞ σ→∞ σ ∥ q ∥ → ∞ ∥q∥→∞ q时,都有 S ( a ) → 0 S(a)→0 S(a)0,也就是理论上标准Attention确实可以任意稀疏地“集中注意力”,同时这也告诉了我们让注意力更集中的方法:增大q的模长,或者增大各个k之间的方差,换言之拉开k的差距。

另一个例子是笔者喜欢的GAU(Gated Attention
Unit),它在开始提出的时候是 f = r e l u 2 f=relu2 f=relu2(不过笔者后来自己用的时候复原为Softmax了,参考《FLASH:可能是近来最有意思的高效Transformer设计》和《听说Attention与Softmax更配哦~》),此时积分没有 f = e x p f=exp f=exp那么简单,不过也可以直接用Mathematica硬算,结果是
S ( a ) = e − β 22 γ 2 ( 2 − − √ β γ + π − − √ e β 22 γ 2 ( β 2 + γ 2 ) ( e r f ( β 2 √ γ ) + 1 ) ) π − − √ 422 − − √ β γ e − β 22 γ 2 ( β 2 + 5 γ 2 ) + 2 π − − √ ( β 4 + 6 β 2 γ 2 + 3 γ 4 ) ( e r f ( β 2 √ γ ) + 1 ) − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − √ ( 6 ) S(a)=e−β22γ2(2−−√βγ+π−−√eβ22γ2(β2+γ2)(erf(β2√γ)+1))π−−√422−−√βγe−β22γ2(β2+5γ2)+2π−−√(β4+6β2γ2+3γ4)(erf(β2√γ)+1)−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−√(6) S(a)=eβ22γ2(2βγ+πeβ22γ2(β2+γ2)(erf(β2√γ)+1))π√422βγeβ22γ2(β2+5γ2)+2π(β4+6β2γ2+3γ4)(erf(β2√γ)+1)(6)

其中 β = q ⋅ μ , γ = σ ∥ q ∥ β=q⋅μ,γ=σ∥q∥ β=qμ,γ=σq。式子很恐怖,但是无所谓,画图即可: relu2注意力的稀疏程度曲线图 relu2注意力的稀疏程度曲线图

可以看到,只有 β < 0 β<0 β<0时,原版GAU的稀疏度才有机会趋于0。这也很直观,当偏置项小于0时,才有更多的机会让relu的结果为0,从而实现稀疏。这个结果也说明了跟f=exp的标准注意力不同,k的bias项可能会对 f = r e l u 2 f=relu2 f=relu2的GAU有正面帮助。

您举了两个例子,分别是常见的高斯注意力(Gaussian Attention)和笔者喜欢的 GAU(Gated Attention Unit)。通过对这两种注意力机制的稀疏程度进行分析,我们可以更深入地了解它们的特点。

  1. 高斯注意力:对于高斯注意力,我们使用 f = e x p f=exp f=exp。这种情况下,求期望只是常规的一维高斯积分。根据您给出的公式(5),我们可以得到 S ( a ) = e x p ( − 12 σ 2 ∥ q ∥ 2 ) S(a)=exp(−12σ2∥q∥2) S(a)=exp(12σ2∥q∥2)。当 σ → ∞ σ→∞ σ ∥ q ∥ → ∞ ∥q∥→∞ q 时,都有 S ( a ) → 0 S(a)→0 S(a)0。这意味着理论上标准注意力确实可以任意稀疏地“集中注意力”。同时,这个结果也告诉了我们让注意力更集中的方法:增大 q q q 的模长,或者增大各个 k k k 之间的方差,换言之拉开 k k k 的差距。
  2. GAU(Gated Attention Unit):对于 GAU,您提到开始提出的时候是 f = r e l u 2 f=relu2 f=relu2。这种情况下,积分没有 f = e x p f=exp f=exp 那么简单。根据您给出的公式(6),我们可以得到 S ( a ) = e − β 22 γ 2 ( 2 − − √ β γ + π − − √ e β 22 γ 2 ( β 2 + γ 2 ) ( e r f ( β 2 √ γ ) + 1 ) ) π − − √ 422 − − √ β γ e − β 22 γ 2 ( β 2 + 5 γ 2 ) + 2 π − − √ ( β 4 + 6 β 2 γ 2 + 3 γ 4 ) ( e r f ( β 2 √ γ ) + 1 ) − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − √ S(a)=e−β22γ2(2−−√βγ+π−−√eβ22γ2(β2+γ2)(erf(β2√γ)+1))π−−√422−−√βγe−β22γ2(β2+5γ2)+2π−−√(β4+6β2γ2+3γ4)(erf(β2√γ)+1)−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−√ S(a)=eβ22γ2(2βγ+πeβ22γ2(β2+γ2)(erf(β2√γ)+1))π√422βγeβ22γ2(β2+5γ2)+2π(β4+6β2γ2+3γ4)(erf(β2√γ)+1)。从公式中可以看出,只有 β < 0 β<0 β<0 时,原版 GAU 的稀疏度才有机会趋于 0。这也说明了跟 f = e x p f=exp f=exp 的标准注意力不同,k 的 bias 项可能会对 f = r e l u 2 f=relu2 f=relu2 的 GAU 有正面帮助。
    通过以上分析,我们可以看出不同注意力机制在稀疏程度方面的差异。这些差异有助于我们根据具体任务需求选择合适的注意力机制。

下面我们再来看一个最简单的例子:不加f,或者等价地说 f = i d e n t i c a l f=identical f=identical。这种情况下对应的就是最简单的一种线性Attention,同样可以用Mathematica硬算得:
S ( a ) = 2 π − − √ γ e − β 22 γ 2 + β e r f ( β 2 √ γ ) β 2 + γ 2 − − − − − − √ ( 7 ) S(a)=2π−−√γe−β22γ2+βerf(β2√γ)β2+γ2−−−−−−√(7) S(a)=2πγeβ22γ2+βerf(β2√γ)β2+γ2(7)

下面是几个不同β的函数图像: 极简线性注意力的稀疏程度曲线图 极简线性注意力的稀疏程度曲线图

注意,此时的S(a)是关于β偶函数(读者不妨尝试证明一下),所以β<0时图像跟它相反数的图像是一样的,因此上图只画了β≥0的结果。从图中可以看出,不加任何激活函数的线性Attention的稀疏程度并不能接近0,而是存在一个较高的下限,这意味着当输入序列足够长时,这种线性Attention并没有办法“集中注意力”到关键位置上。

您提到了一个最简单的注意力机制例子:不加 f f f,或者等价地说 f = i d e n t i c a l f=identical f=identical。这种情况下对应的就是最简单的一种线性 Attention。根据您给出的公式(7),我们可以得到 S ( a ) = 2 π − − √ γ e − β 22 γ 2 + β e r f ( β 2 √ γ ) β 2 + γ 2 − − − − − − √ S(a)=2π−−√γe−β22γ2+βerf(β2√γ)β2+γ2−−−−−−√ S(a)=2πγeβ22γ2+βerf(β2√γ)β2+γ2
您还提到了 S ( a ) S(a) S(a) 是关于 β β β 的偶函数,所以 β < 0 β<0 β<0 时图像跟它相反数的图像是一样的。因此,在上图中只画了 β ≥ 0 β≥0 β0 的结果。从图中可以看出,不加任何激活函数的线性 Attention 的稀疏程度并不能接近 0,而是存在一个较高的下限。这意味着当输入序列足够长时,这种线性 Attention 并没有办法“集中注意力”到关键位置上。
通过这个例子,我们可以看出激活函数 f 在注意力机制中的重要作用。引入适当的激活函数(如 exp、relu2 等)可以帮助注意力更好地集中在关键位置上,从而提高模型的性能。这也是为什么在实际应用中,我们经常会看到各种不同的注意力机制变种,它们通过引入不同的激活函数来适应不同的任务需求。

从《线性 Attention 的探索:Attention 必须有个 Softmax 吗?》我们知道,线性 Attention 的一般形式为 a j ∝ g ( q ) ⋅ h ( k j ) a_j \propto g(q) \cdot h(k_j) ajg(q)h(kj),其中 g,h 是值域非负的激活函数。我们记 q ′ = g ( q ) q' = g(q) q=g(q), k ′ = h ( k ) k' = h(k) k=h(k),那么 a j ∝ q ′ ⋅ k ′ a_j \propto q' \cdot k' ajqk,并且可以写出:
S ( a ) = E [ ϵ ⋅ q ′ ⋅ k ′ ] E [ ϵ ⋅ q ′ ⋅ k ′ ⋅ k ′ ⋅ q ′ ] = q ′ ⋅ E [ ϵ ⋅ k ′ ] ⋅ q ′ q ′ ⋅ E [ ϵ ⋅ k ′ ⋅ k ′ ⋅ q ′ ] ⋅ q ′ = q ′ ⋅ μ ′ ⋅ q ′ q ′ ⋅ ( μ ′ ⋅ μ ′ T + Σ ′ ) ⋅ q ′ = 1 1 + q ′ ⋅ Σ ′ ⋅ q ′ ⋅ ( q ′ ⋅ μ ′ ) 2 S(a) = \frac{E[\epsilon \cdot q' \cdot k']}{\sqrt{E[\epsilon \cdot q' \cdot k' \cdot k' \cdot q']}} = \frac{q' \cdot E[\epsilon \cdot k'] \cdot q'}{\sqrt{q' \cdot E[\epsilon \cdot k' \cdot k' \cdot q'] \cdot q'}} = \frac{q' \cdot \mu' \cdot q'}{\sqrt{q' \cdot (\mu' \cdot \mu'^T + \Sigma') \cdot q'}} = \frac{1}{1 + q' \cdot \Sigma' \cdot q'} \cdot (q' \cdot \mu')^2 S(a)=E[ϵqkkq] E[ϵqk]=qE[ϵkkq]q qE[ϵk]q=q(μμT+Σ)q qμq=1+qΣq1(qμ)2
这是关于非负型线性 Attention 的一般结果,现在还没做任何近似,其中 μ ′ \mu' μ, Σ ′ \Sigma' Σ 分别是 k ′ k' k 序列的均值向量和协方差矩阵。
从这个结果可以看出,非负型线性 Attention 也可能任意稀疏(即 S ( a ) → 0 S(a) \rightarrow 0 S(a)0),只需要均值趋于 0,或者协方差趋于 ∞ \infty ,也就是说 k ′ k' k 序列的信噪比尽可能小。然而 k ′ k' k 序列是一个非负向量序列,信噪比很小的非负序列意味着序列中大部分元素都是相近的,于是这样的序列能表达的信息有限,也意味着线性 Attention 通常只能表示绝对位置的重要性(比如 Attention 矩阵即某一列都是 1),而无法很好地表达相对位置的重要性,这本质上也是线性 Attention 的低秩瓶颈的体现。
为了更形象地感知 S ( a ) S(a) S(a) 的变化规律,我们不妨假设一种最简单的情况: k ′ k' k 的每一个分量是独立同分布的,这时候均值向量可以简化为 μ ′ = 1 \mu' = 1 μ=1,协方差矩阵则可以简化为 Σ ′ = σ ′ 2 I \Sigma' = \sigma'^2 I Σ=σ′2I,那么 S ( a ) S(a) S(a) 的公式可以进一步简化为:
S ( a ) = 1 1 + σ ′ ⋅ μ ′ ⋅ ∥ q ′ ∥ 2 ∥ q ′ ∥ 1 S(a) = \frac{1}{1 + \sigma' \cdot \mu' \cdot \frac{\|q'\|^2}{\|q'\|_1}} S(a)=1+σμq1q21
从这个结果可以看出,要想线性注意力变得稀疏,一个方向是增大 σ ′ ⋅ μ ′ \sigma' \cdot \mu' σμ,即降低 k ′ k' k 序列的信噪比,另一个方向则是增大 ∥ q ′ ∥ 2 ∥ q ′ ∥ 1 \frac{\|q'\|^2}{\|q'\|_1} q1q2,该因子最大值是 d − 1 2 d^{-\frac{1}{2}} d21,其中 d 是 q,k 的维数,所以增大它意味着要增大 d,而增大了 d 意味着提高了注意力矩阵的秩的上限,缓解了低秩瓶颈。

从《Google新作试图“复活”RNN:RNN能否再次辉煌?》中,我们了解到线性RNN模型系列,它们的特点是带有一个显式的递归,这可以看成一个简单的Attention: a = ( a 1 , a 2 , ⋯ , a n − 1 , a n ) = ( λ n − 1 , λ n − 2 , ⋯ , λ , λ 1 ) a=(a_1,a_2,\cdots,a_{n-1},a_n)=(\lambda_{n-1},\lambda_{n-2},\cdots,\lambda,\lambda_1) a=(a1,a2,,an1,an)=(λn1,λn2,,λ,λ1)。其中, λ ∈ ( 0 , 1 ] \lambda\in(0,1] λ(0,1]。我们可以算出:
S ( a ) = 1 − λ n n ( 1 − λ ) n − 1 + λ 1 n − 1 ( 1 − λ ) n − 1 + λ 1 n ( 1 − λ ) n − 2 + ⋯ + λ n 2 ( 1 − λ ) + λ n n S(a) = 1 - \lambda_n^n (1-\lambda)^{n-1} + \lambda_1^{n-1} (1-\lambda)^{n-1} + \lambda_1^n (1-\lambda)^{n-2} + \cdots + \lambda_n^2 (1-\lambda) + \lambda_n^n S(a)=1λnn(1λ)n1+λ1n1(1λ)n1+λ1n(1λ)n2++λn2(1λ)+λnn
λ < 1 \lambda<1 λ<1 时,只要 n → ∞ n\rightarrow\infty n,总有 S ( a ) → 0 S(a)\rightarrow 0 S(a)0。所以对于带有显式Decay的线性RNN模型来说,稀疏性是不成问题的,它的问题是只能表达随着相对位置增大而衰减的、固定不变的注意力,从而无法自适应地关注到距离足够长的Context。
通过这个例子,我们可以看出线性RNN模型系列在注意力分配方面的局限性。为了更好地适应不同的任务需求,我们可以尝试结合其他注意力机制,如门控注意力等,以提高模型的表达能力。

稀疏程度指标 S(x) 是用来衡量一个随机变量或随机向量中非零元素的重要性和数量。这个指标与信息熵有关联,但它的侧重点在于度量数据的稀疏程度,即数据中非零元素的平均能量与整个数据的平均能量之比。
在 l1/l2 形式中,S(x) 被定义为:
S ( x ) = E [ ∣ x ∣ ] E [ x 2 ] S(x) = \frac{E[|x|]}{\sqrt{E[x^2]}} S(x)=E[x2] E[x]
其中 E 表示期望值。S(x) 的值越小,意味着数据 x 的稀疏程度越高。具体来说:

  • ( E[|x|] ) 测量的是 x 的绝对值的期望值,这可以理解为数据中非零元素的平均绝对值。
  • ( \sqrt{E[x^2]} ) 测量的是 x 的平方的期望值的平方根,这可以理解为数据中所有元素(包括零和非零)的平均能量。
    因此,S(x) 能够反映数据中非零元素相对于整个数据的重要性。如果 S(x) 接近于 0,这通常意味着数据非常稀疏,大部分元素都是零,只有少数非零元素对整体能量有显著贡献。这种情况下,数据可能近似于 one-hot 分布,即大部分元素为零,只有一个元素为非零。
    需要注意的是,虽然 S(x) 可以用来衡量稀疏程度,但它并不直接度量信息熵。信息熵通常用于度量一个随机变量的不确定性或信息含量,而 S(x) 更侧重于度量数据中非零元素的重要性和数量。

您所描述的简化形式是针对注意力机制中的某个指标 S(a)。首先,我们记 a=(a1,a2,⋯,an),其中 aj∝f(q⋅kj)。然后,我们考虑 n→∞ 的极限。为了简化计算,假设 k∼N(μ,σ2I),那么可以设 k=μ+σε,其中 ε∼N(0,I)。
接下来,我们利用各向同性的性质来简化计算。由于 ε 所服从的分布 N(0,I) 是一个各向同性的分布,与《n 维空间下两个随机向量的夹角分布》推导的化简思路一样,由于各向同性的原因, q⋅ε 相关的数学期望只与 q 的模长有关,跟它的方向无关。于是我们可以将 q 简化为 (‖q‖,0,0,⋯,0),那么对 ε 的数学期望就可以简化为:
S ( a ) = E ε [ ∣ f ( q ⋅ μ + σ ‖ q ‖ ε ) ∣ ] E ε [ f 2 ( q ⋅ μ + σ ‖ q ‖ ε ) ] S(a) = Eε[|f(q⋅μ+σ‖q‖ε)|]Eε[f^2(q⋅μ+σ‖q‖ε)] S(a)=[f(qμ+σqε)][f2(qμ+σqε)]
其中 ε∼N(0,1) 是一个随机标量。这样,我们就成功地将原本复杂的计算简化为了更易于处理的随机标量计算。

您举了两个例子,分别是常见的高斯注意力(Gaussian Attention)和笔者喜欢的 GAU(Gated Attention Unit)。通过对这两种注意力机制的稀疏程度进行分析,我们可以更深入地了解它们的特点。

  1. 高斯注意力:对于高斯注意力,我们使用 f=exp。这种情况下,求期望只是常规的一维高斯积分。根据您给出的公式(5),我们可以得到 S(a)=exp(−12σ2∥q∥2)。当 σ→∞ 或 ∥q∥→∞ 时,都有 S(a)→0。这意味着理论上标准注意力确实可以任意稀疏地“集中注意力”。同时,这个结果也告诉了我们让注意力更集中的方法:增大 q 的模长,或者增大各个 k 之间的方差,换言之拉开 k 的差距。
  2. GAU(Gated Attention Unit):对于 GAU,您提到开始提出的时候是 f=relu2。这种情况下,积分没有 f=exp 那么简单。根据您给出的公式(6),我们可以得到 S ( a ) = e − β 22 γ 2 ( 2 − − √ β γ + π − − √ e β 22 γ 2 ( β 2 + γ 2 ) ( e r f ( β 2 √ γ ) + 1 ) ) π − − √ 422 − − √ β γ e − β 22 γ 2 ( β 2 + 5 γ 2 ) + 2 π − − √ ( β 4 + 6 β 2 γ 2 + 3 γ 4 ) ( e r f ( β 2 √ γ ) + 1 ) − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − √ S(a)=e−β22γ2(2−−√βγ+π−−√eβ22γ2(β2+γ2)(erf(β2√γ)+1))π−−√422−−√βγe−β22γ2(β2+5γ2)+2π−−√(β4+6β2γ2+3γ4)(erf(β2√γ)+1)−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−√ S(a)=eβ22γ2(2βγ+πeβ22γ2(β2+γ2)(erf(β2√γ)+1))π√422βγeβ22γ2(β2+5γ2)+2π(β4+6β2γ2+3γ4)(erf(β2√γ)+1)。从公式中可以看出,只有 β < 0 β<0 β<0 时,原版 GAU 的稀疏度才有机会趋于 0。这也说明了跟 f = e x p f=exp f=exp 的标准注意力不同,k 的 bias 项可能会对 f = r e l u 2 f=relu2 f=relu2 的 GAU 有正面帮助。
    通过以上分析,我们可以看出不同注意力机制在稀疏程度方面的差异。这些差异有助于我们根据具体任务需求选择合适的注意力机制。

下面我们再来看一个最简单的例子:不加 f f f,或者等价地说 f = i d e n t i c a l f=identical f=identical。这种情况下对应的就是最简单的一种线性Attention,同样可以用Mathematica硬算得:
S ( a ) = 2 π − − √ γ e − β 22 γ 2 + β e r f ( β 2 √ γ ) β 2 + γ 2 − − − − − − √ ( 7 ) S(a)=2π−−√γe−β22γ2+βerf(β2√γ)β2+γ2−−−−−−√(7) S(a)=2πγeβ22γ2+βerf(β2√γ)β2+γ2(7)

注意,此时的S(a)是关于β偶函数(读者不妨尝试证明一下),所以β<0时图像跟它相反数的图像是一样的,因此上图只画了β≥0的结果。从图中可以看出,不加任何激活函数的线性Attention的稀疏程度并不能接近0,而是存在一个较高的下限,这意味着当输入序列足够长时,这种线性Attention并没有办法“集中注意力”到关键位置上。

您提到了一个最简单的注意力机制例子:不加 f,或者等价地说 f=identical。这种情况下对应的就是最简单的一种线性 Attention。根据您给出的公式(7),我们可以得到 S ( a ) = 2 π − − √ γ e − β 22 γ 2 + β e r f ( β 2 √ γ ) β 2 + γ 2 − − − − − − √ S(a)=2π−−√γe−β22γ2+βerf(β2√γ)β2+γ2−−−−−−√ S(a)=2πγeβ22γ2+βerf(β2√γ)β2+γ2
您还提到了 S(a) 是关于 β 的偶函数,所以 β<0 时图像跟它相反数的图像是一样的。因此,在上图中只画了 β≥0 的结果。从图中可以看出,不加任何激活函数的线性 Attention 的稀疏程度并不能接近 0,而是存在一个较高的下限。这意味着当输入序列足够长时,这种线性 Attention 并没有办法“集中注意力”到关键位置上。
通过这个例子,我们可以看出激活函数 f 在注意力机制中的重要作用。引入适当的激活函数(如 exp、relu2 等)可以帮助注意力更好地集中在关键位置上,从而提高模型的性能。这也是为什么在实际应用中,我们经常会看到各种不同的注意力机制变种,它们通过引入不同的激活函数来适应不同的任务需求。

从《线性 Attention 的探索:Attention 必须有个 Softmax 吗?》我们知道,线性 Attention 的一般形式为 (a_j \propto g(q) \cdot h(k_j)),其中 g,h 是值域非负的激活函数。我们记 (q’ = g(q)), (k’ = h(k)),那么 (a_j \propto q’ \cdot k’),并且可以写出:
S ( a ) = E [ ϵ ⋅ q ′ ⋅ k ′ ] E [ ϵ ⋅ q ′ ⋅ k ′ ⋅ k ′ ⋅ q ′ ] = q ′ ⋅ E [ ϵ ⋅ k ′ ] ⋅ q ′ q ′ ⋅ E [ ϵ ⋅ k ′ ⋅ k ′ ⋅ q ′ ] ⋅ q ′ = q ′ ⋅ μ ′ ⋅ q ′ q ′ ⋅ ( μ ′ ⋅ μ ′ T + Σ ′ ) ⋅ q ′ = 1 1 + q ′ ⋅ Σ ′ ⋅ q ′ ⋅ ( q ′ ⋅ μ ′ ) 2 S(a) = \frac{E[\epsilon \cdot q' \cdot k']}{\sqrt{E[\epsilon \cdot q' \cdot k' \cdot k' \cdot q']}} = \frac{q' \cdot E[\epsilon \cdot k'] \cdot q'}{\sqrt{q' \cdot E[\epsilon \cdot k' \cdot k' \cdot q'] \cdot q'}} = \frac{q' \cdot \mu' \cdot q'}{\sqrt{q' \cdot (\mu' \cdot \mu'^T + \Sigma') \cdot q'}} = \frac{1}{1 + q' \cdot \Sigma' \cdot q'} \cdot (q' \cdot \mu')^2 S(a)=E[ϵqkkq] E[ϵqk]=qE[ϵkkq]q qE[ϵk]q=q(μμT+Σ)q qμq=1+qΣq1(qμ)2
这是关于非负型线性 Attention 的一般结果,现在还没做任何近似,其中 (\mu’), (\Sigma’) 分别是 (k’) 序列的均值向量和协方差矩阵。
从这个结果可以看出,非负型线性 Attention 也可能任意稀疏(即 (S(a) \rightarrow 0)),只需要均值趋于 0,或者协方差趋于 (\infty),也就是说 (k’) 序列的信噪比尽可能小。然而 (k’) 序列是一个非负向量序列,信噪比很小的非负序列意味着序列中大部分元素都是相近的,于是这样的序列能表达的信息有限,也意味着线性 Attention 通常只能表示绝对位置的重要性(比如 Attention 矩阵即某一列都是 1),而无法很好地表达相对位置的重要性,这本质上也是线性 Attention 的低秩瓶颈的体现。
为了更形象地感知 (S(a)) 的变化规律,我们不妨假设一种最简单的情况:(k’) 的每一个分量是独立同分布的,这时候均值向量可以简化为 (\mu’ = 1),协方差矩阵则可以简化为 (\Sigma’ = \sigma’^2 I),那么 (S(a)) 的公式可以进一步简化为:
S ( a ) = 1 1 + σ ′ ⋅ μ ′ ⋅ ∥ q ′ ∥ 2 ∥ q ′ ∥ 1 S(a) = \frac{1}{1 + \sigma' \cdot \mu' \cdot \frac{\|q'\|^2}{\|q'\|_1}} S(a)=1+σμq1q21
从这个结果可以看出,要想线性注意力变得稀疏,一个方向是增大 (\sigma’ \cdot \mu’),即降低 (k’) 序列的信噪比,另一个方向则是增大 (\frac{|q’|^2}{|q’|_1}),该因子最大值是 (d^{-\frac{1}{2}}),其中 d 是 q,k 的维数,所以增大它意味着要增大 d,而增大了 d 意味着提高了注意力矩阵的秩的上限,缓解了低秩瓶颈。

从《Google新作试图“复活”RNN:RNN能否再次辉煌?》中,我们了解到线性RNN模型系列,它们的特点是带有一个显式的递归,这可以看成一个简单的Attention: a = ( a 1 , a 2 , ⋯ , a n − 1 , a n ) = ( λ n − 1 , λ n − 2 , ⋯ , λ , λ 1 ) a=(a_1,a_2,\cdots,a_{n-1},a_n)=(\lambda_{n-1},\lambda_{n-2},\cdots,\lambda,\lambda_1) a=(a1,a2,,an1,an)=(λn1,λn2,,λ,λ1)。其中, λ ∈ ( 0 , 1 ] \lambda\in(0,1] λ(0,1]。我们可以算出:
S ( a ) = 1 − λ n n ( 1 − λ ) n − 1 + λ 1 n − 1 ( 1 − λ ) n − 1 + λ 1 n ( 1 − λ ) n − 2 + ⋯ + λ n 2 ( 1 − λ ) + λ n n S(a) = 1 - \lambda_n^n (1-\lambda)^{n-1} + \lambda_1^{n-1} (1-\lambda)^{n-1} + \lambda_1^n (1-\lambda)^{n-2} + \cdots + \lambda_n^2 (1-\lambda) + \lambda_n^n S(a)=1λnn(1λ)n1+λ1n1(1λ)n1+λ1n(1λ)n2++λn2(1λ)+λnn
λ < 1 \lambda<1 λ<1 时,只要 n → ∞ n\rightarrow\infty n,总有 S ( a ) → 0 S(a)\rightarrow 0 S(a)0。所以对于带有显式Decay的线性RNN模型来说,稀疏性是不成问题的,它的问题是只能表达随着相对位置增大而衰减的、固定不变的注意力,从而无法自适应地关注到距离足够长的Context。
通过这个例子,我们可以看出线性RNN模型系列在注意力分配方面的局限性。为了更好地适应不同的任务需求,我们可以尝试结合其他注意力机制,如门控注意力等,以提高模型的表达能力。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/225960.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于ssm金旗帜文化培训学校网站的设计与开发论文

摘 要 互联网发展至今&#xff0c;无论是其理论还是技术都已经成熟&#xff0c;而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播&#xff0c;搭配信息管理工具可以很好地为人们提供服务。针对培训学校展示信息管理混乱&#xff0c;出错率高&#xff0c;信息安全…

【云原生kubernets】Pod详解

一、Pod介绍 1.1.概念 Pod是kubernetes中最小的资源管理组件&#xff0c;Pod也是最小化运行容器化应用的资源对象。一个Pod代表着集群中运行的一个进程。kubernetes中其他大多数组件都是围绕着Pod来进行支撑和扩展Pod功能的&#xff0c;例如&#xff0c;用于管理Pod运行的State…

使用国内镜像源安装opencv

在控制台输入命令&#xff1a; pip install opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple 验证安装&#xff1a; step 1&#xff1a; 打开终端&#xff1b;step 2&#xff1a; 输入python&#xff0c;进入Python编译环境&#xff1b;step 3&#xff1a; 粘贴…

打开软木塞,我们来谈谈葡萄酒泡泡吧

香槟是任何庆祝场合的最佳搭配。从婚礼和生日到单身派对和典型的周五晚上&#xff0c;这款气泡饮料是生活中特别聚会的受欢迎伴侣。 来自云仓酒庄品牌雷盛红酒分享你知道吗&#xff0c;你喜欢喝的那瓶香槟酒可能根本不是香槟&#xff0c;而是汽酒&#xff1f;你不是唯一一个认…

面试官:你对SPA单页面的理解,它的优缺点分别是什么?如何实现SPA应用呢

一、什么是SPA SPA&#xff08;single-page application&#xff09;&#xff0c;翻译过来就是单页应用SPA是一种网络应用程序或网站的模型&#xff0c;它通过动态重写当前页面来与用户交互&#xff0c;这种方法避免了页面之间切换打断用户体验在单页应用中&#xff0c;所有必要…

系统安全-应用威胁风险检查项及预防方案

系统安全-应用威胁风险检查项及预防方案 1、欺骗&#xff08;认证&#xff09; 2、篡改&#xff08;授权和加密&#xff09; 3、抵赖&#xff08;日志记录和数字签名&#xff09; 4、信息泄露&#xff08;敏感信息保护&#xff09; 5、特权提升 6、拒绝服务&#xff08;数据稀释…

ubuntu安装详细步骤

一&#xff0c;先下载vmware 1&#xff0c;第一步打开上面链接 下载网址 : https://www.vmware.com/products/workstation-pro/wo rkstation-pro-evaluation.html 许可证 JU090-6039P-08409-8J0QH-2YR7F ZF3R0-FHED2-M80TY-8QYGC-NPKYF FC7D0-D1YDL-M8DXZ-CYPZE-P2AY6 ZC3T…

【SpringBoot篇】Interceptor拦截器 | 拦截器和过滤器的区别

文章目录 &#x1f339;概念⭐作用 &#x1f384;快速入门⭐入门案例代码实现 &#x1f6f8;拦截路径&#x1f354;拦截器interceptor和过滤器filter的区别&#x1f386;登录校验 &#x1f339;概念 拦截器&#xff08;Interceptor&#xff09;是一种软件设计模式&#xff0c;…

K8S学习指南(7)-k8s核心概念Annotation

文章目录 前言什么是注解&#xff1f;为什么使用注解&#xff1f;注解示例1. 文档化Pod的用途2. 集成监控工具3. 定义应用程序配置 结论 前言 Kubernetes&#xff08;常简称为K8s&#xff09;是一个强大的容器编排平台&#xff0c;已经成为现代应用开发和部署的基石。尽管在Ku…

唯创知音WTVxxx语音芯片在免洗烘干机中的应用:提升用户体验与产品智能化

在现今这个高科技普及的时代&#xff0c;人们对家电产品的需求不再仅仅满足于基本功能&#xff0c;而是更多的关注用户体验和产品智能化。因此&#xff0c;唯创知音WTVxxx语音芯片在免洗烘干机中的应用&#xff0c;无疑是对这一需求的完美回应。 唯创知音WTVxxx语音芯片是一款…

蓝桥杯专题-真题版含答案-【祖冲之割圆法】【错误票据】【显示为树形】【汉字相乘】

Unity3D特效百例案例项目实战源码Android-Unity实战问题汇总游戏脚本-辅助自动化Android控件全解手册再战Android系列Scratch编程案例软考全系列Unity3D学习专栏蓝桥系列ChatGPT和AIGC &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff0c;以及各种资源分…

【自定义Source、Sink】Flink自定义Source、Sink对ClickHouse进行读和批量写操作

ClickHouse官网文档 Flink 读取 ClickHouse 数据两种驱动 ClickHouse 官方提供Clickhouse JDBC.【建议使用】第3方提供的Clickhouse JDBC. ru.yandex.clickhouse.ClickHouseDriver ru.yandex.clickhouse.ClickHouseDriver.现在是没有维护 ClickHouse 官方提供Clickhouse JDBC…

华为ensp-无线小型wlan配置教程

实验拓扑图&#xff1a; 实验平台&#xff1a;ENSP510 实验设备&#xff1a;Centered Cloud、AC6005、AP4030、STA、Cellphone vlan范围划分 vlan 101 : 10.23.101.1/24 vlan 100 : 10.23.100.1/24实验步骤&#xff1a; 一、创建VLAN100、101配置端口类型 [AC1]vlan batch 100…

STM32启动流程详解(超全,startup_stm32xx.s分析)

单片机上电后执行的第一段代码 1.初始化堆栈指针 SP_initial_sp 2.初始化 PC 指针Reset_Handler 3.初始化中断向量表 4.配置系统时钟 5.调用 C 库函数_main 初始化用户堆栈&#xff0c;然后进入 main 函数。 在正式讲解之前&#xff0c;我们需要了解STM32的启动模式。 STM32的…

【Vue】日期格式化(全局)

系列文章 【Vue】vue增加导航标签 本文链接&#xff1a;https://blog.csdn.net/youcheng_ge/article/details/134965353 【Vue】Element开发笔记 本文链接&#xff1a;https://blog.csdn.net/youcheng_ge/article/details/133947977 【Vue】vue&#xff0c;在Windows IIS平台…

关于“Python”的核心知识点整理大全23

目录 ​编辑 第&#xff11;0 章 文件和异常 10.1 从文件中读取数据 10.1.1 读取整个文件 pi_digits.txt file_reader.py 10.1.2 文件路径 10.1.3 逐行读取 file_reader.py 10.1.4 创建一个包含文件各行内容的列表 10.1.5 使用文件的内容 pi_string.py 往期快速传…

react内置组件之<Profiler></Profiler>

1、作用&#xff1a; Profiler 是 React 提供的一个内置组件&#xff0c;用于帮助你检测并分析 React 应用中的性能瓶颈。它可以帮助你了解组件渲染所花费的时间&#xff0c;并提供有关哪些组件需要进行优化的信息。 2、示例&#xff1a; import React, { Profiler } from r…

Microsoft visual studio 2013卸载方法

1、问 题 Microsoft visual studio 2013 无法通过【程序与功能】卸载 2、解决方法 使用微软的Microsoft visual studio 2013 专用卸载工具 工具下载链接&#xff1a;https://github.com/Microsoft/VisualStudioUninstaller/releases 或 链接&#xff1a;https://pan.baidu.c…

【自动化测试】web3py 连接 goerli

web3py 连接 goerli 直接使用库里方法 if __name__ __main__:from web3.auto.infura.goerli import w3w3.eth.get_balance(get_address_by_private_key(os.getenv("AAA_KEY")))error info: websockets.exceptions.InvalidStatusCode: server rejected WebSocket …

02-MQ入门之RabbitMQ简单概念说明

二&#xff1a;RabbitMQ 介绍 1.RabbitMQ的概念 RabbitMQ 是一个消息中间件&#xff1a;它接受并转发消息。你可以把它当做一个快递站点&#xff0c;当你要发送一个包裹时&#xff0c;你把你的包裹放到快递站&#xff0c;快递员最终会把你的快递送到收件人那里&#xff0c;按…