WhiteDLG's

多头注意力机制

2026-1-29 NLP / Transformer Architecture

微观数学机制——为什么矩阵乘法能“识别”关键词?

你问的重点是:“为什么QKV这么操作就可以识别关键词?” 答案在于训练好的权重矩阵 $W_Q, W_K, W_V$ 将词向量投影到了特定的语义空间

让我们看一个具体的例子:句子是 "The animal didn't cross the street because it was too tired."

我们想知道,当模型处理到 "it" 这个词时,它是怎么识别出 "it" 指代的是 "animal" 而不是 "street"

1. 投影变换 (Projection)

输入词是 "it"。模型把它对应的向量 $x_{it}$ 分别乘以三个权重矩阵,得到 $q_{it}, k_{it}, v_{it}$。

  • $W_Q$ 的作用是:把 $x_{it}$ 转换成一种“寻找指代对象”的提问状态。
    • $q_{it}$ 的向量方向可能代表:“我在找一个能够发出‘累(tired)’这个动作的名词。”

2. 生成Keys (Generating Keys)

句子中其他词 "animal" 和 "street" 也生成了各自的 $k_{animal}$ 和 $k_{street}$。

  • $W_K$ 的作用是:把 $x_{animal}$ 和 $x_{street}$ 转换成“特征标签”
    • $k_{animal}$ 的向量方向可能编码了:“我是有生命物体,能感觉累。”
    • $k_{street}$ 的向量方向可能编码了:“我是无生命物体,地点。”

3. 匹配与“识别” (Matching - The Dot Product)

现在计算点积:

  • $q_{it} \cdot k_{animal}$:因为“寻找发出动作的主体”与“有生命物体”在向量空间方向一致,点积很大
  • $q_{it} \cdot k_{street}$:因为“寻找发出动作的主体”与“无生命地点”方向垂直或相反,点积很小

这就是“识别”发生的时刻! 所谓“识别关键词”,在数学上表现为:Query向量和Key向量在高维空间中的夹角很小(高度对齐)。

4. 信息提取 (Value Extraction)

因为 $q_{it}$ 和 $k_{animal}$ 的关注度(Attention Score)很高,模型就会大量提取 "animal" 对应的 $v_{animal}$ 信息。

  • 最终,"it" 这个位置的输出向量,实际上融合了大量 "animal" 的语义信息。
  • 所以,下一层网络再处理 "it" 时,就已经把它当成 "animal" 来看待了。

多头注意力(Multi-Head Attention)是如何让模型同时捕捉“语法”和“语义”等不同层面的关键词的?

技术原理拆解

让我们回到数学层面,看看这是如何发生的。

假设我们输入的词向量维度 $d_{model} = 512$,我们有 8 个头 ($h=8$)。

1. 空间的切分 (Splitting the Space)

模型并没有让一个巨大的 $512 \times 512$ 矩阵去处理所有事情,而是将其拆分成 8 个 $512 \times 64$ 的小矩阵($d_k = d_v = d_{model}/h = 64$)。

这意味着,每个 Head 只能看到词向量中的一部分特征,或者说是将词向量投影到了一个低维子空间

2. 独立权重的自动分化 (Automatic Differentiation of Weights)

这是关键所在。每个 Head 都有独立的 $W_Q^i, W_K^i, W_V^i$。

在反向传播训练时,为了降低 Loss,不同的 Head 会被迫去关注不同的特征:

  • Head A 的权重演化:可能发现关注“相邻词”能极大地降低预测错误的概率(捕捉n-gram语法特征),于是它的 $W_Q, W_K$ 训练成倾向于匹配相邻位置。
  • Head B 的权重演化:可能发现关注“句子开头的主语”对理解全句很重要(捕捉指代关系),于是它的权重学会了跨越长距离去寻找名词。

3. 可视化证据 (Visual Evidence from Research)

在经典的 Transformer 论文("Attention Is All You Need")以及后续的可解释性研究中,研究者将训练好的 Head 的注意力图(Attention Map)画出来,观察到了惊人的现象:

  • 语法头(Syntactic Heads)
    • 有的 Head 的高亮区域呈现明显的对角线形状。这意味着它只关注当前词的前一个词或后一个词(捕捉短语结构,如 "New York")。
    • 有的 Head 专门关注动词和它的直接宾语,哪怕中间隔了几个形容词。
  • 语义头(Semantic Heads)
    • 有的 Head 在处理 "it", "she", "he" 时,注意力线会跨越很远的距离,精准连接到前文出现的实体(Entity)。
    • 有的 Head 在处理 "bank"(银行/河岸)时,会去关注句尾的 "money" 或 "river",从而消除歧义。

4. 信息的融合 (Integration)

$$ \text{MultiHead}(Q, K, V) = \text{Concat}(\text{head}_1, ..., \text{head}_h)W^O $$

最后,所有 Head 计算出的 $V$(也就是它们各自提取出的信息)被拼接在一起,再经过一个大的权重矩阵 $W^O$ 进行融合。

这一步相当于把“语法信息向量”和“语义信息向量”在一起,传递给下一层网络。

总结:为什么必须要“多头”?

如果只有一个超级大的单头(Single Head):

  • 注意力冲突:Q 和 K 的点积只能得出一个标量分数。如果同一个词既要在语法上关注紧挨着的词,又要在语义上关注句首的词,一个标量是无法同时表示这种“既近又远”的矛盾关系的。
  • 平均化风险:强行用一个头处理所有关系,会导致注意力权重变得平庸(Averaging out),既抓不住语法重点,也抓不住语义重点。

多头注意力(MHA)通过让不同的头“各司其职”,在互不干扰的子空间内分别寻找最佳匹配,最终实现了对语言复杂性的全面捕捉。 这就是 Transformer 能够同时由表及里(从语法到语义)理解文本的秘密。


为什么多头注意力训练过程中可以让不同的头各司其职,而不是几个头都干一样的事

1. 初始化的蝴蝶效应(Random Initialization)

这是最基础的物理原因。

  • 起点不同:在训练开始前,每个 Head 的权重矩阵 $W_Q^i, W_K^i, W_V^i$ 都是被随机初始化的(通常服从正态分布或 Xavier 初始化)。
  • 轨迹分岔:因为起点不同,它们在优化空间(Loss Landscape)中所处的位置就不同。
    • Head A 初始时可能恰好对“位置相近的词”反应比较大。
    • Head B 初始时可能恰好对“词性相同的词”反应比较大。
  • 梯度流向不同:梯度下降算法是“贪婪”的,它会沿着当前最陡峭的方向走。因为初始位置不同,Head A 和 Head B 接收到的梯度更新方向也是不同的。Head A 会沿着它的路径越走越远,Head B 也会沿着自己的路径强化特征。

直观理解:就像把几个球放在山顶的不同侧面往下滚,哪怕山脚只有一个最低点,它们滚下去的路径(学习到的特征模式)也是完全不同的。

2. 冗余是有代价的(Dropout 与 资源竞争)

如果几个 Head 真的学到了完全一样的东西,会发生什么?

  • Dropout 机制(关键因素):Transformer 在训练时大量使用了 Dropout(随机丢弃神经元)。
    • 假设 Head 1 和 Head 2 干了完全一样的事(比如都关注主语)。
    • 如果某次训练中,Head 1 被 Dropout 关掉了,模型为了维持性能,Head 2 必须能扛起大旗。
    • 但更常见的情况是,如果多个 Head 功能高度重叠,模型会发现这种配置极其脆弱且浪费参数。
    • 为了在 Dropout 的干扰下依然保持低 Loss,模型倾向于让不同的 Head 捕捉互补的信息(Complementary Information)。如果 Head 1 挂了,Head 2 提供的不是重复信息,而是不同维度的补充信息,这样总体的鲁棒性更强。
  • 维度的正交性倾向:数学上,高维空间本身就非常大。两个随机初始化的向量在高维空间中大概率是接近正交(垂直)的。模型想要把它们“训练成一样”,反而需要花费很大的力气去克服这种天然的差异。只要 Loss 能下降,模型通常会顺着它们天然正交的方向去优化。

3. 只有“分工”才能达到 Loss 的全局最优

这是最本质的动力学原因。

  • 任务的复杂性:自然语言太复杂了。预测下一个词(Next Token Prediction)需要同时考虑语法、语义、指代、常识、语气等。
  • 单一视角的局限
    • 如果 8 个 Head 全部都学会了“看语法”,那么在遇到需要“看指代”才能解出的题时(比如 "The trophy didn't fit in the suitcase because it was too big"),模型就会预测错误,Loss 会变大。
    • 为了降低这个 Loss,梯度反向传播会“惩罚”那些只看语法的 Head,迫使其中一部分 Head 改变方向,去关注指代关系。

只有当 8 个 Head 分别覆盖了语言的不同侧面时,总体的 Loss 才能降到最低。 就像一个足球队,如果 11 个人都当守门员,球队一定会输。为了赢球(降低 Loss),必须有人当前锋,有人当后卫。

4. 补充事实:其实真的会有“同质化”

必须客观指出,虽然我们希望它们各司其职,但实际研究发现,并不是所有的 Head 都那么“聪明”和“独立”

  • Head Pruning(头剪枝)的研究:NeurIPS 2019 有一篇著名的论文 "Are Sixteen Heads Really Better Than One?"。研究者发现,在 BERT 等模型训练好之后,去掉很多 Head,模型性能几乎不下降
  • 懒惰的 Head:这说明,确实有一些 Head 即使随机初始化不同,最后也学到了相似的、冗余的特征,或者干脆没学到什么重要的东西。
  • 主要分工与次要冗余:大部分重要的分工(语法 vs 语义)是由少部分关键的 Head 完成的,而剩下的 Head 往往起到了“备份”或者“平滑噪音”的作用。