\[\mathcal{L} = -\frac{1}{T} \sum_{t=1}^{T} \log P_\theta(x_t \mid x_{<t})\]
因果掩码:通过下三角 Attention Mask 确保每个 token 只能看到其之前的 token,实现并行训练。
# 因果注意力掩码示意
# token 0: [0, -inf, -inf, -inf] ← 只看自己
# token 1: [0, 0, -inf, -inf] ← 看 0,1
# token 2: [0, 0, 0, -inf] ← 看 0,1,2
# token 3: [0, 0, 0, 0] ← 看全部
2.3 MLM(掩码语言模型)
BERT 引入的 MLM 随机遮盖输入中 15% 的 token,让模型预测被遮盖位置:
\[\mathcal{L}_{MLM} = -\sum_{i \in \mathcal{M}} \log P_\theta(x_i \mid \mathbf{x}_{\backslash \mathcal{M}})\]
其中 $\mathcal{M}$ 是被遮盖的位置集合,$\mathbf{x}_{\backslash \mathcal{M}}$ 是未被遮盖的 token。
由于 MLM 依赖双向上下文,天然适合理解任务,但不适合生成。MLM 的另一个局限是训练-推理不匹配(训练时看到 [MASK],推理时没有)。
2.4 Prefix / Span 去噪
Prefix LM:前缀部分允许双向注意力,后缀部分使用因果注意力。GLM 系列采用此目标,试图兼顾理解与生成。
Span 去噪(T5):随机遮盖多个连续 span(如 “for inviting”),替换为哨兵 token(如 <X>、<Y>),模型自回归地生成哨兵 token 及其对应原文:
输入: "Thank you <X> me to your party <Y> week."
输出: "<X> for inviting <Y> last <Z>"
2.5 为何 Decoder-only CLM 胜出
| 因素 |
分析 |
| 统一格式 |
所有任务都可表达为「给定前缀,生成后续」,无需设计任务特定模板 |
| 零样本涌现 |
自回归训练与推理一致,规模足够大时涌现 zero-shot / few-shot 能力 |
| 可扩展性 |
因果掩码使训练高度并行,上下文长度可线性扩展 |
| 上下文学习 |
自然支持 in-context learning,无需额外设计 |
| Scaling 验证 |
OpenAI 的 Scaling Laws 研究最早在 CLM 上验证,路径最清晰 |
3. 数据工程
数据工程是预训练中最被低估的环节。高质量数据 + 合理配比,往往比单纯堆参数更有效。
3.1 数据流水线总览
原始语料采集
│
▼
去重(URL / 文档 / MinHash)
│
▼
质量过滤(启发式规则 + 分类器)
│
▼
去污染(移除评测集重叠)
│
▼
领域配比 + 课程学习
│
▼
分词(BPE / SentencePiece)
│
▼
打包(Sample Packing)→ 训练
3.2 数据采集
预训练数据来源广泛,通常涵盖以下类别:
| 类别 |
来源 |
特点 |
| 网页 |
CommonCrawl, C4, RefinedWeb |
规模最大,质量参差不齐 |
| 代码 |
GitHub, StackExchange, The Stack |
提升推理与结构化能力 |
| 书籍 |
Books3, Gutenberg, 电子书 |
高质量长文本,提升连贯性 |
| 学术论文 |
arXiv, PubMed, S2ORC |
专业知识与科学推理 |
| 百科 |
Wikipedia, Baidu Baike |
高质量结构化知识 |
| 对话/论坛 |
Reddit, StackExchange |
多轮交互与问答风格 |
多语言覆盖:现代 LLM 通常覆盖中、英、日、韩、法、德、西等数十种语言,按语言比例采样。
3.3 去重
重复数据不但浪费训练预算,还可能导致模型记忆训练数据,增加隐私和版权风险。常用去重策略:
| 层级 |
方法 |
说明 |
| URL 去重 |
精确匹配 |
同一 URL 只保留一份 |
| 文档级去重 |
n-gram 重叠 / MinHash |
近似去重,检出高相似度文档 |
| 子串级去重 |
精确子串匹配 |
移除跨文档重复的段落 |
| 跨源去重 |
MinHash + LSH |
去除不同来源间的重复 |
MinHash 原理:将文档的 n-gram 集合通过多个哈希函数映射为签名,通过比较签名估计 Jaccard 相似度,配合 LSH(Locality-Sensitive Hashing)实现高效近似去重。
3.4 质量过滤
过滤低质量数据是提升模型性能的关键。常用方法:
启发式规则:
- 文本长度过短或过长 → 移除
- 特殊符号/乱码过多 → 移除
- 大写字母占比过高 → 移除
- 重复 n-gram 比例过高 → 移除
- 停用词比例异常 → 移除
分类器过滤:
- 训练轻量分类器(如 FastText)区分高质量与低质量文本
- 使用 Wikipedia 等高质文本为正例,随机网页为负例
- 对每条数据打分,保留分数高于阈值的数据
模型过滤(FineWeb 风格):
- 使用已训练模型对数据质量打分
- 更精确但计算成本更高
- FineWeb 证明高质量过滤可大幅提升最终模型性能
3.5 去污染(Decontamination)
去污染的目标是移除训练集中与评测基准重叠的文本,防止数据泄漏导致的虚假性能提升。
常见方法:
- n-gram 重叠检测:在 13-gram 级别检查训练数据与评测集的重叠,移除高度重叠的文档
- 语义相似度:使用嵌入模型检测语义层面相似的文本
- 基准覆盖:针对 MMLU、GSM8K、HellaSwag、HumanEval 等常用基准逐一清理
3.6 数据配比
数据配比直接影响模型在不同能力上的表现。不同模型有不同的配比哲学:
LLaMA 1 公开配比:
| 数据源 |
占比 |
说明 |
| CommonCrawl |
67.0% |
主力网页数据 |
| C4 |
15.0% |
经过过滤的网页 |
| GitHub |
4.5% |
代码能力 |
| Wikipedia |
4.5% |
百科知识 |
| Books |
4.5% |
书籍长文本 |
| ArXiv |
2.5% |
学术/科学 |
| StackExchange |
2.0% |
问答/技术讨论 |
配比经验:
- 代码占比过高可能损害自然语言流畅度,但能显著提升推理和数学能力
- 学术论文占比过高可能使模型风格过于「学术化」
- 多语言数据的配比需谨慎平衡,避免「多语诅咒」
- DeepSeek 等模型在训练后期会提高代码/数学比例(课程学习)
3.7 数据课程的启示
RefinedWeb / FineWeb 的结论:Penedo 等人(2023/2024)证明,仅凭 CommonCrawl 网页数据,经过严格的质量过滤,就能训练出接近甚至超越使用多源混合数据的模型。这颠覆了「必须精心配比多源数据」的传统认知,说明数据过滤质量远重要于数据来源多样性。
3.8 分词(Tokenization)
预训练前需要将原始文本转换为 token 序列。主流 LLM 使用 BPE(Byte-Pair Encoding) 或 SentencePiece 实现。
| 模型 |
分词器 |
词表大小 |
特殊设计 |
| GPT-3 |
BPE (tiktoken) |
50K |
空格感知 |
| LLaMA 1/2 |
SentencePiece BPE |
32K |
字节回退 |
| LLaMA 3 |
BPE (tiktoken) |
128K |
扩展词表,支持更多语言 |
| Qwen 2.5 |
BPE |
152K |
多语言优化 |
| DeepSeek |
BPE |
128K |
支持中英为主 |
分词详见 分词与词向量。
4. Scaling Laws
4.1 Kaplan Scaling Laws(2020)
OpenAI 的 Kaplan 等人最早系统研究了 LLM 的 Scaling 行为。主要发现:
- 模型性能与模型参数量、数据量、计算量三个因素呈幂律关系
- 在当时条件下,结论是「参数优先」——给定计算预算,应优先增大模型而非数据
- 跨两个数量级的拟合表明,损失 $L$ 与各因素满足:
\[L(N) = \left(\frac{N_c}{N}\right)^{\alpha_N}\]
其中 $N$ 是参数量,$N_c$ 和 $\alpha_N$ 是拟合常数。
4.2 Chinchilla Scaling Laws(Hoffmann 2022)
DeepMind 的 Hoffmann 等人对 Kaplan 的结论进行了重要修正:
核心发现:参数与数据应同步增长,而非参数优先。Kaplan 低估了数据的重要性,原因在于其只分析了少量训练步数。
Chinchilla 最优:给定计算预算 $C$(FLOPs),最优分配为:
- 参数 $N_{opt} \propto C^{0.5}$
- 数据 $D_{opt} \propto C^{0.5}$
- 约 20 token / 参数
通用损失公式:
\[L(N, D) = E + \frac{A}{N^\alpha} + \frac{B}{D^\beta}\]
其中:
- $E$:不可约损失(irreducible loss),反映数据分布的固有熵
- $A/N^\alpha$:模型容量有限带来的损失
- $B/D^\beta$:数据量有限带来的损失
- $\alpha \approx 0.34$,$\beta \approx 0.28$(Chinchilla 拟合结果)
参数效率对照:
| 模型 |
参数量 |
Chinchilla 最优数据 |
实际数据 |
是否满足 |
| GPT-3 |
175B |
3.5T |
300B |
严重不足 |
| Chinchilla |
70B |
1.4T |
1.4T |
精确满足 |
| LLaMA 7B |
7B |
140B |
1T |
已超过 |
| LLaMA 70B |
70B |
1.4T |
1.4T |
精确满足 |
注意:LLaMA 系列故意在 Chinchilla 最优之上继续训练,以在固定推理成本下榨取更多性能——这是「推理预算优先」的设计哲学。
4.3 数据约束下的 Scaling(Muennighoff 2023)
当高质量数据逐渐枯竭,能否通过重复训练(多个 epochs)继续提升性能?
核心发现:
- 有限数据下,重复 4 个 epochs 内收益递减,但仍有明显边际收益
- 超过 4 epochs 后收益急剧衰减,但不会为零
- 不同数据来源对重复的敏感度不同:代码数据的重复收益高于自然语言
数据约束下的修正损失:
\[L(N, D, E) = E + \frac{A}{N^\alpha} + \frac{B}{D^\beta}\cdot f(E)\]
其中 $E$ 是 epoch 数,$f(E)$ 是重复衰减函数——随 epoch 增加而上升,但渐近趋缓。
实践启示:
- 优先扩充数据来源,而非重复训练
- 在数据受限时,适量重复(2-4 epochs)+ 数据增强可缓解过拟合
- 「数据质量」比「数据独特性」更重要——提升过滤质量往往比新增来源更有效
4.4 涌现能力(Emergent Abilities)
Wei 等人(2022)观察到,某些能力在模型规模跨越特定阈值后突然出现,而非平滑增长:
- 涌现能力示例:算术推理、多语言翻译、代码生成、思维链推理
- 涌现阈值:通常在 10B-100B 参数量附近
- 争议:部分研究认为涌现是评价指标不连续(如准确率 vs 对数概率)造成的假象(Schaeffer 2023)
5. 训练策略
5.1 优化器与超参数
现代 LLM 预训练普遍使用 AdamW 优化器:
| 超参数 |
典型值 |
说明 |
| 优化器 |
AdamW |
带解耦权重衰减的 Adam |
| $\beta_1, \beta_2$ |
0.9, 0.95 |
动量参数 |
| 权重衰减 |
0.1 |
大模型常用较大权重衰减 |
| 梯度裁剪 |
1.0 |
按全局范数裁剪 |
| 峰值学习率 |
1e-4 ~ 3e-4(小模型)/ 6e-5 ~ 1.5e-4(大模型) |
模型越大,lr 越低 |
| 学习率调度 |
Cosine decay |
Warmup → 峰值 → Cosine 衰减至 10% |
| Warmup 步数 |
2000 |
约占总步数的 1-2% |
| Batch size |
4M tokens |
通常按 token 数而非样本数计算 |
学习率调度曲线:
lr
│
│ ╱‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾╲
│ ╱ ╲
│ ╱ ╲
│ ╱ ╲___
│ ╱
└────────────────────────────────────────────────→ steps
warmup cosine decay to 10% peak lr
5.2 混合精度训练
| 精度 |
用途 |
说明 |
| FP32 |
主权重 |
保持精度,用于参数更新 |
| BF16 |
前向 + 反向 |
计算梯度,动态范围与 FP32 一致 |
| FP16 |
前向 + 反向(旧方案) |
需 loss scaling 防下溢 |
| FP8 |
前向(超大模型) |
进一步压缩,需硬件支持(H100+) |
BF16 优势:与 FP32 有相同的指数位(8 位),动态范围一致,无需 loss scaling,是现代 LLM 训练的标配。
5.3 样本打包(Sample Packing)
传统做法是将每个样本 padding 到序列最大长度,但大量 padding token 浪费计算。Sample Packing 将多个短样本拼接为一条长序列:
# 无打包(25%-50% 计算浪费)
[Doc A ][PAD][PAD][PAD]...
[Doc B ][PAD][PAD][PAD][PAD][PAD]...
# 有打包(接近 0 浪费)
[Doc A | Doc B | Doc C ]...
实现要点:
- 使用特殊分隔符(如
<EOS>)分隔不同文档
- 修改 Attention Mask,使不同文档之间不可见(防止跨文档信息泄漏)
- 配合「文档边界」随机排列,增加训练多样性
5.4 序列长度课程
许多模型在训练过程中逐步增加序列长度:
| 阶段 |
序列长度 |
目的 |
| 初始 |
2048 / 4096 |
大部分样本有效,训练速度最快 |
| 中期 |
8192 / 16384 |
引入长文本能力 |
| 后期 |
32768 / 131072 |
长上下文建模 |
注意:RoPE 等位置编码支持外推,但训练中逐步增加序列长度仍然是更保险的做法,可以避免长序列训练不稳定的问题。
5.5 Token 预算规划
遵循 Chinchilla 定律,给定参数量的 Token 预算:
| 参数量 |
Chinchilla 最优 |
常见实践 |
说明 |
| 1B |
20B |
50-100B |
训练到收敛 |
| 7B |
140B |
1T-2T |
推理预算优先 |
| 13B |
260B |
1T-2T |
推理预算优先 |
| 70B |
1.4T |
1.4T-2T |
接近最优 |
| 405B (LLaMA 3.1) |
8.1T |
15T+ |
超量训练,极致性能 |
5.6 分布式训练
预训练需要在数千 GPU 上并行进行。常用并行策略:
| 策略 |
全称 |
原理 |
通信开销 |
| DP |
Data Parallelism |
每 GPU 持有完整模型,拆分 batch |
梯度 AllReduce |
| PP |
Pipeline Parallelism |
按层切分,流水线执行 |
层间激活传递 |
| TP |
Tensor Parallelism |
单层内矩阵切分,并行计算 |
高(同步通信) |
| ZeRO |
Zero Redundancy Optimizer |
分片优化器状态/梯度/参数 |
中等 |
| SP |
Sequence Parallelism |
长序列沿序列维度切分 |
中等 |
详见 分布式训练。
6. 训练监控与评测
6.1 训练损失与困惑度
困惑度(Perplexity, PPL) 是预训练阶段最核心的监控指标:
\[\text{PPL} = \exp\left(-\frac{1}{N}\sum_{i=1}^{N}\log P_\theta(x_i \mid x_{<i})\right)\]
PPL 越低越好。PPL = 10 意味着模型在每一步预测下一个 token 时,平均面对 10 个等可能的选择,即「平均每步有 10 个候选」。
PPL 与损失的关系:
\[\text{PPL} = \exp(\text{loss})\]
监控要点:
- 训练 loss 应持续下降,无明显震荡或平台
- 验证 loss 上升是过拟合信号——多 epochs 训练时尤其需要关注
- 不同数据源可分别监控 PPL(代码 PPL、数学 PPL 等)
- 梯度范数异常增大往往是训练不稳定的前兆
6.2 下游任务评测
预训练过程中,定期在标准基准上做 few-shot 评测,以追踪模型能力的增长:
| 基准 |
领域 |
评测方式 |
| MMLU |
多学科知识 |
5-shot |
| GSM8K |
数学推理 |
8-shot / CoT |
| HellaSwag |
常识推理 |
10-shot |
| HumanEval / MBPP |
代码生成 |
0-shot / pass@k |
| PIQA / ARC |
物理/科学常识 |
0-shot |
| BBH |
复杂推理 |
3-shot |
| WinoGrande |
代词消歧 |
0-shot |
评测频率:通常每 N 个 step(如 1000)或每 N 个 token(如 10B)进行一次评测,计算量较大时适当降低频率。
6.3 能力涌现监控
涌现现象(Wei et al. 2022):某些能力在模型规模跨越阈值后突然显现,而非平滑增长。
典型涌现模式:
- 小模型随机:< 10B 参数时,某些任务(如多步推理)表现接近随机
- 阈值突破:超过某个规模后,能力突然跃升
- 持续增长:超过阈值后,能力随规模继续增长
关键观察:涌现意味着在小模型上做消融实验可能无法预测大模型行为,需要谨慎外推。
6.4 训练稳定性监控
| 指标 |
正常表现 |
异常信号 |
| Loss |
平滑下降 |
突然 spike 或长时间不下降 |
| 梯度范数 |
稳定或缓慢变化 |
急剧增大(可能 loss spike) |
| 学习率 |
按 schedule 变化 |
无 |
| 吞吐量 |
稳定 |
突然下降(硬件/网络问题) |
| GPU 利用率 |
> 90% |
持续偏低(数据加载瓶颈) |
Loss Spike 应对:若出现 loss spike,通常回滚到最近的 checkpoint,跳过引起 spike 的数据 batch,或降低学习率后继续训练。
7. 参考文献
[1] Brown, T., et al. Language Models are Few-Shot Learners. NeurIPS, 2020. (GPT-3)
[2] Raffel, C., et al. Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer. JMLR, 2020. (T5)
[3] Hoffmann, J., et al. Training Compute-Optimal Large Language Models. NeurIPS, 2022. (Chinchilla Scaling Laws)
[4] Touvron, H., et al. LLaMA: Open and Efficient Foundation Language Models. arXiv:2302.13971, 2023.
[5] Touvron, H., et al. Llama 2: Open Foundation and Fine-Tuned Chat Models. arXiv:2307.09288, 2023.
[6] Gao, L., et al. The Pile: An 800GB Dataset of Diverse Text for Language Modeling. arXiv:2101.00027, 2020.
[7] Penedo, G., et al. The RefinedWeb Dataset for Falcon LLM: Outperforming Curated Corpora with Web Data, and Web Data Only. NeurIPS, 2023.
[8] Penedo, G., et al. FineWeb: Decanting the Web for the Finest Text Data at Scale. arXiv:2406.17557, 2024.
[9] Muennighoff, N., et al. Scaling Data-Constrained Language Models. NeurIPS, 2023.
[10] Kaplan, J., et al. Scaling Laws for Neural Language Models. arXiv:2001.08361, 2020.
[11] Wei, J., et al. Emergent Abilities of Large Language Models. TMLR, 2022.
[12] Schaeffer, R., et al. Are Emergent Abilities of Large Language Models a Mirage? NeurIPS, 2023.
[13] Devlin, J., et al. BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding. NAACL, 2019.
[14] Dubey, A., et al. The Llama 3 Herd of Models. arXiv:2407.21783, 2024.
[15] DeepSeek-AI. DeepSeek-V3 Technical Report. arXiv:2412.19437, 2024.
留下评论