Skip to content

Transformer 与注意力机制

本页速览 2017 年《Attention Is All You Need》提出的 Transformer 完全基于注意力机制,成为当今几乎所有大模型的地基。本文拆解 QKV 注意力、多头、位置编码与三大架构变体,讲清 O(n²) 复杂度与 KV cache,并追溯其影响与演进。

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      # 每一步只能看到上一步的隐状态,串行推进

这个"逐时间步串行"的设计带来两个致命问题:

  1. 串行瓶颈:第 n 步的计算必须等第 n-1 步完成,无法在 GPU 上并行,训练极慢;
  2. 长程依赖困难:信息要经过很多步的"压缩-解压"才能从句子头传到句子尾。LSTM 用门控机制(遗忘门/输入门/输出门)缓解了梯度消失,让信息"走得更远",但并没有根治——每一步都还是瓶颈,长距离的指代、语义关联仍然容易丢失。
维度RNNLSTMTransformer
并行性完全串行,无法并行完全串行,无法并行全序列并行,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];"猫"和"老鼠"的键、值如下:

tokenK(键)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)"的组合;纯粹线性注意力在长距离精确检索上至今仍有明显短板。

延伸阅读 ​

参考资料 ​