Transformer 是深度学习领域最具影响力的架构之一。2017 年 Google Brain 团队在论文 "Attention Is All You Need" 中首次提出,从此彻底改变了自然语言处理、计算机视觉和多模态 AI 的格局。BERT、GPT、T5、ViT、Whisper 等里程碑式模型均基于 Transformer 架构。
在 Transformer 之前,序列建模主要依赖循环神经网络(RNN)和长短期记忆网络(LSTM)。它们虽能处理变长序列,但存在三个根本性缺陷:
Transformer 的创新在于完全抛弃循环结构,仅依赖注意力机制来建模序列关系。
| 特性 | RNN/LSTM | Transformer |
|---|---|---|
| 计算模式 | 串行(每个时间步依赖前一步) | 并行(所有位置同时计算) |
| 长距离依赖 | 困难(梯度消失限制有效距离) | 天然支持(注意力直接连接任意位置) |
| 计算复杂度(序列长度 ) | (标准注意力) | |
| 最大有效上下文 | 通常 100-500 token | 可扩展到 128K+ token |
| 训练效率 | 低(难以充分利用 GPU) | 高(矩阵运算高度并行化) |
Transformer 采用编码器-解码器结构:
输入序列 → [嵌入层 + 位置编码] → [N×编码器层] → [N×解码器层] → 输出
每个编码器层包含两个子层:
每个子层后接残差连接(Residual Connection)和层归一化(Layer Normalization):LayerNorm(x + Sublayer(x))
解码器层在此基础上增加了一个交叉注意力子层(Cross-Attention),用于关注编码器的输出。
原始 Transformer("Attention Is All You Need")的配置:
| 配置 | Base 模型 | Big 模型 |
|---|---|---|
| 编码器层数 | 6 | 6 |
| 解码器层数 | 6 | 6 |
| 嵌入维度 | 512 | 1024 |
| 注意力头数 | 8 | 16 |
| 每头维度 | 64 | 64 |
| FFN 隐藏层维度 | 2048 | 4096 |
| 总参数量 | ~65M | ~213M |
| Dropout | 0.1 | 0.1 |
让我们通过一个具体任务来理解编码器-解码器的协作:
任务:英译中,输入
"I love machine learning",输出"我热爱机器学习"
编码器接收完整的输入序列 ["I", "love", "machine", "learning"],并行计算每个位置的表示。每个位置都能关注到其他所有位置——"love"的表示不仅包含自身语义,还融合了"I"(主语)、"machine learning"(宾语)的上下文信息。编码器输出的是一组上下文感知的向量序列 。
解码器逐个生成目标词。生成第一个词 "我" 时,解码器不仅看到已生成的开头标记 <sos>,还通过交叉注意力读取编码器输出的完整源句表示。生成 "热爱" 时,解码器注意已生成的 ["<sos>", "我"](通过掩码自注意力屏蔽未来位置)以及编码器的全部输出。
这是 Transformer 的核心操作。它的本质是:给定一组"查询"和"键值对",计算查询与每个键的相似度,再用该相似度对值做加权求和。
对于查询矩阵 、键矩阵 、值矩阵 :
其中 是查询数量, 是键值对数量, 是查询/键的维度, 是值维度。
这是论文中的一个关键设计。数值例子:
假设 ,查询 和键 的元素均为独立标准正态分布 。那么点积 的方差为:
因此 的标准差为 。当 很大时,点积值分布很散,softmax 会趋向于极端值(接近 0 或 1),梯度极小。
缩放后: 的方差为 ,softmax 处于梯度较大的区间。
具体数值对比(假设 , 的元素值在 范围内):
| 情况 | 原始分数范围 | Softmax 后 | 梯度 |
|---|---|---|---|
| 未缩放 | [-30, 30] | 一个接近 1,其余接近 0 | 极小(梯度消失) |
| 缩放 | [-3.75, 3.75] | 分布较均匀 | 正常 |
标准注意力机制的计算量为 ,其中 是序列长度。对于 的典型任务,这并非瓶颈——但当 (长文档)时, 项变得难以承受。这也是后续 Sparse Attention、Linear Attention、Flash Attention 等改进的主要动机。
与其用单个注意力函数捕获所有关系,Transformer 将查询、键、值分别投影到 个子空间中,独立计算注意力后再拼接:
其中每个头的计算:
投影矩阵的维度:
在原始 Transformer 中,(Base 模型),确保总计算量与单头注意力相近。
研究表明,多头注意力中不同头学习到不同类型的依赖关系:
| 头类型 | 捕获模式 | 示例 |
|---|---|---|
| 位置头 | 相邻词关系、句法依赖 | "the cat" 中 "the" → "cat" 的修饰关系 |
| 语义头 | 同义词、指代关系 | "it" → "the algorithm" 的代词消解 |
| 语法头 | 主谓宾结构、从句边界 | 动词与主语的依赖 |
| 特殊头 | [SEP]、[CLS] 等特殊标记的全局注意力 | BERT 中 [CLS] 关注整个句子 |
案例分析:在 BERT 模型中,第 8 层的一个头可能专门关注"形容词→名词"的修饰关系。当输入 "beautiful sunset" 时,该头中 "sunset" 位置对 "beautiful" 的注意力权重接近 0.9,远高于对其他词的权重。
Transformer 没有递归结构,无法天然感知序列顺序。位置编码是向输入注入位置信息的唯一途径。
原始论文使用固定频率的正弦和余弦函数:
其中 是位置索引, 是维度索引。
直观理解:不同维度具有不同的频率。低频维度( 较小)在整个序列范围内缓慢变化,编码全局位置信息;高频维度( 较大)在相邻位置间快速变化,编码局部位置信息。
数值示例():
| 位置 | 维度 0 (, 频率=1) | 维度 1 (, 余弦) | 维度 100 (, 频率低) |
|---|---|---|---|
| 0 | |||
| 1 | |||
| 10 | |||
| 100 |
可以看到,低维度()在不同位置变化剧烈,高维度()几乎不变——这构成了一个多尺度的位置编码系统。
| 方法 | 描述 | 代表模型 | 优势 |
|---|---|---|---|
| 正弦编码 | 固定频率的正余弦函数 | Transformer(原始) | 无需学习,可外推到更长的序列 |
| 可学习编码 | 将位置编码作为可训练参数 | BERT, GPT-2 | 更灵活,针对特定任务优化 |
| ALiBi | 在注意力分数上加位置偏置 | BLOOM | 自然的长度外推能力 |
| RoPE | 旋转位置编码,旋转 Q/K 向量 | LLaMA, Mistral | 相对位置感知,优秀的外推性能 |
| xPos | RoPE 的改进版(深度缩放) | GLM-130B | 对极长序列更稳定 |
RoPE 工作原理:将位置信息编码为旋转矩阵,对查询和键向量做旋转变换。两个向量 和 的注意力分数依赖于它们在二维子空间中的相对角度 ,因此模型天然学习到的是相对位置关系而非绝对位置。
每个注意力层后接一个两层前馈网络,对每个位置独立应用(相同参数):
其中 ReLU 激活函数在后续模型中常被替换:
| 激活函数 | 公式 | 使用模型 | 特点 |
|---|---|---|---|
| ReLU | Transformer 原始 | 简单,但死神经元问题 | |
| GELU | BERT, GPT-3 | 平滑版 ReLU,性能更好 | |
| SwiGLU | LLaMA, PaLM | Gated 变体,参数量增加但效果优于 ReLU | |
| GeGLU | T5 | 结合 GELU 和门控机制 |
以 Base 模型为例(),FFN 参数量为:
,约占模型总参数(65M)的 1/3。
直觉:注意力层负责"信息路由"——决定哪些位置的信息需要混合;FFN 层负责"信息处理"——对混合后的信息进行非线性变换,提取更高层次的特征。
Transformer 使用层归一化而非批归一化,原因在于序列长度可变。
其中 ,, 和 是可学习参数。
原始 Transformer 使用 Post-LN(先子层后归一化):LayerNorm(x + Sublayer(x))
现代模型(GPT, LLaMA)普遍使用 Pre-LN(先归一化后子层):x + Sublayer(LayerNorm(x))
| 对比 | Post-LN | Pre-LN |
|---|---|---|
| 训练稳定性 | 较差(需要 warmup 和精细调节) | 稳定(无需 warmup 也能收敛) |
| 梯度流 | 梯度通过两个求和路径传播 | 恒等映射路径始终保持畅通 |
| 典型模型 | 原始 Transformer, BERT | GPT, LLaMA, PaLM |
所有批次中的序列需填充到相同长度。Padding Mask 确保注意力不会关注到填充位置(将填充位置的点积设为 ,softmax 后权重为 0)。
解码器中的自注意力需要使用因果掩码,防止模型"看到未来的词":
示例:生成 "I love machine learning" 的第三个词"machine"时,解码器只能看到 <sos>, "I", "love",不能看到 "learning"。
BERT 使用多层双向 Transformer 编码器,通过 MLM(掩码语言模型) + NSP(下一句预测) 预训练。编码器没有因果掩码,每个位置可以关注所有位置,实现真正的双向表示。
| 特性 | BERT-Base | BERT-Large |
|---|---|---|
| 编码器层数 | 12 | 24 |
| 768 | 1024 | |
| 注意力头数 | 12 | 16 |
| 参数量 | 110M | 340M |
| 预训练数据 | BookCorpus + Wikipedia (3.3B words) | 同上 |
GPT 使用多层 Transformer 解码器,通过因果语言建模(预测下一个 token)预训练。只有自注意力(因果掩码),没有编码器-解码器交叉注意力。
| 模型 | 层数 | 隐藏层维度 | 注意力头数 | 参数量 |
|---|---|---|---|---|
| GPT-1 | 12 | 768 | 12 | 117M |
| GPT-2 | 48 | 1600 | 25 | 1.5B |
| GPT-3 | 96 | 12288 | 96 | 175B |
| GPT-4 | 未公开 | 未公开 | 未公开 | 估计 1.8T |
T5 使用完整的编码器-解码器结构,将所有 NLP 任务统一为 Text-to-Text 格式(输入文本→输出文本)。使用 Span Corruption 预训练目标(类似 MLM 但掩码连续的 token 片段)。
| 配置 | T5-Base | T5-Large | T5-3B | T5-11B |
|---|---|---|---|---|
| 参数量 | 220M | 770M | 3B | 11B |
| 层数(编码器=解码器) | 12 | 24 | 24 | 24 |
| 768 | 1024 | 1024 | 1024 | |
| 注意力头数 | 12 | 16 | 32 | 128 |
| 模型 | 架构类型 | 核心创新 | 代表应用 |
|---|---|---|---|
| ViT | 编码器 | 图像分块为 patch 序列输入 Transformer | 图像分类、目标检测 |
| BART | 编码器-解码器 | 去噪自编码器预训练 | 文本生成、摘要、翻译 |
| XLNet | 编码器 | 排列语言模型(结合 AR 和 AE) | 文本分类、问答 |
| RoBERTa | 编码器 | BERT 的优化版(更大数据、更长训练) | 文本分类、序列标注 |
| DistilBERT | 编码器 | BERT 的知识蒸馏版(参数减少 40%) | 轻量部署 |
| ALBERT | 编码器 | 参数共享 + 分解嵌入矩阵 | 资源受限场景 |
| Longformer | 编码器 | 稀疏注意力机制(滑动窗口 + 全局) | 长文档处理 |
| BigBird | 编码器 | 随机注意力 + 滑动窗口 + 全局标记 | 超长序列 |
| GPT-NeoX | 解码器 | 并行注意力 + 旋转位置编码(RoPE) | 开源大模型(20B) |
标准注意力需要构建 的注意力矩阵,显存复杂度为 ,成为长序列的关键瓶颈。
Flash Attention (Dao et al., 2022) 的核心思想:
性能对比(在 A100 GPU 上,序列长度 2048):
| 方法 | 训练速度 | GPU 显存占用 | 最大支持长度 |
|---|---|---|---|
| 标准注意力 | 1×(基准) | 1×(基准) | ~4K |
| Flash Attention 1 | 2.0× | 0.25× | ~64K |
| Flash Attention 2 | 2.5× | 0.25× | ~128K |
| Flash Attention 3 (H100) | 3.0× | 0.2× | ~256K |
以使用预训练 BERT 进行文本分类为例:
[CLS] 和 [SEP] 标记[CLS] 位置的输出向量作为全文表示以 GPT 生成一句话为例:
输入: "<sos> The future of AI is"
输出: "bright"
逐步执行:
[<sos>, The, future, of, AI, is] 嵌入为向量[EOS]| 模型 | BLEU 分数 | 训练时间(8 GPU) | 每秒训练步数 |
|---|---|---|---|
| LSTM (2016 SOTA) | 26.8 | 3.5 天 | - |
| Transformer-Base | 27.3 | 12 小时 | ~3.2× |
| Transformer-Big | 28.4 | 3.5 天 | ~1× |
| 模型 | Perplexity | 参数 |
|---|---|---|
| LSTM + 自适应嵌入 | 35.0 | - |
| Transformer-XL | 24.0 | 257M |
| Transformer-XL + MoE | 18.3 | 1.1B (MoE) |
Transformer 通过纯粹的自注意力机制解决了序列建模的三个核心问题:串行计算瓶颈、长距离依赖困难、梯度消失。其核心组件——缩放点积注意力、多头注意力、位置编码、残差连接和层归一化——构成了现代深度学习的基础砖块。
从 2017 年的原始论文到今天的 GPT-4、Gemini、LLaMA,Transformer 架构不断演进,但其核心思想始终如一:让模型直接关注所有位置,通过层次化的注意力建立强大的表示能力。
对 AI 从业者而言,理解 Transformer 不仅意味着理解一个架构——它是理解现代自然语言处理、计算机视觉和多模态 AI 的基础。建议进一步阅读: