外观
Transformer 与注意力机制
Transformer 是 2017 年论文《Attention Is All You Need》提出的、完全基于注意力机制(attention)的序列模型架构,是当前几乎所有大模型的地基。
它的核心主张浓缩在论文标题里:"Attention Is All You Need"——注意力就足够了。此前统治序列建模的是循环神经网络(RNN)与长短期记忆网络(LSTM),它们必须按时间步逐个处理 token;Transformer 抛弃了循环结构,让序列中任意两个位置直接通过注意力交互,从而同时解决了两个老大难问题:训练无法并行与长程依赖丢失。今天你使用的 ChatGPT、DeepSeek、Claude、Gemini,底层无一例外都是 Transformer(多为 Decoder-only 变体);它还是图像(ViT)、语音、多模态模型、扩散模型里 U-Net 的通用底座。理解 Transformer,就是理解这个 AI 时代的地基。
一、背景:循环网络的瓶颈,为什么"必须换架构"
要理解 Transformer 的革命性,先看它取代了什么。2017 年之前,NLP 的霸主是 RNN 家族:模型按时间步从左到右逐个处理 token,用一个**隐状态(hidden state)**把"到目前为止看到的内容"压缩成向量传给下一步。
输入: 你 好 世 界
RNN: h1→ h2 → h3 → h4 # 每一步只能看到上一步的隐状态,串行推进这个"逐时间步串行"的设计带来两个致命问题:
- 串行瓶颈:第 n 步的计算必须等第 n-1 步完成,无法在 GPU 上并行,训练极慢;
- 长程依赖困难:信息要经过很多步的"压缩-解压"才能从句子头传到句子尾。LSTM 用门控机制(遗忘门/输入门/输出门)缓解了梯度消失,让信息"走得更远",但并没有根治——每一步都还是瓶颈,长距离的指代、语义关联仍然容易丢失。
| 维度 | RNN | LSTM | Transformer |
|---|---|---|---|
| 并行性 | 完全串行,无法并行 | 完全串行,无法并行 | 全序列并行,GPU 利用率高 |
| 长程依赖 | 差,梯度消失严重 | 中,门控缓解但有限 | 任意两位置一步直达 |
| 依赖路径 | O(n) 步传递 | O(n) 步传递 | O(1) 步,注意力权重一步算出 |
| 训练成本 | 慢(串行时间步) | 慢(串行时间步) | 快(并行)但显存占用高(O(n²)) |
| 推理状态 | 依赖隐状态 | 依赖隐状态 | 需缓存 K/V(KV cache) |
| 代表作 | Elman RNN(1990) | LSTM(1997) | Transformer(2017) |
一句话判断
RNN/LSTM 把"顺序"当作必须按时间推进的物理过程;Transformer 把"顺序"当作一组可以同时计算的相对位置关系——这一跃迁同时解锁了并行与长程依赖。从演进简史可以看清这条技术路线的来龙去脉。
二、核心机制:缩放点积注意力(QKV 三件套)
从"查字典"理解注意力
"注意力"的直觉是:处理某个词时,模型应该关注上下文里的哪些词、分别关注多少。 看这个句子:
小明把球递给小红,然后它滚进了草丛。
"它"指什么?人脑会立刻把注意力分配给"球"。注意力机制要做的正是这件事——为当前词计算一个对所有其他词的概率分布,然后按权重聚合信息。
Q、K、V 各自的含义
实现上,每个 token 通过三个可学习的投影矩阵生成三组向量:
Q(Query,查询) "我在找什么?" —— 当前词发出的"寻亲信号"
K(Key,键) "我是什么?" —— 每个词身上贴的"标签"
V(Value,值) "我携带什么信息" —— 每个词真正贡献的内容注意力的计算流程是"拿 Q 去和所有 K 比对相关度,再用相关度加权汇总所有 V":
1. 相关度得分 = Q · Kᵀ / √d_k # 点积衡量相似度,除以 √d_k 缩放
2. 归一化为概率 = softmax(相关度得分) # 所有位置的权重和为 1
3. 输出 = Σᵢ 权重ᵢ × Vᵢ # 按相关度加权聚合各位置信息写成公式就是缩放点积注意力(Scaled Dot-Product Attention):
$$ \text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^\top}{\sqrt{d_k}}\right)V $$
其中 √d_k 缩放很关键:维度 d_k 变大后,点积数值会同步变大,把 softmax 推入饱和区(梯度趋近 0,学不动)。除以 √d_k 让点积方差保持稳定,训练才稳。这是 Transformer 相比早期注意力设计最细致的工程决策之一。
一个小数值例子
设一个 2 词序列 ["猫", "老鼠"],d_k = 2。当前处理"猫",它的查询向量 q = [1, 0];"猫"和"老鼠"的键、值如下:
| token | K(键) | V(值) |
|---|---|---|
| 猫 | [1, 0] | [1, 1] |
| 老鼠 | [0.5, 1] | [2, 0] |
计算"猫"对每个词的注意力:
q·k_猫 = 1×1 + 0×0 = 1.0
q·k_老鼠 = 1×0.5 + 0×1 = 0.5
除以 √2 → [0.707, 0.354]
softmax([0.707, 0.354]) → exp(0.707)=2.03, exp(0.354)=1.42
权重 = [2.03/(2.03+1.42), 1.42/(2.03+1.42)] = [0.59, 0.41]
输出 = 0.59×[1,1] + 0.41×[2,0] = [1.41, 0.59]"猫"的注意力主要给了自己(0.59),但也吸收了"老鼠"的信息(0.41)——语义上"猫"和"老鼠"强相关,所以哪怕两者不相邻,权重也很大。这就是长程依赖被"一步直达"的原因:注意力与距离无关,只与内容相似度有关。
常见误区
"注意力权重高"不等于"模型在解释上依赖这个词"。注意力矩阵是可观察的,但研究早已表明它不等于可解释性——去掉高权重位置模型往往照样工作。把它当作训练中的软对齐机制更准确。
三、多头注意力:多个视角同时看
单个注意力只能学一种"相似度"定义(一组 Q/K 投影)。但一个句子里同时存在语法关系(主谓一致)、指代关系("它"→"球")、语义相似("猫"→"老虎")等不同层面的关联。怎么办?
**多头注意力(Multi-Head Attention)**把注意力拆成 h 个"头",每组有自己独立的 Q/K/V 投影矩阵,并行计算 h 份注意力,最后拼接再投影回原维度:
多头注意力 = Concat(head₁, head₂, …, head_h) · W_O
其中 headᵢ = Attention(Q·W_Qⁱ, K·W_Kⁱ, V·W_Vⁱ)典型的设置是 h = 8 或 12 个头。不同的头会自发分工:有的头学"相邻词依赖",有的头学"指代关系",有的头学"全局统计"。多个头并行,相当于让模型同时从多个关系子空间"看"序列,最后把意见汇总。 这是 Transformer 表达力的核心来源——论文中多头注意力相比单头能稳定带来效果提升。
四、位置编码:补上"顺序"这个缺失维度
注意力本身完全不知道顺序:"猫追狗"和"狗追猫"在纯注意力看来,词与词两两之间的相关度一模一样。但语言中顺序即语义("猫追狗"和"狗追猫"意思相反),所以必须把位置信息显式注入。
原论文用正弦/余弦函数(sine/cosine positional encoding):
$$ PE_{(pos, 2i)} = \sin\left(\frac{pos}{10000^{2i/d_{model}}}\right), \quad PE_{(pos, 2i+1)} = \cos\left(\frac{pos}{10000^{2i/d_{model}}}\right) $$
其中 pos 是位置,i 是维度下标。正弦位置编码的两个好处:不同频率的组合让模型容易学到相对位置(偏移量),且不受序列长度上限限制。
后来的主流做法:
| 方案 | 原理 | 代表 |
|---|---|---|
| 正弦/余弦 | 固定函数生成,可外推 | Transformer 原论文 |
| 可学习位置嵌入 | 位置向量作为参数随训练更新 | BERT、GPT-2 |
| RoPE(旋转位置编码) | 用旋转矩阵把位置信息编码进 Q/K,天然兼容相对位置 | Llama、Qwen、GPT 系列等现代 LLM 标配 |
| ALiBi(注意力偏置) | 不加位置向量,直接给注意力分数按距离加偏置 | BLOOM 等 |
其中 RoPE 如今几乎是所有主流大模型的默认选择:它把相对位置信息直接揉进 Q/K 的点积里,训练长度与推理外推表现都更好,还能配合"上下文长度扩展"做长序列。顺序信息为什么不能丢,一句话说透:并行计算的代价是"顺序"不会自动存在,必须由你亲手编码进去。
五、标准构建块:残差连接、LayerNorm、FFN
一个"完整 Transformer 层"由注意力 + 前馈网络组成,并配以残差连接(Residual Connection)与层归一化(Layer Normalization, LayerNorm):
输入 x
↓
x₁ = x + MultiHeadAttention(LayerNorm(x)) # 注意力子层 + 残差
↓
x₂ = x₁ + FFN(LayerNorm(x₁)) # 前馈子层 + 残差
↓ 输出 x₂,堆叠 N 层- 残差连接:
输出 = x + 子层(x)。让梯度有"高速公路"直接回流到浅层,是堆叠几十上百层而不退化、不梯度消失的钥匙(同 ResNet 思想); - LayerNorm:沿特征维度做归一化。注意是 LayerNorm 而非 BatchNorm——序列长度、batch 大小频繁变化时 BatchNorm 的统计量不稳定,LayerNorm 与样本数无关,是 Transformer 的标配;
- 前馈网络(FFN):每个 token 独立过两层全连接(通常是
4×d_model宽 + GELU 激活),提供非线性与记忆容量。FFN 参数往往占模型总参数的三分之二左右,是大模型的"知识仓库"。
现代大模型(如 Llama)普遍把归一化位置调整为先归一化(Pre-LN),训练更稳定,这属于架构细节的持续演进。
六、三种架构变体:Encoder-Decoder / Encoder-only / Decoder-only
《Attention Is All You Need》的原始架构是编码器-解码器(Encoder-Decoder):编码器读完整段输入(双向注意力),解码器逐步生成输出(带掩码的因果注意力 + 对编码器输出的交叉注意力)。但后续发展分成了三条路线:
| 变体 | 注意力方式 | 预训练任务 | 擅长 | 代表模型 |
|---|---|---|---|---|
| Encoder-only | 双向,全序列可见 | 掩码语言模型(MLM) | 理解、分类、抽取 | BERT、RoBERTa |
| Decoder-only | 单向(因果),只看左边 | 预测下一个 token | 生成、对话、推理 | GPT 系列、Llama、Qwen、DeepSeek |
| Encoder-Decoder | 编码器双向 + 解码器因果 | 去噪 / 填空 / 跨度破坏 | 翻译、摘要、转换类任务 | T5、BART、原论文模型 |
- **BERT(2018)**走 Encoder-only:随机遮住 15% 的词,预测被遮住的词(MLM),学到双向表示后微调下游任务,横扫 11 项 NLP 基准;
- **GPT(2018)**走 Decoder-only:只做"预测下一个 token",把语言建模贯彻到底;
- **T5(2019)**走 Encoder-Decoder:把一切任务统一成"文本到文本",翻译、摘要、问答一网打尽。
为什么 Decoder-only 成为大模型主流?
一个重要观察是:预测下一个 token 是唯一能同时利用"海量无标注语料 + 自监督"的通用任务,而生成式预训练本身就具备理解能力(GPT 论文发现:训练语言模型时,Transformer 会自发形成注意力"电路"完成问答、翻译等任务)。2020 年后 GPT-3 展示出**上下文学习(in-context learning)**能力,说明 Decoder-only 模型在规模变大后泛化能力更强,还能通过提示词工程与检索增强生成(RAG)直接做各种任务。
工程上 Decoder-only 也更省事:一个模型、一套预训练任务、一个统一的生成接口,无需维护编码器的双向注意力。如今 OpenAI、Google、Meta、DeepSeek 的旗舰模型几乎全是 Decoder-only(Mistral、Llama、Qwen、DeepSeek-R1 皆如此),详见大语言模型(LLM)。
一句话判断
只要做"理解类"固定任务且追求低成本 → 编码器模型(BERT 系);要做对话/生成/通用推理 → Decoder-only 大模型;要翻译/摘要等"输入转输出"任务 → Encoder-Decoder 仍然能打。
七、训练与推理视角:O(n²) 复杂度与 KV cache
自注意力的 O(n²)
设序列长度为 n。计算注意力要先算 QKᵀ(n×d 乘 d×n → n×n 矩阵),再与 V 相乘。每一步矩阵乘法都是 O(n²) 量级,显存占用也是 O(n²)——这是 Transformer 的"阿喀琉斯之踵":
n = 1000 → 注意力矩阵 1000×1000 = 100 万个数
n = 10000 → 1 亿个数(单层单头)
n = 100000 → 100 亿个数(多层的显存灾难)所以"把整本书塞进上下文"很贵。这也是后续推理优化里重点要解决的问题(量化、FlashAttention、KV cache 量化等)。
KV cache:推理时为什么要缓存 K/V?
大模型生成是自回归的:一次只吐一个 token,把新 token 拼进上下文再预测下一个。朴素实现下,第 t 步要重新计算前 t 个 token 的注意力——而前面 token 的 K/V 只由它们自身决定,跟当前正在预测的 token 无关。于是推理引擎把历史上算过的 K/V 全部缓存到显存中,每步只需:
已有 K/V 缓存(历史的 K、V 矩阵)
+ 新 token 的 Q/K/V(只需算这一个)
↓
Q_new 与 (K_缓存 ∪ K_new) 做注意力 → 输出新 token
↓ 把新 K/V 追加进缓存这样单步生成成本从"重算全部 O(n²)"降到"只算新增 O(n)",吞吐提升数十倍。代价是缓存随生成长度线性增长——这就是为什么长文本生成对显存要求高、为什么有 KV cache 量化与 GQA(分组查询注意力)这类技术。实战细节见部署与推理优化实战。
八、影响力:从 NLP 到图像、扩散模型、多模态
Transformer 的影响力早已溢出 NLP:
- 横扫 NLP:BERT(2018)与 GPT(2018-)共同确立了"预训练 + 微调"与"预训练 + 提示/上下文学习"两大范式,直接催生了 ChatGPT 与对话式 AI 时代、DeepSeek-R1 这类推理模型;
- 视觉:ViT(Vision Transformer, 2020)把图像切成 patch 当 token 输入 Transformer,卷积网络的霸主地位被打破;
- 扩散模型:Stable Diffusion、Sora 的骨干 U-Net 内部就是注意力层——去噪过程在每个分辨率上用注意力让图像块之间互相"看得见",扩散模型从语言模型借来了这个底座;
- 多模态:**交叉注意力(cross-attention)**让"文本 token 的 Q"去注意"图像/音频 token 的 K/V",从而把两种模态桥接起来——这就是 GPT-4V、Gemini、Qwen-VL 能做"看图说话"的机制核心,详见多模态模型;
- 推荐系统:把用户行为序列当作 token 流,用注意力建模用户兴趣演化的思路也进入了大模型时代的推荐系统(见推荐系统案例)。
一句话总结:注意力是"与模态无关"的通用信息路由机制——只要你能把数据切成 token 序列,Transformer 就能处理它。
九、局限与演进:二次复杂度之后的时代
Transformer 不是终点,围绕它的"二次复杂度"持续有新突破:
| 方向 | 思路 | 代表 |
|---|---|---|
| 稀疏注意力 | 只让部分位置两两交互(局部窗口 + 全局 token) | Longformer、BigBird、GPT-4 的局部+全局模式 |
| 线性注意力 | 把 softmax 换成可分解的核函数,把 QKᵀ 化成 O(n) 运算 | Linear Attention、Performer |
| IO 感知的精确实现 | 不存完整的 n×n 注意力矩阵,分块计算 | FlashAttention(如今训练与推理的标准内核) |
| 状态空间模型 | 用固定大小状态替代 KV cache,O(n) 且推理状态恒定 | Mamba、Mamba-2 |
| 混合架构 | 注意力 + 线性/状态空间混合,兼顾表达与效率 | Jamba、Gemma 2 的局部注意力、DeepSeek-V3 的 MLA |
FlashAttention 如今是训练大模型的"隐形英雄":它通过 IO 优化让注意力计算读写显存的次数从 O(n²) 降到近线性,极大降低训练成本;Mamba 则证明"状态空间模型"可以在保持效果的同时把序列处理降到 O(n)。但到目前为止,标准注意力(配合稀疏化/混合策略)依然是大模型的默认选择——因为它在长程信息检索上的能力最可靠。前沿探索的完整图景见前沿进展。
权衡提醒
不要因为"O(n²)"就以为 Transformer 会被快速取代。真实世界中的赢家往往是"注意力为主 + 效率补丁(FlashAttention、GQA、MLA)"的组合;纯粹线性注意力在长距离精确检索上至今仍有明显短板。
延伸阅读
- 大语言模型(LLM)——Transformer 的巅峰形态,Decoder-only 的规模法则
- 多模态模型——交叉注意力如何桥接文本与图像
- 扩散模型与生成式 AI——U-Net + 注意力如何驱动文生图
- 推理优化与量化——KV cache、GQA、FlashAttention 的工程落地
- 提示词工程——Decoder-only 模型的最主流使用方式
- 经典论文精读——《Attention Is All You Need》逐段精读
- 前沿进展——线性注意力、Mamba、混合架构的最新动态
- 术语表——注意力、QKV、RoPE 等术语速查
- AI 热门概念全景——所有核心概念的地图
参考资料
- Vaswani et al. Attention Is All You Need(NeurIPS 2017) —— Transformer 原始论文,一切讨论的起点
- Devlin et al. BERT: Pre-training of Deep Bidirectional Transformers(NAACL 2019) —— Encoder-only 路线的代表作
- Radford et al. Improving Language Understanding by Generative Pre-Training(GPT-1, 2018) —— Decoder-only 路线的起点
- Raffel et al. Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer(T5, 2020) —— Encoder-Decoder 统一框架
- Dosovitskiy et al. An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale(ViT, 2021) —— Transformer 进入视觉的标志
- Dao et al. FlashAttention: Fast and Memory-Efficient Exact Attention with IO-Awareness(2022) —— 训练大模型的效率内核
- Gu & Dao. Mamba: Linear-Time Sequence Modeling with Selective State Spaces(2023) —— 状态空间模型挑战二次复杂度
- Jay Alammar. The Illustrated Transformer —— 全网流传最广的 Transformer 图解教程