一个典型大语言模型(LLM)的生命周期可以概括为:
1 | 原始数据 |
预训练主要解决“能力和知识从哪里来”,SFT 解决“如何按指令表现”,偏好优化解决“多个看似合理的答案中更偏好哪个”,推理系统解决“如何以可接受的成本和延迟把能力交付出来”。
查看更多
1. 模型训练、推理的定义
1.1 模型训练(Training)
训练就是“让模型做题、对答案、根据错误调整内部参数,然后反复练习”。
可以把模型想成一个有数十亿个旋钮的机器:
- 给它一条训练数据;
- 模型先给出预测;
- 用 loss(损失)表示它错得有多严重;
- 反向传播判断哪些旋钮应向哪个方向调整;
- 优化器按学习率小幅调整旋钮;
- 重复数十亿次后,模型的预测逐渐改善。
几个名词的直白解释:
- Loss:本次做题的错误分数,通常越低越好。
- Gradient(梯度):告诉每个参数“应该往哪个方向改”。
- Learning Rate(学习率):每次改多少。太大容易改坏,太小训练太慢。
- Optimizer(优化器):综合当前和历史梯度,决定具体怎么改,常见的是 AdamW。
训练包含两个核心过程:
- 前向传播:输入经过模型,得到 logits、概率和损失。
- 反向传播:使用链式法则计算梯度,优化器更新权重。
1.2 模型推理(Inference)
推理是模型训练完成后的“实际答题”。此时通常不再修改参数,只根据用户输入生成结果。
例如用户输入“北京是中国的”,模型可能给下一个词打分:
1 | “首都” 92% |
模型选出“首都”后,再根据“北京是中国的首都”预测下一个 token,如“。”。它就是这样一个 token 接一个 token 地生成完整回答。
推理时通常经历:
- Prefill(预填充):并行处理整个输入 prompt,构建 KV Cache;偏计算密集。
- Decode(解码):逐 token 生成,并复用 KV Cache;常受显存带宽和访存制约。
- Sampling(采样):从概率分布选择 token,例如 greedy、temperature、top-k、top-p。
2. 大语言模型为什么能通过“预测下一个 token”学习能力
2.1 Tokenization
模型不直接处理文字,而是处理 token ID。常见分词方法包括 BPE、WordPiece、Unigram。一个 token 可能是一个汉字、词的一部分、标点或代码片段。
分词器影响:
- 序列长度与训练/推理成本;
- 多语言效率;
- 数字、代码和特殊格式的表示;
- 词表大小与 embedding 参数量。
2.2 自回归语言建模目标
自回归模型的训练题型始终很简单:遮住下一个 token,让模型猜。
1 | 原文:机器学习是人工智能的一个重要分支。 |
猜中正确 token 的概率越高,loss 越低;如果模型把概率大量分给错误 token,loss 就会升高。
直觉上,想要持续准确预测下一个 token,模型必须从海量文本中压缩统计规律,包括语法、语义、事实关联、常见推理模式和任务格式。但模型学到的是参数化的条件概率分布,不等于建立了无误的事实数据库,因此会产生幻觉。
2.3 Transformer 的最小原理
Transformer 的关键是自注意力,可以理解为:模型阅读当前词时,会判断上下文中的哪些词最值得关注。
例如:
1 | 小王把书交给了小李,因为他明天要考试。 |
模型处理“他”时,会尝试判断“小王”和“小李”谁与“明天要考试”关系更强。每一层、每一个注意力头都可以从不同角度建立这种联系。
在技术术语里:Query 表示“我在找什么”,Key 表示“我能被怎样匹配”,Value 表示“匹配后实际取走的信息”。Causal Mask 则像一块挡板,保证模型训练时不能偷看后面的正确答案。
典型 Decoder-only LLM 由 embedding、位置编码、多层注意力、MLP、残差连接和归一化组成。多头注意力允许模型在不同子空间关注不同关系。
2.4 Teacher Forcing 与 Exposure Bias
训练时,预测第 (t) 个 token 的上下文通常是真实 token;推理时,上下文包含模型自己先前生成的 token。这种训练与推理输入分布的差异称为 exposure bias,早期错误可能在生成中不断累积。
3. 从数据到模型:训练流水线
3.1 数据工程
数据质量通常比盲目增加低质数据更重要。常见环节包括:
- 数据许可、隐私与合规检查;
- 语言识别、编码和格式标准化;
- 文档级、段落级、近似去重;
- 垃圾文本、广告、色情、恶意代码和 PII 过滤;
- 质量打分与高质量数据上采样;
- 领域、语言、代码、数学等数据配比;
- benchmark 去污染(decontamination);
- 切分、packing 与 tokenization。
3.2 训练一个 batch 的过程
1 | 样本 → tokenize → padding/packing → forward |
对聊天 SFT,常见做法是只对 assistant 回复计算 loss,system/user token 作为条件但被 loss mask 屏蔽。是否屏蔽 prompt 取决于训练目标,并非绝对规则。
3.3 关键超参数
| 超参数 | 含义 | 常见风险 |
|---|---|---|
| Learning Rate | 每次更新幅度 | 太大不稳定或遗忘,太小学不动 |
| Batch Size | 一次更新使用的 token/样本数 | 太小梯度噪声大,太大可能泛化变差且占显存 |
| Sequence Length | 单条训练序列最大长度 | 注意力计算和显存通常随长度快速增长 |
| Epoch | 数据被完整遍历的次数 | 小数据多 epoch 容易过拟合 |
| Warmup | 训练初期逐渐升高学习率 | 缺失时初期易发散 |
| Weight Decay | 对权重的正则约束 | 太强导致欠拟合 |
| Gradient Clipping | 限制梯度范数 | 防止偶发梯度爆炸,但不能掩盖系统性不稳定 |
| Dropout | 随机失活 | 微调中取值需结合数据规模和基座模型 |
例如每张卡一次放 2 条数据,累积 8 次梯度,一共有 4 张数据并行卡,那么一次真正更新相当于看了 2 × 8 × 4 = 64 条数据。这就是有效 batch size。
比较实验时更应关注每步 token 数,而不仅是样本数,因为样本长度可能差异很大。
3.4 常见训练异常
| 现象 | 可能原因 | 排查思路 |
|---|---|---|
| Loss 突然 NaN | 学习率过大、FP16 溢出、异常样本、除零 | 检查 loss scale、梯度范数、数据、logits |
| Train loss 降、验证变差 | 过拟合、数据泄漏、分布不一致 | 早停、正则、扩数据、检查划分与去重 |
| 模型格式混乱 | chat template 不一致、EOS/label mask 错误 | 抽查 tokenized 样本和解码结果 |
| 领域能力升、通用能力降 | 灾难性遗忘、领域数据占比过高 | 混入通用数据、降低 LR、PEFT、多任务训练 |
| Reward 升、真实质量降 | reward hacking、奖励模型偏差 | 多维评估、保留集、人评、KL/约束、改 reward |
| 多卡结果异常 | 并行切分或梯度同步错误 | 单卡对照、检查 seed、通信与 checkpoint |