大模型训练时,经常会看到这些词:
- Pretraining
- CPT
- SFT
- DPO
- PPO
下面我们就分别看看它们到底是什么?各自有什么作用?以及它们之间有什么区别?
1. Pretraining:预训练
是什么?
从零开始训练一个大模型。
模型一开始什么都不会,通过阅读大量文本、代码和资料,逐渐学会语言、知识和代码规律。
有什么作用?
训练出一个基础模型,也就是基座模型。
需要什么数据?
大量没有人工标注的文本和代码。
例如:
{
"text": "Redis 是一种基于内存的键值数据库。"
}
举个例子
让模型阅读大量中文文章、英文文章和代码,模型逐渐学会写文章、回答问题和生成代码。
是否需要基座模型?
不需要。
因为它本身就是用来训练基座模型的。
2. CPT:继续预训练
是什么?
在已有基座模型上,继续使用某个领域的资料训练。
有什么作用?
让模型更懂某个专业领域。
例如:
- 医疗
- 法律
- 教育
- 金融
- Redis
- 企业内部业务
需要什么数据?
某个领域的大量纯文本。
例如:
{
"text": "Redis 的 RDB 持久化会定期生成数据快照。"
}
举个例子
把大量 Redis 文档交给模型训练,让模型更加熟悉 Redis 的专业知识。
是否需要基座模型?
需要。
3. SFT:监督微调
是什么?
给模型准备“问题和标准答案”,教模型应该怎样回答。
有什么作用?
让模型学会:
- 回答问题
- 执行指令
- 总结文章
- 生成代码
- 输出固定格式
需要什么数据?
输入和标准答案。
例如:
{
"question": "什么是 RDB?",
"answer": "RDB 是 Redis 的快照持久化方式。"
}
对话格式也可以:
{
"messages": [
{
"role": "user",
"content": "什么是 RDB?"
},
{
"role": "assistant",
"content": "RDB 是 Redis 的快照持久化方式。"
}
]
}
举个例子
用户问:
RDB 和 AOF 有什么区别?
训练数据中提供标准回答,模型就会逐渐学会怎样正确回答这个问题。
是否需要基座模型?
需要。
4. DPO:直接偏好优化
是什么?
同一个问题,准备一个好回答和一个差回答,让模型学习哪个回答更好。
有什么作用?
让模型的回答更加:
- 准确
- 清楚
- 有用
- 符合人的偏好
需要什么数据?
问题、好回答和差回答。
例如:
{
"prompt": "什么是 RDB?",
"chosen": "RDB 是 Redis 的快照持久化方式,可以定期保存内存数据。",
"rejected": "RDB 是 Redis 的一种功能。"
}
其中:
chosen:更好的回答
rejected:较差的回答
举个例子
模型已经会回答问题,但回答比较模糊。
通过 DPO,可以让模型更倾向于生成清楚、完整的回答。
是否需要基座模型?
需要,一般在 SFT 之后进行。
5. PPO:强化学习优化
是什么?
模型生成回答后,由奖励模型或评分规则给回答打分,再根据分数调整模型。
有什么作用?
让模型不断提高回答质量,更符合人的要求。
需要什么数据?
主要包括:
- 用户问题
- 模型生成的回答
- 回答获得的分数
例如:
问题:什么是 RDB?
回答 A:完整、准确,得 9 分
回答 B:模糊、错误,得 2 分
模型会逐渐提高高分回答的生成概率。
举个例子
模型生成多个回答,评分系统认为其中一个回答更准确,模型就会朝这个方向继续优化。
是否需要基座模型?
需要,通常还需要 SFT 模型和奖励模型。
总结
| 名称 | 简单理解 | 使用的数据 |
|---|---|---|
| Pretraining | 从零训练模型 | 大量文本和代码 |
| CPT | 学习专业知识 | 领域纯文本 |
| SFT | 学习怎样回答 | 问题和标准答案 |
| DPO | 学习哪个回答更好 | 好回答和差回答 |
| PPO | 根据分数优化回答 | 模型回答和奖励分数 |

被折叠的 条评论
为什么被折叠?



