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. 1

    将 Q/K/V 分别用不同权重矩阵投影到子空间

  2. 2

    每个头独立计算缩放点积注意力

  3. 3

    拼接所有头的输出

  4. 4

    线性投影回 d_model 维度

前置知识

Multi-Head Attention(多头注意力)

一句话理解

把注意力拆成多组并行运行,每组关注不同维度的关系,最后合并——用相近的计算代价换取更丰富的信息捕获。

为什么单头不够

单头注意力只能学到一种关注模式,但语言中的关系是多维的:

  • 语法关系:"主语→谓语"
  • 语义关系:"苹果→甜"
  • 指代关系:"它→苹果"
  • 位置关系:相邻词之间的局部依赖

一个注意力头不可能同时兼顾这些维度。

工作方式

  1. 将 Q、K、V 各拆成 hhh 份(如 h=8h=8h=8
  2. 每份独立做 Scaled Dot-Product Attention
  3. hhh 个结果 concat 拼接
  4. 通过一个线性层投影回原始维度
MultiHead(Q,K,V)=Concat(head1,...,headh)WO\text{MultiHead}(Q,K,V) = \text{Concat}(\text{head}_1, ..., \text{head}_h)W^OMultiHead(Q,K,V)=Concat(head1,...,headh)WO

Multi-Head Attention 4步流程

前端类比

类似于一个代码文件同时被 ESLint(语法)、TypeScript(类型)、Prettier(格式)三个工具并行检查,每个工具关注不同维度的问题,最后汇总成一份完整的诊断报告。

设计精妙之处

拆成多头后每头的维度变小了(dmodel/hd_{model}/hdmodel/h),所以总计算量与单头几乎相同,但信息捕获能力强得多——几乎是"免费的午餐"。

引用本概念的文章