02: 预训练语言模型
核心主题:BERT、GPT、T5、LLaMA 的设计哲学与技术细节
来源:Happy-LLM 第三章 + Base-LLM 第五章
1. 预训练范式概述
预训练语言模型的核心思路:在大规模无标注语料上学习通用语言表示,再在下游任务上微调。
| 架构 | 代表模型 | 预训练任务 | 适用场景 |
|---|---|---|---|
| Encoder-Only | BERT, RoBERTa | MLM (双向) | NLU: 分类、NER、QA |
| Decoder-Only | GPT, LLaMA | CLM (单向) | NLG: 生成、对话、推理 |
| Encoder-Decoder | T5, BART | Span Corruption | 翻译、摘要、结构化生成 |
2. BERT (Bidirectional Encoder Representations from Transformers)
2.1 预训练任务
MLM (Masked Language Modeling)
- 随机选取 15% 的 token
- 其中 80% 替换为
[MASK]、10% 替换为随机词、10% 保持不变 - 目标:预测被遮盖的原始 token
$$\mathcal{L}_{MLM} = -\sum_{i \in \text{masked}} \log P(x_i | x_{\backslash i})$$
NSP (Next Sentence Prediction)
- 二分类:句子B是否是句子A的下一句
- 50% 正例 + 50% 随机负例
- 后来被证明效果有限(RoBERTa 移除了 NSP)
2.2 架构细节
| 参数 | BERT-Base | BERT-Large |
|---|---|---|
| Layers | 12 | 24 |
| Hidden Size | 768 | 1024 |
| Attention Heads | 12 | 16 |
| Parameters | 110M | 340M |
| Vocab Size | 30,522 (WordPiece) | |
| Max Seq Length | 512 | |
| Activation | GELU | |
GELU: $\text{GELU}(x) = 0.5x(1 + \tanh(\sqrt{2/\pi}(x + 0.044715x^3)))$
输入表示 = Token Embedding + Segment Embedding + Position Embedding
2.3 BERT 变体
| 模型 | 改进点 |
|---|---|
| RoBERTa | 去 NSP + 动态 Masking + 更大 batch + 更多数据 |
| ALBERT | 嵌入分解 ($V \times E + E \times H$) + 跨层参数共享 |
| DeBERTa | 解耦注意力(内容 + 位置分开计算) |
| SpanBERT | 连续 span masking + SBO 目标 |
3. GPT 系列
3.1 GPT-1/2/3 演进
| 模型 | Layers | Hidden | Heads | Params | Data | 关键创新 |
|---|---|---|---|---|---|---|
| GPT-1 | 12 | 768 | 12 | 0.12B | 5GB | Pretrain+Finetune 范式 |
| GPT-2 | 48 | 1600 | 25 | 1.5B | 40GB | Zero-shot; Pre-Norm |
| GPT-3 | 96 | 12288 | 96 | 175B | 570GB | Few-shot / ICL; 稀疏注意力 |
GPT 核心训练目标 (CLM)
$$\mathcal{L}_{CLM} = -\sum_{t=1}^{T} \log P(x_t | x_1, \ldots, x_{t-1})$$自回归分解:只关注左侧上下文,天然适合生成任务。
3.2 Scaling Law
$$C \approx 6ND$$
其中 $C$ = 计算量(FLOPs), $N$ = 模型参数量, $D$ = 训练数据量(tokens)
Chinchilla 最优配比:$D = 20N$(数据量应为参数量的20倍)
- GPT-3 (175B): 300B tokens → 数据不足
- Chinchilla (70B): 1.4T tokens → 性能更优
- LLaMA-2 (70B): 2T tokens → 超过 Chinchilla 比例
4. T5: Text-to-Text Transfer Transformer
核心思想:将所有 NLP 任务统一为 "text-to-text" 格式:
输入: "translate English to German: That is good."
输出: "Das ist gut."
输入: "summarize: [长文本]"
输出: "[摘要]"
- 架构:标准 Encoder-Decoder
- 预训练:Span Corruption(随机 mask 连续 span,用哨兵 token 替换)
- 数据:C4 (750GB)
- 归一化:RMSNorm(比 LayerNorm 少一次减均值操作)
5. LLaMA 家族
| 版本 | 规模 | 训练数据 | 上下文 | 关键技术 |
|---|---|---|---|---|
| LLaMA-1 (2023.02) | 7B-65B | 1T tokens | 2K | RoPE, SwiGLU, Pre-Norm |
| LLaMA-2 (2023.07) | 7B-70B | 2T tokens | 4K | + GQA (70B) |
| LLaMA-3 (2024.04) | 8B/70B | 15T tokens | 8K → 128K | 128K vocab, GQA全系 |
LLaMA 的技术选择
- 位置编码:RoPE(相对位置,长度外推)
- 归一化:RMSNorm + Pre-Norm
- 激活函数:SwiGLU(门控机制,优于 ReLU/GELU)
- 注意力:GQA(减少 KV-cache 内存)
6. 三种架构对比
| 维度 | Encoder-Only (BERT) | Decoder-Only (GPT/LLaMA) | Encoder-Decoder (T5) |
|---|---|---|---|
| 注意力 | 双向 | 单向 (causal) | Enc双向 + Dec单向+交叉 |
| 预训练 | MLM | CLM | Span Corruption |
| 下游使用 | +分类头微调 | Zero/Few-shot 或 SFT | Text-to-Text |
| 生成能力 | 弱 | 强 | 中等 |
| 涌现能力 | 无 | 强(规模效应) | 弱 |
| 代表规模 | ~1B | 7B-1000B+ | ~11B |
为什么 Decoder-Only 最终胜出?
- Scaling:CLM 随规模增长涌现 ICL、CoT 等能力,Encoder 模型无此现象
- 统一性:所有任务都可表述为"续写",无需任务特定头
- 数据效率:每个 token 都提供训练信号(vs MLM 仅 15%)
- 生成对齐:训练和推理都是自回归,无 train-test mismatch
面试要点总结
高频面试题
- BERT 的 MLM 有什么问题? 训练有 [MASK],推理没有 → pretrain-finetune mismatch。10% random + 10% unchanged 是缓解手段。
- RoBERTa 改了什么? 去 NSP + 动态 masking + 更大 batch(8K) + 更多数据(160GB)
- GPT-3 的 In-Context Learning 是什么? 无需梯度更新,通过 prompt 中的示例学会任务
- Chinchilla Scaling Law? 最优计算分配:tokens = 20 × params
- LLaMA 为什么用 RMSNorm? 省去均值计算,训练更快,效果相当
- 为什么 CLM 比 MLM 扩展性好? 每个 token 都是训练信号,且自回归与生成推理一致