跳到主要内容

大规模预训练

大规模预训练(Pre-training)是 LLM 能力的根基。通过在海量文本上学习语言统计规律、世界知识和推理模式,模型在下游任务上展现出强大的迁移能力。本文系统介绍预训练的目标、数据、工程挑战与成本。

预训练目标

主流 LLM 采用两种预训练目标:

因果语言模型(CLM,Causal Language Modeling)

GPT 系列、LLaMA、Qwen、Mistral 等均采用 CLM:

  • 目标:给定前缀 Token 序列,预测下一个 Token
  • 损失函数:交叉熵,对序列中每个位置的预测取平均
  • 注意力:单向因果注意力(下三角掩码),确保位置 t 只能看到位置 1 到 t 的信息
  • 优势:天然支持自回归生成;训练与推理解码方式一致

掩码语言模型(MLM,Masked Language Modeling)

BERT、RoBERTa 等编码器模型采用 MLM:

  • 目标:随机遮盖 15% 的 Token,利用双向上下文预测被遮盖的词
  • 优势:利用双向上下文,对文本理解任务效果好
  • 局限:无法直接用于生成

混合目标(部分模型)

T5 采用 Span Corruption,UL2 提出 Mixture of Denoisers(MoD),融合多种预训练目标以提升通用性。

预训练数据来源

高质量、多样化的预训练语料是 LLM 能力的基础。主要数据来源:

网页文本

  • Common Crawl:对整个互联网的定期爬虫快照,原始数据规模超过 PB 级,是最大的公开文本来源。经过筛选后通常贡献 60-80% 的预训练 Token
  • C4(Colossal Clean Crawled Corpus):Google 从 Common Crawl 清洗出的高质量网页文本,约 750GB

书籍与长文本

  • Books1/Books2:GPT-3 训练数据中包含大量版权书籍
  • Project Gutenberg:公版书籍,约 7 万册
  • The Pile 的 Books3:来自 Z-Library 等来源的书籍集合

书籍内容提供长篇连贯叙事,有助于模型学习长程依赖和深度推理。

代码

  • GitHub:从 GitHub 爬取的公开代码仓库
  • The Stack:BigCode 项目整理的高质量代码数据集,覆盖 300+ 编程语言
  • 代码数据不仅提升代码生成能力,还被认为能提升一般推理能力

学术与专业内容

  • Wikipedia(多语言):高质量、事实准确的百科内容
  • ArXiv:科学论文预印本(数学、物理、CS 等)
  • PubMed:医学文献
  • StackExchange:问答社区(编程、数学等多领域)

数据质量过滤

原始爬虫数据充斥着垃圾内容、重复文本、有害信息,必须经过严格过滤:

规则过滤

  • 语言识别:保留目标语言的文本,过滤乱码和非文本内容
  • 最小长度过滤:去除过短的文档(如仅含导航栏的网页)
  • 特殊字符比率:过滤符号/数字占比过高的内容
  • 停用词比率:确保文本含有足够的实词

质量评分(困惑度过滤)

  • 训练一个小型语言模型(如 KenLM),计算候选文本的困惑度(Perplexity)
  • 困惑度过高(文本不流畅)或过低(机械重复)的文本被过滤
  • GPT-2 Perplexity 过滤:用 GPT-2 对文本打分,只保留"接近人类写作质量"的文本

内容安全过滤

  • 基于关键词黑名单过滤有害内容
  • 基于分类器检测色情、暴力、仇恨言论
  • URL 黑名单:排除已知垃圾站点

去重(Deduplication)

重复数据会导致模型过拟合特定内容、降低数据有效性:

  • 精确去重(Exact Dedup):MD5 哈希匹配,去除完全重复的文档
  • 模糊去重(Fuzzy Dedup):MinHash LSH(局部敏感哈希),识别近似重复文档(如新闻转载、复制粘贴变体)
  • n-gram 去重:去除与训练集中其他文本高度相似的片段,防止数据集内部重复

数据配比策略

不同来源的数据对模型能力影响不同,需要仔细设计配比(Mixture Ratio):

典型配比示例(基于 LLaMA 3 的公开信息):

  • 网页文本(General Web):~50%
  • 代码:~17%
  • 数学相关:~5%
  • 多语言(非英文):~10%
  • 书籍与长文本:~8%
  • 学术文献:~5%
  • 其他高质量来源:~5%

配比策略的关键决策:

  • 过多代码数据会降低自然语言流畅度;过少则影响代码能力
  • 中文数据量直接决定中文能力,但过多会挤压英文数据质量
  • 数学、推理相关数据可提升推理能力,但需与质量过滤结合

训练稳定性

大规模 LLM 训练极易出现不稳定问题,常用稳定化技术:

梯度裁剪(Gradient Clipping)

当梯度范数超过阈值(如 1.0)时,将梯度等比缩放至阈值以内,防止梯度爆炸导致的训练崩溃。

学习率预热(Warmup)

训练开始时学习率从极小值(如 0)线性增长至目标学习率(如 3e-4),通常经过 1000-2000 步预热,随后按余弦或线性调度衰减。

过高的初始学习率在训练早期可能导致参数更新剧烈,引发不可恢复的损失尖峰(Loss Spike)。

精度选择

  • BF16(Brain Float 16):大多数现代 LLM 的训练精度,比 FP16 具有更大的数值范围,不易溢出
  • FP32 Master Copy:优化器状态(动量、二阶矩)保存为 FP32,确保数值精度

损失尖峰处理

训练过程中偶发的损失尖峰是大模型训练的常见问题:

  • 通常通过从最近 Checkpoint 重启并跳过出问题的数据 batch 解决
  • LLaMA 3 技术报告记录了训练过程中约 50 次 Checkpoint 重启

训练成本估算

大规模预训练的成本随模型规模急剧增长:

模型参数量训练 Token估计 GPU/TPU估计成本(美元)
GPT-3175B300B约 1000 A100 天约 460 万
LLaMA 3 8B8B15T约 1.3M H100 小时约 150 万
LLaMA 3 70B70B15T约 6.4M H100 小时约 700 万
GPT-4未知(~1T MoE)未知未公开估计 >1 亿
DeepSeek-V3671B MoE14.8T约 2.8M H800 小时约 557 万

代表性预训练语料

  • The Pile(2.0):EleutherAI 整理的 825GB 多源数据集,完全公开
  • RedPajama v2:Together AI 整理的 30T Token 开放数据集(含过滤后的 Common Crawl)
  • Dolma:AI2 整理,用于训练 OLMo 系列,完全开源且详细记录数据来源
  • FineWeb(Hugging Face):从 Common Crawl 精心过滤的高质量英文网页数据,约 15T Token

这些公开语料集使研究人员可以复现 LLM 训练实验,推动了开源 LLM 的研究透明度。