Transformer 深度解剖——把“变形金刚“拆成零件给你看1.2
如果你把 Transformer 比作一辆法拉利那这一章就是把它拆到只剩螺丝钉然后一颗一颗告诉你“这颗螺丝是干嘛的拧紧了会怎样拧松了又会怎样。”系好安全带我们要动刀了。2.1 Self-Attention一场精心策划的相亲大会先忘掉公式听个故事想象你走进一个有 100 人的派对。你想知道谁跟我关系最近。怎么办你掏出三样东西名片QueryQ上面写着我是谁我想找什么胸牌KeyK上面写着我是谁我能提供什么礼物ValueV真正要传递的内容你拿着自己的名片跟每个人的胸牌碰一碰算个匹配度。匹配度高的人你就多拿点他的礼物匹配度低的意思意思就行。最后你手里捧着一堆礼物按匹配度加权混合——恭喜你这就是 Self-Attention。现在上公式别跑Attention(Q,K,V)softmax(QKTdk)V\text{Attention}(Q, K, V) \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)VAttention(Q,K,V)softmax(dkQKT)V逐个拆解① QK^T——“名片碰胸牌”Q 的形状是[n,dk][n, d_k][n,dk]K 的形状也是[n,dk][n, d_k][n,dk]。做矩阵乘法QKTQK^TQKT得到[n,n][n, n][n,n]的矩阵——每行每列代表第 i 个人对第 j 个人的关注度。② 除以 √d_k——“防止音量炸麦”dkd_kdk是向量维度。维度越高点积的数值越大。如果不除softmax 的输入会变成一堆巨大的数梯度直接躺平趋近于零。除以dk\sqrt{d_k}dk相当于给音量旋钮拧到合理位置。题库原话sqrt(d) 的作用是防止内积值过大导致梯度消失。③ Softmax——“把分数变成概率”把一行的分数变成加起来等于 1 的概率分布。谁分高谁权重就大。④ 乘以 V——“按权重收礼物”最终输出是每个位置的 Value 的加权和。一句话总结Self-Attention 的本质让序列中的每个词都能看到其他所有词并决定该关注谁、关注多少。批注Transformer模型的核心机制是自注意力机制能够直接建模任意距离的词元之间的交互关系。2.2 Multi-Head Attention一个人看不过来的让八个人一起看为什么一个头不够一个 Self-Attention 头就像一个人同时当导演、摄影师、灯光师、剪辑师——忙不过来视角单一。Multi-Head 的做法把 d 维空间切成 h 份每份独立做注意力最后拼起来。MultiHead(Q,K,V)Concat(head1,…,headh)WO\text{MultiHead}(Q,K,V) \text{Concat}(\text{head}_1, \dots, \text{head}_h) W^OMultiHead(Q,K,V)Concat(head1,…,headh)WO其中每个headiAttention(QWiQ,KWiK,VWiV)\text{head}_i \text{Attention}(QW_i^Q, KW_i^K, VW_i^V)headiAttention(QWiQ,KWiK,VWiV)通俗比喻把一部电影同时用 8 个机位拍机位 1 专拍主角表情语法关系机位 2 专拍背景语义上下文机位 3 专拍道具指代关系……最后剪辑师WOW^OWO把 8 个画面合成一部完整电影。批注多头注意力通过并行多个独立的注意力头分别学习输入序列在不同子空间的特征表示从而增强模型捕捉复杂语义的能力。为什么不是头越多越好头太多 → 每个子空间维度太小 → 学不到有意义的模式。通常 8~128 个头取决于模型规模。2.3 位置编码三剑客给词排座位问题Attention 是个脸盲Self-Attention 只看谁跟谁像完全不管顺序。狗咬人和人咬狗在它眼里一模一样——这可不行。所以我们需要位置编码告诉模型“这个词坐第几排第几座。”第一代正弦位置编码绝对位置PE(pos,2i)sin(pos/100002i/d)PE_{(pos, 2i)} \sin(pos / 10000^{2i/d})PE(pos,2i)sin(pos/100002i/d)PE(pos,2i1)cos(pos/100002i/d)PE_{(pos, 2i1)} \cos(pos / 10000^{2i/d})PE(pos,2i1)cos(pos/100002i/d)比喻给每个座位刻一个固定编号。第 1 号座永远是 1 号第 100 号座永远是 100 号。✅ 简单不需要学习❌ 只能表达绝对位置第 5 个词和第 3 个词隔了 2 个位置这种相对关系表达不好❌ 训练时没见过的位置推理时外推能力差第二代RoPE 旋转位置编码相对位置批注旋转位置编码通过复数域旋转矩阵对词向量进行空间变换将相对位置关系融入注意力计算。比喻不刻座位号了而是让每个人原地转一个角度。第 1 个词转 1°第 2 个词转 2°第 100 个词转 100°。两个词做点积时角度差自然体现了相对距离。就像两个时钟指针你关心的不是各自指几点而是它们之间的夹角。✅ 天然编码相对位置✅ 有长期衰减特性适合长序列✅ 外推能力比正弦编码强代表用户LLaMA、Qwen、DeepSeek第三代ALiBi线性偏置比喻不转了直接在注意力分数上减一个跟距离成正比的惩罚。距离越远扣分越多。scoreijqi⋅kj−m⋅∣i−j∣\text{score}_{ij} q_i \cdot k_j - m \cdot |i - j|scoreijqi⋅kj−m⋅∣i−j∣✅ 极其简单不需要额外参数✅ 天然鼓励关注近处❌ 对非常长的依赖关系可能过于短视三剑客对比表方法类型核心操作外推性代表模型正弦绝对sin/cos 加到词向量一般原始 TransformerRoPE相对旋转矩阵乘 Q/K好LLaMA, QwenALiBi相对线性惩罚加到分数中等BLOOM批注旋转位置编码RoPE被广泛用于建模长序列数据因其具有良好的性能和长期衰减特性。2.4 Layer Normalization给每个神经元调音为什么需要归一化训练深层网络时每层的输入分布会不断漂移Internal Covariate Shift。就像乐队演出吉他手突然把音量拧到最大鼓手被盖住了整个乐队乱套。LayerNorm 就是那个调音师把每层的输入拉回到均值 0、方差 1 的标准音量。LayerNorm(x)x−μσ2ϵ⋅γβ\text{LayerNorm}(x) \frac{x - \mu}{\sqrt{\sigma^2 \epsilon}} \cdot \gamma \betaLayerNorm(x)σ2ϵx−μ⋅γβPost-LN vs Pre-LN调音师站哪儿Post-LN原始 Transformer输入 → Attention → 残差相加 → LayerNorm → FFN → 残差相加 → LayerNorm调音师站在残差连接之后。问题深层网络训练不稳定需要 warmup。Pre-LNGPT-2 之后主流输入 → LayerNorm → Attention → 残差相加 → LayerNorm → FFN → 残差相加调音师站在子层之前。训练更稳定但深层性能可能略弱。批注原始Transformer在残差连接前和FFN后均应用LayerNormPre-LN结构。RMSNorm调音师的精简版LLaMA 用的方案。去掉减均值步骤只做缩放RMSNorm(x)xRMS(x)⋅γ\text{RMSNorm}(x) \frac{x}{\text{RMS}(x)} \cdot \gammaRMSNorm(x)RMS(x)x⋅γ少算一个均值速度快 10%~15%效果差不多。DeepNorm给深层网络加保险丝微软提出的方案在残差连接上加一个缩放系数α\alphaα让 1000 层网络也能稳定训练。2.5 激活函数神经网络里的门卫没有激活函数会怎样全是线性变换100 层网络等价于 1 层。门卫全放假了谁来都不拦那还要大楼干嘛ReLU最朴素的门卫f(x)max(0,x)f(x) \max(0, x)f(x)max(0,x)正数放行。负数滚。✅ 计算快求导简单❌ 负区间梯度为 0 → “神经元死亡”一旦输出负值永远醒不过来批注ReLU在正数区域内的梯度为1可以保证梯度在传递过程中不会消失。GeLU温柔版门卫f(x)x⋅Φ(x)f(x) x \cdot \Phi(x)f(x)x⋅Φ(x)不是硬邦邦地负数全拒而是用概率平滑过渡。Bert、GPT 系列都用它。SwiGLU / GeGLU当前顶流LLaMA、Qwen 等新一代模型的标配。核心思想把 FFN 拆成两个门控分支一个走 Swish/GeLU 激活另一个当门控制信息流量。SwiGLU(x)(Swish(xW1)⊙(xW3))W2\text{SwiGLU}(x) (\text{Swish}(xW_1) \odot (xW_3)) W_2SwiGLU(x)(Swish(xW1)⊙(xW3))W2比喻以前厨房只有一个厨师做菜。现在一个厨师做菜另一个厨师决定这道菜上不上、上多少。精细控制效果更好。2.6 FFN 隐藏维度演进厨房越扩越大又缩回去了FFN前馈网络是 Transformer 里的厨房——注意力层负责看菜单FFN 负责炒菜。经典配置4d原始 Transformer输入维度 d512FFN 隐藏层 4d2048。比喻厨房面积是餐厅的 4 倍。够用了。大模型时代8d → 3dGPT-3 用 4dPaLM 用 4d 但加了 SwiGLU等效约 8d/3 ≈ 2.67d因为 SwiGLU 多一个矩阵最新趋势2.7dLLaMA 的做法用 SwiGLU隐藏维度设为8d3\frac{8d}{3}38d约 2.67d但因为 SwiGLU 有 3 个权重矩阵总参数量跟 4d 的普通 FFN 差不多。翻译成人话厨房没变大但换了更高效的灶台炒出更多菜。2.7 残差连接给梯度修一条高速公路问题信号传着传着就没了100 层网络梯度每层乘一个小数传到第 1 层时已经接近 0。这叫梯度消失。批注ResNet通过残差连接构建H(x)F(x)x的恒等映射确保深层网络至少能保留浅层特征。解决方案修一条直通的电梯H(x)F(x)xH(x) F(x) xH(x)F(x)xF(x)F(x)F(x)走楼梯经过卷积/注意力等变换xxx坐电梯原封不动传过去反向传播时∂H∂x∂F∂x1\frac{\partial H}{\partial x} \frac{\partial F}{\partial x} 1∂x∂H∂x∂F1那个 “1” 就是电梯——不管楼梯多难走梯度至少有一条直通路径。批注反向传播时残差连接使得梯度可通过 ∂H/∂x ∂F/∂x 1 路径直接传递避免连续卷积层的导数连乘导致梯度消失。在 Transformer 中的位置每个子层Attention、FFN后面都跟一个残差连接x → [Sub-Layer] → x → LayerNorm → 输出没有这条电梯Transformer 堆到 12 层以上基本就训不动了。2.8 长上下文优化从只能看一页到看完整本书痛点O(n²) 的诅咒标准 Self-Attention 的计算量和显存都是O(n2)O(n^2)O(n2)。序列长度从 512 涨到 128K计算量涨了62500 倍。这就像你每读一个新字都要把之前所有字重新看一遍——书越厚越读越慢。第一代稀疏注意力Longformer / BigBird思路别每个词都看所有词了只看附近的 几个关键的。Longformer滑动窗口局部 全局 tokenBigBird局部 全局 随机连接比喻以前每页都要跟其他所有页握手。现在只跟前后 3 页握手再跟目录页和附录页握个手。复杂度O(n2)O(n^2)O(n2)→O(n)O(n)O(n)第二代Flash Attention1/2/3思路不改变数学公式而是优化 GPU 内存访问模式。传统实现把n×nn \times nn×n的注意力矩阵完整写进 GPU 显存HBM再读出来算 softmax。来回搬运数据是瓶颈。Flash Attention把计算拆成小块在 GPU 的 SRAM超快缓存里完成从不把完整的 n×n 矩阵写进 HBM。Flash Attention 12022速度提升 2~4 倍Flash Attention 22023优化并行再快 2 倍Flash Attention 32024利用 H100 的异步特性接近硬件理论峰值比喻以前做菜要把所有食材从仓库搬到厨房做完再搬回去。现在直接在仓库门口支个灶现拿现炒省了搬运时间。第三代Paged AttentionvLLM批注PagedAttention借鉴了操作系统虚拟内存分页管理思想将显存划分为固定大小的块Page通过分页表记录KV缓存的物理地址映射关系有效解决显存碎片化问题。问题推理时KV Cache 需要为每个序列预分配连续显存。序列长短不一 → 显存碎片化 → 利用率不到 60%。解决学操作系统的虚拟内存分页。把 KV Cache 切成固定大小的页如 16 个 token 一页用页表记录逻辑地址 → 物理地址的映射不同序列可以共享相同的页比如系统提示词效果显存利用率从 60% 提升到 90%吞吐量提升 14~24 倍。比喻以前图书馆给每个读者预留一整排连续书架有人只看 3 本书也占一排。现在把书拆成标准大小的书箱按需分配不同读者还能共享同一箱参考书。长上下文技术演进总结阶段技术核心思想复杂度1.0Longformer/BigBird稀疏化注意力模式O(n)2.0Flash Attention优化硬件内存访问O(n²) 但常数极小3.0Paged Attention分页管理 KV Cache解决显存碎片批注KV缓存通过存储注意力机制中的键值对避免重复计算历史token的注意力从而加速推理。本章小结一张图看懂 Transformer 一层输入 x │ ├─→ LayerNorm (RMSNorm) │ │ │ ▼ │ Multi-Head Self-Attention (带 RoPE) │ │ │ ▼ └──→ () ← 残差连接电梯 │ ▼ LayerNorm │ ▼ FFN (SwiGLU, 隐藏维度 ≈ 8d/3) │ ▼ () ← 残差连接电梯 │ ▼ 输出 → 送入下一层堆 N 层12 / 32 / 80 / 128……加上 Embedding 和输出头就是一个完整的 Transformer。下一章预告第 3 章我们将进入炼丹房——预训练、指令微调、RLHF、LoRA……看看一个大模型是怎么从白纸变成全能选手的。剧透LoRA 就是给法拉利换个尾翼而不是重新造一辆车。本章完。如果你读到这里还没晕恭喜你你已经比 80% 的AI 从业者更懂 Transformer 了。