00 COMPASS
先拆成十张账:同一个“Attention”词,可能在回答十个不同问题
初学者最容易把模型结构、训练目标、推理缓存和 GPU kernel 全揉进一张架构图。 结果是每个缩写都像在“改进 Attention”,却说不清它究竟改了什么。 下面十张账是本章的主坐标,后面遇到任何论文都先归账,再比较。
PREVIOUS / CHAPTER 01如果 N-gram、Embedding、RNN/LSTM、Seq2Seq 和 Bahdanau Attention 的前史还不熟,先回上一章。
信息路径
怎样从固定压缩变成按需读取?
匹配几何
Q、K、V 与缩放究竟算什么?
可见性
谁能在这一层读取谁?
多头
为什么并行多个表示子空间?
位置
无序的算子如何获得序列次序?
局部计算
Attention 之后 FFN / MoE 做什么?
深度路径
Residual 与 Norm 如何支撑深网?
架构与目标
BERT、GPT、T5 为什么不同?
系统成本
训练、prefill、decode 哪里最贵?
当代映射
MLA、KDA、AttnRes、MTP 各改哪一轴?
Attention 是可学习的信息路由;Transformer 是 Attention、局部计算、深度路径、位置与训练目标共同组成的计算骨架。
01 THE OLD BOTTLENECK
问题不是 RNN “完全记不住”,而是全部信息被迫挤过同一条窄桥
经典 Seq2Seq encoder 逐步读入源句,再把最后隐藏状态交给 decoder。 这像一个翻译员读完整段材料后只能带一张固定大小便签进考场: 句子越长、细节越多,便签上的取舍越残酷。
把三个问题分开
一个向量理论上能编码很多信息,但训练是否能稳定把需要的细节写进去、再读出来,是另一回事。
远处 token 的影响必须穿过许多循环步;梯度也沿同一长路径回传。
状态 hₜ 依赖 hₜ₋₁,时间维难以像矩阵乘法那样一次摊开。
Attention 最早不是为了制造漂亮热力图,而是给 decoder 一种“翻回原文、按当前需要查资料”的能力。
02 DIFFERENTIABLE RETRIEVAL
Bahdanau 的关键变化:每生成一个词,都重新决定该读源句哪里
对 decoder 第 t 步,模型拿当前状态与每个 encoder state 计算匹配分数, 把分数经 softmax 变成权重 α,再对全部源表示做加权和。 因为每一步都是连续可导运算,翻译损失能反向教会“应该对齐哪里”。
eₜᵢ = score(sₜ₋₁, hᵢ)αₜ = softmax(eₜ)cₜ = Σᵢ αₜᵢ hᵢscore 可以是小神经网络(additive attention),也可以是 dot / general 等形式。
从 Cross-Attention 到 Self-Attention
早期注意力跨越 decoder → encoder:一边提出查询,另一边提供可读记忆。 Self-attention 则让同一序列同时产生查询、索引与内容; “桥”不再只接在 encoder 和 decoder 之间,而成为每一层内部的主要信息混合方式。
decoder 读 encoder
global / local / dot
序列内部直接互读
相同算子,不同拓扑与目标
03 QUERY · KEY · VALUE
Q、K、V 的真正价值:把“用什么匹配”和“匹配后搬什么”拆开
对输入矩阵 X,三组可学习权重产生 Q = XWQ、K = XWK、V = XWV。 同一个 token 因而能以三种角色参与计算。不要把它们想成三份神秘词义; 它们只是训练学出的接口合同。
当前位置想找什么?
例如代词位置可把“实体候选、单复数、距离”等需求写进 Query 特征。
来源怎样被找到?
名词位置可把“我是实体、我的属性是什么”写进 Key 的匹配特征。
找到后实际带回什么?
权重确定后,被汇入目标位置的是 Value;它可携带比匹配特征更丰富的内容。
n × d_modeln 个 token,每个 d_model 维
n × d_k匹配空间
n × d_v内容空间
n × n每个位置对每个来源
“Query 像搜索词、Key 像索引、Value 像文档”是好用的直觉,但真实向量由端到端训练共同形成,不是数据库里人工定义的字段。
04 SCALE · SOFTMAX · READ
完整公式只有一行,但里面有三个容易混淆的动作
QKᵀ / 匹配
得到 n×n logits。它们不是概率,可以为负,也不必和为 1。
÷√dₖ / 稳尺度
若分量方差相近,点积方差随 dₖ 增长;缩放避免 softmax 过早饱和。
+M / 控制可见性
允许位置加 0,被遮位置加 −∞;softmax 后后者权重为 0。
softmax · V / 读取
每行权重和为 1,再对对应 Value 向量求加权和。
为什么是 √dₖ,而不是 dₖ
设 qᵢ、kᵢ 独立、均值 0、方差 1。点积 q·k 是 dₖ 项乘积之和,方差约为 dₖ, 标准差约为 √dₖ。除以标准差量级,正好把 logits 拉回较稳定范围。 这是原论文给出的统计动机,不是“维度一大就必然训练失败”的定理。
把 Attention 从一句公式拆成四次可操作实验
全部数值都是教学模拟。实验展示计算关系,不声称复现任何真实模型的隐藏状态。
缩放会怎样改变 softmax 的“确信程度”?
这里把每个 Value 压成一个标量,方便看见最终加权和;真实模型的 V 是向量。
———“谁被读”和“读回什么”是两步:权重由 Q/K 决定,结果由权重与 V 共同决定。
Self、Causal、Cross 与 Prefix 到底差在哪?
点击一行 Query,亮格就是这一位置允许读取的来源;灰格在 softmax 前被屏蔽。
多头和位置编码分别补什么能力?
头模式是人工构造的教学例子;真实 head 可能混合、冗余,也会随层和输入改变。
旋转 Q / K,让点积携带相对位移
每对维度按位置旋转;两个位置的点积自然依赖它们的距离。
邻近搭配
偏好相邻位置,适合短程搭配。
指代候选
示意把“它”连接到候选实体。
结构边界
示意关注连接词或分隔位置。
广域汇总
较平均地读取多个来源。
要声称某个 head 对输出有因果作用,还需要消融、patching、干预或其他对照;一张权重热力图不够。
“Transformer Block”为什么没有唯一标准答案?
选择一个时代的代表配置,再用相同字段比较 Norm、位置、FFN 与 KV 组织。
- FAMILY
- Decoder-only
- NORM
- Pre-RMSNorm
- POSITION
- RoPE
- LOCAL COMPUTE
- SwiGLU
- KV ORGANIZATION
- GQA
代表性现代组合,不表示所有开源模型都采用完全相同配方。
同样长度,KV 组织决定每一步要搬多少历史
下方是归一化教学单位,不是某张 GPU 的实测延迟。
05 INFORMATION VISIBILITY
Self、Cross、Causal 不是三套公式,而是 Q 从哪来、K/V 从哪来、哪些边允许存在
当前序列
同一序列
通常全可见
双向表示当前序列
同一序列
自己与过去
自回归生成decoder
encoder 输出
完整源序列
翻译、条件生成同一序列
同一序列
前缀双向,生成区因果
统一理解与生成训练时为什么可以“同时算所有位置”
Teacher forcing 已经把完整正确序列放在输入张量里;causal mask 只让位置 t 的行看到 ≤t 的列。 GPU 仍可一次计算整个 QKᵀ 矩阵,未来位置因为加了 −∞ 不会泄漏到当前预测。 并行的是训练计算,不是推理时凭空提前知道尚未生成的 token。
j ≤ i
j > i
未来位置不参与输出
06 MULTI-HEAD ATTENTION
一个权重分布很难同时承担所有关系;多头提供多组投影与路由子空间
每个 head 有自己的 WQ、WK、WV,在较小维度上独立计算。 结果拼接后再乘 WO 写回 residual stream。 这并不要求某个 head 永远负责“语法”、另一个永远负责“指代”;专门化只是可能出现的训练结果。
“更多头”与“更多 KV 头”不是同一回事
MHA 通常有同数目的 Q heads 与 K/V heads;MQA 保留多 Q heads,却让所有 head 共享一组 K/V; GQA 则让若干 Q heads 共享一组 K/V。它们主要在推理解码的缓存与带宽上取舍, 并没有把多子空间 Query 全部取消。
Michel et al. 发现许多 head 可在测试时剪掉,但这不能推出它们在训练中从未参与优化,也不能推出所有模型、层和任务都只需一个 head。
07 POSITION
只看内容的 Self-Attention 不知道先后;位置机制负责打破这种对称性
若把输入 token 同步重排,且没有任何位置项,self-attention 的输出也只会同步重排。 模型能识别“猫追鸟”和“鸟追猫”不同,必须从某处获得次序信号。
Sin / Cos
位置向量与 token embedding 相加;原作还比较 learned position。
Shaw bias
把 i−j 的相对距离表示直接放进 attention。
Transformer-XL
相对位置与跨 segment recurrence 配合,处理 context fragmentation。
RoPE
按位置旋转 Q/K,让点积自然依赖相对位移。
ALiBi
按距离直接给 logits 加惩罚,并内置 recency bias。
不是把“位置向量”加到词向量
RoPE 把 Q/K 的成对维度看作二维平面,并按位置旋转。两个向量点积时, 共同的绝对旋转相消,留下相对角度。真实实现把这一操作分块应用到许多维度。
“有相对位置”不等于“任意长度可靠外推”。训练长度、频率分配、缩放策略、数据与评测都会共同决定长上下文表现。
08 THE WHOLE BLOCK
Attention 只完成跨位置通信;一个 Block 还需要局部计算和深度高速公路
控制送入子层的尺度
跨 token 读取与混合
把增量写回主流
再次准备尺度
逐 token 非线性加工
形成下一层输入
Attention
让位置 i 读取位置 j;主要改变 token 之间的信息组合。
FFN / MoE
对每个位置独立应用同一函数;主要改变特征通道与局部容量。
Residual + Norm
定义层与层怎样累积、稳定和传递表示与梯度。
因此“Attention Is All You Need”是论文标题,不是说网络里只有 Attention。 原始模型同样有 embedding、位置编码、FFN、Residual、LayerNorm、dropout、输出投影与训练配方。
09 RESIDUAL · NORM · DEPTH
深度不是把同一层复制很多次那么简单;主路径放在哪里会改变优化
Residual connection 让子层学习增量 F(x),输出 x+F(x)。 即使某个子层暂时学得不好,恒等路径仍可传递表示和梯度。 这一思想来自 ResNet;Transformer 把它用于 attention 与 FFN 子层。
y = LN(x + F(x))原始 Transformer 的图与正文。输出附近初始化梯度可能较大,训练常依赖 warm-up。
y = x + F(LN(x))主 residual path 更接近恒等映射,初始化梯度更良好;不等于在所有深度与目标上都更优。
LayerNorm 与 RMSNorm
(x − μ) / √(σ² + ε) · γ + β重中心化 + 重缩放。
x / RMS(x) · γ去掉均值中心化,只保留重缩放。
为什么 Kimi 会提出 Attention Residuals
标准 Pre-Norm residual 以固定单位权重累加所有层输出。AttnRes 报告把深层的 hidden-state growth 与单层贡献稀释作为动机,改为让当前层按内容选择先前层表示。 这是**深度维路由**,不要和 token 之间的 self-attention 混为一谈。
固定单位权重累加
对先前深度表示做选择性聚合
10 FFN · GLU · MOE
信息“找回来”以后,还要在每个位置内部做一次高容量变换
Position-wise FFN 对每个 token 独立使用同一组权重。原始 Transformer 是两层线性变换夹 ReLU; 现代 LLM 常用门控变体。由于序列位置彼此独立,这一子层很适合扩大通道容量或替换为稀疏专家。
W₂ · ReLU(W₁x)简单两层逐位置网络。
W₂(SiLU(Wgx) ⊙ Wux)门控支路调制内容支路。
Σᵢ gateᵢ(x) Eᵢ(x)每个 token 只激活少量专家。
latent route + SiTU-GLU路由潜空间扩容并加入稳定化。
Attention 像“把相关资料搬到桌上”,FFN / MoE 像“坐在自己的工位处理资料”。只搬不算,模型不会完成复杂变换。
稀疏激活降低的是每 token 实际计算相对总参数的比例;它不会自动消除 expert 权重搬运、all-to-all 通信与负载不均。
11 ARCHITECTURE FAMILIES
Encoder-only、Decoder-only、Encoder–Decoder:区别首先在拓扑与可见性
BERT 路线
同一层通常看全句,适合构造双向表示。要直接自回归生成,需要改变 mask 或加 decoder。
GPT / 现代 LLM
统一成“给定前缀继续生成”,天然适合开放式生成和 in-context prompting。
Transformer / T5 路线
先编码输入,再由 decoder 有条件生成;翻译、摘要与转换任务很自然。
原始 Transformer 到底是哪一个
2017 论文是第三类:完整 encoder–decoder 机器翻译系统。 GPT 后来保留 decoder stack,去掉 encoder 与 cross-attention; BERT 反过来保留 encoder;T5 再把 encoder–decoder 用统一 text-to-text 目标规模化。 把原始论文画成一个 causal decoder block,会抹去真正的历史分叉。
Encoder + Decoder
只取 Decoder · causal LM
只取 Encoder · MLM
保留两端 · span corruption
12 OBJECTIVES ≠ ARCHITECTURES
同一个 Transformer 骨架,可以被完全不同的训练题塑形
只见过去
下一个 token
GPT / LLaMA续写与生成左右文
被遮 token
BERT双向表示encoder 见破损输入
decoder 重建 span
T5条件文本生成前缀双向 + 生成因果
生成区 token
UniLM 等理解/生成统一主干仍因果
额外未来 token
DeepSeek-V3 / K3增密训练信号DeepSeek 的 MTP 为什么不能写成“取代 next-token prediction”
V3 报告使用 D 个顺序 MTP 模块预测额外未来 token,并把损失作为主语言模型损失的辅助项。 报告明确说推理时可以直接丢弃 MTP 模块,主模型独立运行; 也可以把模块改用于 speculative decoding。主模型依旧是自回归 Transformer。
13 TRAIN · PREFILL · DECODE
同一个模型有三种完全不同的运行形态;优化错阶段,数字就会误导
整段并行 + 反向传播
已知正确 token,因果 mask 防泄漏;需要保存激活、梯度与优化器状态。
- 主要压力
- FLOPs · activation · communication
- 可并行
- 序列位置大体并行
把已有 Prompt 一次编码进缓存
没有反向传播,但要对长 Prompt 做大量矩阵计算并建立 K/V 或 recurrent state。
- 主要压力
- Compute · Attention IO
- 可并行
- Prompt token 并行
一次只产生一个新 Token
历史 K/V 已缓存;每步模型小批量读取大量权重与缓存,常受带宽和调度限制。
- 主要压力
- Memory bandwidth · KV Cache
- 可并行
- 跨请求 / batch
四个位置可同时产生 loss;但位置 1 的 attention 仍看不到标签侧未来信息。
“训练时所有 token 同时输出”不等于模型学会了非自回归生成;部署时没有正确未来 token 作为输入,仍必须逐步采样。
14 KV CACHE · MQA · GQA · MLA
Decode 的关键不是再算一遍过去,而是怎样保存和搬运过去
标准自回归解码中,旧 token 的 K/V 不会改变。KV Cache 保存它们, 下一步只计算新 token 的 Q/K/V,再让新 Q 读取全部历史 K/V。 这用显存换掉了重复计算,却让长上下文和大 batch 的缓存迅速膨胀。
每增长一个 token,每层都追加 K/V。
每个 Q head 都有 K/V head
表达容量高,缓存最大。
一组 K/V 服务若干 Q heads
质量与缓存的中间折中。
全部 Q heads 共享单组 K/V
最小化 K/V heads,可能有质量代价。
缓存低维 latent,再上投影
不是 GQA 改名,而是低秩表示路线。
15 IO-AWARE ATTENTION
FlashAttention 没有改数学答案;它改变的是中间矩阵如何穿过 GPU 内存层级
朴素实现常把 n×n 的 score 与 probability 矩阵写回 HBM,再读回来乘 V。 GPU 算术很快,但这些大矩阵在 HBM 与片上 SRAM 之间往返可能成为瓶颈。 FlashAttention 把 Q/K/V 分块搬入 SRAM,用在线 softmax 累积正确归一化结果, 避免物化完整 attention matrix。
中间矩阵大,HBM 读写多。
分块计算精确结果,不写完整 n² 矩阵。
“O(n²)”有三张不同的账
Flash 不把所有配对计算变成线性。
分块与重算显著降低内存占用。
这是 FlashAttention 的核心问题设定。
NeurIPS 2022 论文报告的 3× GPT-2 kernel/训练、2.4× Long Range Arena 等结果属于特定硬件、长度和实现;“Flash 永远快 3 倍”不是可迁移公理。
16 DEEPSEEK SPOTLIGHT
DeepSeek 的漂亮之处:每一代都明确指出自己在改哪张成本账
DeepSeek 不是简单地把 Attention 换一个名字。 V2 从 KV 表示入手,V3 保留 MLA 并加强训练目标,V3.2 引入稀疏索引, V4 再把压缩稀疏 Attention 与深度连接联合设计。
MLA
把每个 token 的 K/V 压到低维 latent cKV,缓存 latent,再上投影供多头使用。
- 主攻
- KV Cache
- 不等于
- GQA / linear attention
MLA + MTP
架构继续使用 MLA;额外顺序模块预测多个未来 token,主 next-token 目标仍保留。
- 主攻
- Data efficiency / planning
- 推理
- 模块可丢弃或改作 draft
DSA
用轻量索引器选择有限 token,再在被选 token 上做精细 Attention。
- 主攻
- 长序列计算
- 边界
- 候选选择质量
CSA / HCA + mHC
混合压缩稀疏 Attention,并用 manifold-constrained hyper-connections 升级 residual path。
- 主攻
- FLOPs · KV · depth
- 不是
- 单一 Attention trick
MLA 的最小结构
KV Cache
maximum generation throughput
single-token FLOPs / KV Cache
single-token FLOPs / KV Cache
上述均是各技术报告内部口径:比较模型、硬件、batch、量化、服务栈与上下文长度改变后,比例不会原样迁移。
17 KIMI K3 MAPPING
回到 K3:长度、全局交互、深度和宽度由四套机制分工
K3 最值得学习的不是缩写数量,而是轴向分工: KDA 维护长序列状态,周期性 Gated MLA 保留全局内容交互, AttnRes 选择深度表示,Stable LatentMoE 提供稀疏通道容量。
KDA
带 channel-wise forget gate 的 delta-rule recurrence;decode 维护固定大小 state。
3 layers / blockGated MLA
沿用 latent KV compression,并加入 input-dependent output gate;周期性补足全局交互。
1 layer / blockAttnRes
当前层对先前层/块表示做 softmax 选择,而不是只按单位权重累加。
Block variant at scaleStable LatentMoE
在低维路由空间扩大 experts;RMSNorm 与 SiTU-GLU 抑制潜表示和激活失稳。
896 experts · 16 active每头 K/V
是
标准全局检索唯一 Transformer分组 K/V
是
KV heads 折中MLA低维 KV latent
是,但更小
缓存表示秩线性 Attentionrecurrent matrix state
固定大小
序列状态更新低秩 KV Cache先前层/块表示
与深度有关
跨层路由token self-attention继续看原生多模态、数据、稳定性、训练基础设施、Agentic RL 与部署系统。
18 INTERPRETABILITY BOUNDARY
Attention 权重能告诉我们“这一步怎样混合 Value”,却不自动回答“为什么模型这样决定”
权重 α 是真实前向计算的一部分,因此当然值得观察。 但输出还受 V、WO、其他 heads、FFN、Residual、后续层与非线性共同影响。 一个来源权重高,可能携带的 Value 很弱;另一个权重低,却通过后续路径产生关键影响。
描述权重
“这个 head 在此输入上给 token j 0.42 权重。”
提出模式假设
“它可能在追踪相对位置或指代候选,需要跨样本验证。”
做因果干预
消融、patching、替换、counterfactual 与多随机种子对照。
读心式结论
“热力图证明模型因为这个词才得出答案。”——证据不足。
2019 年争论给课程的最好教训
Jain & Wallace 说明标准 attention 权重常不足以作为输入重要性解释; Wiegreffe & Pinter 指出“解释”的定义、模型整体与对照基线必须明确。 因此本站不把争论压成一句口号,而采用操作性纪律:先说观测对象,再说干预方法,最后限定结论范围。
19 NEW ARCHITECTURE CHECKLIST
以后遇到任何“新 Attention”,先问十个问题,不要先背缩写
读取完整历史、稀疏候选,还是有限状态?
softmax 点积、kernel、delta rule 还是 learned index?
full、causal、cross、sliding window 还是 prefix?
绝对、相对、RoPE、NoPE,还是状态隐式编码?
Pre/Post-Norm、RMSNorm、hyper-connection 或 AttnRes?
ReLU/GELU、SwiGLU、dense FFN 或 MoE?
是否仍可并行?需要哪些 activation 与通信?
缓存 K/V、latent、sparse tail 还是 recurrent state?
同参数、同 FLOPs、同 token、同硬件、同 kernel 吗?
peer-reviewed、技术报告、官方实现,还是未复现宣称?
这篇论文把哪一种状态,从哪一层内存,用什么计算和通信,送到哪个位置或深度?
20 READING PATH
同一章可以读三遍;每一遍都能独立形成闭环
只建立直觉
- 读 00–03:瓶颈、软检索、QKV。
- 在实验室玩“QKV 手算”和“Mask 矩阵”。
- 读 08、11、17:block、家族、K3 四轴。
补齐机制与公式
- 读 04–10:scale、mask、heads、position、norm、FFN。
- 手算一次 softmax 加权和,画出 causal mask。
- 比较 GPT、BERT、T5 的拓扑与目标。
进入系统与当代论文
- 读 13–18:阶段、缓存、Flash、DeepSeek、K3、解释边界。
- 按 40 节点论文链选择 8 篇主干原文。
- 用第 19 节清单审计一个新架构。
最小必读八篇
↳ VERIFIED PAPER CHAIN
40 个节点,不是一条“新论文淘汰旧论文”的排行榜
论文链按“旧瓶颈 → 新接口 → 暴露的新代价 → 后续修正”组织。 深色标记是全章主轴,蓝色是 DeepSeek,铜色是 Kimi,空心节点是重要桥梁或证据边界。
固定向量 → 每个解码步软读取源表示。
global / local 与 dot / general / concat 的设计空间。
Attention 分布本身也能指向输入位置。
加法残差高速公路的直接前史。
单样本内按层输入统计量归一化。
门控线性单元的 Transformer 前史。
原作是 encoder–decoder 机器翻译,不是 GPT。
decoder-only 生成预训练再迁移。
encoder-only + MLM 的双向表示路线。
相对距离进入 self-attention。
跨段 recurrence 与相对位置。
decoder-only causal LM 的零样本扩展。
encoder–decoder + text-to-text + span corruption。
用 mask 切换双向、单向与 seq2seq。
去掉均值中心化,只保留重缩放。
多 Query heads 共享单组 K/V。
测试时大量 head 可能冗余,但不等于训练时无用。
观察到位置、句法与共指模式。
权重与输入重要性/因果解释不能直接画等号。
解释定义、基线与测试协议同样重要。
层内张量并行,不是新 Attention 公式。
Norm 位置改变初始化梯度与 warm-up 需求。
门控 FFN 变体的系统比较。
规模化 causal decoder 展现 in-context 接口。
显式约束 Q/K 尺度与注意力温度。
旋转 Q/K 表达相对位移。
直接给 logits 添加距离线性偏置。
在 block 内增加归一化改善梯度尺度。
深层 Post-LN 的稳定缩放路线。
精确 Attention 的 IO-aware 分块实现。
RMSNorm + SwiGLU + RoPE 的代表性现代配方。
MHA 与 MQA 之间的 K/V heads 折中。
改进 GPU 工作分割与并行度。
低秩 latent 压缩 KV Cache。
延续 MLA,并用 MTP 增密训练信号。
3:1 KDA / MLA 混合架构。
稀疏索引 attention 进入 MLA 谱系。
在网络深度维选择先前表示。
压缩稀疏 Attention + mHC 面向 1M context。
KDA/Gated MLA + AttnRes + Stable LatentMoE。