【AI】从 Transformer 到 LLM:一篇博文彻底讲清现代大模型的架构演化
目录速览
- 先打个比方:Transformer 到底在做什么
- 原始 Transformer 架构详解(2017 版)
- LLM 的第一次大转向:抛弃 Encoder,只留 Decoder
- 位置编码的进化:从绝对正弦到 RoPE
- 归一化的进化:LayerNorm → RMSNorm,Post-Norm → Pre-Norm
- 注意力机制的进化:MHA → MQA → GQA → MLA
- 前馈层的进化:ReLU → SwiGLU,再到 MoE
- 训练目标与规模的差异
- 推理阶段的”独门武器”:KV Cache 与上下文扩展
- 一张总表:原始 Transformer vs 现代 LLM
- 写在最后
一、先打个比方:Transformer 到底在做什么
在啃公式之前,先建立一个直觉模型。
想象一个跨国快递公司,要把一段中文翻译成英文。整个公司分成两个部门:
- 理解部(Encoder):负责读懂中文原文,把每个字的含义、上下文关系全部消化成”内部档案”。
- 生成部(Decoder):拿着理解部的档案,一个英文单词一个英文单词地往外写。
每个部门里都站着一排排”员工”,每个员工都干同一件事——和身边的同事互相打听信息,然后更新自己手上的笔记。这个”互相打听”的动作,就是注意力机制(Attention)。
为什么这个设计这么牛?因为在 Transformer 之前,主流的 RNN/LSTM 是”流水线作业”——必须等第 1 个字处理完,才能处理第 2 个字。而 Transformer 让所有员工同时开工、互相串门,效率瞬间起飞,也能轻松看到很远的上下文关系。
记住这个画面,下面所有的细节都是在给这家”快递公司”打补丁。
二、原始 Transformer 架构详解(2017 版)
我们来正式拆解 2017 年那篇论文里的架构。原始 Transformer 是一个 Encoder-Decoder 结构,用于机器翻译任务。
2.1 整体结构图(文字版)
1 | 输入中文 "我爱你" 目标英文 "I love you" |
下面把每个零件单独剖开看。
2.2 Token 化与 Embedding:把文字变成向量
计算机不认识文字,只认识数字。所以第一步是分词(Tokenize)——把”我爱你”切成 ["我", "爱", "你"],再查一张巨大的”词典表”,把每个词映射成一个固定长度(比如 512 维)的向量。
📌 新手理解:可以把每个 token 想象成一张身份证,向量就是身份证上的所有特征字段(身高、体重、爱好……一共 512 个属性)。
2.3 位置编码(Positional Encoding):告诉模型字的先后顺序
注意力机制有个天生的”病”——它对顺序不敏感。”我爱你” 和 “你爱我”,在自注意力眼里几乎一样。
为了告诉模型”哪个字在前,哪个字在后”,原始 Transformer 给每个位置加了一组正弦余弦函数生成的固定向量:
$$
PE_{(pos, 2i)} = \sin\left(\frac{pos}{10000^{2i/d}}\right), \quad PE_{(pos, 2i+1)} = \cos\left(\frac{pos}{10000^{2i/d}}\right)
$$
📌 新手理解:相当于给每个座位贴了一个独特的”座位号牌”,这样员工们就知道谁坐在第几排。
2.4 自注意力机制(Self-Attention):本质是”加权求和”
这是 Transformer 的灵魂。每个 token 会生成三个向量:
- Query (Q):我想找什么?
- Key (K):我有什么标签?
- Value (V):我能提供什么信息?
公式只有一行:
$$
\text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right) V
$$
用打比方来理解:
想象你在一场鸡尾酒会。你(Query)想找懂红酒的人聊天。每个客人胸前都挂着标签(Key),你扫一眼所有人的标签,给”懂红酒”的人打高分,给”只懂啤酒”的人打低分(这就是 $QK^T$)。然后你按这个分数的权重,去听每个人讲话的内容(Value),分数高的人你听得仔细,分数低的人你左耳进右耳出。最后你把所有听到的信息加权融合进自己脑子里——这就是注意力的输出。
多头注意力(Multi-Head Attention) 就是同时开 8 场鸡尾酒会,每场关注不同维度(语法、语义、指代……),最后拼起来。
2.5 前馈网络(FFN):每个 token 单独”消化”
注意力做完”串门”后,每个 token 还要经过一个两层的全连接网络单独加工:
$$
\text{FFN}(x) = \text{ReLU}(xW_1 + b_1)W_2 + b_2
$$
📌 新手理解:注意力是”开会讨论”,FFN 是”散会后回工位整理笔记”。
2.6 残差连接与 LayerNorm:让深网络能训得动
每个子层(注意力 / FFN)的输出都包了一层”保险”:
$$
\text{Output} = \text{LayerNorm}(x + \text{Sublayer}(x))
$$
- 残差连接
x +:相当于”原稿留底”,避免改着改着把原意改丢了;同时让梯度能畅通无阻地流回浅层。 - LayerNorm:把每一层的输出”标准化”到一个稳定的数值范围,避免越叠越爆炸或越叠越萎缩。
注意原始 Transformer 是 Post-Norm——先残差相加,再做归一化。这个细节后面会被改掉。
2.7 Decoder 的两个特殊之处
- 掩码自注意力(Masked Self-Attention):生成第 i 个英文词时,不能偷看第 i+1、i+2 个词(不然就作弊了)。所以注意力矩阵的右上三角全部置为 $-\infty$。
- 交叉注意力(Cross-Attention):Decoder 还要看 Encoder 输出的”中文档案”,所以多了一层 Q 来自 Decoder、K/V 来自 Encoder 的注意力。
到这里,原始 Transformer 就讲完了。现在主角登场——LLM 拿走了这套架构后,到底改了什么?
三、LLM 的第一次大转向:抛弃 Encoder,只留 Decoder
3.1 三种架构家族
后续基于 Transformer 演化出了三大家族:
| 家族 | 代表模型 | 用什么 | 擅长 |
|---|---|---|---|
| Encoder-only | BERT、RoBERTa | 只要 Encoder | 理解任务(分类、检索、NER) |
| Encoder-Decoder | 原始 Transformer、T5、BART | 两者都要 | 翻译、摘要等”输入→输出”任务 |
| Decoder-only | GPT 系列、Llama、Qwen、DeepSeek | 只要 Decoder | 生成式对话、通用 LLM |
3.2 为什么现代 LLM 几乎清一色 Decoder-only?
这是过去几年最重要的架构选择。原因有三:
- 训练目标统一:Decoder-only 用”预测下一个 token”这一个任务就能学习一切——翻译、问答、写代码、推理,全都能塞进”接下来该说什么”这个统一框架里。
- 数据效率更高:相同算力下,Decoder-only 在大规模无监督文本上学得最快、扩展性最好(Scaling Law 在它身上最显著)。
- 推理时天然支持流式生成:一个 token 一个 token 地往外吐,配合 KV Cache(后面讲)效率极高。
📌 新手理解:原来”理解部 + 生成部”两个部门都要养,成本高、协调难。现在发现一个”全能生成部”足以——它边读边写,读懂了自然就能写好。
3.3 Decoder-only 长什么样?
Decoder-only 砍掉了交叉注意力(因为没有 Encoder 了),变成超级简洁的堆叠结构:
1 | 输入 token |
骨架就是这样。下面所有的进化,都是把这个骨架里的零件逐个换成更高效、更稳定、更长上下文的版本。
四、位置编码的进化:从绝对正弦到 RoPE
4.1 原始方案的痛点
原始 Transformer 用的正弦位置编码是绝对位置——第 5 个 token 永远是 PE(5)。这有两个问题:
- 外推性差:训练时只见过长度 2048 的序列,推理时给 4096 它就懵了。
- 不直接表达相对位置:模型其实更关心”A 在 B 前面 3 个位置”这种相对关系,而不是”A 是第 17 个”。
4.2 旋转位置编码(RoPE)的核心思想
RoPE(Rotary Position Embedding)的脑洞非常巧妙:不要把位置加到向量上,而是把位置变成一个旋转角度,去转动 Q 和 K 向量本身。
具体做法是:把每个 Q/K 向量按维度两两分组,每组当作复平面上的一个二维向量,然后按位置 $m$ 旋转 $m\theta$ 角度:
精妙之处:当 Q 在位置 $m$、K 在位置 $n$ 做点积时,结果只跟它们的相对位置 $(m-n)$ 有关,绝对位置自然抵消!
📌 新手理解:原来是”每个座位贴个号牌”,现在是”每个人按座位号自转一定角度”。两个人面对面交流时,他们之间的角度差只取决于座位距离,跟绝对座位号无关。
4.3 谁在用 RoPE?
几乎所有现代 LLM:Llama 全系、Qwen 全系、DeepSeek、GLM、Mistral、Gemma……RoPE 已经是事实上的标准。
后续还有 NTK-aware RoPE、YaRN 等扩展,让模型能在不重新训练的情况下把上下文从 4K 拉到 128K 甚至 1M。
五、归一化的进化:LayerNorm → RMSNorm,Post-Norm → Pre-Norm
5.1 Post-Norm vs Pre-Norm:归一化放在哪?
Post-Norm(原始 Transformer):先把子层输出和残差相加,再做归一化。
1 | ┌──────────────┐ |
Pre-Norm(现代 LLM):先把输入归一化再喂给子层,残差直接走”高速公路”。
1 | ┌──► LayerNorm ──► Sublayer ──┐ |
Post-Norm 的问题:归一化夹在残差通路中间,会把梯度的”原稿留底”效果削弱。当模型叠到几十层、上百层时,梯度反传困难,训练极不稳定,需要小心翼翼地预热学习率(warmup)。
Pre-Norm 的优势:残差通路是一条”干净的恒等映射”,梯度能畅通流到底层。代价是最终输出的数值范围会变大,所以输出层前还要再加一次 LayerNorm 收尾。
📌 结论:现代 LLM 几乎全部采用 Pre-Norm,让 100+ 层的深堆叠成为可能。
5.2 RMSNorm:把 LayerNorm 砍掉一半
LayerNorm 的公式:
$$
\text{LN}(x) = \gamma \cdot \frac{x - \mu}{\sqrt{\sigma^2 + \epsilon}} + \beta
$$
它做了两件事:去均值(减 $\mu$)和缩放(除标准差)。
RMSNorm(Root Mean Square Norm)发现:去均值这一步在 Transformer 里几乎没用,砍掉对效果影响微乎其微,但能省下一笔计算:
$$
\text{RMSNorm}(x) = \gamma \cdot \frac{x}{\sqrt{\frac{1}{n}\sum x_i^2 + \epsilon}}
$$
收益:约 7-15% 的归一化开销下降,在大模型每层都用、推理速度敏感的场景非常划算。Llama、Qwen、DeepSeek 全部采用。
📌 新手理解:LayerNorm 是”先把所有人的体重减去平均值再缩放到统一范围”,RMSNorm 是”直接缩放到统一范围”——后者发现”减平均值”那步压根不影响下游,那就别做了。
六、注意力机制的进化:MHA → MQA → GQA → MLA
这是 LLM 推理性能优化最关键的一条进化路径,背景是 KV Cache 太占显存。
6.1 为什么要优化?KV Cache 是显存大户
LLM 生成时,每生成一个新 token,都需要回看前面所有 token 的 K 和 V。为了避免每步都重算,会把它们缓存下来——这就是 KV Cache。
显存占用公式(MHA 情况下):
$$
\text{KV Cache} = 2 \times L \times H \times d_h \times s \times b \times \text{bytes}
$$
(2 是 K 和 V,$L$ 层数,$H$ 头数,$d_h$ 每头维度,$s$ 序列长,$b$ batch,FP16 时 bytes=2)
举个例子:Llama-2-7B 是经典的 MHA 模型,$L=32$、$H=32$、$d_h=128$,序列 $s=4096$、$b=1$、FP16:
$$
2 \times 32 \times 32 \times 128 \times 4096 \times 1 \times 2 \approx 2,\text{GB}
$$
Batch 拉到 16 就吃满 32 GB;如果换成 70B 级别的稠密 MHA 模型,单 batch 就能逼近一张 A100 80G 的上限——KV Cache 已经成为 LLM 推理的头号显存杀手。这就是后面所有变体(MQA/GQA/MLA)都在做同一件事的原因:砍掉冗余的 K/V。
6.2 MHA:原始多头注意力
每个头都有自己独立的 Q、K、V 投影矩阵。$H$ 个头就有 $H$ 套 K/V,显存占用最高。
1 | 头1: Q1 K1 V1 |
6.3 MQA(Multi-Query Attention):暴力共享
所有头共享同一组 K 和 V,只有 Q 还分头。
1 | 头1: Q1 ┐ |
显存占用瞬间降到 MHA 的 $1/H$(仅就 KV Cache 而言),但效果有明显损失——所有头都被迫看同样的”标签”,多样性消失。
6.4 GQA(Grouped-Query Attention):折中方案
把 H 个头分成 G 组,每组共享一套 K/V。当 G=1 时退化为 MQA,G=H 时退化为 MHA。
1 | 组1: [Q1 Q2 Q3 Q4] 共享 K1 V1 |
GQA 在效果几乎不掉的前提下,把 KV Cache 压到 1/4 ~ 1/8。Llama-2/3、Qwen-2/2.5、Mistral 全部采用。
6.5 MLA(Multi-head Latent Attention):DeepSeek 的杀手锏
DeepSeek-V2/V3 提出 MLA,把 K 和 V 联合压缩成一个低维潜向量,存储潜向量本身而非 K/V,需要时再解压。
效果:KV Cache 进一步压缩到 GQA 的 1/4 ~ 1/10,且性能不掉反升。这是 DeepSeek 能用极低成本提供长上下文服务的关键。
6.6 一图看懂演化
简单一句话总结这条进化线:MHA 太贵 → MQA 太省(掉点)→ GQA 折中(成主流)→ MLA 把潜在表征压缩玩出新高度。
七、前馈层的进化:ReLU → SwiGLU,再到 MoE
7.1 激活函数:ReLU → GELU → SwiGLU
原始 Transformer 用 ReLU,简单粗暴:$\text{ReLU}(x) = \max(0, x)$。
后来 BERT 换成 GELU(更平滑),现代 LLM 又换成了 SwiGLU:
$$
\text{SwiGLU}(x) = (\text{Swish}(xW_1)) \odot (xW_3)
$$
它把 FFN 的第一层”拆成两路”,一路过 Swish 激活当”开关”,另一路当”内容”,再逐元素相乘——本质是给网络加了门控机制,让模型自己决定哪些信息放行、哪些抑制。
代价是参数变多(多了一个 $W_3$),所以为了保持总参数量不变,FFN 隐藏维度通常从 $4d$ 降到 $\frac{8}{3}d$。
📌 效果:SwiGLU 在同算力下显著优于 ReLU/GELU,已成 Llama、Qwen、Mistral 的标配。
7.2 MoE(Mixture of Experts):让模型”按需调用专家”
更激进的演化是把单一的 FFN 替换成多个专家 FFN + 一个路由器:
1 | ┌──► 专家 1 ─┐ |
每个 token 只激活其中 2~8 个专家,总参数量可以做到上千亿,但单次推理只用其中几百亿。
代表作:Mixtral 8×7B(共 47B 参数,每 token 激活 13B)、DeepSeek-V3(671B 参数,激活 37B)、Qwen3-MoE 系列。
📌 新手理解:原来一个 token 来了,整个公司全员开工。MoE 改成”前台路由 → 只通知最相关的几个专家来处理”,公司可以养很多专家,但每次只用一小撮,省钱又专业。
八、训练目标与规模的差异
8.1 训练目标
- 原始 Transformer:监督学习——“中文 → 英文”配对数据,几百万句子级别。
- LLM 预训练:自监督——海量互联网文本,让模型预测”下一个 token”。数据量从 GB 级别飙升到 TB 甚至 PB 级别(Llama-3 用了 15T tokens)。
8.2 三阶段训练流程
现代 LLM 通常走”预训练 → 后训练(Post-training)”的整体路线,其中后训练又细分为 SFT 和偏好对齐两步,合起来就是三个阶段:
1 | 1. 预训练(Pre-training) — 海量文本,学语言的统计规律和世界知识 |
原始 Transformer 完全没有后两步——它是个翻译机,不需要”对齐人类偏好”。
8.3 规模的代际差异
| 模型 | 参数量 | 训练数据 | 训练算力 |
|---|---|---|---|
| 原始 Transformer (2017) | 65M | ~4.5M 句子对 | 8 张 P100 训 3.5 天 |
| GPT-3 (2020) | 175B | 300B tokens | ~3640 PetaFLOP/s-days |
| Llama-3-405B (2024) | 405B | 15T tokens | 16K 张 H100 训数月 |
| DeepSeek-V3 (2024) | 671B (MoE) | 14.8T tokens | 2048 张 H800 训约 2 个月 |
8 年时间,参数量涨了 1 万倍,训练数据涨了 100 万倍。
九、推理阶段的”独门武器”:KV Cache 与上下文扩展
原始 Transformer 论文几乎没讨论推理优化(毕竟翻译一句话很快),LLM 则把推理优化卷出了花:
9.1 KV Cache
如前所述,避免每生成一个 token 都重算前文的 K/V。这是所有 LLM 推理框架(vLLM、TGI、SGLang)的基石。
9.2 PagedAttention(vLLM)
把 KV Cache 按”内存页”管理(灵感来自操作系统的虚拟内存),消除碎片,让一张 GPU 能并行服务更多请求。
9.3 Speculative Decoding(投机解码)
用一个小而快的草稿模型先猜几个 token,再用大模型一次性验证。命中就赚到,不命中就回退。可以把推理速度提升 2~3 倍。
9.4 长上下文扩展
- YaRN / Dynamic NTK:在 RoPE 基础上调整频率,让 4K 训练的模型外推到 128K。
- Sliding Window Attention(Mistral):每个 token 只看最近的 W 个 token,降低长文本计算量。
- Sparse Attention(GPT-4、Gemini):只让部分 token 之间计算注意力。
原始 Transformer 在这些方向上几乎完全没有积累——它是为短句翻译设计的。
十、一张总表:原始 Transformer vs 现代 LLM
| 维度 | 原始 Transformer (2017) | 现代 LLM (2024+) |
|---|---|---|
| 架构 | Encoder-Decoder | Decoder-only |
| 位置编码 | 正弦绝对位置 | RoPE(旋转位置编码) |
| 归一化位置 | Post-Norm | Pre-Norm |
| 归一化函数 | LayerNorm | RMSNorm |
| 注意力 | MHA | GQA / MLA |
| 激活函数 | ReLU | SwiGLU |
| FFN 结构 | 单一稠密 FFN | 稠密 FFN 或 MoE |
| 训练目标 | 监督翻译 | 自监督预训练 + SFT + RLHF |
| 数据规模 | 百万句子对 | 万亿 token |
| 参数规模 | 6500 万 | 几百亿到上万亿 |
| 上下文长度 | 512 | 128K ~ 1M+ |
| 推理优化 | 几乎无 | KV Cache、PagedAttention、投机解码…… |
| 典型代表 | 原论文 base 模型 | GPT-4、Llama-3、Qwen-3、DeepSeek-V3 |
十一、写在最后
回过头看,Transformer 提供的真正不朽的东西不是某个具体零件,而是”用注意力机制堆叠”这个范式。
- 注意力的核心思想(QKV 加权求和)—— 没变
- 残差 + 归一化 + FFN 的基本单元 —— 没变
- 多层堆叠的整体架构 —— 没变
但围绕这个骨架,过去 8 年发生了一场全方位、悄无声息的零件替换:
- 编码器被砍掉了;
- 位置编码被旋转化了;
- 归一化被前置和瘦身了;
- 注意力的 K/V 被反复压缩;
- FFN 被门控化、专家化;
- 训练规模翻了百万倍;
- 推理被各种技巧加速了几十倍。
这就是为什么今天的 GPT-4、Llama-3、DeepSeek-V3,血脉上是 Transformer,气质上已经是另一个物种。
如果你是新手,看完这篇能把上面这张总表的每一行讲清楚——你就已经超过了 90% 的”知道 Transformer 但说不清 LLM”的人。如果你是老手,下次面试遇到”为什么用 GQA 不用 MHA””为什么 RMSNorm 比 LayerNorm 好”,希望这篇文章能帮你结构化地组织答案。
架构的终点远未到来,Mamba、RWKV、TTT、Hybrid Architecture 仍在探索”是否还需要注意力”。但无论未来怎么变,Transformer 都将作为这一轮 AI 浪潮的奠基石,被永远写在历史里。