第 05 章 · 核心
预训练:数据怎样变成基础能力
理解数据处理、next-token 目标、Scaling Law、MoE 和训练稳定性的整体关系。
学习准备与本章目标
- 开始前
- Transformer 数据流 · 交叉熵与优化器
- 学完后
- 解释预训练目标 · 理解数据质量的重要性 · 看懂稠密模型与 MoE 的区别
本章路线图
预训练不是“把网页喂给模型”这么简单。它是一条从数据许可、清洗、去重、混合、Token 化和打包,到大规模训练、验证与 checkpoint 的生产链。本章同时回答数据、计算和模型规模如何共同决定结果。
预训练到底在学习什么
预训练把大量文本拼成 Token 序列,用 next-token prediction 反复训练。模型并没有人工标注的“知识点清单”,而是在预测任务中逐渐学习语言结构、世界关联、代码模式和任务形式。
相同的目标能统一处理网页、书籍、论文、代码和对话,但不同数据比例会塑造不同能力。模型表现不是只由参数量决定,训练 Token 数、数据覆盖和优化是否充分同样关键。
数据管线比“抓得多”更重要
典型数据管线包括采集、格式解析、语言与质量过滤、去重、敏感信息处理、版权与合规检查、混合配比、Token 化和分片。近重复数据会放大记忆和评测泄漏;低质模板页会消耗计算却提供很少新信息。
训练集、验证集和基准数据需要按文档来源隔离,而不是先切小块再随机划分。数据版本必须可追溯,否则模型变化很难解释。
Scaling Law 告诉我们怎样分配预算
Scaling Law 描述参数、数据和计算扩大时,损失通常呈可预测的幂律下降。它不是“模型越大一定越好”,而是提醒我们在固定计算预算下平衡模型大小和训练 Token 数。
若模型很大但数据不足,会欠训练;若模型较小却重复看过量数据,也可能不能充分利用计算。实际系统还要把推理成本纳入取舍,因为训练一次和长期服务百万次请求的经济账不同。
稠密模型与 MoE
稠密模型每个 Token 都经过同一套 FFN 参数。MoE 把 FFN 换成多个专家,由路由器为每个 Token 选择少数专家,因此可以增加总参数而不让每个 Token 都执行全部参数。
MoE 的代价是路由、负载均衡、跨设备通信和部署复杂度。总参数、激活参数与实际 FLOPs 要分开理解;“参数更多”不一定代表每个 Token 计算更多。
数据管线的完整阶段
一条常见预训练数据管线包括:
来源登记 → 许可与隐私检查 → 格式解析 → 语言/质量分类
→ 文档级去重 → 近重复去重 → 安全过滤 → 数据混合
→ Token 化 → 序列打包 → 分片与版本固化
每一步都要保存可追溯元数据。只保留最终 Token 文件,会导致无法解释某条样本来自哪里、为何被过滤,也难以执行删除请求或污染审计。
解析质量会直接影响模型:网页导航、重复页脚、乱码、代码截断和表格错序都会被当成正常文本学习。数据工程不是训练前的一次性清理,而是模型能力与风险的一部分。
去重、质量与数据污染
精确去重可对规范化文本计算哈希;近重复常用 MinHash、LSH 或 n-gram 相似度。去重能减少记忆和某些来源被过度采样,但阈值太激进也会删除模板相同而内容不同的有效文档。
质量过滤可以结合启发式规则、分类器和小规模人工抽检。重要的是观察各语言、领域和文体的误杀率,而不是只追求一个整体“高质量比例”。
评测集污染是独立问题。公开 benchmark、答案解析和近似改写若进入训练,模型可能靠记忆得高分。应在训练前建立污染匹配,并优先使用时间切分、私有测试或动态生成任务验证泛化。
数据混合决定模型偏向
网页、书籍、论文、代码、数学和多语言数据的比例会改变模型能力。简单按原始数量采样会让最大来源支配训练;常见做法是为每类数据设置权重,并监控训练过程中的实际 Token 占比。
高质量小数据可以重复采样,但重复过多会增加记忆和过拟合。领域数据也不一定越多越好:若挤占通用数据,模型可能在目标领域进步却损失通用能力。
数据混合应被视为可复现实验配置,至少记录来源版本、过滤规则、采样权重、随机种子和最终 Token 数。
Token 化、拼接与序列打包
短文档若各自 padding 到最大长度会浪费大量计算,因此常把多个文档拼到固定长度序列。此时必须决定文档边界是否允许相互注意,以及 EOS 如何插入。
Packed sequence 能提高有效 Token 比例,但会让位置、loss mask、样本归属和分布式切分更复杂。日志应报告有效 Token,而不是只报告 batch 中张量元素数。
训练目标的标签是输入向右错一位。跨文档边界处若处理错误,模型可能被迫预测下一个无关文档开头,或把 padding 当成目标。
Scaling Law 的正确用途
Scaling Law 描述在特定架构、数据和训练配方下,损失随参数、数据与计算的经验变化。它适合预算分配,不是保证某个具体能力必然出现的定律。
在固定计算预算下,模型过大但 Token 太少会欠训练;模型过小而重复过多数据,也无法充分利用计算。计算最优配比还会随数据质量、重复训练、上下文长度和推理成本变化。
规划实验时可先用小模型拟合趋势,再决定更大规模的参数量和 Token 数。外推必须保留误差范围,并通过中途 checkpoint 验证曲线是否仍符合预期。
训练预算与 FLOPs 直觉
Decoder-only 稠密模型的训练计算可粗略看作与 参数量 × 训练 Token 数 成正比,常见近似写成:
其中 是参数量, 是训练 Token 数。系数只用于量级估算,激活重算、注意力、稀疏专家和硬件利用率都会改变实际成本。
硬件峰值 FLOPs 不等于可实现吞吐。真正关心的是模型 FLOPs 利用率、有效 tokens/s、通信等待、数据管线空闲与故障重启损失。
MoE 的路由与负载均衡
MoE 路由器为每个 Token 产生专家分数,选择 top-k 专家,再合并专家输出。单 Token 只激活少量专家,因此总参数可以很大而计算保持可控。
若路由长期偏向少数专家,会出现过载、Token 丢弃或专家学不到东西。训练通常加入负载均衡辅助目标,并为每个专家设置容量。专家并行还会触发 all-to-all 通信,对网络拓扑非常敏感。
评估 MoE 要同时报告总参数、每 Token 激活参数、路由分布、容量溢出、通信开销和推理部署方式。
训练过程怎样验收
核心监控包括训练/验证 loss、学习率、梯度范数、tokens/s、显存峰值、数据来源 loss、非有限值和各 rank 健康状态。验证集应按语言与领域分桶,否则整体下降可能掩盖某个关键领域退化。
checkpoint 不只是灾难恢复,也用于比较中途能力、选择继续训练数据和排查退化。保存频率要平衡 IO 成本与可接受的重算时间;大规模训练通常采用分片 checkpoint,并验证可在不同并行配置下恢复。
常见误区
- 数据量大不等于数据覆盖和质量好。
- 训练 loss 更低不自动代表指令遵循、事实性和安全更好。
- Scaling Law 不能替代目标任务评测。
- MoE 的总参数不能直接与稠密模型参数比较计算成本。
- 只保存模型权重不能实现精确续训。
章末检查
- 画出原始文档到训练 batch 的全部数据阶段。
- 解释精确去重、近重复去重与评测污染的区别。
- 为什么数据混合比例会改变模型能力分布?
- 固定计算预算下,模型规模与训练 Token 如何权衡?
- MoE 为什么能增加参数而不同比例增加每 Token FLOPs?
延伸资料
本章进阶内容
原理专题与代码实践
完成主教材后,按顺序阅读原理专题、完成代码实践,并用掌握标准复查本章内容。
- 01
理解预训练目标与数据生命周期
- 02
分析数据配比、去重、优化器和训练稳定性
- 03
实现 Dataset、DataLoader、切块与动态批处理
- 04
制定一次小模型预训练的数据验收表
本章术语
六个关键词
- 预训练
- 在大规模序列上学习通用语言与知识模式的阶段。
- 近重复去重
- 识别内容高度相似但并非逐字相同文档的过程。
- 数据混合
- 为不同来源、语言和领域设置训练采样比例。
- Packing
- 把多个短文档组合进固定长度训练序列。
- Scaling Law
- 损失随参数、数据和计算变化的经验关系。
- MoE
- 每个 Token 只激活少量专家的稀疏前馈架构。
章节记录
