图 1:DPO 把三步流程折成一条直通路线。
先说明属性:这是一篇经典题解析,题目出自本地历史面试资料整理,与任何公司的当前招聘无关。DPO 是大模型对齐方向的高频考点,面试官真正想听的往往不是「DPO 不用强化学习」这句结论,而是它凭什么可以不要、又付出了什么代价。
先看清 RLHF 原本要走的三步。
2022 年的 InstructGPT 论文确立了经典的三段式流程:先在基座模型上做监督微调(SFT);再收集标注员对多个回答的排序数据,训练一个奖励模型(RM)来模仿人类偏好打分;最后用 PPO 强化学习,让策略模型在「奖励最大化」和「不偏离参考模型太远」之间做更新。
这条链路的工程痛点很具体。PPO 阶段内存里要同时挂着策略模型、参考模型、奖励模型、价值网络四个大块头;每一步都要让策略模型在线采样生成回答,再交给奖励模型打分,采样本身又贵又不稳;价值网络的收敛、KL 系数的调校,每一项都是调参坑。奖励模型本身还是偏好数据的近似,策略模型会钻它误差的空子——分数越刷越高,回答质量却在劣化,这就是常说的奖励黑客。
DPO 的关键观察:奖励模型可以被「绕过去」。
2023 年的 DPO 论文从 RLHF 的优化目标出发做了两步代数变形。第一,给定奖励函数时,这个目标的最优策略可以用参考策略和奖励闭式地写出来;第二,把这个关系反过来用,奖励就可以用「策略与参考模型的对数概率比」来表达。把这个表达代入偏好对的概率模型,奖励模型整个消掉了,剩下的损失里只有策略模型自己和冻结的参考模型。
最终得到的损失函数简洁得不像强化学习:
L = -log σ( β · [ (log π(chosen) - log πref(chosen)) - (log π(rejected) - log πref(rejected)) ] )
其中 σ 是 sigmoid,π 是待训练的策略,πref 是 SFT 后冻结的参考模型,β 控制偏离参考模型的强度。它的形状就是一个二分类损失:让策略相对参考模型在 chosen 回答上的对数概率提升得比 rejected 多。差距拉得越开,sigmoid 越接近 1,损失越低。
用一组数字直观感受一下。
下面这段代码用 Node.js 22.15.0 直接运行(node dpo.js),模拟训练中策略对数概率变化对损失的影响:
function dpoLoss(beta, ref, cur) {
// chosen 是被偏好的回答,rejected 是被拒绝的回答
const margin = (cur.chosen - ref.chosen) - (cur.rejected - ref.rejected);
return -Math.log(1 / (1 + Math.exp(-beta * margin))); // -log sigmoid
}
const beta = 0.1;
const ref = { chosen: -3.0, rejected: -3.5 }; // 冻结的参考模型
const cases = [
["起点(策略=参考)", { chosen: -3.0, rejected: -3.5 }],
["训练一段后", { chosen: -2.8, rejected: -3.7 }],
["训练更久", { chosen: -2.2, rejected: -4.5 }],
["方向走反", { chosen: -3.8, rejected: -2.6 }],
];
for (const [name, cur] of cases)
console.log(`${name}: loss = ${dpoLoss(beta, ref, cur).toFixed(4)}`);
实测输出:
起点(策略=参考): loss = 0.6931
训练一段后: loss = 0.6733
训练更久: loss = 0.6072
方向走反: loss = 0.7818
起点时 margin 为 0,损失恰好是 ln 2 ≈ 0.693;chosen 与 rejected 的差距拉开后损失稳步下降;一旦策略反而偏爱 rejected,损失立刻被推高。整个训练就是普通的梯度下降,没有采样、没有价值网络、没有奖励模型。
图 2:两条管线用同一批偏好数据,DPO 省掉了中间的奖励模型。
省掉了什么,又付出了什么。
省掉的东西很实在:不用再训练一个独立的奖励模型,不用 PPO 的在线采样循环,训练过程从「四个模型互相配合」退化成「一份偏好数据 + 一次监督式微调」,稳定性和可复现性都上一个台阶,论文实验也显示在摘要和单轮对话上质量不输甚至优于 PPO 路线。
代价同样要说清。第一,DPO 完全没有在线探索——它只能从已有的偏好对里学,效果上限被偏好数据的质量和覆盖度锁死,数据没覆盖到的行为它无从纠正。第二,没有显式的奖励模型,就少了一个独立工具:想对多个候选回答做打分重排、想在推理时做 best-of-n 筛选,DPO 路线给不了现成的评分器。第三,偏好对里 chosen 和 rejected 往往来自旧策略的分布,当策略更新走远后,数据代表性会打折。
回到面试现场,建议的答题结构:先复述 RLHF 三步流程与各自的角色,再点出 DPO 的闭式观察——最优策略可以用偏好数据直接表达,奖励模型因此可以被消去,给出损失函数的直观含义「拉大 chosen 相对 rejected 的对数概率差」,最后主动补上代价:无在线探索、上限取决于数据、没有独立奖励模型可用。答出「不用强化学习」只是及格线,讲清这条等式为什么成立、什么场景该退回 RLHF,才是区分度所在。你所在的团队做偏好对齐时选的是哪条路线?有没有踩过偏好数据覆盖度不够的坑?欢迎聊聊。