4、多头注意力机制回顾:Scaled Dot-Product Attention,多头并行计算原理
好,咱们今天来聊聊多头注意力机制。
说实话,这个模块是Transformer的基石。你想想看,如果没有它,后面所有的位置编码、层归一化都成了空中楼阁。我个人习惯把多头注意力拆成两个部分来理解:单头怎么算,以及多头怎么拼。
4.1 Scaled Dot-Product Attention:单头里的那点事
先看最核心的运算——缩放点积注意力。
说白了,就是三个矩阵:Query(Q)、Key(K)、Value(V)。
我刚开始接触时,总觉得这三个名字很玄乎。其实你可以这么记:
- Query:你想查什么?
- Key:每个位置有什么标签?
- Value:每个位置真正的内容是什么?
计算过程就三步:
- Q和K做点积,得到注意力分数。
- 除以 \(\sqrt{d_k}\) 进行缩放。
- Softmax归一化,再乘上V。
公式长这样:
Attention(Q, K, V) = softmax(QK^T / sqrt(d_k)) V
为什么要除以 \(\sqrt{d_k}\) ?
嗯,这里要注意。我在项目中遇到过,如果不做缩放,当 \(d_k\) 很大时,点积的结果会非常大。Softmax的梯度会变得极其小,模型根本学不动。这就是所谓的“梯度消失”。
除以 \(\sqrt{d_k}\) 后,方差被拉回到1附近。训练稳定多了。
核心要点:缩放因子 \(\sqrt{d_k}\) 不是拍脑袋定的,它来源于对向量独立同分布假设下的方差分析。我建议你把这个推导手推一遍,印象会深很多。
4.2 多头并行计算:为什么一个头不够?
单头注意力有个问题——它只能关注一种关系。
你想想看,一句话里可能有语法关系、语义关系、指代关系。一个头只能捕捉一种模式。那怎么办?
多搞几个头,并行算!
多头注意力的思路很简单:
- 把Q、K、V分别投影到 \(h\) 个不同的子空间。
- 每个子空间独立做一次缩放点积注意力。
- 把 \(h\) 个结果拼起来,再投影回原始维度。
公式如下:
MultiHead(Q, K, V) = Concat(head_1, ..., head_h) W_O
其中 head_i = Attention(Q W_Q_i, K W_K_i, V W_V_i)
这里 \(W_Q_i, W_K_i, W_V_i\) 是每个头的投影矩阵。\(W_O\) 是输出投影矩阵。
我曾经踩过一个坑:一开始我把所有头的输出直接相加,而不是拼接。结果模型效果差得离谱。后来才意识到,拼接保留了每个头的独立信息,相加则会把信息混在一起。这个细节,大家一定要注意。
我的经验:在实际工程中,多头并行计算可以用一个矩阵乘法搞定。把多个头的Q、K、V拼成一个大矩阵,一次算完所有头的注意力。这样效率高很多。
4.3 多头注意力的可视化理解
光说公式可能有点干。我画了一张图,帮你理解多头是怎么并行工作的。
你看,每个头独立处理自己的Q、K、V,互不干扰。最后把结果拼起来,再经过一个线性变换,就得到了多头注意力的输出。
4.4 参数与计算量分析
咱们来算笔账。假设:
- 输入维度 \(d_{model} = 512\)
- 头数 \(h = 8\)
- 每个头的维度 \(d_k = d_v = 64\)
那么每个头的投影矩阵大小是 \(512 \times 64\)。8个头就是8个这样的矩阵。输出投影矩阵 \(W_O\) 的大小是 \(512 \times 512\)。
| 组件 | 参数量 | 说明 |
|---|---|---|
| 每个头的 Q/K/V 投影 | 3 × 512 × 64 = 98,304 | 每个头独立 |
| 所有头的 Q/K/V 投影 | 8 × 98,304 = 786,432 | 8个头合计 |
| 输出投影 W_O | 512 × 512 = 262,144 | 拼接后投影 |
| 总计 | 1,048,576 | 约1M参数 |
注意:虽然每个头的维度变小了,但总参数量和单头注意力(\(d_k = 512\))是一样的。多头并没有增加参数量,只是把参数分散到了不同的子空间。这是它的精妙之处。
4.5 为什么多头有效?
我个人的理解是:多头注意力相当于让模型同时从多个角度观察输入。
举个例子,在翻译任务中:
- 一个头可能关注语法结构(主谓宾)
- 另一个头可能关注指代关系(他、她、它)
- 还有一个头可能关注长距离依赖(从句和主句的关系)
每个头各司其职,最后把信息融合起来。这比单头注意力灵活得多。
我曾经在训练一个文本分类模型时,把多头数从8减到4,结果准确率掉了2个点。后来又试了16个头,提升不大但训练变慢了。所以8个头是个不错的折中。
实用建议:头数一般取8或16。太少表达能力不够,太多计算开销大且容易过拟合。我一般从8开始试,效果不好再调。
好了,多头注意力的核心内容就这些。记住:单头是基础,多头是升华。理解了这两点,后面RoPE的集成方案就顺理成章了。