理解『注意力机制』的本质

一、引例

假设有这样一组数据,它们是腰围和体重一一对应的数据对。我们将根据表中的数据对去估计体重。

表1. 腰围体重表

如果现在给出一个新的腰围 62 ,那么体重的估计值是多少呢?

凭经验,我们认为腰围和体重是正相关的,所以我们会自然地『关注』和 62 差距更小的那些腰围,来去估计体重。也就是更加关注表格中腰围是 60 和 64 的『腰围-体重对』(waistline-weight pairs)。即,我们会估计此人的体重在 110 ~ 115 之间。这是一种定性的分析。

下面我们来算一下具体值。我们选取一种简单直观的方法来计算:
由于 62 距离 60 和 64 的距离是相等的,所以我们取 110 和 115 的平均值作为 62 腰围对应的体重。

110+1152=112.5

也可以这样认为,由于 62 距离 60 和 64 是最近的,所以我们更加『注意』它们,又由于 62 到它俩的距离相等,所以我们给这两对『腰围-体重对』各分配 0.5 的权重。

0.5×110+0.5×115=112.5

但是,我们到现在还没有用到过 68 --> 126 这个『腰围-体重对』,我们应该再分一些权重给它,让我们的估计结果更准确。

我们上面的讨论可以总结为公式:=1×1+2×2+3×3

这个权重应该如何计算呢?


二、注意力机制

我们把『腰围-体重对』改写成 Python 语法中(字典)的『键-值对』(key-value pairs),把给出的新腰围 62 叫请求(query),简称 q .

现在我们给那些值起了新的名字,所以公式可以写为:f(q)=α(q,k1)v1+α(q,k2)v2+α(q,k3)v3=Σi=13α(q,ki)vi
这个公式描述了『注意力机制』。其中,f(q) 表示注意力机制的输出。 α(q,ki) 表示『注意力权重』。它和 qki 的相似度有关,相似度越高,注意力权重越高。
它是如何计算的呢?方法有很多,在本例中,我们使用高斯核计算:

GS(q,ki)=e12(qki)2

我们取(12(qki)2)部分进行下一步计算,并把它叫做『注意力分数』。显然,现在这个注意力分数是个绝对值很大的数,没法作为权重使用。所以下面我们要对其进行归一化,把注意力分数转换为 [0, 1] 间的注意力权重(用 α(q,ki) 表示)。本例选用 Softmax 进行归一化:

α(q,ki)=Softmax(12(qki)2)=e12(qki)2Σi=13e12(qki)2

我们发现,好巧不巧地,α(q,ki) 最终又变成高斯核的表达式。

本例中的高斯核计算的相似度为:GS(62,68)=1.52×108 GS(62,60)=0.135 GS(62,64)=0.135
GS(q,k1) 太小了,我们直接近似为 0 .
注意力权重计算结果为:α(62,68)=0 α(62,60)=0.5 α(62,64)=0.5
体重估计值为:f(q)=α(62,68)×126+α(62,60)×110+α(62,64)×115=112.5


三、多维情况

我们现在加入【胸围】和【身高】数据,把 q, k, v 变成多维的。


注意力分数 α(qi,ki) 可以用以下模型计算:

模型 公式
加性模型 α(qi,ki)=softmax(Wqqi+Wkki+b)
点积模型 α(qi,ki)=qikid
缩放点积模型 α(qi,ki)=qikidk

我们以『点积模型』为例,计算一下 q1k1 的注意力分数 α(q1,k1)

q1=[64,85]

k1T=[6891]

则有

α(q1,k1)=Softmax(q1k1T)=Softmax(64×68+85×91)=Softmax(12087)

其他注意力分数同理。
那么现在,多维情况下的注意力输出 f(q) 可以表示为下式:

f(q)=Σi=13α(qi,kiT)vi=Softmax(qikiT)vi

为了方便计算,我们写成矩阵形式。

Q=[64856180]

KT=[686064918788]

V=[126180110172115170]

f(Q)=Softmax(QKT)V

为了缓解梯度消失的问题,我们还会除以一个特征维度 dk ,即:

f(Q)=Softmax(QKT/dk)V

这一系列操作,被称为『缩放点积注意力模型』(scaled dot-product attention)

如果 Q, K, V 是同一个矩阵,会发生什么?


四、自注意力机制

我们用 X 表示这三个相同的矩阵:

X=Q=K=V=[679160876484]

则上述的注意力机制表达式可以写成:

f(X)=Softmax(XXT/dk)X

这个公式描述了『自注意力机制』(Self-Attention Mechanism)。在实际应用中,可能会对 X 做不同的线性变换再输入,比如 Transformer 模型。这可能是因为 X 转换空间后,能更加专注注意力的学习。
三个可学习的权重矩阵 WQ, WK, WV 可以将输入 X 投影到查询、键和值的空间。

f(X)=Softmax(XWQ(XWK)T/dk)XWV

该公式执行以下步骤:

  1. 使用权重矩阵 WQWK 将输入序列 X 投影到查询空间和键空间,得到 XWQXWK
  2. 计算自注意力分数:(XWQ)(XWK)T,并除以 dk 进行缩放。
  3. 对自注意力分数进行 Softmax 操作,得到注意力权重。
  4. 使用权重矩阵 WV 将输入序列 X 投影到值空间,得到 XWV
  5. 将 Softmax 的结果乘以 XWV,得到最终的输出。

这个带有权重矩阵的自注意力机制允许模型学习不同位置的查询、键和值的映射关系,从而更灵活地捕捉序列中的信息。在Transformer等模型中,这样的自注意力机制广泛用于提高序列建模的效果。


相关概念推荐阅读:高斯核是什么?Softmax 函数是什么?
推荐B站视频:注意力机制的本质(BV1dt4y1J7ov),65 注意力分数【动手学深度学习v2】(BV1Tb4y167rb)

posted @   茴香豆的茴  阅读(522)  评论(1编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示