一、一个大模型的典型"生命周期":
-
预训练(Pre-training)
- 模型预训练最初是做一个很"笨"的任务:输入大量互联网文本,目标是:给定前面一串词,预测下一个词的概率。
- 通过这个任务,模型学会语言结构、常识、基础推理。
- 结果:一个"读过很多书,但没人教过它如何当助手"的通才模型。
-
后训练(Post-training / Alignment)
这一阶段专门为"让模型变成好用、听话、安全的助手",典型包括:
- 指令微调 / 监督微调(SFT):教它听懂指令、按要求答题。
- 偏好学习 / 强化学习(RLHF、DPO 等):教它"更礼貌、更安全、更符合人类偏好"。
二、后训练(微调+强化学习)
后训练 :是一整个阶段的总名称,要解决"如何把通用模型变成好助手"的问题。
后训练既可以用"标准答案"(SFT),也可以用"好坏反馈"(RLHF、DPO)
text
海量无标注文本
│
【预训练 Pre-training】
│
▼
通用语言模型(只会续写)
│
┌─────────┴─────────┐
▼ ▼
【后训练 / 对齐 Post-training】
(这是一个阶段 / 大框架)
通常包含两大类方法:
1. 微调(监督式) 2. 强化学习/偏好优化
- 指令微调 SFT - RLHF
- 安全 SFT - DPO / 其它偏好方法
│ │
└─────────二者配合────────┘
│
▼
助手化模型(ChatGPT 类)
│
▼
再做领域/产品级微调(SFT/LoRA)
三、微调
凡是"有标准答案,让模型学会模仿"的训练,基本都可以归到"微调"一类。
3.1 典型微调任务类型
常见微调任务:
-
指令跟随(Instruction Following)
- 让模型学会"看到指令就知道该怎么回答",而不是继续胡乱生成。
- 多用于聊天机器人、Copilot 类产品。
-
问答 / 知识增强
- 比如法律问答、医学问答、公司内部知识库问答。
- 希望模型在某领域回答更正确。
-
文本生成任务
- 摘要、改写、翻译、风格转换、文案生成等。
-
代码生成 / 辅助编程
- 微调在大量高质量代码和问题-代码对上。
-
工具调用 / 结构化输出
- 教模型如何按规定格式输出 JSON、SQL、API 调用参数等。
3.2 数据格式:常见 Schema
对话式微调中,最常见的是"多轮对话/指令-回复"格式,例如:
json
{
"messages": [
{"role": "user", "content": "帮我写一封面试感谢信,语气真诚正式"},
{"role": "assistant", "content": "尊敬的XXX先生/女士:\n..."}
]
}
或更通用的 "instruction / input / output" 三元组:
json
{
"instruction": "对下面文章写一个100字摘要",
"input": "(原文内容......)",
"output": "(摘要内容......)"
}
知识问答类:
json
{
"question": "XXX 法律中的第10条主要内容是什么?",
"answer": "第10条规定......"
}
核心是:让模型看到"指令/问题/情境" → 学会输出"正确的回答/动作"。
3.3 监督微调(SFT):最基础也最核心的微调
核心思想
监督微调的本质很简单:
给定输入 X(指令/上下文),模型输出 Y(回答),我们有一组"理想回答"作为标签,
让模型尽量把输出向"理想回答"靠拢。
数学上就是:
- 输入:prompt(包括系统提示 + 用户问题等)
- 输出:模型生成的 token 序列
- 损失函数:交叉熵(Cross-Entropy Loss),训练模型最大化"正确答案"每个 token 的概率。
SFT 的作用
- 把「下一词预测」能力转化为「听懂指令 + 回答」能力
- 把原本可能"散漫"的生成,引导到"多步骤推理"、"工具使用"、"结构化输出"等特定模式。
例子:
假设原始预训练模型,对于输入:
"帮我写一封面试感谢信"
可能会继续生成一段与"感谢信"相关,但风格、格式很随机的文本。
通过 SFT,在大量"指令 → 理想回答"的训练对上,它学会:
- 应该使用"尊敬的....../此致/敬礼"等格式
- 字数大致控制
- 语言风格符合要求(正式、礼貌)
SFT 的数据来源
- 专家人工标注(最贵但质量最好)
- 从现有优秀答案中收集(如论坛优质回答、文档 QA 等)
- 使用更强的模型自动生成的"伪标签"(self-instruct、自我蒸馏)
典型做法:
先用 GPT-4 之类强模型生成大量高质量指令-回答对,再用这些数据微调较小的开源模型。
3.4 实际微调中的注意点
-
数据质量比模型技巧更重要
- 垃圾数据微调,往往会让模型退化(变笨/更爱胡编)。
- 特别要避免大量错误答案、不一致风格、相互矛盾的样本。
-
部署时的组合:RAG + 微调
- 很多场景会结合检索增强生成(RAG):
- 先从知识库检索相关文档
- 再把文档 + 问题一起喂给模型生成回答
- 微调则用于让模型更好"使用"这些文档和遵循格式、风格。
- RAG + 轻量微调往往比"只靠微调"更灵活、可控。
- 很多场景会结合检索增强生成(RAG):
四、强化学习(Reinforcement Learning,RL)
- 微调:老师给题 + 标准答案,学生对照答案学,教学生标准解题方法
- 强化学习: 老师不告诉你标准答案,只说"这次答得好/一般/很糟",给你一个分数,通过"奖励/惩罚"让你自己摸索怎么改进。
从数据形式看:
-
微调的数据:
- (输入 X, 标准输出 Y)
- 明确每一步/每个 token 什么是正确。
-
强化学习的数据:
- (状态 s, 动作 a, 奖励 r) 或更长的序列
- 你只知道做完这个动作后得到一个"好/坏"的分数,不知道标准答案是什么。
在 LLM 里,强化学习常这么用:
- 状态:prompt(问题、对话上下文)
- 动作:模型生成的回答
- 奖励:由人类或奖励模型打分:
- 符合指令吗?
- 是否安全?
- 是否有用、礼貌、逻辑清晰?
目标:
学到一种生成方式,让"期望奖励"最大。
4.1 RLHF(Reinforcement Learning from Human Feedback)
RLHF(Reinforcement Learning from Human Feedback) 就是大家常听说的"从人类反馈中强化学习",典型流程:
- 用 SFT 先得到一个"不太差的助手模型"。
- 收集人类偏好数据:
- 给同一个问题,让模型生成多个回答 A、B、C...
- 人类对它们排序:A > C > B。
- 用这些偏好训练一个"奖励模型 RM":
- 输入:问题 + 回答
- 输出:这个回答有多好(一个分数)。
- 做强化学习(如 PPO):
- 模型生成回答 → 奖励模型打分 → 高分的生成方式被鼓励、低分被惩罚。
- 同时用一个约束防止模型偏离原 SFT 模型太远(KL 正则)。
优点:
- 能较好地控制模型行为:礼貌、安全、少胡编乱造(但不能完全避免)。
- 可以用较少的人类标注(偏好比较)影响很大的行为空间。
问题:
- 实现复杂,需要训练奖励模型 RM + PPO 这种 RL 算法。
- 不稳定,容易出现多样性下降、偏见固化等问题。
- 训练成本高。
4.2 DPO 等"直接偏好优化"方法
为了简化 RLHF 中复杂的 RL 步骤,后来提出了一系列"直接偏好优化"(Direct Preference Optimization,DPO)方法。
核心想法:
- RLHF 里,奖励模型 + PPO 是间接用人类偏好调整模型。
- 能不能不训练奖励模型、不做复杂 RL,而直接用"优劣回答对"对模型做监督式优化?
DPO 中数据形式是这样的:
- 对同一个 prompt,有两种回答:y₊(更好)、y₋(更差),这是人类(或大模型)打的标签。
- 目标:让模型更偏向 y₊,不喜欢 y₋。
- 训练时,通过一个特殊的损失函数,让模型在"条件概率比值"上靠近"人类偏好"。
直观:
给你两个回答 A 和 B,人类说 A 比 B 好,DPO 直接调整模型参数:
"在看到这个问题时,输出 A 的概率提高,输出 B 的概率降低。"
DPO 的优点:
- 不需要训练奖励模型,减少一个大模块。
- 不需要复杂的 RL 算法,优化过程看起来像"扩展版的监督学习",比较稳定。
- 在很多实验中,效果接近甚至超过 RLHF。
所以现在开源社区里,DPO/IPO/KTO 等"偏好优化"方法变得非常流行。
五、用一个具体例子来串起来
假设你要做一个"医疗咨询助手模型",整个过程大致可能是:
-
预训练阶段(一般由大厂完成)
- 模型看遍海量文本、百科、论文,一些医疗知识也顺带学到一点。
-
后训练阶段(让它变成合格助手)
1)SFT(监督微调)
- 用大量"指令-回答"数据:
- "请用通俗语言解释高血压的危害" → 理想回答
- "患者咳嗽3周伴低热,可能的原因有哪些?" → 合理的鉴别诊断思路
- 教会模型听指令 & 医学回答的基本格式、风格。
2)偏好/强化学习
- 为同一问题,生成多个回答,让医生打分"哪个更合理、更安全"。
- 用 DPO 或 RLHF 让模型偏好"医生更认可的回答风格":
- 不乱给确诊
- 经常提醒"不能替代线下就医"
- 对不确定情况表达不确定,而不是瞎编。
3)安全对齐
- 针对"自杀"、"违法医疗行为"类问题,加一批训练数据教会模型:
- 及时给出劝导和求助建议
- 拒绝提供危险操作方法。
- 用大量"指令-回答"数据:
在这个流程中:
- 起到"让模型知道该怎么答题"的,是 监督微调(SFT)。
- 起到"让模型答得更像一个有职业素养的医生助手"的,是 偏好学习 / 强化学习。