42 分钟
大模型内核:从经典机器学习到对齐与前沿

多头注意力、位置编码与一个完整的 Transformer Block

讲清多头为什么要「分头再合并」、注意力本身为什么不含位置信息而需要位置编码,最后把多头注意力、残差连接、层归一化、前馈网络按数据流组装成一个标准 Block

  • 理解多头注意力的分工与拼接机制
  • 知道注意力为何对词序无感,以及位置编码的作用与常见方案
  • 掌握残差连接、层归一化、前馈网络各自的职责
  • 能默画一个标准 Transformer Block 的内部数据流

多头:让模型在不同「子空间」同时关注

单头注意力只能学出一种关注模式。多头注意力把 Q/K/V 切成若干组(若干个「头」),每个头在自己的低维子空间里独立做一次注意力:有的头关注语法搭配、有的关注指代关系、有的关注邻近词。最后把各头输出拼接,再用一个线性层融合。

多头注意力:分头计算 → 拼接 → 融合

把 Q/K/V 按维度切成 h 个头

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

各自学不同关系,互不干扰

拼接所有头的输出

输出线性层融合为统一表示

多头在总计算量上与一个同等维度的单头相近,却让模型拥有多视角的关系建模能力,是 Transformer 表达力的关键来源之一。

位置编码:注意力本身是「不认顺序」的

自注意力对一组词做的是两两加权求和,它本质上是集合操作:打乱词的顺序,输出只是跟着换序、内容不变——也就是说它分不清「狗咬人」和「人咬狗」。必须显式注入位置信息。

三类常见位置编码方案

正弦位置编码

用不同频率的正余弦给每个位置一个唯一向量,加到词向量上,可外推到更长序列(原始 Transformer)

可学习位置嵌入

每个位置一个可训练向量,简单直接但超出训练长度外推弱(早期 BERT/GPT)

旋转位置编码 RoPE

通过旋转把相对位置注入 Q/K,外推性好、现代大模型主流

💡记住结论即可

不必推导正弦公式。抓住两点:注意力对顺序天然无感,所以要额外加位置信息;趋势是从「固定/绝对」走向「可学习相对位置(RoPE)」,以支持更长上下文。

组装一个标准 Block

多头注意力只是 Block 的一半。一个标准编码器 Block 内部按如下顺序流动,并且每个子层外面都包了残差连接和层归一化:

一个 Transformer Block 的数据流(自底向上)
前馈网络 FFN逐位置两层线性+激活,做「先升维再降维」的非线性变换,是主要的知识存储区
残差 + LayerNorm子层输出与输入相加再归一化
多头自注意力全局混合上下文信息
残差 + LayerNormx 与子层输出相加,稳定深层训练
Block 输入词向量 + 位置编码
配对题Block 内组件与职责

一个容易混淆的点:注意力负责「token 之间通信」,FFN 负责「每个 token 各自思考」。注意力层不改变每个位置的独立加工,FFN 层不跨位置混合,两者交替堆叠,构成大模型一层又一层的基本节奏。现代大模型还会调整归一化位置(Pre-Norm)、用 SwiGLU 替换 FFN、引入 RMSNorm,但骨架不变。

选择题

为什么必须给 Transformer 加入位置编码?

资深工程师加餐

底层原理 · 大厂视角 · 工程经验,点卡片展开

先查数据:标签是否正确、有没有特征和标签泄漏、是否做了归一化;再查损失与学习率:学习率太大震荡、太小几乎不动;接着看批量大小和优化器,最后才怀疑模型结构。一个极好用的冒烟测试是:用极少量样本训练,看损失能不能被压到接近零——能,说明整条代码链路是通的;不能,问题一定在实现里,先别谈调参。