🔍 QKV 为什么是三个矩阵?注意力为何要除以 √d?多头注意力到底有啥用?
作者:石去皿
发布时间:2025年7月
Transformer 已经成为 AI 的“通用电路”——从语言、图像到机器人动作生成,都离不开它。
而它的核心,就是 Self-Attention 机制。
但你有没有想过这几个问题:
- 为什么要有 Q、K、V 三个不同的矩阵?不能共享吗?
- 为什么算注意力时要 除以 √d_k?
- 多头注意力(Multi-Head Attention) 真的有必要吗?不是浪费算力吗?
今天我们就来“拆解”Self-Attention,从直觉、数学、工程三个层面,彻底讲清楚这些设计背后的深意。
🧩 一、QKV 为什么是三个不同的矩阵?
先看公式:
Attention ( Q , K , V ) = softmax ( Q K T d k ) V \text{Attention}(Q,K,V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)V Attention(Q,K,V)=softmax(dkQKT)V
其中:
- $ Q = XW_Q $
- $ K = XW_K $
- $ V = XW_V $
其中K 和 V 维度相同,不是因为它们“信息量相同”,而是因为:
- K 的作用是“匹配相关性”,需要与 Q 做点积 → 必须和 Q 同维
- V 的作用是“传递信息”, 可以高维,但为了计算效率,通常与 K/Q维度一致
- 信息量 ≠ 向量维度:V 的“信息量”由训练数据和模型决定,不靠维度堆叠
- 实际中 V的“有效信息”是通过注意力加权后聚合的,不是单个 V 向量决定的
明明都来自同一个输入 $ X $,为什么要用三个不同的权重矩阵?不能共用吗?
✅ 答案是:因为 Q、K、V 的“角色”完全不同
矩阵 | 角色 | 类比 |
---|---|---|
Query (Q) | 提问者:“我在找什么?” | 学生问:“这个知识点考吗?” |
Key (K) | 索引者:“我是否相关?” | 书本标题:“这里是重点章节” |
Value (V) | 内容提供者:“我有什么?” | 书本正文:“这是详细解释” |
✅ 所以:K 决定“你是否被注意”,V 决定“你贡献什么内容”
🌰 举个例子:在一句话中理解“它”
句子:
“小明打开了电脑,它运行得很慢。”
我们想知道“它”指的是谁。
- 所有词都有自己的 K 和 V
- “它”作为 Query,会去查询“小明”和“电脑”的 Key
- “电脑”的 Key 与“它”的 Query 更相似 → 注意力权重高
- 然后从“电脑”的 Value 中取出“运行慢”这个信息
✅ 如果 K 和 V 是同一个,模型就分不清“相关性”和“内容”——就像书名和正文混在一起。
🛠️ 工程意义:解耦表达能力
通过三个独立矩阵,模型可以学习:
- 哪些部分容易被查询(通过 $ W_Q $)
- 哪些部分容易被匹配(通过 $ W_K $)
- 哪些部分值得传递(通过 $ W_V $)
🔁 这就像数据库:Key 是索引,Value 是记录,Query 是搜索词 —— 三者必须分离才能高效检索。
📏 二、为什么要除以 √d_k?
公式中这个 1 d k \frac{1}{\sqrt{d_k}} dk1 看似无关紧要,实则至关重要。d 是 Key 向量的维度(d k)也就是每个 Key 向量有多少个元素。
❌ 不除会怎样?
假设 $ d_k = 64 $,Q 和 K 的每个元素是均值为 0、方差为 1 的随机变量。
那么 $ q \cdot k $ 的期望方差是 $ d_k $,即 64。
这会导致:
- $ QK^T $ 的值非常大
- softmax 输入过大 → 梯度趋近于 0(梯度消失)
- 注意力权重趋于 one-hot(只关注一个词),失去多样性
📉 模型变得“死板”,无法学习软性注意力。
✅ 除以 √d_k 的作用:稳定方差
我们来推导一下:
设 $ q_i, k_j \sim \mathcal{N}(0,1) $,则:
Var ( q i T k j ) = ∑ d = 1 d k Var ( q i , d ⋅ k j , d ) = d k ⋅ 1 = d k \text{Var}(q_i^T k_j) = \sum_{d=1}^{d_k} \text{Var}(q_{i,d} \cdot k_{j,d}) = d_k \cdot 1 = d_k Var(qiTkj)=d=1∑dkVar(qi,d⋅kj,d)=dk⋅1=dk
所以标准差是 $ \sqrt{d_k} $
为了将点积的方差控制为 1,我们除以 $ \sqrt{d_k} $:
Var ( q i T k j d k ) = 1 \text{Var}\left(\frac{q_i^T k_j}{\sqrt{d_k}}\right) = 1 Var(dkqiTkj)=1
✅ 这样 softmax 的输入分布稳定,梯度不会消失,模型更容易训练。
🎯 直观理解
想象你在黑暗中找灯:
- 不除 √d_k:所有灯都特别亮,你只能看清最近的一盏
- 除 √d_k:亮度适中,你能看到几盏灯,并合理分配注意力
✅ 除以 √d_k 是为了让“注意力分配”更细腻、更灵活。
🌀 三、多头注意力:为什么要有多个“注意力头”?
公式:
MultiHead ( Q , K , V ) = Concat ( h e a d 1 , . . . , h e a d h ) W O \text{MultiHead}(Q,K,V) = \text{Concat}(head_1, ..., head_h)W^O MultiHead(Q,K,V)=Concat(head1,...,headh)WO
where h e a d i = Attention ( Q W i Q , K W i K , V W i V ) \text{where } head_i = \text{Attention}(QW_i^Q, KW_i^K, VW_i^V) where headi=Attention(QWiQ,KWiK,VWiV)
看起来像是把计算量放大了 $ h $ 倍(如 8 倍),是不是浪费?
✅ 不是浪费,而是“分而治之”
每个注意力头可以学习不同的关注模式:
头 | 可能学到的模式 |
---|---|
Head 1 | 语法结构:“主语-谓语-宾语” |
Head 2 | 指代关系:“它” → “电脑” |
Head 3 | 情感倾向:“慢”是负面词 |
Head 4 | 时序依赖:“打开”发生在“运行”之前 |
✅ 就像乐队中不同乐器演奏不同声部,最终合奏出丰富旋律。
🌰 举个真实例子:BERT 中的多头注意力
研究发现,某些头会专门关注:
- 句法树结构
- 命名实体(如人名、地点)
- 否定词(如“不”、“没”)
这说明多头注意力确实实现了功能分工。
🧠 为什么不能用单头搞定?
因为:
- 单头注意力的表达能力有限
- 所有信息必须挤在一个空间中
- 容易出现“注意力冲突”:既要关注语法,又要关注情感,顾此失彼
✅ 多头机制相当于“扩大认知带宽”,让模型同时处理多种语义关系。
📈 工程权衡:头数 vs 维度
虽然头数增加会提升表达能力,但也要注意:
- 总维度 $ d_{\text{model}} = h \times d_k $
- 如果 $ d_k $ 太小(如 8),每个头的表达能力受限
- 通常设置 $ h=8 $ 或 $ 12 , , , d_k=64 $,平衡性能与效率
🔧 实践建议:不要盲目增加头数,优先保证每头有足够表达空间。
🔄 四、总结:一张表看懂 Self-Attention 设计哲学
问题 | 答案 | 设计目的 |
---|---|---|
QKV 为什么是三个矩阵? | 角色不同:Q=提问,K=索引,V=内容 | 解耦“相关性”与“信息传递” |
为什么要除以 √d_k? | 控制点积方差,防止 softmax 饱和 | 保持梯度稳定,支持软注意力 |
多头注意力有必要吗? | 有!不同头可学习不同关注模式 | 提升表达能力,实现“分治” |
🚀 展望:未来的注意力机制
虽然标准 Attention 已经非常强大,但研究仍在进化:
新机制 | 优势 |
---|---|
Sparse Attention | 只关注关键位置,降低计算量 |
Linear Attention | 将复杂度从 $ O(N^2) $ 降到 $ O(N) $ |
Flash Attention | 利用 GPU 内存优化,加速训练 |
Cross-Modal Attention | 跨模态对齐(如图文) |
但无论如何演变,QKV 分离、缩放点积、多头机制这三大设计原则,依然是现代 AI 的基石。
✅ 结语:Attention is Not Magic, It’s Design
Self-Attention 看似神秘,其实每一个设计都有其深意:
- QKV 分离 → 让模型学会“问谁、查什么、取什么”
- 除以 √d_k → 防止注意力“过曝”
- 多头机制 → 让模型拥有“多重视角”
它不是魔法,而是精心设计的认知架构。
理解这些细节,你才能真正掌握 Transformer 的“思维模式”。
参考文献:
- Attention Is All You Need (Vaswani et al., 2017)
- Understanding the Difficulty of Training Deep Feedforward Neural Networks (Glorot & Bengio, 2010)
- BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding
- FlashAttention: Fast and Memory-Efficient Exact Attention