Transformer 全面介绍:从原理到应用

摘要:Transformer 自 2017 年提出以来,已成为深度学习领域最具影响力的架构之一。本文从注意力机制出发,深入剖析 Transformer 的核心原理、模型结构、训练细节及主流变体(BERT、GPT 系列、T5 等),并梳理其在 NLP、CV、多模态等领域的广泛应用。无论你是初学者还是从业者,这篇文章都能帮你建立对 Transformer 的完整认知体系。


目录

  1. 背景:从 RNN 到 Transformer

  2. 核心概念:Self-Attention 详解

  3. Multi-Head Attention(多头注意力)

  4. 位置编码(Positional Encoding)

  5. Transformer 整体架构

  6. 训练与推理细节

  7. 主流变体与演进

  8. 应用场景全景

  9. 优势与局限

  10. 实战建议与面试要点

  11. 参考资料


1. 背景:从 RNN 到 Transformer

1.1 序列建模的困境

在 Transformer 出现之前,序列建模(机器翻译、语音识别、文本生成等)几乎被 RNN/LSTM/GRU 统治。这些循环网络的核心问题是:

问题说明
串行计算第 t 步依赖第 t-1 步的隐藏状态,无法并行,训练缓慢
长程依赖衰减虽然 LSTM/GRU 引入了门控机制,但当序列长度超过 ~50 时,梯度仍会消失或爆炸
信息瓶颈所有历史信息被压缩到一个固定大小的隐藏向量中

1.2 Attention 的萌芽

2014-2015 年,Bahdanau 等人将注意力机制(Attention)引入 Seq2Seq 模型,让解码器在每一步都能"回顾"编码器的所有隐藏状态,而不是只依赖最后一个。这显著改善了长句翻译效果——但架构的骨架仍是 RNN。

1.3 "Attention Is All You Need"

2017 年,Google 的 Vaswani 等人在论文《Attention Is All You Need》中提出Transformer,完全抛弃了循环结构,仅依赖自注意力机制(Self-Attention)和前馈网络。核心思想:序列中任意两个位置之间的交互成本为常数 O(1),直接打通了全局信息流。

这篇论文彻底改变了深度学习的格局——"Attention Is All You Need" 也成为 NeurIPS 论文中被引用最多的标题之一。


2. 核心概念:Self-Attention 详解

2.1 直观理解

Self-Attention 让序列中的每个词都能"看到"序列中的所有其他词,并学习到哪些词与当前词相关

以句子"The animal didn't cross the street because it was too tired"为例——Self-Attention 能够学会让 "it" 更多地关注 "animal"(而不是 "street"),从而消解指代歧义。

2.2 数学推导

Step 1:生成 Q、K、V 矩阵

给定输入序列 ​(n 为序列长度,d_model 为嵌入维度),通过三个可学习的权重矩阵变换:

其中 ​,​。通常 ​(h 为注意力头数)。

矩阵含义类比
Q (Query)"我在找什么?"搜索词
K (Key)"我是什么?"索引标签
V (Value)"我包含什么信息?"实际内容
Step 2:计算注意力分数

逐步拆解:

  1. :计算每对位置之间的"匹配分数"(内积)。结果形状为 ​。

  2. :缩放因子,防止内积值过大导致 softmax 进入饱和区(梯度接近 0)。假设 Q、K 各分量独立且均值为 0、方差为 1,则内积方差为 ​,除以 ​ 将方差拉回 1。

  3. softmax:将分数转换为概率分布(每行和为 1)。

  4. :用注意力权重对 Value 加权求和,得到"该位置看到了全局信息之后的表示"。

Step 3:代码实现
import torch import torch.nn.functional as F ​ def scaled_dot_product_attention(Q, K, V, mask=None): """ Q, K, V: (batch, num_heads, seq_len, d_k) mask: (batch, 1, seq_len, seq_len) or None """ d_k = Q.size(-1) scores = torch.matmul(Q, K.transpose(-2, -1)) / (d_k ** 0.5) ​ if mask is not None: scores = scores.masked_fill(mask == 0, -1e9) ​ attn_weights = F.softmax(scores, dim=-1) output = torch.matmul(attn_weights, V) return output, attn_weights

2.3 掩码机制

Transformer 中使用两种掩码:

掩码类型用途位置
Padding Mask忽略填充的<pad>位置(将对应分数设为 -∞)Encoder 和 Decoder
Causal Mask (Look-ahead Mask)防止 Decoder"偷看"未来位置,保证自回归生成Decoder 的 Self-Attention

Causal Mask 是一个上三角矩阵(上三角为 -∞,下三角为 0):

[[ 0, -∞, -∞, -∞], [ 0, 0, -∞, -∞], [ 0, 0, 0, -∞], [ 0, 0, 0, 0]]

3. Multi-Head Attention(多头注意力)

3.1 动机

单头注意力可能只捕捉到一种关系模式(例如"主语-动词"关系),但语言中同时存在多种关系(句法、语义、共指、位置……)。Multi-Head Attention 并行运行多个独立的 Attention,让模型从不同子空间学习不同类型的依赖。

3.2 数学形式

每个 head 在降维后的子空间独立做 Attention,最后拼接并通过 ​ 投影回原维度。

3.3 实现

class MultiHeadAttention(torch.nn.Module): def __init__(self, d_model, num_heads): super().__init__() assert d_model % num_heads == 0 self.d_model = d_model self.num_heads = num_heads self.d_k = d_model // num_heads ​ self.W_Q = torch.nn.Linear(d_model, d_model) self.W_K = torch.nn.Linear(d_model, d_model) self.W_V = torch.nn.Linear(d_model, d_model) self.W_O = torch.nn.Linear(d_model, d_model) ​ def forward(self, Q, K, V, mask=None): batch_size = Q.size(0) ​ # (batch, seq_len, d_model) -> (batch, num_heads, seq_len, d_k) Q = self.W_Q(Q).view(batch_size, -1, self.num_heads, self.d_k).transpose(1, 2) K = self.W_K(K).view(batch_size, -1, self.num_heads, self.d_k).transpose(1, 2) V = self.W_V(V).view(batch_size, -1, self.num_heads, self.d_k).transpose(1, 2) ​ attn_out, _ = scaled_dot_product_attention(Q, K, V, mask) ​ # (batch, num_heads, seq_len, d_k) -> (batch, seq_len, d_model) attn_out = attn_out.transpose(1, 2).contiguous().view(batch_size, -1, self.d_model) return self.W_O(attn_out)

4. 位置编码(Positional Encoding)

4.1 为什么需要

Self-Attention 是置换等变(permutation-equivariant)的——打乱输入顺序,输出只跟着打乱,不会产生不同的值。这意味着模型本身不知道词的顺序。必须显式注入位置信息。

4.2 正弦位置编码(Sinusoidal PE)

原论文使用固定的正弦/余弦函数,无需学习:

设计思想

  • 每个维度对应不同频率的正弦波(波长从 ​ 到 ​)

  • 低频维度区分"大范围段落位置",高频维度区分"相邻词的微调顺序"

  • 对于任意固定偏移 k,​ 可表示为 ​ 的线性函数——这让模型理论上能学会相对位置关系

def sinusoidal_positional_encoding(max_len, d_model): pe = torch.zeros(max_len, d_model) position = torch.arange(0, max_len).unsqueeze(1).float() div_term = torch.exp( torch.arange(0, d_model, 2).float() * -(torch.log(torch.tensor(10000.0)) / d_model) ) pe[:, 0::2] = torch.sin(position * div_term) pe[:, 1::2] = torch.cos(position * div_term) return pe

4.3 可学习位置编码

BERT、GPT 等模型使用可学习的位置嵌入(Learned Positional Embedding),将位置当作一个特殊的词来查表。优点是让模型自己决定最优编码方式;缺点是外推能力受限——训练时最大 512,推理时扩展到 1024 效果可能下降。

4.4 现代方案:RoPE(旋转位置编码)

RoPE(Rotary Position Embedding)是当前主流 LLM(LLaMA、Qwen、ChatGLM 等)的首选。它通过旋转矩阵将位置信息融入 Q 和 K 的计算:

  • 相对位置自然编码:旋转角度的差隐含了相对位置关系

  • 外推性好:配合 NTK-aware 缩放,可平滑扩展到远超训练长度的上下文

  • 不占用额外维度:不改变嵌入维度

def apply_rotary_pos_emb(q, k, cos, sin): """q, k: (batch, num_heads, seq_len, d_k)""" def rotate_half(x): x1, x2 = x[..., :x.shape[-1]//2], x[..., x.shape[-1]//2:] return torch.cat([-x2, x1], dim=-1) ​ q_embed = (q * cos) + (rotate_half(q) * sin) k_embed = (k * cos) + (rotate_half(k) * sin) return q_embed, k_embed

面试常考点:RoPE vs 正弦 PE vs 可学习 PE 的优缺点、ALiBi 与 RoPE 的区别。

4.5 ALiBi(Attention with Linear Biases)

另一种思路——不给输入加位置编码,而是直接给 Attention 分数加一个与距离成正比的偏置:

其中 ​,​ 是头特定的斜率。ALiBi 在 BLOOM 等模型中使用,外推能力极强,训练 1024 可直接推理 2048 甚至更长。


5. Transformer 整体架构

5.1 宏观结构

┌──────────────┐ ┌──────────────┐ │ Encoder │ │ Decoder │ │ │ │ │ Input →│ Embedding │ │ Embedding │← Output (shifted right) │ + PE │ │ + PE │ │ │ │ │ │ ┌────────┐ │ │ ┌────────┐ │ │ │ MHA │ │ │ │Masked │ │ │ │(Self) │ │ │ │ MHA │ │ │ └────────┘ │ │ │(Self) │ │ │ │ │ │ └────────┘ │ │ ┌────────┐ │ │ │ │ │ │ Add & │ │ │ ┌────────┐ │ │ │ Norm │ │ │ │ Cross │ │ │ └────────┘ │ │ │ MHA │←─┴── Encoder 输出 │ │ │ │ └────────┘ │ │ ┌────────┐ │ │ │ │ │ │ FFN │ │ │ ┌────────┐ │ │ └────────┘ │ │ │ Add & │ │ │ │ │ │ │ Norm │ │ │ ┌────────┐ │ │ └────────┘ │ │ │ Add & │ │ │ │ │ │ │ Norm │ │ │ ┌────────┐ │ │ └────────┘ │ │ │ FFN │ │ │ │ │ └────────┘ │ │ × N 次 │ │ │ │ │ │ │ ┌────────┐ │ └──────────────┘ │ │ Add & │ │ │ │ Norm │ │ │ └────────┘ │ │ │ │ × N 次 │ │ │ │ Linear + │ │ Softmax │→ Output └──────────────┘

5.2 各组件详解

Encoder 层(重复 N 次)

每层包含两个子层:

(1) Multi-Head Self-Attention:让每个位置聚合整个输入序列的信息。

(2) Feed-Forward Network (FFN):对每个位置独立做非线性变换(位置间不交互):

或使用 GELU / SwiGLU 等激活函数。​ 通常设为 ​(例如 d_model=512,d_ff=2048)。

思考:为什么需要 FFN?Self-Attention 是线性的加权求和(除了 softmax),FFN 提供非线性变换能力,让每个位置的表示更丰富。没有 FFN,多层 Attention 的复合仍然是线性的。

Decoder 层(重复 N 次)

每层包含三个子层:

  1. Masked Multi-Head Self-Attention:加 Causal Mask,防止注意到未来位置

  2. Cross-Attention(Encoder-Decoder Attention):Q 来自 Decoder,K、V 来自 Encoder 输出——让 Decoder 从源序列中提取信息

  3. FFN:同 Encoder

残差连接与层归一化
  • 残差连接(Add):​,缓解深层网络的梯度消失

  • 层归一化(LayerNorm):在特征维度做归一化(区别于 BatchNorm 在 batch 维度)。Post-LN(原论文)在每个子层之后做 LN;Pre-LN(现代 LLM 首选)在每个子层之前做 LN,训练更稳定

面试常考点:Post-LN vs Pre-LN 的区别及为什么 Pre-LN 训练更稳定。

5.3 重要超参数

参数原论文 (base)原论文 (big)GPT-3LLaMA-7B
5121024122884096
204840964915211008
头数 h8169632
层数 N669632
参数量~65M~213M175B7B

6. 训练与推理细节

6.1 训练目标

教师强制(Teacher Forcing)

训练 Decoder 时,不使用上一时刻的预测作为输入,而是直接使用真实标签(ground truth)。这加速收敛、避免错误累积。

损失函数:交叉熵

实际计算时,Padding 位置的 loss 会被忽略(mask 掉)。

6.2 优化技巧

  1. Adam 优化器+ 自定义学习率调度(Warmup + Decay):​

  2. 标签平滑(Label Smoothing):将 one-hot 真值变为 ​ + 正确标签处 ​,防止过自信,提高泛化(虽然近年有争议)。

  3. Dropout:在 Attention 权重、FFN 激活、残差连接等多处使用。

  4. 混合精度训练(AMP):使用 FP16 + 动态 loss scaling,在保持精度的同时大幅降低显存和加速训练。

6.3 推理:自回归生成

推理时,Decoder 逐 Token 生成。常用解码策略:

策略描述适用场景
Greedy每步选概率最高的 Token确定性任务(如翻译)
Beam Search保留 k 条最优路径,最终选整体概率最高的翻译、摘要(偏保守)
Top-k Sampling从概率最高的 k 个 Token 中采样开放生成
Top-p (Nucleus)从累计概率 ≥ p 的最小 Token 集合中采样GPT 系列默认方案
Temperature除以温度 T 后再 softmax,T>1 更随机、T<1 更确定控制生成多样性

6.4 推理加速:KV Cache

自回归推理时,每个新 Token 需要与所有历史 Token 做 Attention。朴素做法会重复计算历史 Token 的 K 和 V——KV Cache将历史 K、V 缓存,新 Token 只需计算自身的 Q、K、V 并追加到缓存中。这使解码复杂度从 ​ 降至 ​。

# 伪代码:使用 KV Cache 的增量推理 if step == 0: K_cache = K V_cache = V else: K_cache = torch.cat([K_cache, new_K], dim=-2) V_cache = torch.cat([V_cache, new_V], dim=-2) ​ attn_out = attention(new_Q, K_cache, V_cache)

KV Cache 是 LLM 推理的核心优化之一,也是 FlashAttention、PagedAttention(vLLM)等技术发挥作用的基础。


7. 主流变体与演进

7.1 仅 Encoder 架构:BERT 家族

BERT(Bidirectional Encoder Representations from Transformers),2018 年由 Google 提出。

特点说明
架构仅使用 Transformer Encoder
训练方式MLM(Masked Language Model)+ NSP(Next Sentence Prediction)
核心思想双向上下文感知——预测被遮住的词
规模BERT-base (110M) / BERT-large (340M)

代表模型:BERT → RoBERTa(更大数据、更长训练)→ ALBERT(参数共享)→ DeBERTa(解耦注意力)→ ELECTRA(生成-判别)→ ModernBERT(2025 年新作)

适用任务:文本分类、命名实体识别(NER)、文本匹配、问答(抽取式)、句子嵌入(Sentence-BERT)。

7.2 仅 Decoder 架构:GPT 家族

GPT(Generative Pre-trained Transformer),2018 年起由 OpenAI 发布。

特点说明
架构仅使用 Transformer Decoder(去掉 Cross-Attention)
训练方式自回归语言建模(预测下一个 Token)
核心思想大规模生成式预训练 + 上下文学习(In-Context Learning)

演进路线:GPT-1 → GPT-2(zero-shot 能力初现)→ GPT-3(175B,少样本学习)→ GPT-4(多模态、推理能力)→ GPT-4o / GPT-5

开源代表:LLaMA 系列(Meta)、Mistral、Qwen(阿里)、DeepSeek、ChatGLM(智谱)。

7.3 Encoder-Decoder 架构:T5 与 BART

模型特点
T5(Text-to-Text Transfer Transformer)将所有 NLP 任务统一为 Text-to-Text 格式("translate English to German: Hello" → "Hallo")
BARTEncoder 学习去噪(重构被破坏的文本),Decoder 自回归生成。擅长文本生成与摘要

7.4 Vision Transformer (ViT)

2020 年,Dosovitskiy 等人将 Transformer 引入 CV 领域:

  • 将图像切分为固定大小的 Patch(如 16×16)

  • 每个 Patch 线性投影为向量,加上位置编码

  • 用标准 Transformer Encoder 处理

  • 在大规模数据上预训练后,超越 CNN(ResNet)的效果

后续发展:Swin Transformer(引入层次化和窗口注意力)、DINO/DINOv2(自监督视觉特征学习,效果惊人)。

7.5 多模态模型

模型架构思路
CLIP (OpenAI)双塔:文本 Encoder + 图像 Encoder,对比学习对齐两个模态
LLaVA视觉 Encoder → 投影层 → LLM,构建多模态对话能力
GPT-4V / GPT-4o原生多模态,统一处理文本和图像输入
Sora (OpenAI)用 Diffusion Transformer (DiT) 生成视频,将视频视为时空 Patch 序列

7.6 高效 Transformer 变体

Self-Attention 的 ​ 复杂度是其核心瓶颈。学术界提出大量改进方案:

方法核心思路代表
稀疏注意力只计算局部或模式化的交互Sparse Transformer, Longformer
低秩近似用低秩矩阵近似 AttentionLinformer
核方法改写 Attention 计算顺序Performer
FlashAttentionI/O 感知的 CUDA 实现,利用 SRAM 分块计算FlashAttention-2/3
状态空间模型 (SSM)完全摒弃 Attention,用结构化状态空间序列建模Mamba, Mamba-2

2024-2025 年,Mamba 等 SSM 模型引起了大量讨论——它在长序列上推理效率远超 Transformer,但在某些任务上仍不及同规模的 Transformer。


8. 应用场景全景

8.1 自然语言处理(NLP)

任务典型应用技术路线
文本分类情感分析、垃圾邮件检测、主题分类BERT/RoBERTa 微调
命名实体识别信息抽取、病历结构化BERT + CRF / GlobalPointer
机器翻译Google Translate, DeepLEncoder-Decoder Transformer
文本摘要新闻摘要、会议纪要BART / PEGASUS / GPT
问答系统客服机器人、知识库检索RAG = Embedding 检索 + GPT 生成
代码生成GitHub Copilot, CursorGPT/Codex/CodeGemma 微调
对话系统ChatGPT, Claude, 文心一言GPT/LLaMA + RLHF/DPO 对齐

8.2 计算机视觉(CV)

任务应用方法
图像分类内容审核、医学影像ViT, Swin Transformer
目标检测自动驾驶、安防监控DETR (Detection Transformer)
图像分割医学影像、遥感MaskFormer, SAM (Segment Anything)
图像生成AI 绘图DiT (Diffusion Transformer), Stable Diffusion 3
视频理解动作识别、视频问答TimeSformer, VideoMAE

8.3 多模态与跨模态

场景说明
图文检索CLIP 将图像和文本映射到同一语义空间
图像描述 (Image Captioning)给定图片,生成描述文字
视觉问答 (VQA)给定图片 + 问题,生成回答
文生图 (Text-to-Image)DALL·E 3, Stable Diffusion, Midjourney
语音-文本Whisper (语音识别), VALL-E (语音合成)

8.4 科学计算与行业应用

领域应用模型示例
生物医药蛋白质结构预测、药物分子设计AlphaFold2/3 (含 Transformer 组件)
金融量化交易信号、研报分析FinBERT, BloombergGPT
法律合同审查、判决预测法律领域微调 LLM
教育智能批改、知识点图谱EduBERT, 教育垂直 LLM
自动驾驶轨迹预测、多传感器融合Wayformer, UniAD

9. 优势与局限

9.1 核心优势

优势说明
全局感受野每个位置直接访问所有位置,O(1) 的路径长度
高度并行训练时所有位置同时计算,充分利用 GPU
可扩展性模型规模与数据量持续增长时性能持续提升(Scaling Law)
通用性同一架构覆盖文本、图像、语音、视频、蛋白质等多个模态
可解释性注意力权重可视化,能直观看到"模型在关注什么"

9.2 核心局限

局限说明缓解方案
​ 复杂度Self-Attention 的时空复杂度与序列长度平方成正比FlashAttention、稀疏/线性 Attention、SSM
长上下文挑战原生上下文有限(512-2048)RoPE 外推、位置插值、Ring Attention
推理成本高大模型推理需要大量显存和计算量化(GPTQ/AWQ)、KV Cache 压缩、MoE 稀疏化
幻觉问题LLM 可能生成虚假但看似合理的内容RAG 检索增强、G-Eval/DeepEval 评估、RLHF
训练数据依赖质量和多样性直接影响性能,且可能涉及版权/隐私争议数据质量过滤、合成数据、联邦学习
推理能力有限纯自回归模型在数学推理、多步规划等方面仍有短板Chain-of-Thought、Code Interpreter、Agent 框架

10. 实战建议与面试要点

10.1 学习路径建议

  1. 第一阶段(理解原理):手写 Self-Attention 和 Positional Encoding 的实现,用 PyTorch 搭一个 mini Transformer 训练字符级语言模型。

  2. 第二阶段(工程实践):使用 HuggingFace Transformers 微调 BERT/GPT-2,熟悉 Tokenizer、Trainer、数据集构建全流程。

  3. 第三阶段(前沿跟进):阅读 LLaMA、Mistral 等模型的技术报告,了解 RoPE、SwiGLU、RMS Norm、GQA 等现代设计选择,尝试 LoRA/QLoRA 微调开源 LLM。

  4. 第四阶段(系统优化):学习 FlashAttention、vLLM、量化部署、RAG 架构、Agent 设计模式。

10.2 高频面试题

  1. Self-Attention 的计算公式,为什么除以 ​?

  2. Multi-Head Attention 为什么有效?单头和多头的区别?

  3. 位置编码有哪些方案?RoPE 的原理和优点?

  4. Transformer 的 Encoder 和 Decoder 有什么区别?

  5. BERT 和 GPT 的核心区别是什么?为什么 GPT 更适合生成?

  6. LayerNorm 和 BatchNorm 的区别?为什么 Transformer 用 LayerNorm?

  7. Transformer 训练时为什么要做 Mask?Padding Mask 和 Causal Mask 分别怎么实现?

  8. 推理时的 KV Cache 是什么?为什么能加速?

  9. Transformer 的复杂度分析——时间、空间分别是什么?

  10. FlashAttention 加速原理(I/O 感知,分块计算)【社招高频】


11. 参考资料

#文献
1Vaswani et al.,Attention Is All You Need, NeurIPS 2017
2Devlin et al.,BERT: Pre-training of Deep Bidirectional Transformers, NAACL 2019
3Radford et al.,Language Models are Unsupervised Multitask Learners(GPT-2), 2019
4Brown et al.,Language Models are Few-Shot Learners(GPT-3), NeurIPS 2020
5Dosovitskiy et al.,An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale(ViT), ICLR 2021
6Raffel et al.,Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer(T5), JMLR 2020
7Su et al.,RoFormer: Enhanced Transformer with Rotary Position Embedding, 2021
8Dao et al.,FlashAttention: Fast and Memory-Efficient Exact Attention, NeurIPS 2022
9Touvron et al.,LLaMA: Open and Efficient Foundation Language Models, 2023
10Gu & Dao,Mamba: Linear-Time Sequence Modeling with Selective State Spaces, 2023

写在最后:Transformer 远不只是一个模型——它是一种设计哲学:让信息在全局自由流动,用注意力替代一切结构化归纳偏置。从 2017 年的机器翻译论文,到 2025 年支撑整个 AI 产业的基石架构,Transformer 的故事还远未结束。希望这篇文章能帮你扎实理解其原理,在面试和实战中游刃有余。


本文由作者基于原始论文、开源项目及个人实践整理编写,转载请注明出处。如需交流讨论,欢迎在评论区留言。