数学本质05|Attention:模型为什么知道该看哪个词?

10 阅读5分钟

向量负责表示,点积负责比较,Softmax负责分配,而 Attention 负责把信息重新组合。

上一篇讲点积时,我们留下了一个问题:模型已经能算出两个向量之间有多匹配,接下来呢?真正有意思的地方就在这里。Transformer 不会停在“谁和谁更相关”这一步,而是利用这些分数决定:当前这个 Token,到底应该从其他 Token 那里拿多少信息。

这就是 Attention。

一个词的意思,往往要看周围

比如一句话:“小明把书放在桌子上,因为它太重了。”当模型处理“它”时,只看“它”这个字本身几乎没有意义。它必须回头看前面的内容,判断“小明”“书”“桌子”里面,谁和当前的“它”关系更大。

人读这句话时会自然地把注意力放到相关词上。Transformer 不能靠直觉,只能把这个过程变成数学计算。于是,每个 Token 会生成三组向量:Query、Key、Value。

可以先不记名字,把它们理解成三个问题:

  • Query 是“我现在想找什么”;

  • Key 是“我这里有什么特征,值不值得你关注”;

  • Value 是“如果你关注我,我真正能提供什么信息”。

Attention 的核心,就从 Query 和 Key 开始。

点积负责回答:该看谁?

假设模型正在处理“它”。“它”的 Query 会分别和前面每个 Token 的 Key 做点积,于是每个词都会得到一个分数。这个分数不能简单理解成两个词的“固定语义相似度”,更准确地说,它表示在当前 Query 下,这个 Key 与当前需求有多匹配。

QKᵀ

如果“书”的得分更高,就说明对于当前这个“它”,模型认为“书”携带的信息更值得关注。这正是上一篇讲的点积真正进入 Transformer 的地方:点积把“当前应该关注谁”变成了一个可以比较的数值。

Softmax 把分数变成“注意力预算”

点积得到的还只是原始分数。标准的 Scaled Dot-Product Attention 会先按 Key 的维度做缩放,再经过 Softmax:

Softmax(QKᵀ / √dₖ)

Softmax 会把一组高低不同的分数转换成非负、总和为 1 的权重。可以把它理解成一次“注意力预算分配”:谁更匹配,谁获得的权重就更大。

点积负责打分,Softmax 负责分配。

真正被拿走的,是 Value 里的信息

知道“该看谁、看多少”还不够,模型最终需要把相关信息真正取回来。于是 Attention 会按照刚才得到的权重,对所有 Value 做加权求和:

Attention(Q,K,V) = Softmax(QKᵀ / √dₖ) V

如果“书”的权重最高,那么它的 Value 对最终结果贡献最大;“桌子”也有一定关联,就贡献一部分;无关词的权重很小,对结果影响也很小。经过这一步以后,原来的“它”已经不再只是一个孤立 Token,它的表示里混入了当前上下文中真正相关的信息。

图片

图1Attention 的核心:Q 与 K 负责匹配,Softmax 分配权重,再用 V 汇总真正的信息

Attention 为什么能理解上下文?

Attention 算出来的不是一张永久不变的“词语关系表”。同一个“苹果”,放在“我吃了一个苹果”和“苹果发布了新手机”里,会根据不同上下文重新计算该关注什么。

因此,Attention 不是在查一个词的固定含义,而是在当前语境里不断重算关系,再把相关信息重新组合进 Token 的表示里。这也是 Transformer 能处理上下文的关键之一。

图片

图2同一个词放进不同上下文,会获得不同的关注关系和上下文表示

顺便说一句:为什么缓存的是 K、V,而不是 Q?

理解了 Q、K、V,KV Cache 就很好解释了。大模型生成文字时,是一个 Token 一个 Token 往后写。对于已经生成的历史 Token,它们在每一层 Attention 里的 Key 和 Value 已经算过,而且后面每生成一个新 Token,这些历史 K、V 还会继续被查询和读取。

因此,没有必要每一步都把历史 K、V 重新计算一遍,直接缓存下来即可。新的 Token 到来时,只需要为当前 Token 生成新的 Q,用这个 Q 去匹配已经缓存的历史 K,再按照 Attention 权重读取对应的 V。

Q 则不同。它代表“当前这个 Token 想找什么”,每一步都会产生新的 Q;过去的 Q 完成这一轮查询后,后续通常不再需要。因此推理系统缓存的是 K 和 V,而不是 Q。

Q 是当前问题;K 是可匹配的索引;V 是对应的信息内容。历史 K、V 后面还要反复用,所以值得缓存。

KV Cache 的代价也很直接:上下文越长,需要保存的历史 K、V 越多,因此推理时显存占用会随着上下文长度增长。

图片

图3KV Cache 的本质:每一步只生成新的 Q,历史 K、V 会被后续 Token 反复查询和读取

把三篇连起来,就能看到一条完整的线

前面讲向量时,我们说“向量让信息拥有坐标”;讲点积时,我们进一步得到“点积让坐标之间的关系可以被计算”;到了 Attention,模型开始利用这些关系,决定信息应该如何流动。

所以 Attention 真正重要的地方,不是“模型会注意某个词”这么简单,而是完成了一次关键转换:关系 → 权重 → 信息重新组合。

点积决定“该看谁”,Softmax 决定“看多少”,Value 决定“真正拿走什么信息”。

Transformer 正是一层一层重复这种信息重组,最终把一串原本孤立的 Token,逐渐变成带有上下文含义的表示。