2.2 多头注意力机制


2.2 多头注意力机制

本节摘要:多头注意力(Multi-Head Attention)是自注意力的并行扩展:把查询、键、值经 h 组不同投影矩阵分别送入 h 个低维子空间,独立执行 h 次缩放点积注意力,再把各头输出拼接并做一次输出投影。其价值在于让模型在不同表示子空间捕捉不同类型的关联——有的头盯句法依存,有的头盯语义共指,有的头只看相邻位置。本节讲清计算流程、算一笔参数与计算量的账,并讨论头数选择与工程实践中对头的作用分析。

本节地图

阅读完本节,你应当能够:

  1. 描述多头注意力的四步流程:并行投影、独立计算、拼接、输出投影;
  2. 解释"投影到低维"的设计如何让多头总计算量与单头相当;
  3. 说明不同注意力头学到的模式为何会分化;
  4. 给出头数选择的常见取值与权衡因素;
  5. 区分编码器自注意力、解码器掩码自注意力、交叉注意力中多头的应用场景。

一、为什么一个头不够

先问单头的局限。缩放点积注意力对每个位置输出一组权重分布,本质上每层每位置只有"一份注意力预算"。但语言里的关联是多种多样的:"它"要找先行词是共指关系,动词要找主语是句法依存,形容词要找修饰对象是搭配关系。让一份预算同时伺候所有关系类型,模型只能学出折中方案,哪种都学不精。

多头的思路直白:既然一份预算不够,就发 h 份,每份配一套独立的投影矩阵。每个头先把序列投影到自己的低维子空间——相当于用自己的"滤镜"重新表述每个词——再在子空间内独立做缩放点积注意力。投影矩阵不同,子空间的几何结构不同,各头看到的"谁与谁相关"就不同。训练中,不同头自然分化出分工:有研究可视化发现某些头专注相邻位置,某些头追踪句法结构,某些头负责共指消解。

一个贴切的类比是体检:全科医生一个一个查是单头,放射科、化验科、超声科同时各自检查再汇总报告是多头。每位医生看同一病人的不同侧面,汇总得到远比单人检查丰富的结论。

二、四步流程

设头数 h,模型维度 d_model,则每个头的投影维度通常取 d_model 除以 h,记为 d_k。

第一步,并行投影。输入矩阵分别通过 h 组投影矩阵,每组含查询、键、值三个,得到 h 套低维的查询、键、值。注意是"投影到低维"而非"复制"——每个头拿到的是原表示在自己子空间里的压缩版本。

第二步,独立计算注意力。每个头对各自的三矩阵执行完整的缩放点积注意力(流程与 2.1 节六步完全一致,仅维度缩小),得到 h 个输出矩阵,每个形状为 n 行 d_k 列。

第三步,拼接。把 h 个输出沿特征维度首尾相接,得到 n 行、宽度为 h 乘 d_k 即 d_model 列的大矩阵。到这一步,各头的发现已经并排摆好。

第四步,输出投影。拼接结果再乘一个统一的输出投影矩阵,混合各头信息,得到最终的多头注意力输出,形状与输入一致。这个投影不是可有可无的形式步骤:它让模型学会如何组合各头的视角——哪些头的发现在当前层重要,由数据说了算。

多头并行检索透视

多头并行检索透视

三、算一笔账:多头并不更贵

"八个头听起来比一个头贵八倍"是初学者最常见的直觉,恰好是错的。关键在维度分配:单头全宽注意力把查询、键投影到 d_model 维;八头方案把每头投影到 d_model 除以八的维度。打分矩阵的行数列数只与序列长度有关,与维度无关;维度缩小影响的只是点积与加权求和中每次乘加的宽度。八个小头的计算量加起来,与一个全宽头基本持平。参数量同理:h 组小投影矩阵的参数总数,等于一组大投影矩阵。

这笔账的解释力在于设计哲学:多头是"重新分配同样的预算",用同样的计算量换取多视角。这不是免费午餐的全部——输出投影与拼接有少量额外开销,各头的低维子空间也牺牲了单头内部的维度冗余,但主体结论不变:多头的性价比极高。

四、头数怎么选

原论文的配置是:模型维度五百一十二,八头,每头维度六十四;大模型版本维度一千零二十四,十六头。工程实践里头数常取八、十六、三十二,且模型维度能被头数整除是硬约束。经验规律是头数与模型规模大致同步增长,但边际收益递减:头太多而每头维度太小时,单头表达能力受损,反而拖后腿。

另外两个实践要点值得一提。其一,头不是同等重要:多项剪枝研究发现不少注意力头被移除后性能几乎不变,个别"冗余头"甚至可关掉不心疼,这催生了推理加速中的头剪枝技术。其二,头数的分工不是人为指定的——没有人告诉哪个头去管句法,分化完全从数据中学出,这也是表示学习的迷人之处。

配置项 原论文基础版 原论文大版 常见实践
模型维度 512 1024 768 至 4096 及以上
头数 8 16 8 16 32
每头维度 64 64 保持 64 至 128
层数(编码器) 6 6 视规模而定

五、三种场景中的多头

多头机制覆盖 Transformer 全部注意力场景。编码器自注意力:各头在源序列内部各自检索,是最典型的多视角理解。解码器掩码自注意力:同样多头,但每个头都要服从因果掩码,掩罩在头上不打折扣。解码器交叉注意力:每个头的查询来自解码器、键值来自编码器,不同头可以对准源序列的不同片段——翻译时一个头盯名词短语,另一个头盯动词时态,各取所需。

⚠️ 实现坑两条。一是拼接顺序与投影矩阵的对应关系搞乱,导致训练能跑但效果莫名变差——建议实现时用一次大矩阵乘再重塑的方式代替循环各头,既快又不易错。二是忘记输出投影直接把拼接结果送进残差,形状虽对(拼接后恰为 d_model 列),但少了各头融合的能力,属于隐蔽的功能缺失。

💡 分析建议:调试或研究时,把不同层、不同头的注意力热力图分页画出对比。你会看到浅层头偏重相邻位置,深层头出现长程的句法与共指模式——这是理解模型内部最直观的一扇窗。

六、多头机制的深层问题

多头与"多个单头模型集成"有什么区别?

集成是多个独立模型各自预测后投票,参数与计算量成倍增长;多头是同一个模型内部的并行视角,各头输出拼接后经统一投影融合,总成本与单头全宽持平。可以粗略记为:集成买的是独立性,多头买的是互补性,且多头几乎不加价。这也是它在效率敏感的工程环境里站住脚的原因。

头数固定时,各头维度为何要均分?

均分是默认约定而非数学必然。均分的好处是张量运算规整——一次大矩阵乘加一次重塑即可完成全部头的投影,硬件效率最高;非均分(某些头大某些头小)理论可行,实现上要把张量拆组处理,收益却未被普遍证实。工程美学在这里选择了简单。同理,每头维度常取六十四也是经验共识:再小时单头表达力塌陷,再大时头数减少、视角变少,两头都有代价。

能不能训练时让模型自己决定头数?

有这类研究,思路是把头的重要性正则化,让冗余头自动衰减。结论大体是:不少头确实冗余,剪掉四到八成头性能损失有限,但完全自动学习头数的方案尚未成为主流。对应用者的启示更实际——推理加速时头剪枝是现成的优化抓手,量化部署方案里常有此选项。

交叉注意力里的多头有特殊之处吗?

结构上没有,仍然是"多组投影加独立检索加拼接融合"。特殊的是语义:交叉注意力的不同头可以对准源序列的不同片段——翻译场景中可以观察到有的头盯名词短语、有的头盯动词时态、有的头盯标点结构。多头机制在跨序列检索中的分工,比序列内部更接近人类翻译时的"兼顾多个对应点"的直觉,可视化分析也以此最出成果。

💡 观察练习:在开源可视化工具里载入任一小模型,挑中间层的两个头画注意力热力图对比。你会看到同一层内不同头的模式差异显著——这就是"多副眼镜"的直接证据。看图时记得 2.1 节的告诫:模式不等于因果,但足以建立对多头分工的直观认知。

多头会不会互相打架、学到重复模式?

会重复,但打架谈不上——训练的梯度天然鼓励互补:两个头若学到完全相同的投影,其中之一的梯度会被冗余压力推向分化。重复更多来自初始化运气与数据不足。这也解释了为什么小数据训练的模型头间冗余度高、大数据模型分工清晰。对实践者的提示:发现冗余头不必焦虑,它们是容量富余的表现;真正要警惕的是所有头模式趋同——那通常意味着模型容量被任务难度压死,该考虑加宽或加深了。

要点串联

  • 一份预算不够用:语言关联类型多样,单头只能学折中方案,多头让各头分工;
  • 四步流程:并行投影到低维、各头独立缩放点积、沿特征拼接、统一输出投影;
  • 投影即滤镜:不同投影矩阵造就不同子空间,匹配模式随之分化;
  • 总账不涨:每头维度按头数等比缩小,计算量与参数量与单头全宽基本持平;
  • 头数经验:八至三十二为常见区间,维度整除是硬约束,过多过少都有代价;
  • 头的分工是学出来的:可视化可见句法、共指、局部等模式自然涌现,也有冗余头可剪;
  • 三种场景通用:自注意力、掩码自注意力、交叉注意力都以多头形态出现。

注意力解决了"词与词交流",但整套计算对顺序无感。下一节看位置编码如何给每个词别上座次牌。

常见疑问

问:多个头真的学到了不同的「视角」吗,有证据吗?
答:可视化研究给出过直观证据:训练后的模型里,有的头专盯相邻位置(局部句法),有的头追踪远距离的指代或搭配,还有的头疑似编码句子边界。但要泼一盆冷水——研究中也发现相当比例的头剪掉后指标几乎不变,冗余普遍存在。「多头有用」成立,「每个头都不可或缺」不成立;剪枝压缩正是利用后一点。

问:头数越多越好吗,一般取多少?
答:头数受维度约束:每个头的维度等于总维度除以头数,头太多则单头维度太小,表达能力被切碎。工程惯例是 8 到 16 头起步,配合 512 到 1024 的模型维度;加倍头数通常要加倍总维度才有意义。调头数不是独立旋钮,它和模型宽度绑定,动一个就要连带考虑另一个。


作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U