Skip to content

预训练:数据与目标

本页速览 预训练是 LLM 的第一阶段:在万亿级 token 语料上做下一词预测,把"语言与世界知识"写进参数。本文讲透训练目标与损失、数据全流程(采集/清洗/去重/过滤/配比)、数据质量即模型质量、学习率与批次等训练动态,并引出规模法则与后训练。

预训练:数据与目标

预训练(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~40964096~8192
精度bf16 + fp32 masterbf16 + 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 预测),数据是全部复杂度的所在,动力学决定稳定性。底座的高度决定后训练能走多远。

延伸阅读

参考资料