进阶← 返回知识库
Multi-Head Attention(多头注意力)
将Q/K/V各拆分为多组(如8组),每组独立计算注意力后拼接。不同的"头"关注不同维度的关系模式(语法、语义、指代等),总计算量与单头相当但信息捕获能力更强。
核心公式
📖 符号说明
| 符号 | 含义 | 说明 | 取值范围 |
|---|---|---|---|
| 第 i 个注意力头 | head_i = Attention(QW_i^Q, KW_i^K, VW_i^V),独立计算的子注意力 | — | |
| 头数 | 通常为 8 或 12,不同头关注不同关系模式 | — | |
| 输出投影矩阵 | 将拼接后的多头输出线性投影回原始维度 | hd_v × d_model | |
| 拼接操作 | 将 h 个头的输出沿最后一维拼接 | — |
🔢 分步计算
- 1
将 Q/K/V 分别用不同权重矩阵投影到子空间
- 2
每个头独立计算缩放点积注意力
- 3
拼接所有头的输出
- 4
线性投影回 d_model 维度
前置知识
Multi-Head Attention(多头注意力)
一句话理解
把注意力拆成多组并行运行,每组关注不同维度的关系,最后合并——用相近的计算代价换取更丰富的信息捕获。
为什么单头不够
单头注意力只能学到一种关注模式,但语言中的关系是多维的:
- 语法关系:"主语→谓语"
- 语义关系:"苹果→甜"
- 指代关系:"它→苹果"
- 位置关系:相邻词之间的局部依赖
一个注意力头不可能同时兼顾这些维度。
工作方式
- 将 Q、K、V 各拆成 h 份(如 h=8)
- 每份独立做 Scaled Dot-Product Attention
- 将 h 个结果 concat 拼接
- 通过一个线性层投影回原始维度
Multi-Head Attention 4步流程
前端类比
类似于一个代码文件同时被 ESLint(语法)、TypeScript(类型)、Prettier(格式)三个工具并行检查,每个工具关注不同维度的问题,最后汇总成一份完整的诊断报告。
设计精妙之处
拆成多头后每头的维度变小了(dmodel/h),所以总计算量与单头几乎相同,但信息捕获能力强得多——几乎是"免费的午餐"。
引用本概念的文章