预训练、领域继续预训练与后训练链条的起点

1. 预训练的核心思想

预训练(Pretraining)是大型语言模型(LLM)能力构建的根基。其核心思想是在海量无标注数据上,通过自监督学习任务,学习通用的语言表征与生成能力

预训练之所以有效,是因为:

  1. 语言本身是结构化的:无论是文本、代码还是数学表达式,都遵循一定的语法和语义规律。无监督地接触大量文本,可以让模型自动学到这些规律。
  2. 通用表征的迁移性:在海量数据上学习到的表征具有通用性,可以迁移到各种下游任务中。
  3. 压缩即理解:模型需要将海量的语言知识压缩到模型参数中,这个压缩过程本身就是对语言的理解。

预训练的目标不是让模型记住具体的文本内容,而是让模型学会生成符合语言规律的文本的能力。这种能力体现在:

  • 语法正确性:生成符合目标语言语法规则的句子
  • 语义连贯性:生成在上下文中有意义的文本
  • 世界知识:记住或推理出关于世界的各种事实
  • 推理能力:进行多步推理来回答问题或完成复杂任务

2. 语言模型预训练目标

2.1 自回归语言建模(Autoregressive Language Modeling)

自回归语言建模是目前最主流的预训练目标,也是 GPT 系列模型的核心方法。

给定一个文本序列 ,其中每个 是一个 token,自回归语言模型的目标是最大化下一个 token 的条件概率

其中 表示所有在 之前的 token。

数学推导:从最大似然到交叉熵损失

语言模型参数 的最大似然估计(MLE)目标是:

取负对数似然并除以序列长度,得到平均负对数似然损失:

在实践中,通常直接使用交叉熵损失来实现等效的目标。将真实标签记为 ,模型输出记为 ,则交叉熵损失为:

由于 是 one-hot 编码的真实 token,上式化简为:

token 概率与条件概率的链式分解

根据概率论的链式法则,序列的联合概率可以分解为条件概率的乘积:

取对数得到:

这正是自回归语言模型优化的目标函数。通过最大化所有 token 的条件概率对数和,我们实际上是在最大化整个序列的联合概率。

Teacher Forcing 训练方式

在训练阶段,自回归语言模型采用 Teacher Forcing 策略:

  • 模型的输入是整个序列的 prefix(
  • 但损失只反向传播到当前 token 的预测位置
  • 不论模型在前面的预测是否正确,都以真实的前缀作为输入

具体流程:

  1. 输入序列 通过 embedding 层得到
  2. 经过 Transformer 层处理得到隐藏状态
  3. 每个位置 的输出 logits 经过 softmax 得到概率分布
  4. 计算损失
  5. 对所有位置的损失求和或平均得到最终损失

Teacher Forcing 的优势是训练效率高(可以并行计算所有位置的预测),缺点是存在 exposure bias 问题(训练时模型看到的是真实前缀,推理时生成的是模型自己的预测)。

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

掩码语言建模是 BERT 等模型使用的预训练目标,与自回归建模有本质不同。

核心思想:随机遮盖输入序列中的某些 token,模型需要根据上下文(双向)预测被遮盖的 token。

典型的掩码比例是 15%,其中:

  • 80% 替换为 [MASK] token
  • 10% 替换为随机 token
  • 10% 保持不变

与自回归的对比

特性自回归 LM掩码 LM
建模方向单向(从左到右或从右到左)双向
训练目标
代表模型GPT 系列BERT
适合任务生成任务理解任务(分类、NER等)
推理效率慢(自回归生成)快(无需自回归)

MLM 本质上是一个去噪自编码器(Denosing Autoencoder),它的损失函数为:

其中 是被掩码的位置集合, 是移除了掩码 token 后的上下文。

由于 MLM 预训练的模型(如 BERT)不是生成式的,在 LLMs 时代,主流的预训练方法仍然是自回归语言建模

3. 预训练的规模法则(Scaling Laws)

神经语言模型的性能与模型规模、数据规模和计算量之间存在明确的幂律关系(Power Law)。

GPT-4 论文和 Chinchilla 论文给出的规模法则

其中 是验证集困惑度(perplexity), 是模型参数数量,

Kaplan 等人(2020)发现的规模法则

其中 是拟合常数。

Chinchilla 法则:对于给定的计算预算 ,最优的模型参数数量 和数据量 满足:

其中 是常数,Chinchilla 建议

实际意义

  • 模型太小、数据太少都会导致欠拟合
  • 模型太大、数据太少会导致训练不充分
  • 盲目增大模型而不增大数据会导致性能提升不显著

4. 从头预训练 vs 继续预训练

4.1 基本概念

从头预训练(From Scratch Pretraining):从随机初始化的参数开始,在大规模通用语料上进行预训练。这是训练全新模型时的流程。

继续预训练(Continued Pretraining):在一个已经预训练好的模型基础上,用特定领域的数据继续训练。也称为 Domain-Adaptive Pretraining 或 Continued Pretraining。

4.2 为什么继续预训练能注入领域知识

继续预训练之所以有效,有以下几个关键原因:

  1. 参数空间的继承性:模型已经在通用数据上学到了语言的基本规律(语法、语义、推理能力),继续预训练是在这个良好的参数空间基础上微调,而非从零开始。模型在领域数据上的 fine-tune,本质上是在已有知识的基础上进行修改。

  2. 领域分布的注入:通用预训练的数据分布往往是 broad 的(如 Common Crawl、Wikipedia、Books)。继续预训练将模型的知识分布从通用分布拉向特定领域分布。数学上,这相当于在条件概率空间中进行分布变换:

  1. 隐式编码的领域知识:模型的参数编码了丰富的知识,继续预训练会在模型的隐层激活中形成针对特定领域的”专家模式”。

4.3 为什么继续预训练不是简单”再训一遍”

继续预训练和从头预训练看似都是”在数据上训练”,但有本质区别:

方面从头预训练继续预训练
起点随机初始化预训练好的 checkpoint
训练数据需要海量通用数据(数 TB)可以用较小的领域数据(数 GB ~ 数 TB)
学习率需要从零调试通常用比较小的学习率
训练稳定性容易不稳定,需要 warm-up相对稳定,但仍需注意
知识保留无需考虑需要考虑灾难性遗忘
目标学习通用语言能力注入领域知识同时保留通用能力

继续预训练不是简单地在领域数据上”再训一遍”,而是在保持原有能力的同时注入新知识。这要求更细致的训练策略设计。

5. 继续预训练的问题与挑战

5.1 数据分布漂移(Data Distribution Drift)

当模型在领域数据上继续训练时,如果领域数据分布与通用数据分布差异过大,可能导致模型能力的偏移:

  • 通用能力退化:模型在通用任务上的表现下降(如问答、推理能力变差)
  • 领域偏移:模型可能过度适应领域数据的特定模式,导致生成风格与领域过于紧密

缓解策略

  • 使用较小的学习率
  • 混合适用通用数据和领域数据(通常领域数据占 5%~30%)
  • 在领域数据上进行轻量级继续训练

5.2 灾难性遗忘(Catastrophic Forgetting)

灾难性遗忘是指模型在学习新知识时,完全或部分丢失了之前学到的知识。在继续预训练中,这是一个核心挑战。

数学视角:令 为预训练模型的分布, 为领域数据分布。继续预训练优化:

但这个目标可能导致 偏离 过远,使 差距过大。

缓解策略

  1. 正则化方法:在损失中加入参数距离正则项

  2. 弹性权重固化(Elastic Weight Consolidation, EWC):对不同参数施加不同的 penalty,重要参数 penalty 大

  3. 记忆 replay:在训练过程中混入少量原始预训练数据

  4. 早停(Early Stopping):监控验证集上的通用能力指标,及时停止领域继续训练

5.3 领域过拟合(Domain Overfitting)

如果继续训练数据过于单一(如只在医学文献上训练),模型可能过拟合到领域的特定风格或术语,而丧失对其他表达方式的理解。

症状

  • 在领域内评测表现极好
  • 但在通用评测或领域外数据上表现显著下降
  • 生成的文本过于”领域化”,缺乏通用性

缓解策略

  • 数据多样化:领域数据内部也要保持多样性
  • 控制训练步数:避免过度训练
  • 保持数据 mix:混入通用数据

6. 工程流程

6.1 预训练数据构建

6.1.1 数据来源与类型

通用预训练数据主要来源:

数据源特点规模
Common Crawl海量、噪音大、需要清洗~数十 TB
Wikipedia高质量、多语言~数十 GB
Books长文本、叙事性强~数十 GB
GitHub代码、结构化~数百 GB
Reddit/StackExchange对话/问答、高质量~数十 GB
C4清洗后的 Common Crawl~数百 GB

领域继续预训练数据来源:

领域数据来源
医学PubMed 论文、医学教科书、临床指南
法律裁判文书、法律条文、合同文本
金融财报、新闻、分析师报告
科学arXiv 论文、科研数据集
代码GitHub 仓库、代码问答

6.1.2 数据清洗流程

  1. 启发式规则过滤

    • 去除非目标语言文本(使用语言检测工具如 langdetect)
    • 去除过短或过长的文档(一般设 100~5000 characters)
    • 去除特殊字符过多或格式混乱的文本
  2. 质量评分与过滤

    • 使用 perplexity 或 语言模型打分过滤低质量文本
    • 使用成人内容分类器过滤有害内容
    • 使用垃圾信息检测器过滤广告等低价值内容
  3. 去重(Deduplication)

    • 句子级去重:去除完全重复的句子
    • 文档级去重:使用 MinHash 或 SimHash 计算文档相似度,去除高度相似的文档
    • 子串去重:去除包含过长相同子串的文档(防止模板化生成)
  4. 数据打标(Annotation)

    • 使用模型或规则为数据打领域标签、质量标签等
    • 便于后续的分层采样

6.1.3 分桶与采样策略

分桶(Bucketing):将数据按某种维度(如文档长度、领域、质量分数)分到不同的桶中。

采样策略

  1. 均匀采样(Uniform Sampling):每个文档被采样的概率相同。简单但可能导致低质量数据过度采样。

  2. 质量加权采样(Quality-Weighted Sampling):根据质量分数调整采样概率: 其中 是超参数,控制采样分布的尖锐程度。

  3. 领域混合采样(Domain Mixing):在继续预训练中,通常需要在领域数据和通用数据之间平衡: 通常领域数据占比 5%~30% 为宜。

  4. 温度采样(Temperature Sampling):在质量分布上应用温度: 其中 使分布更平滑, 使分布更尖锐。

训练时的动态采样

  • 每个 epoch 重新计算采样权重
  • 在线混洗(online shuffling)避免模型看到有序的领域聚类
  • 控制每个领域在单个 batch 中的比例

6.2 Tokenizer 与词表

Tokenizer 的选择

Tokenizer 将原始文本转换为 token 序列。常见的 Tokenizer 类型:

类型特点代表
WordPiece子词级别、BPE 变体BERT
BPE字节级合并GPT-2
SentencePiece语言无关、支持 UNKLLaMA
Word-level词级别早期模型

词表是否需要改变

场景是否需要新词表说明
通用预训练通常需要根据语言特点定制词表
领域继续预训练(通用 tokenizer)不需要通用 tokenizer 通常已覆盖足够词汇
领域继续预训练(领域特殊 token)可能需要添加如添加 < medicine > 等特殊 token

添加领域特殊 token 的方法

  1. 直接在 tokenizer 词表中添加新 token(推荐)
  2. 使用特殊的前缀 token 标记领域
  3. 在 embedding 层添加额外维度(不推荐,增加复杂度)

注意事项

  • 新增 token 数量不宜过多(一般 < 1000)
  • 新增 token 需要在预训练数据中充分出现
  • 如果领域有大量未登录词(OOV),考虑扩展词表

6.3 预训练超参数策略

6.3.1 学习率(Learning Rate)

预训练学习率策略

  1. 学习率曲线:通常使用 cosine annealinglinear decay with warm-up

    • Warm-up:1%~10% 的训练步数,学习率从很小逐渐增加到峰值
    • 峰值学习率:通常在 之间(取决于模型大小)
    • Annealing:cosine 或 linear 衰减到峰值的 10%~100%
  2. 模型规模与学习率的关系(经验法则): 其中 是模型参数数量。

  3. 从头预训练 vs 继续预训练

    • 从头预训练:需要较大学习率和更长的 warm-up
    • 继续预训练:学习率通常为首轮预训练的 10%~50%

6.3.2 Batch Size

Batch Size 的设置

训练阶段Batch Size(tokens)说明
小模型预训练0.5M ~ 4M模型较小,可以用较小 batch
大模型预训练4M ~ 16M需要大 batch 保证训练稳定
继续预训练1M ~ 4M通常比从头预训练小

Batch Size 与学习率的关系: 通常遵循线性 scaling 规则:batch size 翻倍,学习率也可以适当增加。

6.3.3 训练步数(Training Steps)

训练步数的估算

给定模型参数数量 ,数据量 (tokens),Chinchilla 建议的 optimal training tokens 约为:

对于 7B 模型,建议训练约 140B tokens。

继续预训练的步数

场景训练 tokens 数说明
轻度领域适应1B ~ 10B领域数据有限或希望保持通用能力
中度领域适应10B ~ 50B有较多领域数据
重度领域定制50B ~ 200B领域非常专业,如医学、法律

早停策略

  • 监控验证集困惑度
  • 监控领域相关 benchmark
  • 设置 patience(如 1000 步无提升则停止)

6.3.4 Checkpoint 管理

Checkpoint 类型

  1. Full Checkpoint:保存模型全部参数

    • 存储量大(7B 模型约 14GB)
    • 可以直接恢复训练
  2. Distributed Checkpoint(DCP):分片保存,便于大模型并行恢复

  3. Adapter Checkpoint(PEFT 场景):只保存 adapter 参数

保存策略

  • 定期保存:每 1000~10000 步保存一次
  • 最佳模型保存:验证集性能提升时保存
  • 保守策略:保存最近 N 个 checkpoint,防止存储溢出

6.4 评测策略

6.4.1 预训练评测指标

指标说明理想值
验证集困惑度(Val Perplexity)模型对验证集的预测不确定度越低越好
验证集损失(Val Loss)交叉熵损失的验证集均值越低越好
Bits-per-character (BPC)困惑度的对数形式越低越好

6.4.2 领域继续预训练评测

通用能力评测(确保不遗忘):

  • MMLU(多任务语言理解)
  • Hellaswag(常识推理)
  • ARC(推理挑战)
  • GSM8K(数学推理)

领域能力评测(确保学到领域知识):

领域评测集
医学MedQA, MedMCQA
法律Bar Exam, LexGLUE
代码HumanEval, MBPP
科学ScienceQA, ARC-Challenge

评测频率

  • 每 1000~5000 步在评测集上评测一次
  • 保存最佳 checkpoint

7. 预训练与后训练的边界

7.1 训练阶段划分

预训练阶段 (Pretraining)
    ↓
    ├── 从头预训练 (Pretraining from Scratch)
    │       └── 学习通用语言能力
    │
    └── 继续预训练 (Continued Pretraining)
            ├── 领域继续预训练 (Domain-Adaptive Pretraining)
            └── 风格/能力继续预训练 (Skill-Adaptive Pretraining)

后训练阶段 (Post-Training)
    ↓
    ├── 监督微调 (Supervised Fine-Tuning, SFT)
    ├── 奖励模型训练 (Reward Modeling)
    ├── 人类反馈强化学习 (RLHF / RLAIF)
    └── 模型对齐 (Alignment)

7.2 各阶段的核心差异

阶段目标数据类型数据规模学习率
从头预训练学习通用语言能力无监督文本数十 TB较大
继续预训练注入领域知识无监督领域文本数 TB中等
SFT学习任务能力有监督任务数据数千 ~ 数百万条较小
RLHF对齐人类偏好偏好数据数千 ~ 数十万条很小

7.3 判断标准:什么时候用继续预训练

适合使用继续预训练的场景

  1. 领域知识缺失:模型在特定领域的问答或任务上表现差,需要注入领域知识
  2. 领域术语不熟悉:领域有大量专业术语,通用模型对这些术语的理解不准确
  3. 领域风格需要:生成的文本需要符合特定领域的风格(如法律文书、医学报告)
  4. 数据可获取:能够获取到足够多(至少数 GB)的领域文本数据

不适合使用继续预训练的场景

  1. 任务定义明确:如果下游任务是明确的分类、问答等,可以直接用 SFT
  2. 数据有限:如果领域数据不足(< 1GB),继续预训练效果可能有限
  3. 通用能力优先:如果需要在保持强大通用能力的同时快速学习领域知识,可能需要 LoRA 等 PEFT 方法
  4. 实时性要求高:继续预训练需要大量计算,如果需要快速适应,few-shot 或 retrieval 更合适

8. 对比总结

8.1 从头预训练 vs 继续预训练

维度从头预训练继续预训练
起点随机初始化参数 预训练好的 checkpoint
数据需求海量通用数据(数十 TB)领域数据(数 GB ~ 数 TB) + 少量通用数据
计算成本极高(数百万 GPU 小时)中等(数千 ~ 数万 GPU 小时)
训练时间数周 ~ 数月数天 ~ 数周
学习率较大,需要 warm-up较小(首轮的 10%~50%)
知识保留无需考虑需要考虑灾难性遗忘
训练稳定性较难,容易 loss spike相对稳定
数据构建复杂度高(需要大规模采集、清洗、去重)中等(领域数据相对集中)
Tokenizer通常需要定制通常复用通用 tokenizer
评测重点通用能力基准领域能力 + 通用能力不下降
适用场景训练全新模型领域适应、模型定制
典型模型GPT-3, LLaMA, PaLM医学大模型、法律大模型
风险训练不收敛、loss spike领域过拟合、灾难性遗忘
恢复训练需要完整 checkpoint可以从 mid-checkpoint 恢复

8.2 领域继续预训练流程清单

阶段一:数据准备

  • 确定目标领域和应用场景
  • 收集领域原始数据(至少 5GB 以上)
  • 评估数据质量(去重、去垃圾)
  • 进行语言检测,确保数据为目标语言
  • 文档级去重(SimHash/MinHash)
  • 数据清洗:去除启发式规则过滤低质量内容
  • 使用语言模型打分过滤低质量文档
  • 为领域数据打标签(用于分层采样)
  • 混合适用通用数据(领域数据占比 5%~30%)
  • 最终数据审计:确认数据分布符合预期

阶段二:Tokenizer 配置

  • 评估现有 tokenizer 对领域文本的覆盖率
  • 如果领域 OOV 率高,考虑扩展词表
  • 添加领域特殊 token(如 < medicine >
  • 验证 tokenizer 正常工作

阶段三:训练配置

  • 确定模型规模(7B / 13B / 70B 等)
  • 确定训练 tokens 数量目标
  • 设置学习率(峰值为首轮预训练的 10%~50%)
  • 配置学习率调度(cosine annealing + warm-up)
  • 设置 batch size(1M ~ 4M tokens)
  • 配置梯度累积(如果显存不足)
  • 确定 optimizer(AdamW / Lion 等)
  • 设置 weight decay
  • 配置混合精度训练(FP16/BF16)

阶段四:实验设置

  • 确定评测基准(通用 + 领域)
  • 设置评测频率(每 1000~5000 步)
  • 配置 checkpoint 保存策略
  • 设置日志记录
  • 准备恢复训练的 checkpoint 管理

阶段五:训练执行

  • 进行小规模试跑(验证流程正确性)
  • 监控训练 loss 曲线
  • 监控验证集困惑度
  • 定期在评测基准上评估
  • 观察通用能力是否下降
  • 观察领域能力是否提升
  • 如有异常(loss spike、能力退化),及时调整

阶段六:评估与迭代

  • 最终评测:领域 benchmark 提升是否符合预期
  • 通用能力评测:是否在可接受范围内
  • 生成质量评估:领域文本生成是否符合预期
  • 如有问题,根据问题类型调整策略:
    • 领域过拟合 → 减少训练步数 / 增加通用数据 mix
    • 通用能力退化 → 减少领域数据比例 / 降低学习率
    • 领域能力不足 → 增加训练步数 / 优化领域数据质量
  • 保存最佳 checkpoint
  • 整理训练经验和数据配置

9. 参考文献与资源

  1. GPT-3: Brown et al., “Language Models are Few-Shot Learners”, NeurIPS 2020
  2. Chinchilla: Hoffmann et al., “Training Compute-Optimal Large Language Models”, NeurIPS 2022
  3. PaLM 2: Anil et al., “PaLM 2: Improving Language Model Performance Across Multiple Dimensions”, 2023
  4. LLaMA 2: Touvron et al., “Llama 2: Open Foundation and Fine-Tuned Chat Models”, 2023
  5. BERT: Devlin et al., “BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding”, NAACL 2019
  6. Scaling Laws: Kaplan et al., “Scaling Laws for Neural Language Models”, 2020
  7. Continued Pretraining: Gururangan et al., “Domain-Adaptive Pretraining Objectives for Language Models”, ACL 2020
  8. Catastrophic Forgetting: McCloskey & Cohen, “Catastrophic Interference in Connectionist Networks”, 1989

本文档为预训练与继续预训练的入门指南,涵盖从数学原理到工程实践的核心内容。