一句话定义:头维度是多头注意力(AI 词典:Multi-Head Attention">Multi-Head Attention)中单个注意力头所处理的向量宽度,通常记作 d_head,在标准 Transformer 里等于模型隐藏维度除以头数,即 d_head = d_model / h。
它到底切了什么
注意力层要把输入分别投影成查询(Query)、键(Key)、值(Value)。关键在于:它并不把整条 d_model 维的向量完整复制 h 份,而是每个头只投影出 d_head 维。举例来说,隐藏维度 4096、头数 32,那么每个头就是 128 维。32 × 128 = 4096,正好回到原维度——所以“总维度 = 头数 × 头维度”不是巧合,而是设计上的预算守恒:多头注意力并没有把模型变宽,它把同一份维度预算切成若干份,让每份独立地学一种关注模式。
打个比方:一份 4096 页的材料要评审,与其让一个人从头看到尾,不如分给 32 个小组,每组只拿 128 页。有的组盯数字、有的组盯措辞、有的组盯前后矛盾。每组的视野都窄,但拼起来覆盖了全部材料,而且各组可以并行。
和相邻概念的区别
| 概念 | 含义 | 典型关系 |
|---|---|---|
| d_model(隐藏维度) | 每个 token 在主干的向量宽度 | 全局预算 |
| h(头数) | 注意力头个数 | 切几份 |
| d_head(头维度) | 单个头内部的向量宽度 | 每份多宽 |
| n_kv_heads(KV 头数) | 键/值投影的头数,可少于 h | GQA/MQA 用它省显存 |
需要说明的是,“头维度 = 隐藏维度 / 头数”是常见做法而非铁律:一些模型显式指定 head_dim,或者让 Q 与 KV 的头维度不同。读配置时以模型自身的 config 为准,具体以官方页面为准。
头维度变化会带来什么
头维度变小(隐藏维度固定,意味着头数变多):每个头能表达的子空间更窄,注意力模式更“专一”也更粗糙。注意力分数是 q·k 的 d_head 项点积之和,维度越低方差越小,softmax 之前要除以 √d_head 做缩放,否则分布会过于平坦、各头的区分度下降。头维度被压得太狠时,单个头能承载的信息出现瓶颈,反而伤害效果——所以工程上常见取值集中在 64 到 128 附近。反过来,头维度很大、头数很少:单个头很“能装”,但头之间的多样性下降,注意力容易退化成近似单头。
对从业者的实际意义
做推理部署时,头维度直接决定 KV 缓存的开销:每 token 每层的缓存大致是 2 × n_kv_heads × d_head × 精度字节数,乘上层数和序列长度就是显存账单。GQA、MQA 的思路正是减少 KV 头数而非改动头维度。此外,头维度还影响 GPU kernel 的切块效率,太小或太怪异的取值会让算子跑不满。
看模型配置时,先看隐藏维度、头数、头维度这三个数,注意力的“形状”就大致清楚了。
