Transformer 的诞生

2017 年,Google 发表了划时代论文《Attention Is All You Need》,提出了 Transformer 架构。它彻底改变了 NLP 领域,成为现代大语言模型的基石。

核心思想:自注意力机制

传统 RNN 的问题

RNN 处理序列:
h1 = f(x1, h0)
h2 = f(x2, h1)
h3 = f(x3, h2)
...
hn = f(xn, hn-1)

问题:
1. 顺序计算,无法并行
2. 长距离依赖难以捕捉
3. 梯度消失/爆炸

自注意力机制

自注意力计算:
Q = X * Wq  (查询矩阵)
K = X * Wk  (键矩阵)
V = X * Wv  (值矩阵)

Attention(Q, K, V) = softmax(Q * K^T / √dk) * V

示例:
输入: "我 爱 中国"
Q: [0.2, 0.8, 0.1]  ← 每个词对其他词的"关注度"
K: [0.3, 0.6, 0.4]
V: [0.1, 0.4, 0.2]

结果: 每个词都融合了整个序列的信息

多头注意力

多头注意力:
Head 1: Attention(Q*W1, K*W1, V*W1)  ← 关注语法
Head 2: Attention(Q*W2, K*W2, V*W2)  ← 关注语义
Head 3: Attention(Q*W3, K*W3, V*W3)  ← 关注上下文
...
Head h: Attention(Q*Wh, K*Wh, V*Wh)

输出: Concat(Head1, Head2, ..., Headh) * Wo

Transformer 架构

编码器-解码器结构

Transformer:
┌─────────────────────────────────────┐
│           解码器 (Decoder)           │
│  ┌─────────────────────────────┐   │
│  │    掩码多头注意力             │   │
│  └─────────────────────────────┘   │
│  ┌─────────────────────────────┐   │
│  │    交叉注意力               │   │
│  └─────────────────────────────┘   │
│  ┌─────────────────────────────┐   │
│  │    前馈网络                 │   │
│  └─────────────────────────────┘   │
├─────────────────────────────────────┤
│           编码器 (Encoder)          │
│  ┌─────────────────────────────┐   │
│  │    多头注意力               │   │
│  └─────────────────────────────┘   │
│  ┌─────────────────────────────┐   │
│  │    前馈网络                 │   │
│  └─────────────────────────────┘   │
└─────────────────────────────────────┘

位置编码

正弦位置编码:
PE(pos, 2i) = sin(pos / 10000^(2i/d))
PE(pos, 2i+1) = cos(pos / 10000^(2i/d))

示例 (d=4):
位置 0: [0, 1, 0, 1]
位置 1: [0.84, 0.54, 0.84, 0.54]
位置 2: [0.91, 0.41, 0.91, 0.41]

作用: 让模型知道每个词的位置

GPT 系列演进

GPT-1 (2018)

架构:
- 12 层 Transformer 解码器
- 117M 参数
- 预训练 + 微调范式

训练:
1. 预训练: 在大规模语料上预测下一个词
2. 微调: 在特定任务上训练

局限:
- 参数量小
- 通用能力有限

GPT-2 (2019)

架构:
- 48 层 Transformer 解码器
- 1.5B 参数
- 零样本学习

创新:
1. 更大的模型容量
2. 证明了规模的重要性
3. 引发了 AI 安全讨论

GPT-3 (2020)

架构:
- 96 层 Transformer 解码器
- 175B 参数
- 少样本学习 (In-Context Learning)

能力涌现:
1. 少样本学习: 只给几个示例就能完成任务
2. 零样本泛化: 不需要训练就能处理新任务
3. 涌现能力: 规模带来的质变

GPT-4 (2023)

特点:
- 多模态: 支持图像和文本输入
- 更长上下文: 8K/32K/128K tokens
- 更强推理: 改进的逻辑推理能力
- 更安全: 更好的对齐和安全控制

训练技术

预训练目标

因果语言建模 (Causal LM):
输入: "我 爱 中"
目标: "爱 中 国"

训练目标: P(爱|我) * P(中|我,爱) * P(国|我,爱,中)

损失函数: -log P(下一个词 | 上下文)

对齐技术

RLHF (人类反馈强化学习):
1. 监督微调 (SFT): 用人工标注数据训练
2. 奖励模型 (RM): 学习人类偏好
3. PPO 优化: 使用强化学习优化策略

示例:
人类标注: 回答A > 回答B
奖励模型: 学习这个偏好
PPO: 调整模型参数,生成更符合偏好的回答

推理优化

KV Cache

问题:
每个 token 都需要重新计算所有层的 K 和 V
计算复杂度: O(n²)

解决:
缓存已计算的 K 和 V
新 token 只需要计算自己的 Q
计算复杂度: O(n)

内存占用:
每层: 2 * seq_len * hidden_dim * precision
总内存: n_layers * 2 * seq_len * hidden_dim * precision

量化

FP32 → FP16:
内存减半,精度损失小

FP32 → INT8:
内存减 4 倍,需要校准

FP32 → INT4:
内存减 8 倍,精度损失较大

GPTQ/AWQ:
训练时量化,保持精度

面试常见问题

  1. Transformer 为什么比 RNN 好?

    • 并行计算: 所有位置同时计算
    • 长距离依赖: 自注意力直接连接任意位置
    • 梯度稳定: 不存在梯度消失问题
  2. 自注意力的复杂度?

    • 时间复杂度: O(n² * d)
    • 空间复杂度: O(n²)
    • n 是序列长度,d 是隐藏维度
  3. 为什么 GPT 用解码器而不用编码器?

    • 解码器支持自回归生成
    • 编码器用于理解,解码器用于生成
    • GPT 的目标是生成文本
  4. 涌现能力是什么?

    • 模型规模达到一定程度后突然出现的能力
    • 小模型没有,大模型有
    • 例: 少样本学习、复杂推理

实战: 使用 Transformers

from transformers import AutoTokenizer, AutoModelForCausalLM

# 加载模型
model_name = "gpt2"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(model_name)

# 生成文本
input_text = "The future of AI is"
inputs = tokenizer(input_text, return_tensors="pt")
outputs = model.generate(**inputs, max_length=50)
print(tokenizer.decode(outputs[0]))