原题:大模型 SFT / RFT 是什么?做过相关工作吗?
这道题的问法很「套路」——表面上是让你背两个缩写,实际上面试官想确认三件事:你知不知道大模型训练的完整链路、你能不能讲清两种微调在「数据形态」和「优化目标」上的根本差异、以及你有没有真正跑通过一版。
监督微调(SFT)和强化学习微调(RFT)是大语言模型领域两种核心的定制化技术,两者在原理、实现方式和应用场景上存在显著差异。一句话概括:
- SFT(Supervised Fine-Tuning,监督微调):通过标注好的输入 – 输出对,以监督学习方式调整预训练模型参数,使其适配特定任务;
- RFT(Reinforcement Fine-Tuning,强化学习微调):借鉴强化学习原理,通过奖励信号引导模型生成高质量输出,而非直接依赖标准答案。
本文按「全景定位 → SFT 拆解 → RFT 拆解 → 全面对比 → 完整流水线 → 面试答题要点」的顺序展开。
一、先建立全景:大模型训练的三个阶段
讲 SFT 和 RFT 之前,必须先说清它们在整条训练链路中的位置。一个对话式大模型从零到可用,通常要经历三个阶段:
阶段一:预训练(Pre-training)
目标:在海量无标注语料上做「下一个 token 预测」
产出:Base 模型 —— 有知识、会续写,但不会「听懂指令」
↓
阶段二:监督微调(SFT)
目标:用「指令 – 回答」配对数据,教会模型遵循指令、按格式输出
产出:SFT 模型 —— 能对话、能干活,但回答质量不稳定
↓
阶段三:偏好对齐(Alignment / RFT / RLHF / DPO)
目标:用奖励信号或人类偏好,把「能答」提升到「答得好」
产出:Chat 模型 —— 有用、诚实、无害
可以这样记忆三者的分工:
- 预训练学「知识」—— 模型读了什么;
- SFT 学「格式」—— 模型该用什么方式回答;
- RFT / 对齐学「偏好」—— 在多种可能的回答中,哪一种更符合人的期望。
高频追问:能不能跳过 SFT 直接做强化学习?——理论上可以,但实践中几乎不会这么做。Base 模型输出极不稳定,采样出来的候选答案质量太低,奖励模型打分几乎无意义,强化学习会非常难收敛。所以工业界的标准做法是「SFT 冷启动 → 再做偏好对齐」。
二、SFT(监督微调)
2.1 定义与本质
监督微调(Supervised Fine-Tuning)是通过标注好的输入 – 输出对,以监督学习方式调整预训练模型参数,使其适配特定任务的过程。它的优化目标非常直接,就是标准的语言建模损失(交叉熵):
L_SFT = – Σ_t log P_θ( y_t | x, y_<t )
其中 x 是指令(prompt),y 是人工写好的标准答案。模型被要求逐 token 地模仿人写的答案。
2.2 SFT 数据长什么样
SFT 的核心资产是指令数据集。最常见的单轮格式:
{
"instruction": "把下面这句话翻译成英文。",
"input": "强化学习微调能让模型输出更符合人类偏好。",
"output": "Reinforcement fine-tuning aligns model outputs
with human preferences."
}
多轮对话格式(更贴近 Chat 场景):
{
"conversations": [
{"role": "system", "content": "你是一个严谨的金融助手。"},
{"role": "user", "content": "什么是 SFT?"},
{"role": "assistant", "content": "SFT 是监督微调,指用标注好的"},
"指令-回答对……"},
{"role": "user", "content": "那它和 RFT 的区别呢?"},
{"role": "assistant", "content": "核心区别在于优化目标:SFT 模仿"},
"标准答案,RFT 最大化奖励……"}
]
}
数据来源通常有三类:
- 人工标注 / 业务数据:质量最高、最贴合场景,但成本昂贵;
- 强模型蒸馏(Self-Instruct):用 GPT 级别的模型批量生成指令与答案(如 Alpaca 的做法),成本低、覆盖广,需要注意版权与去污;
- 模板化构造:把已有的结构化数据(表格、知识库、工单记录)用模板转成指令数据,适合垂直领域。
2.3 训练时的三个关键细节
这三个细节是区分「跑过」和「只是看过」的分水岭:
(1)Loss Mask(只对回答部分算损失)
训练时把 prompt 部分的 label 设为 -100,让模型只在「回答」部分被监督。原因是指令本身是条件,不该被当作需要预测的目标;否则模型会学着「生成问题」,而不是「回答问题」。
(2)多轮数据的损失分配
多轮对话里通常只对 assistant 回复计算损失,但如果希望模型也学会追问或理解上下文,也可以给部分 user turn 加权。样本拼接(packing)时要格外小心,必须保证不同样本之间不互相「看见」(用 attention mask 或 position id 隔离),否则会引入跨样本污染。
(3)超参经验值(以 7B 模型全参数微调为例)
|
超参数 |
常见取值 |
|
学习率 |
1e-5 ~ 2e-5(比预训练小一个量级) |
|
Epoch |
2 ~ 3 轮(数据量少可到 3~5 轮) |
|
全局 Batch Size |
64 ~ 128 |
|
学习率调度 |
cosine 衰减 + warmup ratio 0.03 |
|
精度 |
bf16,常配合梯度检查点、ZeRO-2/3 |
2.4 全参数微调 vs 参数高效微调(PEFT)
|
方案 |
做法 |
优点 |
缺点 |
|
全参数微调 |
更新所有权重 |
拟合能力最强 |
显存开销大、易灾难性遗忘 |
|
LoRA / QLoRA |
只训练低秩增量 |
显存友好、可插拔、可合并 |
超大领域迁移时上限略低 |
工程上的常见选择:数据量在几千到几万条、且只是做格式 / 风格适配时,LoRA 基本够用;要把大量新知识「烧」进模型(如全新领域术语体系)时,才考虑全参数微调。
2.5 SFT 的常见坑
- 数据质量远比数量重要:LIMA 等工作表明,几千条经过精心筛选的高质量指令数据,效果可以超越几十万条噪声数据。宁可少而精。
- 灾难性遗忘:在单一任务上猛训,模型原本的通用能力会退化。解决办法是混入通用数据(通常 5%~30% 的通用 SFT 数据)做数据配比。
- 过拟合到「模板腔」:所有回答都长一个样、开头结尾都是套话。需要保证 prompt 和输出风格的多样性。
- 标注不一致:同一类问题在不同标注员手里答案风格冲突,模型会学出「精神分裂」的输出。上线前必须做标注一致性校验。
- 数据污染:蒸馏数据里混入了评测集题目,导致评测分数虚高。
2.6 代码示意(Loss Mask 的实现)
def build_labels(input_ids, prompt_len):
"""把 prompt 部分 mask 掉,只在回答部分计算损失"""
labels = input_ids.clone()
labels[:prompt_len] = -100 # -100 会被 CrossEntropyLoss 忽略
return labels
def collate_fn(batch, tokenizer):
texts, prompt_lens = [], []
for item in batch:
prompt = render_prompt(item)
full = prompt + item["output"] + tokenizer.eos_token
texts.append(full)
prompt_lens.append(len(tokenizer(prompt)["input_ids"]))
enc = tokenizer(texts, padding=True, truncation=True,
return_tensors='pt')
enc["labels"] = torch.stack([
build_labels(ids, plen)
for ids, plen in zip(enc["input_ids"], prompt_lens)
])
return enc
核心就一句:labels 里把 prompt 位置填成 -100。
三、RFT(强化学习微调)
3.1 定义与本质
强化学习微调(Reinforcement Fine-Tuning, RFT)借鉴强化学习原理,通过奖励信号引导模型生成高质量输出,而非直接依赖标注数据。它和 SFT 的根本差异在于监督信号的形式:
- SFT 的答案是写死的:输入 x → 唯一正确输出 y,模型被要求逐 token 模仿;
- RFT 的答案是采样出来的:模型先自己生成若干候选,再由奖励信号告诉它哪些好、哪些差,模型据此调整生成分布。
这个差别带来的最大好处是:对于「什么算好答案」难以用唯一标准答案描述的任务(如有用性、安全性、文风、推理过程),强化学习可以用偏好和评分来优化,而不必写一个标准答案。
3.2 名词辨析:RFT 其实有两个含义
面试时这是一个很好的「加分点」——RFT 这个缩写在业界被两种技术共用,最好主动澄清:
|
缩写 |
全称 |
含义 |
出处 |
|
RFT |
Reinforcement Fine-Tuning |
强化学习微调,用奖励信号 + RL 算法优化策略模型 |
本文主线;OpenAI 于 2024 年将「用少量专家数据 + 评分器定制专家模型」的方案也命名为 RFT |
|
RFT |
Rejection sampling Fine-Tuning |
拒绝采样微调:对同一问题采样多条推理路径,筛掉答案错误的,对正确的路径去重后做 SFT |
出自 Scaling Relationship on Learning Mathematical Reasoning with LLMs |
两者思路相关但本质不同:拒绝采样微调(Rejection sampling FT)本质上仍然是监督微调,只是数据由模型自己生成、再由规则筛选;而强化学习微调(Reinforcement FT)走的是策略梯度优化。答题时说清「我指的是哪一种」,能立刻体现你的严谨度。
3.3 RFT 的四大组件
标准的 RLHF(基于人类反馈的强化学习)系统里有四个模型同时在显存里,这也是它「贵」的根源:
|
组件 |
作用 |
是否训练 |
|
Policy Model(策略模型) |
被优化的对象,负责生成回答 |
训练 |
|
Reward Model(奖励模型) |
给「问题 + 回答」打分,作为奖励信号 |
冻结 |
|
Reference Model(参考模型) |
通常是 SFT 后的模型副本,提供 KL 约束的基准 |
冻结 |
|
Critic / Value Model(价值模型) |
估计状态价值,用于计算优势函数、降低方差 |
训练 |
3.4 RLHF-PPO 的完整流程
以最经典的 PPO 方案为例,一轮训练的流程是:
1. 采样(Rollout)
从 prompt 集中取一批问题,用 Policy Model 采样生成回答
2. 打分(Reward)
Reward Model 对每个「问题 + 回答」打分 r
3. 约束(KL Penalty)
计算 Policy 与 Reference 的输出分布差异 KL,防止模型训飞
最终奖励:R = r – β · KL(π_policy ‖ π_ref)
4. 估计优势(Advantage)
Critic 估计每个 token 位置的价值,用 GAE 计算优势 A
5. 策略更新(PPO Clip)
按截断后的重要性采样比更新 Policy,同时更新 Critic
6. 循环回到 1
PPO 的优化目标可以写成:
max_π E[ R(x, y) ] – β · D_KL( π(·|x) ‖ π_ref(·|x) )
KL 项的意义:它是整条链路的「安全绳」。没有它,策略模型会迅速漂移到奖励模型的漏洞区域,输出一堆高分但人看不懂的内容。
3.5 奖励信号从哪来
强化学习的关键在于奖励怎么定义。实践中常见的四种:
- 人类偏好奖励(RM / RLHF):人工对多个回答排序 → 训练一个 Reward Model → 用它自动打分。通用但成本高,且 RM 本身可能被「骗」。
- 规则 / 可验证奖励(Verifiable Reward):答案是否正确可以直接判定(数学题对答案、代码跑单测、SQL 执行结果比对)。这条路线在推理模型上被大规模采用,因为它几乎无法被 reward hacking。
- AI 反馈(RLAIF):用强模型代替人来打分,成本大幅下降,适合规模化。
- 人工 / 业务指标:如客服场景的满意度、转化率,延迟高但最贴近真实目标。
3.6 简化方案:DPO、GRPO
PPO 要同时维护四个模型,工程复杂度和显存开销都很高,因此出现了若干「去 RL 化」或「轻量化」的替代方案:
|
方法 |
核心思路 |
相比 PPO 的变化 |
|
DPO(Direct Preference Optimization) |
把「最大化奖励 – KL 约束」的目标解析地转换为一个二分类偏好损失,直接在偏好对上优化策略 |
不需要 Reward Model,不需要 Critic,不需要在线采样;训练稳定、开销接近 SFT |
|
GRPO(Group Relative Policy Optimization) |
对同一个 prompt 采样一组(group)回答,用组内相对得分作为优势 |
去掉 Critic 网络,显存和工程复杂度大幅下降;在数学 / 代码等可验证任务上效果突出 |
|
Rejection Sampling FT |
采样多条 → 筛出正确的 → 去重 → 做 SFT |
完全退化为监督微调,最简单,但只能利用正样本 |
DPO 的损失函数中,y_w 是被偏好的回答,y_l 是被拒绝的回答,目标是拉大好答案与坏答案之间的相对概率差:
L_DPO = -log σ( β · [ log π(y_w|x)/π_ref(y_w|x)
– log π(y_l|x)/π_ref(y_l|x) ] )
3.7 RFT 的常见坑
- Reward Hacking(奖励黑客):模型找到了奖励模型的漏洞,比如靠堆长度、堆华丽辞藻、反复道歉来刷分,实际质量反而下降。缓解手段是 KL 约束、奖励归一化、定期更新 RM。
- 长度偏置:RM 普遍偏好长回答,训练后模型话越来越多。需要做长度去偏或长度惩罚。
- 训练不稳定:PPO 对超参敏感,容易出现崩溃或 KL 爆炸。实践中要盯紧 reward 曲线、KL 曲线和输出长度三条线。
- 奖励模型泛化差:RM 只在训练分布内可靠,遇到分布外输入会乱打分,把策略带偏。
- 成本:一次 PPO 训练通常需要数倍于 SFT 的算力与时间。
四、SFT 与 RFT 全面对比
|
对比维度 |
SFT(监督微调) |
RFT(强化学习微调) |
|
监督信号 |
人工 / 蒸馏写好的标准答案 |
奖励模型评分或规则打分 |
|
优化目标 |
最大化标准答案的似然(模仿) |
最大化期望奖励,同时受 KL 约束(探索) |
|
数据形态 |
指令 – 回答对 (x, y) |
偏好对 (y_w, y_l) 或采样回答 + 分数 |
|
是否需要 Reward Model |
不需要 |
需要(DPO / GRPO 可省) |
|
计算成本 |
低,接近预训练的微调量级 |
高,需在线采样 + 多模型常驻显存 |
|
训练稳定性 |
高,收敛可预期 |
较低,超参敏感、易崩 |
|
擅长解决 |
格式对齐、指令遵循、领域知识注入、任务范式迁移 |
有用性 / 安全性等主观质量、推理能力提升、「好答案」难以定义的问题 |
|
主要风险 |
过拟合模板腔、灾难性遗忘 |
Reward Hacking、长度偏置、KL 崩塌 |
|
数据成本 |
需要高质量「答案」 |
只需「偏好排序」或「对错判定」,标注更轻 |
|
典型产出 |
能按格式干活的模型 |
更「好用」、更符合人类偏好的模型 |
一句话记忆:SFT 教模型「照着做」,RFT 教模型「做得更好」。
五、实战:一条完整的对齐流水线
如果面试官问「你们是怎么做的」,可以按下面这条工业界通行的流水线回答:
Step 1 数据准备
收集业务指令 → 清洗去重 → 人工标注 / 强模型蒸馏 → 质检
↓
Step 2 SFT 冷启动
全参或 LoRA 微调,让模型学会任务格式与领域表达
↓
Step 3 偏好数据采集
用 SFT 模型对同一问题采样 N 个答案(N 常取 4~8)
→ 人工排序 / 规则判定 / 强模型打分
↓
Step 4 训练 Reward Model(若走 PPO 路线)
用偏好对训练打分模型
↓
Step 5 强化学习优化
PPO / GRPO / DPO 三选一,迭代若干轮
↓
Step 6 评估与迭代
通用能力 + 自建业务评测集 + 安全红队测试
→ 回到 Step 1 或 Step 3
方案选型的经验法则:
- 团队第一次做对齐、算力有限、任务以格式 / 风格为主 → SFT 就够了,别一上来搞 PPO;
- 已经有一版 SFT 模型,想进一步提升主观质量、有偏好数据 → DPO,性价比最高;
- 任务有明确的对错判定(数学、代码、SQL、合规判定) → GRPO / 可验证奖励的强化学习,收益最明显;
- 追求极致效果且算力充足 → 完整的 PPO + 持续更新 RM。
六、面试答题要点
6.1 30 秒版(用于开场)
SFT 和 RFT 是大模型微调的两个阶段。SFT 用标注好的指令 – 回答对,以监督学习方式让模型学会遵循指令、适配任务,优化目标是最大化标准答案的似然;RFT 则是用强化学习,让模型自己采样生成,再由奖励信号告诉它哪些输出更好,优化目标是在 KL 约束下最大化期望奖励。实践中一般先用 SFT 做冷启动,再用 RLHF / DPO 做偏好对齐。
6.2 展开版(三步结构)
- 先定位:把三个阶段(预训练 → SFT → 对齐)讲清楚,说明 SFT 解决「会不会」,RFT 解决「好不好」;
- 再对比:围绕「监督信号形式 / 优化目标 / 数据形态 / 成本与稳定性 / 适用场景」五个维度展开,配一张对比表讲;
- 落到实践:说明你们项目的数据从哪来、用了什么方案(全参 / LoRA / DPO / PPO)、踩过什么坑(数据质量、Reward Hacking、长度偏置)、怎么评估的。
6.3 常见追问预判
- 「为什么必须先 SFT 再做 RL?」→ Base 模型不会遵循指令,采样出的候选质量太差,奖励信号没有区分度,RL 极难收敛且不稳定;SFT 相当于给策略一个合理起点。
- 「有了 SFT,为什么还需要 RL?」→ 很多任务(有用性、安全性、文风)写不出唯一标准答案,但可以让人或规则判断「哪个更好」。RL 能优化这类无法用标准答案描述的目标,且能利用负样本信息——SFT 只告诉你「应该说什么」,RL 还会告诉你「不该说什么」。
- 「DPO 和 PPO 怎么选?」→ 算力有限、追求稳定和上手速度选 DPO;有可验证奖励、追求推理能力上限选 GRPO / PPO。DPO 是离线方法,依赖静态偏好数据;PPO 是在线方法,能持续探索。
- 「怎么判断 Reward Model 被 hack 了?」→ 监控 reward 曲线持续上升但人工评测分数下降、输出长度异常增长、高频套话 / 特殊符号增多,都可能是 reward hacking 的信号。
- 「SFT 需要多少数据?」→ 质量优先,几千到几万条高质量数据通常就有效果;数量堆到几十万条但质量差,反而会拉低效果。
- 「怎么评估微调效果?」→ 通用能力用公开榜单(MT-Bench、AlpacaEval、Arena-Hard),业务能力用自建评测集 + 人工盲评,同时必须做安全红队测试;只看 loss 或只看单一榜单都不可靠。
七、总结
- SFT 的本质:用「标准答案」做监督,让模型学会遵循指令、按格式输出,优化目标是最大化答案似然,稳定、便宜、见效快;
- RFT 的本质:用「奖励信号」做引导,让模型在采样 – 打分 – 更新的循环中提升输出质量,优化目标是在 KL 约束下最大化期望奖励,上限高但复杂、昂贵、易踩坑;
- 两者的关系:不是替代,而是串联。SFT 是 RFT 的必要前置,RFT 是 SFT 的质量放大器;
- 技术演进:PPO(四模型,复杂但经典)→ GRPO(去 Critic,配合可验证奖励)→ DPO(去 RL,离线偏好优化)→ Rejection Sampling FT(退化为 SFT,最简单),主线是在效果与工程复杂度之间不断寻找更优的折中。
免责声明:技术细节以各原始论文与官方文档为准;文中涉及的超参数取值为常见工程经验范围,不同模型规模、框架与数据分布下会有差异。强化学习与对齐方向迭代极快,正式回答前建议结合最新的论文与官方技术报告做补充。
如果觉得有用,欢迎点赞收藏,后续会继续整理 Agent / 大模型方向的面试技术复盘系列。






