总览
本章节范围:两卷。基础卷把 self-attention 从最朴素的"加权求和" 一路展开到 GPT 主线的"因果多头",严格 4 步递进,走完拿到 dense attention 的完整心智图。实现卷在此之上讲真实模型用的高效 / 异构注意力(稀疏 / 压缩 / 线性 / SSM),按机制族组织——这是 06 作为"大模型知识与技术的家"对前沿注意力的落点。 目标读者:工程师 / 研究者。基础卷假设已读 03-文本如何变成数字(token id → embedding → 位置编码);实现卷额外假设已过基础卷,并了解 RoPE / KV cache(前置见各篇门槛清单)。
范围与边界
- 包含:(基础卷)self-attention 想解的根本问题 (RNN 长程依赖 + 训练串行) → 4 步递进 (无参版 → Q/K/V → 因果掩码 → 多头) → 每步引入什么、解掉什么;(实现卷)dense 的 $O(n^2)$ / KV 墙 → 高效注意力的机制族(稀疏化 / 压缩化 / 换算子)逐类的算子级实现。
- 不包含 (外链):
- 注意力变体的"优化方向 / 问题视角"(为什么需要、有哪些路)→ knowledge/03-长上下文/04-注意力机制变体;其算子实现已纳入本章实现卷(见下方 SSOT 表)。Flash Attention(kernel / IO 融合)仍属工程优化,不在本章
- 位置编码 (RoPE 等) → knowledge/06-大模型解构/03-文本如何变成数字/04-位置编码, attention 内位置注入机制在那篇
- GQA / MQA / MLA 等 KV 架构压缩:本章 05-多头末尾点到为止 + 外链 → knowledge/03-长上下文/05-kv-cache架构压缩
- 完整 Transformer block 组装 (attention + FFN + 残差 + LayerNorm 的整体协作) → 05-组装GPT
- KV cache 工程管理 (paged / eviction):本章 04-因果掩码 提一句,详见 08-推理/03-kv-cache
- Flash Attention 等 kernel 融合:工程优化,不属本章
名词定义
本章节子文档默认这些名词已定义,不再重复;父总览 1 总览 已定义的 (Self-attention / Multi-head attention / Causal mask / Q/K/V) 在此不重列。
| 名词 | 定义 |
|---|---|
| 简化自注意力 (Simplified self-attention) | 教学用的最朴素 attention 形式:直接用输入向量自己做 Q=K=V,无可学参数。Raschka Ch.3 用作教学第一步 |
| Attention score | $\mathbf{q}_i \cdot \mathbf{k}_j$ 内积值,衡量 token $i$ 对 token $j$ 的关注权重 (softmax 之前) |
| Attention weight | $\mathrm{softmax}(\mathbf{q}_i \cdot \mathbf{K}^\top)$ 之后的归一化权重,在 token $j$ 上求和为 1 |
| Scaled dot-product attention | Vaswani 2017 的标准 attention 形式,内积除以 $\sqrt{d_{\text{head}}}$ 后做 softmax |
| Causal mask (因果掩码) | 在 attention score 矩阵上把"未来位置" (j > i) 设为 $-\infty$,让 token 只看历史;decoder-only 标配 |
| Head | 多头注意力中的单一子空间;一个 head 有独立的 Q/K/V 投影矩阵,维度 $d_{\text{head}}$ |
| Multi-head attention (MHA) | 把 Q/K/V 沿 hidden 维切成 $n_{\text{head}}$ 个 head,各自独立算 attention,再拼接 |
| Grouped-query attention (GQA) | MHA 的变体,多个 Q head 共享一组 K/V head;本章 05 末尾点到,详见长上下文章 |
@tbl-attn-glossary 本章共享名词
子文档索引
按 "4 步递进" 顺序排列,每篇配独占技术内核 + 负边界 (脑暴契约,各篇写作时不重新讨论):
| 篇 | 一句话 | 独占技术内核 (写到深) | 负边界 (不展开) |
|---|---|---|---|
| 02-简化自注意力 | 无可学参数版,纯点积加权建直觉 | self-attention 排列不变性 → 加权求和直觉 → 用输入向量直接做 Q=K=V → 每个 token "看自己 + 看其他" 的语义 → softmax 归一化 | 不引入可学习投影矩阵 (留 03 篇),不讲因果掩码 (留 04),不讲多头 (留 05) |
| 03-自注意力 Q/K/V | 引入三投影矩阵 + scaled dot-product | 为什么必须分 Q/K/V (语义角色) → 三个 $W_Q / W_K / W_V$ 投影 → $\sqrt{d}$ 缩放的工程意义 (softmax 梯度数值稳定) → 与简化版的本质差别 (可学习内容感知 vs 固定相似度) | 仍用单头,仍无掩码,不讲多头维度切分 |
| 04-因果掩码 | decoder-only 因果性,$-\infty$ 在 softmax 上的数学 | 自回归 next-token prediction 要求只看历史 → 训练时为何能并行 (mask 让位置间无数据依赖) → mask 实现 (上三角 $-\infty$) → softmax 把 $-\infty$ 变成 0 → 与 encoder-only bidirectional attention 的对比 → 推理 decode 阶段 KV cache 的必要性源头 | KV cache 工程细节归 08-推理;encoder-decoder / cross-attention 不展开;bidirectional encoder (BERT) 仅作对比一句 |
| 05-多头注意力 | 多头切分 + 拼接 + 不同 head 学什么 | 单头表达力不足 → 多头切分 hidden 维度 (注意不是复制) → 各 head 独立 Q/K/V → 拼接后线性投影 → head 数量与 head 维度的关系 → 不同 head 实际学到的功能性差异 (positional / syntactic / semantic head) → 多头计算复杂度 vs 单头大维度的对比 | GQA / MQA 在此点出动机,MLA 与各类高效注意力的实现移至本章实现卷;Flash Attention kernel 优化不展开 |
@tbl-attn-index 子文档索引 · 基础卷 (含边界契约)
实现卷(前沿高效 / 异构注意力,假设已过基础卷;规划中,链接待回填):
| 篇 | 一句话 | 机制族 / SSOT 覆盖 | 负边界 |
|---|---|---|---|
| 06-从dense到高效(过渡篇) | dense 的墙 → 优化方向 → 机制族谱系 | —(动机 + 谱系图 + 前置门槛清单 + 全技术 SSOT 索引) | 不重复具体算子(留各机制篇) |
| 07-滑窗与固定稀疏 | 按位置选 key | 稀疏化(固定):SWA / Longformer / BigBird / StreamingLLM | 动态选择留 08 |
| 08-动态稀疏选择 | 按内容选 key | 稀疏化(动态):NSA(整体)/ DSA / MoBA;lightning indexer + top-k 唯一主词条 | 压缩 / 线性留后篇 |
| 09-序列压缩注意力 | 减 KV entry 数 | 压缩化(序列):compressor / CSA / HCA | 维度压缩留 10;NSA 压缩分支只对比链 08 |
| 10-维度压缩:MLA | 减每 entry 维度 | 压缩化(维度):MLA(从 03/05 迁入)/ GQA / MQA | 序列压缩留 09 |
| 11-线性注意力与SSM | 放弃 softmax dot-product | 换算子:线性注意力 / Mamba / Mamba-2 / SSD | 分布式 CP 链 interconnect |
@tbl-attn-impl-volume 子文档索引 · 实现卷 (规划中,链接待回填)
机制族与 SSOT 归属
实现卷按机制族(对 dense 的偏离方式)组织,不按优化目标——因为多数技术横跨多个优化目标(如 CSA 既压缩又稀疏),但其核心机制只有一种偏离方式。每个技术 / 耦合机制指定唯一主词条页(SSOT),其他文档只链接不重写,避免副本漂移。
| 机制族 | 怎么偏离 dense | 技术 | SSOT 主词条 |
|---|---|---|---|
| 稀疏化(固定) | 保留 softmax,按位置减少 query-key 对 | SWA / Longformer / BigBird / StreamingLLM | 07-滑窗与固定稀疏 |
| 稀疏化(动态) | 保留 softmax,按内容打分选 key | NSA / DSA / MoBA | 08-动态稀疏选择 |
| 压缩化(序列) | 保留 softmax,减 KV entry 数 | compressor / CSA / HCA | 09-序列压缩注意力 |
| 压缩化(维度) | 保留 softmax,减每 entry 维度 | MLA / GQA / MQA | 10-维度压缩:MLA |
| 换算子 | 放弃 softmax dot-product(共享 softmax-free 偏离动作,非 SSD 统一) | 线性注意力 / Mamba / Mamba-2 / SSD | 11-线性注意力与SSM |
@tbl-attn-mechanism-family 机制族与各技术 SSOT 归属
耦合机制的归属裁定(防跨篇重复,对应 plan review 的 CRITICAL 修正):
| 耦合机制 | 唯一主词条 | 其他篇怎么处理 |
|---|---|---|
| lightning indexer + top-k selection | 08-动态稀疏选择 | CSA(V4) 与 DSA(V3.2) 共用此机制;09 序列压缩篇的 CSA 段只链 08,不重写 |
| compressor(序列方向压缩) | 09-序列压缩注意力 | CSA / HCA 的压缩半边在此;稀疏选择半边链 08 |
| NSA(三分支:压缩+选择+滑窗) | 08-动态稀疏选择 | 整体归 08(含压缩分支);09 序列压缩篇只在对比时一句链回 08,不重写其压缩分支 |
| MoBA(块级稀疏) | 08-动态稀疏选择 | interconnect CP 篇引此处 |
| MLA(维度压缩) | 10-维度压缩:MLA | 从 03/05-kv-cache架构压缩迁入;03/05 降级为 KV 体积对比一句 + 链 10 |
@tbl-attn-ssot-coupling 算子-系统耦合点的 SSOT 裁定
四层知识网络分工:本章实现卷 = 算子机制的 SSOT;03-长上下文/注意力机制变体 = 为什么需要 + 优化方向;interconnect/05 上下文并行 = 这些机制分布式怎么通信;07-前沿模型追踪 / DeepSeek-V4 = 真实模型怎么组合用。算子-系统耦合点(如 top-k 全局视野)归本章实现卷一次讲透,其他层只引。
4 步递进的教学逻辑
本章独特之处在严格递进,不是按"先讲概念再讲实现" 平铺。每篇解掉前一篇留下的一个具体缺陷:
| 第 N 步 | 引入什么 | 解掉的具体缺陷 | 留下的新缺陷 |
|---|---|---|---|
| 02 简化版 | 加权求和 + softmax | RNN 串行依赖 → token 间一跳即达 | 用输入直接做 Q=K=V,没有可学参数,表达力受限 |
| 03 Q/K/V | $W_Q, W_K, W_V$ 投影 + $\sqrt{d}$ 缩放 | 引入可学习,让"看什么" 和"被看什么" 解耦 | 训练时 token 能看到未来,与 next-token prediction 自回归不兼容 |
| 04 因果掩码 | 上三角 $-\infty$ mask | decoder-only 自回归训练并行成立 | 单头表达力仍有限,只能学一种"关注模式" |
| 05 多头 | 切 head + 各自算 + 拼接 | 多头并行学不同模式,表达力质变 | (基础卷结束。dense 的 $O(n^2)$ / KV 墙这一新缺陷,由实现卷接手——见 06 过渡篇) |
@tbl-attn-staircase 4 步递进的教学逻辑 (每步引入什么 / 解掉什么 / 留下什么)
为什么严格按这个顺序:业界教程常见两个反模式——(1) 一上来直接给 $\mathrm{softmax}(QK^\top/\sqrt{d})V$ 完整公式,读者懂数学但抓不到"为什么是这样"; (2) 拆分讲但不强调"每一步解决什么", 4 步变成 4 个孤立知识点。Raschka 2024 Ch.3 的设计明确是"每步只引入一个新机制,立刻让读者看到收益",本章严格沿用。
与外部专题的接缝
| 外链主题 | 在本章哪里引 | 目标 |
|---|---|---|
| 注意力变体的优化方向 | 06 过渡篇 / 05 末尾 | knowledge/03-长上下文/04-注意力机制变体(变体实现在本章实现卷,03 给方向) |
| GQA / MQA (KV 架构)/ MLA 的 cache 影响 | 05 末尾 / 08-推理 | knowledge/03-长上下文/05-kv-cache架构压缩(MLA 的压缩算子见本章 08-压缩注意力篇) |
| KV cache 推理管理 | 04-因果掩码 末尾 | 08-推理/03-kv-cache |
| 位置编码 (RoPE) | 03-Q/K/V 节首 (默认已注入) | 03-文本如何变成数字/04-位置编码 |
| Flash Attention | 05-多头注意力 末尾 | 外部专题,本章节系列暂未覆盖 |
@tbl-attn-external 与外部专题的外链对照
参考资料
教学蓝本:
- Sebastian Raschka. Build a Large Language Model (From Scratch). Manning, 2024. Chapter 3 (4 步递进的设计直接来自这一章).
- Andrej Karpathy. Let's build GPT: from scratch, in code, spelled out. https://www.youtube.com/watch?v=kCc8FmEb1nY
关键论文:
- Vaswani et al. Attention Is All You Need. NeurIPS 2017. https://arxiv.org/abs/1706.03762 (scaled dot-product attention + multi-head attention 原始定义)
- Bahdanau et al. Neural Machine Translation by Jointly Learning to Align and Translate. ICLR 2015. https://arxiv.org/abs/1409.0473 (attention 机制的更早起源,encoder-decoder 框架)
章内交叉引用:父总览 1 总览 给全章节地图与共享名词 / 形状约定。