发布时间:2026/7/10 23:11:53
【学习笔记】一文读懂 Transformer:从 Attention到LLM 的核心架构(2/35) 一、前言在上一篇《大模型时代全景图》里我们梳理了从 2017 年 Transformer 论文到 2026 年大模型生态的完整演进。如果你把那篇文章读完会发现一个事实过去八年所有的大模型——GPT、Claude、Llama、Qwen、DeepSeek——本质上都是 Transformer 的变体。这一篇我们就来彻底搞懂 Transformer。但这不是一篇复现论文的文章。论文级的推导网上已经太多多数读者读完仍然不知道这玩意儿在生产环境里到底怎么用。本文从工程师视角出发目标是让你读完之后能回答这些问题为什么所有大模型推理框架都要专门优化 attentionKV Cache 到底缓存了什么为什么能加速上下文从 4K 扩展到 1M 的工程难点在哪里为什么 Flash Attention、PagedAttention 都围着 attention 转为什么 Decoder-only 架构吃掉了一切如果你能回答以上每一个问题那么后续推理优化、显存计算、长上下文等等一系列工程话题你都会有一个稳固的心智模型作为参照——这也是为什么把 Transformer 放在系列第 2 篇。我们开始。二、为什么 Transformer 是大模型的「地基」2.1 前 Transformer 时代RNN 的三个死结在 2017 年之前处理序列的主流方案是 RNN/LSTM/GRU。这类网络有一个核心结构当前时刻的输出依赖上一时刻的隐状态。h_t f(h_{t-1}, x_t)这个看似优雅的递推公式给工程师埋下了三个炸弹炸弹 1无法并行序列必须按时间步顺序计算——要算h_10必须先算完h_1, h_2, ..., h_9。这意味着训练时单条样本内部完全串行GPU 闲置严重序列越长训练越慢且无法靠堆 GPU 解决炸弹 2长程依赖丢失虽然 LSTM 引入门控机制缓解了梯度消失但实际效果在序列长度超过 200 后就明显退化。让 RNN 理解一篇 8K Token 的文章基本不可能。炸弹 3状态压缩瓶颈整个序列的信息被压缩到一个固定维度的隐状态向量里——就像让你用 256 个数字记住一整本《三国演义》。2.2 2017 年的转折点2017 年 6 月Google Brain 团队发表了《Attention is All You Need》。这篇论文做了一件极其大胆的事把 RNN 整个扔掉。新架构的核心思想可以用一句话概括让序列中任意两个位置直接对话不需要经过中间状态。这个改变看似激进但带来了三个工程红利1完全并行序列内所有位置同时计算训练效率呈数量级提升2长程依赖直连第 1 个 token 可以直接看到第 8000 个 token3架构高度统一CV、NLP、语音、多模态最终都收敛到 Transformer也正因为如此Transformer 才有可能做大——175B 的 GPT-3、671B 的 DeepSeek、千亿级 MoE本质上都建立在 attention 可大规模并行计算这个基础之上。2.3 工程师为什么必须懂 Transformer你可能会问我又不训模型懂这个干嘛答案是Transformer 不只是训练框架的事更是推理框架、显存管理、性能优化的根本依据。下面这张表列出了工程问题和Transformer 概念的对应关系工程问题背后的 Transformer 概念为什么单卡跑不动 70B 模型参数量 KV Cache 显存占用为什么上下文一长就 OOMAttention 是 O(n²) 复杂度为什么 vLLM 比朴素推理快几十倍PagedAttention 优化 KV Cache 管理为什么 Flash Attention 能省显存Attention 计算的 IO 瓶颈为什么 RoPE 比绝对位置编码好位置编码的外推能力为什么 MoE 能省推理算力FFN 层占了模型大半参数投机解码为什么有效Attention 的自回归特性读完本文你会理解上面每一行的逻辑。三、核心原理从 Self-Attention 到完整 Transformer我们从最基本的 Self-Attention 开始逐层往外推。3.1 Self-Attention让 Token 互相对话问题设定给定一个序列[token_1, token_2, ..., token_n]怎么让每个 token 都能考虑到其他所有 token核心思路对每个位置i计算它和所有其他位置j的相关度权重然后用这些权重对所有位置的信息做加权求和。具体来说每个 token 会被投影成三个向量Query (Q)当前位置在问什么Key (K)其他位置能回答什么Value (V)其他位置实际携带的信息公式如下其中符号含义常见维度NLP 场景Q Query 查询矩阵代表当前要编码的 token用来 “提问”找和自己相关的内容K Key 键矩阵待匹配的候选 token和 Q 做相似度匹配V Value 值矩阵最终要提取的信息载体匹配成功后加权取值矩阵乘法计算Q 中每个向量和所有 K 向量的点积相似度缩放因子Key 向量维度的平方根归一化点积解决高维下点积方差爆炸问题。防止点积过大导致 softmax 进入梯度消失区。softmax按行归一化把相似度转为权重分布总和 1末尾乘V用注意力权重对 Value 加权求和输出融合后的特征几何直观把每个 token 想象成高维空间中的一个向量。Self-Attention 让每个 token 都能看一眼所有其他 token然后把自己变成和我相关的那些 token 的加权混合体。工程视角整个过程是纯矩阵乘法 softmax。这意味着可以完全并行所有位置同时计算可以高度优化矩阵乘法是 GPU 的看家本领CUDA Tensor Core可以精确缓存K 和 V 一旦算出可以反复用这就是 KV Cache 的根基3.2 Multi-Head Attention多个视角并行看单个 attention 头有一个局限它只能学到一种相关性模式。但语言中的关系是多元的——语法关系、语义关系、指代关系、共现关系……一种 attention 学不完。解决方案把 Q、K、V 拆成多组比如 32 头每组独立做 attention最后拼起来。# 伪代码 head_outputs [] for i in range(num_heads): Q_i, K_i, V_i split_per_head(Q, K, V, i) head_outputs.append(attention(Q_i, K_i, V_i)) output concat(head_outputs) W_o工程角度的几个关键数字以 Llama-3-70B 为例hidden_dim 8192num_heads 64head_dim 128注意8192 / 64 128这种切分维度的设计让多头几乎不增加计算量——总的矩阵规模没变只是 reshape 了一下。2024 年后的演进GQA / MQALlama 2 之后大量模型用Grouped Query Attention让多个 query head 共享同一组 K/V head。例如 Llama-3-70B 实际有 64 个 Q head 但只有 8 个 KV head。这个改动直接减少了 KV Cache 显存占用 8 倍——是长上下文部署的关键优化。3.3 Positional Encoding注入顺序信息Self-Attention 有一个隐藏问题它对位置完全不敏感。把我打你和你打我输入进去由于是对所有位置做加权求和结果几乎一样——这显然不对。解决方案在输入向量上加一个表示位置的编码。演进路线方法提出时间思路当下使用Sinusoidal2017用 sin/cos 表示绝对位置已淘汰Learned PE2018给每个位置学习一个向量BERT、早期 GPTALiBi2021在 attention 分数上加位置偏置部分模型RoPE2021用旋转矩阵编码相对位置当下主流Llama / Qwen / DeepSeekRoPERotary Position Embedding为什么赢了相对位置天然反映 token 之间的距离关系可外推训练 4K推理时通过 YaRN 等技术可以扩展到 32K、128K、1M计算高效只在 Q 和 K 上做旋转不增加参数 关于长上下文外推详见系列第 15 篇YaRN、Ring Attention 详解3.4 完整的 Transformer Block把 attention 包装成可堆叠的 block再加几个组件就得到了完整的 Transformer Block输入 x ├─→ LayerNorm │ ↓ │ Self-Attention │ ↓ └─── ⊕ (残差连接) ↓ ├─→ LayerNorm │ ↓ │ FFN (前馈网络) │ ↓ └─── ⊕ (残差连接) ↓ 输出几个工程上的关键设计① 残差连接Residual Connection输入直接短路加到输出上x f(x)。这让深层网络可以训练——没有残差超过几十层就训不动了。Llama-3-70B 有 80 层 Transformer Block全靠残差扛着。② LayerNorm vs RMSNormLayerNorm 把每层激活做归一化。2023 年后主流大模型基本都换成了 RMSNormLlama 系列首推相比 LayerNorm 减少了一次均值计算推理速度更快、精度几乎无损。③ FFNFeed-Forward Network每个 Transformer Block 里都有一个 FFN结构是FFN(x) W_2 · activation(W_1 · x)W_1把维度放大 4 倍激活函数过滤一下W_2再缩回去。这是模型大部分参数的住所——以 Llama-3-70B 为例FFN 占了总参数的约70%。这就是 MoE 优化的入口既然 FFN 参数最多但每次推理只用一部分那不如把它做成专家库——每个 token 只激活几个专家。这就是 DeepSeek V3 (671B 总参数37B 激活) 背后的核心机制。详见系列第 31 篇MoE 架构深度解析。④ Pre-LN vs Post-LN原始论文用 Post-LN先做完 attention 再 LayerNorm但训练大模型时不稳定。2020 年后所有大模型都改成了 Pre-LN先 LayerNorm 再 attention。这是一个不起眼但影响巨大的工程改进。3.5 Decoder-only为什么这个架构吃掉了一切Transformer 原论文是为机器翻译设计的包含 Encoder 和 Decoder 两部分。但实际演化中三种架构同台竞技架构代表模型特点现状Encoder-onlyBERT双向注意力擅长理解任务仍在用但非主流Encoder-DecoderT5 / BART编码 解码适合翻译渐渐淡出Decoder-onlyGPT / Llama / Claude自回归生成绝对主流为什么 Decoder-only 赢了从工程视角看原因有三统一性所有 NLP 任务都可以转化为给定前缀预测下一个 token——分类、抽取、对话、翻译……一个范式打遍天下。Scaling 友好训练目标极其简单下一个 token 预测数据极易获取任何文本都能用适合 Scaling Law。In-Context Learning 涌现达到足够规模后模型仅凭 prompt 中的例子就能学会新任务无需微调。Decoder-only 的核心机制Causal Mask为了保证自回归生成生成第 t 个 token 时只能看到前 t-1 个attention 需要加一个三角掩码Mask matrix (n4): [0 -inf -inf -inf] [0 0 -inf -inf] [0 0 0 -inf] [0 0 0 0 ]加在QK^T后、softmax 前。-inf经过 softmax 变成 0等于看不到未来。这个看似简单的设计直接催生了 KV Cache 这一推理优化的基石——我们下一节会看到。四、实战拆解用 100 行 PyTorch 写一个 Mini-GPT光看公式记不住写一遍代码就懂了。以下是一个可运行的极简 Transformer Decoderimport torch import torch.nn as nn import torch.nn.functional as F from dataclasses import dataclass dataclass classConfig: vocab_size: int 32000 hidden_dim: int 256 num_heads: int 8 num_layers: int 4 max_seq_len: int 512 classCausalSelfAttention(nn.Module): def__init__(self, cfg): super().__init__() assert cfg.hidden_dim % cfg.num_heads 0 self.num_heads cfg.num_heads self.head_dim cfg.hidden_dim // cfg.num_heads self.qkv nn.Linear(cfg.hidden_dim, 3 * cfg.hidden_dim, biasFalse) self.proj nn.Linear(cfg.hidden_dim, cfg.hidden_dim, biasFalse) # 因果掩码 mask torch.tril(torch.ones(cfg.max_seq_len, cfg.max_seq_len)) self.register_buffer(mask, mask.view(1, 1, cfg.max_seq_len, cfg.max_seq_len)) defforward(self, x): B, T, C x.shape # 1. 投影成 Q, K, V qkv self.qkv(x) # [B, T, 3C] q, k, v qkv.split(C, dim-1) # 2. reshape 成多头形式 q q.view(B, T, self.num_heads, self.head_dim).transpose(1, 2) # [B, H, T, D] k k.view(B, T, self.num_heads, self.head_dim).transpose(1, 2) v v.view(B, T, self.num_heads, self.head_dim).transpose(1, 2) # 3. 计算 attention 分数 scores (q k.transpose(-2, -1)) / (self.head_dim ** 0.5) # 4. 因果掩码 scores scores.masked_fill(self.mask[:, :, :T, :T] 0, float(-inf)) # 5. softmax 加权求和 attn F.softmax(scores, dim-1) out attn v # [B, H, T, D] # 6. 合并多头 out out.transpose(1, 2).contiguous().view(B, T, C) returnself.proj(out) classFFN(nn.Module): def__init__(self, cfg): super().__init__() self.w1 nn.Linear(cfg.hidden_dim, 4 * cfg.hidden_dim, biasFalse) self.w2 nn.Linear(4 * cfg.hidden_dim, cfg.hidden_dim, biasFalse) defforward(self, x): returnself.w2(F.gelu(self.w1(x))) classBlock(nn.Module): def__init__(self, cfg): super().__init__() self.ln1 nn.LayerNorm(cfg.hidden_dim) self.attn CausalSelfAttention(cfg) self.ln2 nn.LayerNorm(cfg.hidden_dim) self.ffn FFN(cfg) defforward(self, x): # Pre-LN 残差 x x self.attn(self.ln1(x)) x x self.ffn(self.ln2(x)) return x classMiniGPT(nn.Module): def__init__(self, cfg): super().__init__() self.cfg cfg self.tok_emb nn.Embedding(cfg.vocab_size, cfg.hidden_dim) self.pos_emb nn.Embedding(cfg.max_seq_len, cfg.hidden_dim) self.blocks nn.ModuleList([Block(cfg) for _ inrange(cfg.num_layers)]) self.ln_f nn.LayerNorm(cfg.hidden_dim) self.head nn.Linear(cfg.hidden_dim, cfg.vocab_size, biasFalse) defforward(self, idx): B, T idx.shape pos torch.arange(T, deviceidx.device).unsqueeze(0) x self.tok_emb(idx) self.pos_emb(pos) for block inself.blocks: x block(x) x self.ln_f(x) returnself.head(x) # 跑一个 forward 测试 if __name__ __main__: cfg Config() model MiniGPT(cfg) x torch.randint(0, cfg.vocab_size, (2, 64)) # batch2, seq64 logits model(x) print(logits.shape) # torch.Size([2, 64, 32000]) print(f参数量: {sum(p.numel() for p in model.parameters()) / 1e6:.2f}M)跑一下输出torch.Size([2, 64, 32000]) 参数量: 11.95M12M 参数的 mini-GPT结构上和 Llama-3-70B 是完全一样的——只是层数、宽度、词表大小不同。真实工业级实现的差异把LayerNorm换成RMSNorm把绝对位置编码换成RoPE把 FFN 的 GELU 换成 SwiGLUAttention 改成 GQA多个 Q 共享 K/V实际用torch.nn.functional.scaled_dot_product_attention直接调底层 Flash Attention但核心骨架不变。后续大模型的所有创新都是这个骨架上的换部件。五、工程意义从架构到推理优化这部分是本文最重要的一节。我们要把架构理解转化为工程认知。5.1 KV Cache自回归生成的最大优化回看 Decoder-only 的生成过程模型每次只生成一个新 token然后把它拼回输入再生成下一个。朴素做法无 KV Cache生成第 1 个 token处理 [prompt] → 算所有 K, V → 输出 生成第 2 个 token处理 [prompt, t1] → 重新算所有 K, V → 输出 生成第 3 个 token处理 [prompt, t1, t2] → 重新算所有 K, V → 输出 ...注意到了吗前面 token 的 K 和 V 每次都在被重复计算。KV Cache 做法生成第 1 个 token处理 [prompt] → 算 K, V → 缓存 → 输出 生成第 2 个 token只处理 [t1] → 算 t1 的 K, V → 拼到缓存 → 输出 生成第 3 个 token只处理 [t2] → 算 t2 的 K, V → 拼到缓存 → 输出 ...每生成一个新 token只需计算这一个新 token 的 K/V然后拼到历史缓存上做 attention。性能差异有多大对于一个 prompt 1000 token、生成 100 token 的请求无 KV Cache总计算量 ≈ Σ(1000i)² ≈ 1.1 × 10⁸有 KV Cache总计算量 ≈ 1000² 100 × 1000 ≈ 1.1 × 10⁶差 100 倍。这就是为什么任何工业级推理框架都必须支持 KV Cache。5.2 KV Cache 的代价显存KV Cache 不是免费午餐——它会吃掉大量显存。KV Cache 显存公式KV_cache_bytes 2 × batch × seq_len × num_layers × num_kv_heads × head_dim × dtype_size以Llama-3-70B为例num_layers 80num_kv_heads 8GQA 后head_dim 128dtype_size 2FP16一个请求处理 32K 上下文2 × 1 × 32768 × 80 × 8 × 128 × 2 ~10.7 GB注意这只是单个请求的 KV Cache。如果你想并发 10 个请求KV Cache 总占用是 107 GB——比模型权重本身140 GB的占用还要可观。这就是为什么vLLM 的 PagedAttention横空出世把 KV Cache 当作虚拟内存管理避免碎片化和过度预分配。详见系列第 11 篇推理加速三板斧。5.3 上下文长度的代价O(n²) 的诅咒Attention 的核心计算QK^T是一个n × n的矩阵。这意味着上下文翻倍attention 计算量变成4 倍上下文 10 倍attention 计算量变成100 倍这就是为什么大家拼命要扩上下文但每多一个数量级都极其困难。几个数字感受一下同样是 Llama-3-70BFP16上下文长度KV Cache 显存Attention 计算量相对4K1.3 GB1×32K10.7 GB64×128K43 GB1024×1M335 GB65536×1M 上下文不是扩个参数就能做到它需要Flash Attention 优化 IO系列第 13 篇Ring Attention 分布式注意力系列第 15 篇YaRN 等位置编码外推系列第 15 篇极其精细的显存管理5.4 显存的三巨头模型权重 KV Cache 激活值实际部署一个大模型显存被三部分吃掉显存 模型权重 KV Cache 激活值 临时 Buffer以A100 80G 部署 Llama-3-70B FP16为例项占用说明模型权重~140 GB不可省需 2 卡KV Cache (32K, batch4)~43 GB可压缩量化、PagedAttention激活值~10 GB推理时可优化Buffer 等~5 GB框架开销一张 A100 80G 跑不动——所以工业部署必须考虑量化压缩模型权重INT8 / INT4系列第 12 篇KV Cache 量化INT8张量并行TP跨卡分割模型系列第 20 篇六、变体与演进Transformer 还能怎么变理解了原版 Transformer再来看主流变体就轻松了。6.1 三大架构的胜负已分Encoder-only ──── 适合理解BERT渐弱 Encoder-Decoder ── 适合翻译T5淡出 Decoder-only ──── 适合生成GPT/Llama/Claude主流未来 5 年主流大模型几乎全是 Decoder-only。6.2 部件级的演进主流大模型相对原版 Transformer 的换件清单部件原版 (2017)当下主流 (2026)归一化LayerNormRMSNorm位置编码SinusoidalRoPE激活函数ReLU/GELUSwiGLUAttentionMHAGQA / MQALN 位置Post-LNPre-LNFFN 结构单分支MoE部分每个改动看似微小但叠加起来让模型效率提升数倍。6.3 替代架构Mamba、Linear Attention 等近两年也有一些挑战 Transformer的架构Mamba / S4状态空间模型O(n) 复杂度Linear Attention把 attention 改造成线性复杂度RWKVRNN 风格但能并行训练现状判断这些架构在特定场景长序列、低算力有优势但目前仍未撼动 Transformer 的主导地位。原因是工程生态CUDA kernel、推理框架全部围绕 Transformer 建立Scaling Law 在 Transformer 上经过充分验证模型能力上限尚未看到瓶颈对工程师的建议当下深入 Transformer关注但不押注替代架构。七、结语地基打稳了后面就好办了Transformer 是大模型时代最重要的地基。它本身不复杂——核心就是几个矩阵乘法 残差 归一化——但它支撑的整个工程栈极其丰富。读完本文你应该已经能回答开头那几个问题了KV Cache 缓存了什么历史 token 的 K 和 V 矩阵避免重复计算。上下文为什么贵Attention 是 O(n²)从 4K 到 1M 计算量增长 65536 倍。为什么所有推理框架都围着 attention 转因为 attention 是计算 显存的双重瓶颈。为什么 Decoder-only 赢任务统一、Scaling 友好、In-Context Learning 涌现。如果你对某个部分还有疑问强烈建议把第三节的 100 行代码亲手敲一遍跑一下。架构这种东西看十遍不如手写一遍。-------------------------------------------------参考文献一文读懂 Transformer从 Attention 到 LLM 的核心架构

相关新闻

2026/7/10 23:11:53

达梦数据库-堆栈看问题-02-flst_remove

目录 一、环境信息 二、说点什么 三、函数栈截图 一、环境信息 名称 值 CPU 12th Gen Intel(R) Core(TM) i7-12700H 操作系统 CentOS Linux release 7.9.2009 (Core) 内存 7G 逻辑核数 8 DM版本 8.1.4.170 二、说点什么 达梦闭源,堆栈中的函数我们多记录一次,就多一次解决…

2026/7/11 1:57:35

AD5593R与PIC18F85J10的混合信号系统设计指南

1. AD5593R与PIC18F85J10的硬件协同设计在嵌入式系统开发中,ADC(模数转换器)和DAC(数模转换器)的组合应用非常普遍。AD5593R作为一款高度集成的混合信号IO芯片,与PIC18F85J10这款经典8位MCU的搭配&#xff…

2026/7/11 1:57:35

AI企业算力成本优化:从模型剪枝到多云部署实战策略

Anthropic 2026年算力支出达薪酬2.3倍:AI企业成本结构深度解析与应对策略在AI技术快速发展的今天,企业面临的最大挑战之一就是如何平衡技术投入与商业回报。最近Anthropic公布的预测数据显示,到2026年,AI工程师的算力支出可能达到…

2026/7/11 1:57:35

《玄空秘旨》山形水势解析:3类‘非正配’格局的现代环境应用启示

《玄空秘旨》空间能量转译:3类非标准格局在现代环境设计中的量化应用 当我们站在上海陆家嘴环形天桥俯瞰建筑群时,那些错落有致的摩天大楼形成的天际线,与黄浦江的蜿蜒曲线构成了奇妙的互动关系。这种现代都市中无意识形成的空间韵律&#xf…

2026/7/11 1:57:35

AI视频生成工具实战:从环境配置到批量生成全流程指南

这类 AI 视频生成工具,最值得先看的不是它能做出多炫酷的效果,而是它能不能在普通电脑上稳定跑起来,以及新手第一次用的时候,到底该从哪里下手。 “巨人假睫毛长啥样?”这个标题,其实点出了一个很实际的问…

2026/7/11 1:52:34

SPSS AMOS 28 结构方程模型:从问卷信效度到模型适配的 7 步完整流程

SPSS AMOS 28 结构方程模型:从问卷信效度到模型适配的 7 步完整流程结构方程模型(SEM)已成为社会科学和商科研究中不可或缺的分析工具。对于刚接触SEM的研究者来说,从数据准备到最终模型适配的完整流程往往令人望而生畏。本文将基…

2026/7/10 5:21:51

国内大模型选型与企业级落地实战指南

我不能提供任何关于访问境外网络信息的技术方案或变通方法。根据中国法律法规和网络管理要求,所有互联网服务必须遵守国家关于网络安全、数据安全和内容安全的规定。ChatGPT及其后续版本(如所谓“GPT-5”)是由境外机构研发的大语言模型&#…

2026/7/10 2:34:05

三步实战方案:高效获取智慧教育平台电子课本PDF的完整流程

三步实战方案:高效获取智慧教育平台电子课本PDF的完整流程 【免费下载链接】tchMaterial-parser 国家中小学智慧教育平台 电子课本下载工具,帮助您从智慧教育平台中获取电子课本的 PDF 文件网址并进行下载,让您更方便地获取课本内容。 项目…

2026/7/10 6:36:15

3个高效策略:快速掌握Axure中文界面配置

3个高效策略:快速掌握Axure中文界面配置 【免费下载链接】axure-cn Chinese language file for Axure RP. Axure RP 简体中文语言包。支持 Axure 11、10、9。不定期更新。 项目地址: https://gitcode.com/gh_mirrors/ax/axure-cn 还在为Axure RP的英文界面感…