多头注意力、位置编码与一个完整的 Transformer Block
讲清多头为什么要「分头再合并」、注意力本身为什么不含位置信息而需要位置编码,最后把多头注意力、残差连接、层归一化、前馈网络按数据流组装成一个标准 Block
- 理解多头注意力的分工与拼接机制
- 知道注意力为何对词序无感,以及位置编码的作用与常见方案
- 掌握残差连接、层归一化、前馈网络各自的职责
- 能默画一个标准 Transformer Block 的内部数据流
多头:让模型在不同「子空间」同时关注
单头注意力只能学出一种关注模式。多头注意力把 Q/K/V 切成若干组(若干个「头」),每个头在自己的低维子空间里独立做一次注意力:有的头关注语法搭配、有的关注指代关系、有的关注邻近词。最后把各头输出拼接,再用一个线性层融合。
把 Q/K/V 按维度切成 h 个头
每个头独立做缩放点积注意力
各自学不同关系,互不干扰
拼接所有头的输出
输出线性层融合为统一表示
多头在总计算量上与一个同等维度的单头相近,却让模型拥有多视角的关系建模能力,是 Transformer 表达力的关键来源之一。
位置编码:注意力本身是「不认顺序」的
自注意力对一组词做的是两两加权求和,它本质上是集合操作:打乱词的顺序,输出只是跟着换序、内容不变——也就是说它分不清「狗咬人」和「人咬狗」。必须显式注入位置信息。
正弦位置编码
用不同频率的正余弦给每个位置一个唯一向量,加到词向量上,可外推到更长序列(原始 Transformer)
可学习位置嵌入
每个位置一个可训练向量,简单直接但超出训练长度外推弱(早期 BERT/GPT)
旋转位置编码 RoPE
通过旋转把相对位置注入 Q/K,外推性好、现代大模型主流
不必推导正弦公式。抓住两点:注意力对顺序天然无感,所以要额外加位置信息;趋势是从「固定/绝对」走向「可学习相对位置(RoPE)」,以支持更长上下文。
组装一个标准 Block
多头注意力只是 Block 的一半。一个标准编码器 Block 内部按如下顺序流动,并且每个子层外面都包了残差连接和层归一化:
一个容易混淆的点:注意力负责「token 之间通信」,FFN 负责「每个 token 各自思考」。注意力层不改变每个位置的独立加工,FFN 层不跨位置混合,两者交替堆叠,构成大模型一层又一层的基本节奏。现代大模型还会调整归一化位置(Pre-Norm)、用 SwiGLU 替换 FFN、引入 RMSNorm,但骨架不变。
为什么必须给 Transformer 加入位置编码?
资深工程师加餐
底层原理 · 大厂视角 · 工程经验,点卡片展开
先查数据:标签是否正确、有没有特征和标签泄漏、是否做了归一化;再查损失与学习率:学习率太大震荡、太小几乎不动;接着看批量大小和优化器,最后才怀疑模型结构。一个极好用的冒烟测试是:用极少量样本训练,看损失能不能被压到接近零——能,说明整条代码链路是通的;不能,问题一定在实现里,先别谈调参。