在微调大模型时,我们常手里攥着一堆数据:同一个问题,一个回答逻辑严密(Chosen),另一个回答虽然能看但略显平庸甚至有误(Rejected)。
很多人纠结:是只把好的那个拿去微调(SFT),还是直接拿两个去做强化学习(DPO)?答案是:全都要,但要分先后。
第一阶段:SFT(监督微调)—— 建立“好学生”的底子
如果你手里只有“好的答案”,这叫监督微调(Supervised Fine-Tuning)。
1. 为什么它是必选项?
SFT 的核心是 “概率最大化”。通过学习 (Prompt, Chosen),模型在学习一种说话的“范式”:
- 指令遵循:问 A 答 A,不要答非所问。
- 格式规范:学会写 JSON、学会用 Markdown、学会特定的语气。
- 知识注入:让模型记住你业务场景下的专业术语。
2. 局限性
只做 SFT 的模型是一个“死记硬背”的复读机。它知道什么是对的,但它不知道什么是错的。当遇到没见过的问题时,它极易产生幻觉(Hallucination),因为它没有“由于不确定而拒绝回答”的这种辨别力。
第二阶段:DPO(直接偏好优化)—— 注入“灵魂”与“判断力”
当你把“好答案”和“坏答案”同时喂给模型时,真正的魔术发生了。
1. 从“背诵”到“考试”
DPO 不再是简单地告诉模型“这题选 A”,而是给它一个对比:“这题选 A 更好,选 B 虽然也行但很烂。”
通过计算两个答案在模型中的相对概率,DPO 强迫模型拉大两者的差距:
\[L_{DPO} = - \log \sigma \left( \beta \log \frac{\pi_{\theta}(y_w | x)}{\pi_{ref}(y_w | x)} - \beta \log \frac{\pi_{\theta}(y_l | x)}{\pi_{ref}(y_l | x)} \right)\]其中 $y_w$ 是好答案,$y_l$ 是坏答案。
2. 为什么要用 DPO 压轴?
- 逻辑纠偏:如果坏答案(Rejected)里有逻辑漏洞,模型会深刻记住这种思维方式是“扣分项”。
- 安全性对齐:通过对比,模型能学会拒绝诱导性提问。
- 上限突破:它能让模型的表现超过 SFT 阶段的上限,因为模型学会了在多种可能性中选择“最优解”。
落地指南:一鱼两吃的标准流程
刘伟清,如果你准备动手,请参考这个标准的工程链路:
| 步骤 | 操作 | 数据资源 | 核心产出 |
|---|---|---|---|
| Step 1 | SFT 预热 | (Prompt, Chosen) |
一个听话、格式正确的 Baseline 模型。 |
| Step 2 | 权重保存 | 保存 Step 1 的模型。 | 作为下一步的 Reference Model。 |
| Step 3 | DPO 进阶 | (Prompt, Chosen, Rejected) |
一个具备逻辑辨别能力、幻觉更少的智能模型。 |
避坑指南:坏答案不是越烂越好
在准备 DPO 数据时,有一个误区:坏答案是不是写得越离谱越好?
错。 最有效的 Rejected 数据是那种“看起来很像对的,但细节有误”的回答。这种细微的差别最能逼迫模型产生深度思考。如果坏答案只是乱码,模型学不到任何有意义的区分逻辑。
总结
SFT 决定了模型的“下限”,确保它能说人话;而 DPO 决定了模型的“上限”,确保它能说好话、说真话。
把同一组数据拆开用,既节省了数据采集成本,又在逻辑上形成了一套从“学习”到“反思”的完整闭环。
Leave a comment