预训练

前置知识

阅读本文前,建议先了解:


一、概述

预训练(Pre-training)是 LLM 训练的第一阶段,也是最关键的一步。在这个阶段,模型会在海量文本数据上进行训练,学习语言的基本规律和知识。

预训练后的模型称为 Base Model(基座模型)或 Foundation Model(基础模型)。

[!比喻] 预训练类比 如果把 LLM 比作培养一个人才:

预训练 = 小学到大学的通识教育

博览群书,学习各学科知识,成为通才。但还没有专业技能,也不懂得社会规范。


二、预训练的任务

2.1 核心任务:预测下一个词

预训练的核心任务非常简单:预测下一个词(Next Token Prediction)。

训练数据示例:

"太阳从东边升起"
"今天天气很好"
"人工智能是..."
"Python 是一种..."
...

模型学习:看到"太阳从",预测"东";看到"今天",预测"天气"...

这个过程不需要人工标注答案——互联网上的文本本身就是最好的”答案”。这种训练方式称为自监督学习(Self-supervised Learning)。

为什么不需要标注?

传统监督学习:需要人工标注”输入→输出”对,成本极高

自监督学习:文本本身就是”输入 + 输出”,天然标注

  • 输入:“太阳从”
  • 输出:“东边升起”

2.2 双向预测 vs 单向预测

根据注意力机制的不同,预训练有两种主要方式:

方式说明代表模型用途
单向预测只能根据上文预测下文,适合生成任务GPT 系列、LLaMA文本生成、对话
双向预测可以同时看到上下文,适合理解任务BERT文本分类、命名实体识别
单向预测(因果语言模型):
[我] [爱] [学习] → 只能从左到右
         ↑
    只能看到左边

双向预测(掩码语言模型):
[我] [MASK] [学习] → 可以看到"我"和"学习"来预测 MASK
         ↑
    左右都能看到

为什么 ChatGPT 类模型都用单向预测?

因为生成任务需要从左到右的因果注意力,双向预测会”偷看”未来的内容,无法用于生成。


三、预训练数据

3.1 数据规模

预训练需要海量的文本数据:

模型训练数据规模参数量
GPT-3~3000 亿 Token175B
LLaMA 2~2 万亿 Token7B-70B
Falcon~3.5 万亿 Token40B-180B
Grok-1~5 万亿 Token314B

Token 与文字的关系

  • 英文:1 个 Token ≈ 4 个字母 ≈ 0.75 个单词
  • 中文:1 个 Token ≈ 1.5 个汉字

1 万亿 Token ≈ 数百万本书的内容

3.2 数据来源

预训练数据通常来自:

数据源比例(LLaMA 示例)说明
网页~60%CommonCrawl 等公开网页数据
代码~15%GitHub 等开源代码
书籍~10%Project Gutenberg 等公开书籍
维基百科~5%多语言维基百科
其他~10%新闻、论坛、问答等

数据配比的影响

代码比例高的模型,代码能力更强;多语言数据比例高的模型,多语言能力更好。

3.3 数据处理流程

原始数据
    ↓
数据清洗(去重、去噪声、质量过滤)
    ↓
分词(Tokenization)
    ↓
打包成训练序列
    ↓
预训练

关键步骤说明

步骤目的方法
去重防止模型死记硬背MinHash、LSH 等算法
质量过滤提升数据质量启发式规则、分类器
分词将文本转为 TokenBPE、WordPiece、SentencePiece

四、预训练学到了什么

经过海量文本的训练,模型逐渐学会:

能力说明示例
语言规律语法、句法、表达方式主谓宾结构、时态变化
世界知识历史、科学、文化常识”巴黎是法国首都”
推理能力逻辑思考、因果关系”如果 A→B,B→C,则 A→C”
代码能力编程语法、常见算法排序、递归、动态规划
涌现能力规模足够大后,出现意想不到的能力思维链、多步推理

预训练不学什么

预训练学习的是相关性而非因果性

  • 模型知道”打雷”后经常跟”下雨”
  • 但不懂打雷为什么会导致下雨

这解释了为什么模型有时会”一本正经地胡说八道”。


五、Base Model 的特点

预训练完成后的模型称为 Base Model,它的特点是:

5.1 能力

  • ✅ 具备广泛的知识
  • ✅ 能够续写文本
  • ✅ 有一定的推理能力
  • ✅ 可以完成补全任务

5.2 局限

  • ⚠️ 不太会”对话”(倾向于续写而不是回答)
  • ⚠️ 可能生成不安全的内容
  • ⚠️ 不太理解人类偏好
  • ⚠️ 无法遵循指令
输入: "什么是人工智能?"

Base Model 可能的输出:
"什么是人工智能?这是一个值得探讨的问题。
近年来,人工智能技术发展迅速..."
(倾向于续写问题,而不是直接回答)

Chat Model 的输出:
"人工智能(AI)是计算机科学的一个分支,
致力于创建能够执行通常需要人类智能的任务的系统。"
(直接回答问题)

六、预训练的挑战

6.1 计算成本

预训练需要巨大的计算资源:

模型GPU 数量训练时间估算成本
GPT-3数千块 V100数月数百万美元
LLaMA 2数千块 A100数月数千万美元

6.2 数据质量

  • 重复数据:会导致模型过拟合
  • 低质量数据:会影响模型输出质量
  • 偏见数据:会继承到模型中(性别偏见、种族偏见等)

6.3 训练稳定性

  • 损失尖峰(Loss Spike):训练损失突然上升,可能恢复也可能崩溃
  • 梯度问题:梯度消失或爆炸,深层网络常见
  • 分布式训练:数千块 GPU 的协调和容错

七、预训练的计算细节

7.1 训练步数计算

预训练的步数由数据规模和 batch size 决定:

训练步数 = 总 Token 数 / Batch Size

示例(LLaMA 2 训练):
- 总 Token 数:2 万亿
- Batch Size: 4M tokens

训练步数 ≈ 2×10^12 / 4×10^6 = 50 万步

7.2 计算复杂度

对于 Transformer 模型,前向和反向传播的总计算复杂度:

FLOPs per token ≈ 6 × 参数量

训练总 FLOPs = 6 × 参数量 × Token 总数

示例(7B 模型,1 万亿 Token):
总 FLOPs = 6 × 7×10^9 × 10^12 = 4.2×10^22 FLOPs

为什么是 6 倍?

  • 前向传播:2 × 参数量(一次乘法 + 一次加法)
  • 反向传播:4 × 参数量(梯度计算和更新)
  • 合计:6 × 参数量

7.3 训练时间估算

训练时间 = 总 FLOPs / (GPU 数量 × GPU 算力 × MFU)

示例(用 A100 训练 7B 模型):
- A100 FP16 算力:312 TFLOPs
- GPU 数量:512 块
- MFU(Model Flop Utilization):40%

训练时间 ≈ 4.2×10^22 / (512 × 312×10^12 × 0.4) ≈ 82 天

MFU 是什么?

MFU(Model Flop Utilization)是实际利用率,通常在 30%-50% 之间。

剩余时间消耗在:内存读写、GPU 间通信、数据加载等。


八、预训练的发展趋势

8.1 数据方面

趋势说明代表工作
高质量数据更注重数据质量而非数量LLaMA 2
多语言数据增加非英语数据的比例LLaMA 3
合成数据用模型生成数据辅助训练phi-1, phi-2
长文本数据增加长文档比例,提升长上下文能力Claude

8.2 效率方面

趋势说明
混合精度训练FP16/BF16 降低显存占用
模型并行将模型拆分到多块 GPU(张量并行、流水线并行)
数据并行多 GPU 同时处理不同数据
ZeRO 优化零冗余优化器,减少显存占用

8.3 架构方面

趋势说明
MoE(Mixture of Experts)稀疏激活,增加参数量但不增加计算量
注意力优化FlashAttention、MQA、GQA 等
长上下文支持从 4K 到 100K+ 上下文窗口

九、总结

预训练是 LLM 训练的第一阶段:

  1. 任务:预测下一个词,自监督学习
  2. 数据:万亿级别 Token,来自网页、书籍、代码等
  3. 产出:Base Model,具备通用知识和语言能力
  4. 挑战:计算成本高、数据质量要求高、训练稳定性
  5. 趋势:高质量数据、合成数据、MoE 架构、长上下文

预训练后的 Base Model 需要经过微调人类对齐,才能成为真正”好用”的 Chat Model。


延伸阅读


更新日期更新内容
2026-04-09初始版本
2026-04-12增加计算细节、发展趋势