30秒快速回答: Transformer 是 Google 在 2017 年论文《Attention Is All You Need》中提出的神经网络架构。它用「自注意力机制」替代了传统的 RNN/LSTM,让模型能并行处理整个序列,训练速度提升数十倍。今天所有主流大模型——GPT 系列、Claude、Gemini、LLaMA、DeepSeek——都建立在 Transformer 架构之上。理解 Transformer,就理解了大模型世界的「通用语言」。
为什么 Transformer 是革命性的?
在 Transformer 之前,处理文本的主流方案是 RNN(循环神经网络)和 LSTM:
RNN 方式(串行):
「我 爱 北京 天安门」
↓ ↓ ↓ ↓
h1→h2→h3 →h4 ← 必须按顺序处理,无法并行
RNN 的核心问题是:
- 不能并行:必须一个一个词处理,训练极慢
- 长距离遗忘:处理到第 100 个词时,第 1 个词的影响已经很小了
- 梯度消失/爆炸:深层网络训练不稳定
Transformer 用「自注意力」一举解决了这三个问题:
Transformer 方式(并行):
「我 爱 北京 天安门」
↓ ↓ ↓ ↓
┌──────────────┐
│ 自注意力层 │ ← 每个词同时看所有词,完全并行
└──────────────┘
↓ ↓ ↓ ↓
自注意力机制:Transformer 的灵魂
直觉理解
想象你在读一句话:「猫吃了鱼,因为它饿了。」
当模型处理「它」这个词时,需要知道「它」指的是「猫」还是「鱼」。自注意力机制让「它」去「注视」句子中的每个词,发现「猫」与「它」的关联最强。
「它」对每个词的注意力权重:
猫: 0.89 ← 最高,所以「它」指的是猫
吃了:0.02
鱼: 0.05
因为:0.01
饿了:0.03
数学原理(三步走)
自注意力本质上是三次矩阵运算:
Step 1: 每个词生成三个向量
输入向量 x
├── 乘以 W_Q → Query(查询:我在找什么?)
├── 乘以 W_K → Key(键:我能提供什么?)
└── 乘以 W_V → Value(值:我的实际内容是什么?)
Step 2: 计算注意力分数
Score = Q × K^T / √d_k
(查询与所有键的点积,除以维度平方根做缩放)
Step 3: 加权求和
Attention = Softmax(Score) × V
(用归一化后的分数对 Value 加权求和)
图示:一个词的完整旅程
输入: 「我 爱 AI」
↓ 词嵌入 (Embedding)
[0.12, -0.45, 0.78, ...] 每个词 → 512 维向量
↓ + 位置编码 (Positional Encoding)
[0.15, -0.42, 0.81, ...] 加上位置信息
↓ 自注意力 (Self-Attention)
[0.23, -0.31, 0.65, ...] 融入上下文的表示
↓ 前馈网络 (Feed Forward)
[0.19, -0.28, 0.71, ...] 非线性变换
↓ 输出
每个词的新向量中包含了整句话的信息
Encoder-Decoder:完整的 Transformer 结构
原始 Transformer 由编码器(Encoder)和解码器(Decoder)两部分组成:
┌──────────────────┐
│ 输出:「AI」 │
└────────▲─────────┘
│
┌────────────┴────────────┐
│ Decoder × N │
│ ┌───────────────────┐ │
│ │ Masked Self-Attn │ │ ← 只看已生成的词
│ │ Cross-Attention │ │ ← 看 Encoder 的输出
│ │ Feed Forward │ │
│ └───────────────────┘ │
└────────────▲────────────┘
│
┌────────────┴────────────┐
│ Encoder × N │
│ ┌───────────────────┐ │
│ │ Self-Attention │ │ ← 每个词看所有词
│ │ Feed Forward │ │
│ └───────────────────┘ │
└────────────▲────────────┘
│
「我 爱 AI !」
Encoder(编码器)的职责
- 读入整个输入序列
- 通过自注意力理解词与词之间的关系
- 输出包含上下文信息的表示
Decoder(解码器)的职责
- 逐词生成输出
- Masked Self-Attention:生成第 N 个词时只能看到前 N-1 个词(防止「作弊」)
- Cross-Attention:生成时参考 Encoder 的完整理解
GPT 与 BERT:Transformer 的两大分支
2018 年,OpenAI 和 Google 分别对原始 Transformer 做了不同的「截取」,形成了两大流派:
原始 Transformer
├── Encoder + Decoder(完整版,用于翻译)
│
├── 只用 Decoder → GPT 系列
│ 特点:单向(从左到右),自回归生成
│ 擅长:文本生成、对话、代码补全
│ 代表:GPT-4o, GPT-5.6, LLaMA, DeepSeek
│
└── 只用 Encoder → BERT 系列
特点:双向(同时看左右),理解型
擅长:文本分类、命名实体识别、情感分析
代表:BERT, RoBERTa, DeBERTa
| 维度 | GPT(Decoder-only) | BERT(Encoder-only) |
|---|---|---|
| 阅读方向 | 单向(左→右) | 双向(左右同时) |
| 训练目标 | 预测下一个词 | 预测被遮住的词(MLM) |
| 核心能力 | 生成 | 理解 |
| 代表任务 | 对话、写作、代码 | 分类、NER、问答 |
| 2026 年地位 | 绝对主流 | 垂类任务仍在使用 |
为什么 GPT 架构成了主流? 因为「生成」是比「理解」更通用的能力——一个会生成的模型也可以通过 prompt 来做理解任务,但理解型模型无法做生成。
实战:用 PyTorch 实现一个微型 Transformer
import torch
import torch.nn as nn
import math
class MultiHeadAttention(nn.Module):
"""多头注意力:自注意力的核心实现"""
def __init__(self, d_model=512, n_heads=8):
super().__init__()
assert d_model % n_heads == 0
self.d_model = d_model
self.n_heads = n_heads
self.d_k = d_model // n_heads
# Q、K、V 的投影矩阵
self.W_Q = nn.Linear(d_model, d_model)
self.W_K = nn.Linear(d_model, d_model)
self.W_V = nn.Linear(d_model, d_model)
self.W_O = nn.Linear(d_model, d_model)
def forward(self, x, mask=None):
batch_size, seq_len, _ = x.shape
# Step 1: 生成 Q、K、V
Q = self.W_Q(x).view(batch_size, seq_len, self.n_heads, self.d_k).transpose(1, 2)
K = self.W_K(x).view(batch_size, seq_len, self.n_heads, self.d_k).transpose(1, 2)
V = self.W_V(x).view(batch_size, seq_len, self.n_heads, self.d_k).transpose(1, 2)
# Step 2: 计算注意力分数
scores = torch.matmul(Q, K.transpose(-2, -1)) / math.sqrt(self.d_k)
if mask is not None:
scores = scores.masked_fill(mask == 0, -1e9)
# Step 3: Softmax + 加权求和
attention = torch.softmax(scores, dim=-1)
output = torch.matmul(attention, V)
# 合并多头并投影
output = output.transpose(1, 2).contiguous().view(batch_size, seq_len, self.d_model)
return self.W_O(output)
class TransformerBlock(nn.Module):
"""一个 Transformer 层 = 自注意力 + 前馈网络"""
def __init__(self, d_model=512, n_heads=8, d_ff=2048, dropout=0.1):
super().__init__()
self.attention = MultiHeadAttention(d_model, n_heads)
self.norm1 = nn.LayerNorm(d_model)
self.norm2 = nn.LayerNorm(d_model)
self.ff = nn.Sequential(
nn.Linear(d_model, d_ff),
nn.ReLU(),
nn.Linear(d_ff, d_model)
)
self.dropout = nn.Dropout(dropout)
def forward(self, x, mask=None):
# 自注意力 + 残差连接 + 层归一化
attn_output = self.attention(x, mask)
x = self.norm1(x + self.dropout(attn_output))
# 前馈网络 + 残差连接 + 层归一化
ff_output = self.ff(x)
x = self.norm2(x + self.dropout(ff_output))
return x
class MiniGPT(nn.Module):
"""一个极简的 GPT 风格 Transformer"""
def __init__(self, vocab_size=10000, d_model=512, n_heads=8,
n_layers=6, max_len=1024):
super().__init__()
self.token_embedding = nn.Embedding(vocab_size, d_model)
self.position_embedding = nn.Embedding(max_len, d_model)
self.blocks = nn.ModuleList([
TransformerBlock(d_model, n_heads) for _ in range(n_layers)
])
self.ln_final = nn.LayerNorm(d_model)
self.lm_head = nn.Linear(d_model, vocab_size) # 预测下一个词
def forward(self, token_ids):
batch_size, seq_len = token_ids.shape
# Token 嵌入 + 位置嵌入
positions = torch.arange(seq_len, device=token_ids.device).unsqueeze(0)
x = self.token_embedding(token_ids) + self.position_embedding(positions)
# GPT 的因果掩码(每个位置只能看到之前的 Token)
mask = torch.tril(torch.ones(seq_len, seq_len)).view(1, 1, seq_len, seq_len)
for block in self.blocks:
x = block(x, mask)
x = self.ln_final(x)
return self.lm_head(x) # [batch, seq_len, vocab_size]
# 使用示例
model = MiniGPT(vocab_size=10000)
dummy_input = torch.randint(0, 10000, (2, 128)) # batch=2, seq_len=128
output = model(dummy_input)
print(f"输入形状: {dummy_input.shape}") # [2, 128]
print(f"输出形状: {output.shape}") # [2, 128, 10000]
print(f"参数量: {sum(p.numel() for p in model.parameters()) / 1e6:.1f}M")
输出:
输入形状: torch.Size([2, 128])
输出形状: torch.Size([2, 128, 10000])
参数量: 20.7M
输出的 [2, 128, 10000] 表示:对于 batch 中的 2 个样本,每个样本的 128 个位置,模型预测了词汇表中 10000 个词的概率分布——即「下一个词最可能是什么」。
为什么 Transformer 能 Scale?
Transformer 的成功不仅在于结构巧妙,更在于它天然适合大规模并行训练:
| 特性 | RNN/LSTM | Transformer |
|---|---|---|
| 并行度 | 串行(O(n) 时间步) | 完全并行(O(1) 时间步) |
| 长距离依赖 | 通过隐藏状态传递(衰减) | 直接注意力连接(无衰减) |
| 显存效率 | 高(只需存当前状态) | 低(需存注意力矩阵 O(n²)) |
| 扩展性 | 差(深层难训练) | 极好(已验证至数千层) |
Transformer 的 O(n²) 注意力计算是主要瓶颈,这也是 FlashAttention、稀疏注意力、Mamba(状态空间模型)等后续优化试图解决的问题。
常见问题
Q: Transformer 和 GPT 是一个东西吗?
不是。Transformer 是架构(图纸),GPT 是基于 Transformer 的一种具体实现(Decoder-only)。就像「内燃机」和「某款汽车」的关系。
Q: 位置编码为什么必要?
Transformer 的注意力机制不关心词的顺序——「A B C」和「C B A」对它来说是一样的输入集合。位置编码给每个词注入位置信息,让模型知道「谁在前谁在后」。
Q: 为什么现在主流都是 Decoder-only?
从工程角度看:Decoder-only 结构更简单(少一半参数)、训练更稳定(单向注意力的梯度流更好)、且 Scaling Law 验证充分。从能力角度看:生成能力可以覆盖理解任务,但反过来不行。
Q: Transformer 会被替代吗?
2026 年,Mamba、RWKV 等线性注意力架构在长序列场景下展现了优势,但在通用能力上仍未超越 Transformer。短期内,Transformer + 混合架构(如 Jamba:Transformer + Mamba)是更现实的方向。
下一步建议: 把本文中的 MiniGPT 代码复制到 Colab 运行,尝试改 n_layers 和 n_heads 参数,观察参数量的变化。然后阅读原始论文《Attention Is All You Need》——只有 15 页,但奠定了整个大模型时代的基础。