外观
预训练:数据与目标
预训练(pretraining)是 LLM 生命周期的第一阶段:在海量、多样、高质量文本语料上,用"预测下一个 token"这一个目标训练一个 Transformer,把语言规律与世界知识写进参数。 它是"大语言模型"之所以"大"的根基——后训练(SFT、对齐)只能微调行为,参数中的绝大多数知识都在预训练阶段形成。数据决定模型的知识上限,训练动力学决定能否稳定地逼近这个上限。
一句话定位:预训练 = 目标(下一词预测)+ 数据(全流程工程)+ 动力学(把损失稳定压下去),三者共同决定 base model 的智力底座。 预训练产出的"基座模型"仍需经微调与对齐后才能真正服务用户。
一、训练目标与损失
预训练目标即语言建模的自回归下一 token 预测(token 的定义与选择见分词与词表):给定前缀,预测下一个 token,用交叉熵最小化负对数似然。
text
训练语料:海量文本,切分为 token 序列(见分词与词表)
对每个训练样本(固定长度片段,如 2048/4096 token):
输入 x1 x2 ... xn
模型输出每个位置的下一 token 概率分布 q_t
损失 L = -(1/n) Σ_t log q_t(x(t+1)) # 只在已知真实 token 的位置计
优化:AdamW + 余弦学习率 + 梯度裁剪,在多机多卡上并行执行几个工程要点:
- batch 内长度统一:样本按长度分桶或直接 padding 到固定长度,保证张量形状规整。
- 损失只看真实位置:对被填充的位置在损失中做 mask,避免 padding 影响梯度。
- 验证集损失即 PPL:预训练阶段的"体检"就是观察训练/验证损失曲线。
二、数据全流程:从互联网到训练语料
预训练语料的主流来源是互联网爬虫,但"互联网"不等于"可训练语料"——原始 HTML 里充满了导航、广告、重复内容与垃圾信息。全流程是一条流水线:
text
采集 → 清洗 → 语言过滤 → 去重 → 质量过滤 → 配比 → 打包训练
采集:Common Crawl 等网络爬虫快照、书籍(电子书/古登堡计划)、
论文(arXiv)、代码(GitHub)、百科(Wikipedia)、论坛(Reddit 等)
清洗:HTML 解析抽正文、去广告/导航、编码归一化(UTF-8)、
段落切分、去末尾噪声
语言过滤:fastText 语言分类器,按语种分流/配比
去重:URL 去重 → 文档级去重(MinHash/SimHash 近似去重)
→ 行/段级去重(后缀数组),并清洗 PII/毒害内容
质量过滤:质量分类器打分(或困惑度过滤)筛掉低质页
配比:多语言、代码、数学、书籍、对话等按目标混合1. 语料源与"数据即模型"
| 语料源 | 特点 | 典型用途 |
|---|---|---|
| Common Crawl 子集(C4/RefinedWeb 等) | 规模最大、噪声多,须强力清洗 | 主体数据 |
| Wikipedia/百科 | 干净、结构化、知识密度高 | 事实性骨架 |
| 书籍/电子书 | 长篇连贯文本、世界知识 | 长程依赖与叙事 |
| GitHub 代码 | 程序语法与逻辑 | 代码能力 |
| arXiv/论文 | 严谨学术语言 | 科学/数学 |
| 论坛(Reddit/StackExchange) | 对话与问答风格 | 指令式表达 |
| 多语言语料(CulturaX、SkyPile 等) | 覆盖中/日/欧语等 | 多语言能力 |
业内共识是 "数据即模型":对最终能力的影响,语料质量与配比的权重不亚于模型规模。Gopher(2022)的系统分析、GPT-3 论文中对数据源权重的讨论,都指向同一个结论——清洗与配比是决定上限的工程,模型架构只是把数据里的规律榨出来。
几个公开案例可以量化这种影响:GPT-3 论文给出了不同数据源的权重分配(Common Crawl 约 60%、WebText2 约 22%、书籍与维基等约占 18%)与对应的过采样倍数;Gopher 用 800GB 语料的分析展示了"文档级去重 + 质量过滤"对下游基准的稳定提升;Llama 2 团队则公开了其 2T token 的配比哲学——更多书籍与维基、更高比例的多语言与代码。共同结论是:配比没有通用最优解,只有"与目标能力对齐"的工程解,且必须用消融实验来校准。
2. 去重:防止"背题"
重复数据会带来双重危害:一是训练效率下降(大量 token 只是重复已有信息,损失过早饱和);二是评测数据污染(训练集与评测集高度重叠,分数虚高)。主流手段:
| 层次 | 方法 | 说明 |
|---|---|---|
| URL 去重 | 相同 URL 只留一份 | 最便宜的第一道闸 |
| 文档级近似去重 | MinHash 签名 + LSH 找近重复文档 | 对"改写后转载"也有效 |
| 行/段级去重 | 后缀数组(如 CCNet 管道) | 对付"大量文档共用同一段落"(如模板话) |
| 评测集去重 | 与基准(如 MMLU/GSM8K 等)做 n-gram 重叠剔除 | 保护评估可信度 |
《Deduplicating Training Data Makes Language Models Better》(Lee et al., 2022)的经典实验显示:仅去除重复数据,就能在多个下游任务上稳定提升性能,同时训练更快。
数据污染的另一个现实教训是"评测集进语料":热门基准(如 MMLU、GSM8K 等)一旦被广泛讨论,很容易以各种形式混入网络爬虫语料。识别手段包括与基准做 n-gram 重叠检查、比对时间戳(若语料时间戳晚于基准发布则高度可疑)、以及在训练中监控特定基准的异常高分。污染让"模型进步"的测量失真,这是评测实践中最需要警惕的暗伤(详见评测与基准)。
3. 质量过滤与毒性处理
- 质量分类器:用"优质锚点"(如 Wikipedia 文本)训练 fastText 分类器给爬虫页面打分,低于阈值即丢弃;或用语言模型困惑度过滤——低 PPL 的"更符合语言规律"文本通常更干净。
- 毒性/NSFW 过滤:用分类器与关键词过滤成人内容与暴力文本,既为安全也为质量。
- 隐私(PII):移除身份证号、邮箱、电话等个人信息(Gopher 等团队有专门管道)。
清洗过头也有代价
过滤不是越狠越好:过度去重可能把合法的长尾知识也删掉;过度过滤毒害内容会让模型对相关话题变得"过度回避"。清洗目标不是"最干净",而是"最能支持目标能力的分布"。当代团队多采用分层多档过滤并做小规模消融实验来定档位。
4. 数据配比:混合比例的科学
不同来源按什么比例混合,直接影响能力结构:
| 决策 | 典型做法 | 考量 |
|---|---|---|
| 多语言配比 | 按人口/语料量加权(如英语为主体 + 中/欧语各若干百分点) | 语言漂移:小语种语料占比过低会被英语稀释 |
| 代码 vs 自然语言 | 代码常占 10%~30% | 代码提升推理与结构化思维,但太多会伤"说话"质量 |
| 书籍/长文上采样 | 对书籍重复采样 2~3 倍 | 补偿其在爬虫语料中的天然占比过低 |
| 数学/科学 | 专项语料(如数学网页、arXiv)少量混入 | 定向提升推理与符号能力 |
| 时间截止 | 用"最近数据"做验证集(time-based split) | 比随机切分更接近真实上线场景 |
配比的调优靠小规模消融:用 1/1000 的 token 预算训练多个配比变体,对比验证损失与目标能力(如代码、数学)的得分,再外推到全量。配比也在持续演化——数据集与基准档案收录了 RedPajama、RefinedWeb、CulturaX 等公开语料的构成与规模。
三、训练动态:把损失压下去的艺术
有了数据和模型,训练本身是一整套动力学工程:
1. 学习率调度
现代大模型几乎标配 warmup + cosine decay(或线性衰减 + 尾部极低 LR):
text
阶段 1(warmup,约 1%~3% 步数):LR 从 0 线性升到峰值(如 3e-4)
阶段 2(主训练):LR 按余弦曲线衰减到接近 0
可选:最后 10% 步数 LR 线性降到极低("cool-down"),
实证能稳定收敛并略降损失峰值学习率随模型规模增大而下降(约与参数量开方成反比的经验律,如 7B 约 3e-4、70B 约 1.2e-4),由 μP/超参数迁移研究支持,见规模法则。
2. batch size 与梯度累积
- 全局 batch size 通常很大(数百 token 的百万级 token/step),训练不稳定时先调 batch 而非 LR。
- 梯度累积(gradient accumulation):显存不够时,把大 batch 拆成微批,各自前向反向、累加梯度后统一更新——数学上等价于大 batch,只影响速度。
- 理论依据:梯度噪声尺度(McCandlish et al., 2018)表明 batch 增大到临界值后训练步骤可等比例减少,但过大的 batch 会让学习信号"过于平滑"、收敛变慢。
3. 训练监控与中途评估
长程预训练必须"边训边看",常见监控手段:定期跑固定小测试集(若干典型任务,如代码、数学、多语言样本)观察能力随训练步数的上升曲线;**保存检查点(checkpoint)**并保留历史版本,既用于回滚也用于事后对比;监控梯度范数与损失方差,异常波动往往先于显式失败出现。训练中评估不需要全量基准,一份几百条的固定样本集足够支撑"趋势判断"。
4. 损失曲线的读法
| 曲线现象 | 含义 | 处置 |
|---|---|---|
| 训练损失持续下降、验证损失同步 | 健康训练 | 继续 |
| 训练降、验证不降 | 开始过拟合(重复数据多时常见) | 加大数据、更重去重 |
| 训练损失突然飙升(loss spike) | 数值不稳定或数据中出现异常样本 | 回滚 checkpoint、检查最近数据 |
| 验证损失在某个点回升 | 学习率衰减过快或过拟合 | 调整调度、提前收尾 |
一条重要的经验
预训练 70% 的精力花在数据、20% 在稳定性、10% 在架构。遇到"训不动",先怀疑数据管道(重复、脏样本、tokenizer 不匹配),再怀疑数值稳定性(学习率、混合精度、梯度裁剪),最后才怀疑模型结构。
5. 一份典型的预训练配置(量级参考)
| 超参数 | 7B 量级 | 70B 量级 |
|---|---|---|
| 全局 batch(token/step) | 约 0.5M~1M | 约 2M~4M |
| 峰值学习率 | 约 3e-4 | 约 1.2e-4 |
| warmup 步数占比 | 约 1%~3% | 约 1% |
| 序列长度 | 2048~4096 | 4096~8192 |
| 精度 | bf16 + fp32 master | bf16 + fp32 master |
| 梯度裁剪 | 1.0 左右 | 1.0 左右 |
(量级来自开源模型技术报告,具体以目标模型与数据为准;更大 batch 通常配更低学习率。)
6. 数据管道工程化清单
预训练数据链路是长期资产,值得像软件工程一样管理:语料版本化(每次清洗/配比改动留快照,便于回溯复现)、去重与过滤脚本入 CI(改动需回归,防止意外删掉某类语料)、数据分布监控(token 级语言分布、重复率、质量分数随时间的变化)、与评测隔离(基准剔除名单持续更新)。把数据当代码管理,是"数据即模型"落到工程上的第一步。
4. 并行与稳定性
预训练在数千张 GPU 上运行数月,依赖数据并行/张量并行/流水线并行(框架与工具选型里的 DeepSpeed、Megatron-LM),并配合混合精度(bf16)、梯度裁剪、损失缩放与 checkpoint 定期保存——一次不稳定就可能导致整轮训练报废,因此"稳定性"是训练工程的核心指标。
常见不稳定来源与对策:梯度爆炸(梯度裁剪、降低 LR)、损失尖峰(loss spike)(回滚到尖峰前的 checkpoint,并排查是否有异常数据批次进入)、混合精度溢出(bf16 通常比 fp16 更稳,必要时保留 fp32 master weights)、数据重复导致的验证损失反弹(增强去重)。把"回滚 + 排查"做成标准流程,比试图一次性避免所有问题更现实。
四、预训练 vs 后训练
| 维度 | 预训练 | 后训练(SFT/对齐) |
|---|---|---|
| 目标 | 通用语言建模(预测下一 token) | 指令遵循、帮助性/诚实性/安全性 |
| 数据 | 万亿级 token 互联网语料 | 十万~百万级高质量指令/对话 |
| 成本 | 数千 GPU·月 | 数百 GPU·时到 GPU·天 |
| 产物 | base model("会说话、有知识") | chat/instruction model("会听话") |
| 评估 | 验证 PPL、少量下游探测 | 指令评测、人工对比、安全测试 |
| 关键风险 | 数据质量与稳定性 | 过拟合、能力回退(灾难性遗忘) |
两条后训练路线的机制分别在微调:SFT 与参数高效微调与对齐:RLHF 与 DPO展开。
一个常见的误解是"预训练负责知识,后训练负责听话"——更准确地说:语言结构、世界知识、推理基底都在预训练形成;后训练改变的是"行为的条件反射方式"(如何把知识组织成符合指令的回答、如何拒绝不当请求)。这也是为什么"后训练不能凭空注入新知识":如果 base model 在预训练里没见过某类内容,微调再多的示例也难以稳定泛化。理解这条边界,才能正确分配数据与预算。
五、规模法则引子:为什么要"预训练得更大"
预训练的价值服从规模法则:固定计算预算下,验证损失随参数规模、数据量、计算量的增加按幂律下降,且三者存在最优配比(约 1 参数对应约 20 训练 token)。这意味着:
- "堆更多数据 + 更大模型"不是玄学,是有明确曲线的工程决策;
- 数据量不足时模型"过参数化欠训练",加数据往往比加参数更划算(Chinchilla 的结论);
- 训练前的预算决策(先加数据还是先加参数?)应基于规模法则而非直觉。
六、权衡与边界
- 知识截止:预训练数据有截止时间,模型对之后的世界无知——这是RAG存在的核心动机之一。
- 长尾与罕见语言:爬虫语料天然偏向英文与流行领域,小语种、专业长尾知识覆盖率低。
- 数据污染是长期战役:基准一旦热门就可能进入爬虫语料,污染监测(n-gram 重叠、时间戳比对)应常态化。
- 成本与回报:预训练是"一锤子买卖",模型架构与 tokenizer 在启动前必须定死;后续能力只能靠后训练或增量预训练修补。
三个高频误区
- "语料越大越好":只堆量不控质,重复与噪声会让损失提前饱和、能力偏斜;
- "损失不降就加参数":先排除数据与稳定性问题,再谈规模(见规模法则);
- "预训练一步到位":数据配比、tokenizer、架构在启动前就要冻结决策,中途改动的代价极大。
一句话总结
预训练回答的是"模型的智力底座从哪里来":目标很简单(下一 token 预测),数据是全部复杂度的所在,动力学决定稳定性。底座的高度决定后训练能走多远。
延伸阅读
- 语言建模:下一词预测范式——预训练目标的概率论本质
- 分词与词表——输入单元直接决定语料与词表的形态
- 规模法则——数据、参数、计算的最优配比
- 微调:SFT 与参数高效微调——预训练之后的第一站
- 对齐:RLHF 与 DPO——让 base model 变成听话的助手
- 数据集与基准档案——公开语料与基准的真实构成
参考资料
- Kaplan et al. Scaling Laws for Neural Language Models(2020) —— 预训练损失随规模幂律下降的经典结论
- Hoffmann et al. Training Compute-Optimal Large Language Models(Chinchilla, 2022) —— 参数与 token 的最优配比
- Rae et al. Scaling Language Models: Methods, Analysis & Insights from Training Gopher(2021) —— 预训练数据全流程的行业级分析
- Lee et al. Deduplicating Training Data Makes Language Models Better(2022) —— MinHash 去重的实证价值
- Penedo et al. The RefinedWeb Dataset(2023) —— 高质量网络语料管道的开源代表
- Gao et al. The Pile: An 800GB Dataset of Diverse Text for Language Modeling(2020) —— 多源语料基准
- McCandlish et al. An Empirical Model of Large-Batch Training(2018) —— batch size 与训练效率的理论
- Common Crawl 官网 —— 预训练语料的最大公开来源