在微调大模型时,我们常手里攥着一堆数据:同一个问题,一个回答逻辑严密(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 决定了模型的“上限”,确保它能说好话、说真话。

把同一组数据拆开用,既节省了数据采集成本,又在逻辑上形成了一套从“学习”到“反思”的完整闭环。

Tags: ,

Categories:

Updated:

Leave a comment