让模型学会回答知识问题,只给标准答案往往够用。让它学会更礼貌、更有帮助,或者少写某类危险内容,标准答案就难写了。人们常为同一个提示准备两个回答,标出更喜欢哪一个。DPO 使用的核心材料正是这种偏好对。

我读了 DPO 原论文,也核对了 Hugging Face TRL 当前的训练接口。论文提出 DPO 时,目标是简化常见 RLHF 流程。传统做法先用偏好数据训练一个奖励模型,再让语言模型通过强化学习追求更高奖励,同时限制它偏离原模型。DPO 把这段关系改写成可直接训练语言模型的损失。

一条样本要有优选和淘汰答案

TRL 的标准数据格式包含 prompt、chosen 和 rejected。同一个提示下面,人或既定规则选出较好的回答,再留下一个较差回答作比较。训练会提高模型对优选答案的相对倾向,压低淘汰答案的相对倾向。

DPO 原论文把奖励写成当前模型与参考模型概率之比的函数,由此省去单独拟合奖励模型,也不用在微调过程中反复让模型在线生成样本再跑强化学习。训练仍会用到参考模型和 beta 参数。参考模型提供偏离尺度,beta 会影响模型多强地追随偏好数据。

流程少了几步,偏好样本的责任反而更集中。一批样本若总把更长的回答标成优选,模型可能学到篇幅偏好。标注人对安全、礼貌或事实性的标准互相冲突,损失函数也无法替团队统一标准。优选答案本身含有错误时,训练会认真强化这个错误方向。

先检查偏好对在教什么

准备数据时,可以按任务分组抽查。每条偏好对要能说明胜负原因,长度、格式和主题分布尽量别让无关特征长期站在同一边。两份回答质量很接近时,硬选一边会把标注噪声送进训练,可以返工或暂时删掉。训练集与评测集分开,评测既看人更喜欢哪个回答,也看事实正确、格式遵守和风险内容等独立指标。

数据管线还要照顾模型输入。TRL 文档提醒,视觉语言模型若按固定长度截断,可能把图片 Token 删掉并导致训练错误。纯文本也有类似边界,提示或答案被截断以后,一条完整偏好可能变成另一道题。训练前应统计长度并查看被截断样本。

DPO 适合已经有基础模型和可靠偏好对的团队。它减少训练环节,没有替人回答什么才算好答案。先拿一小批标准清楚的数据试训,对照原模型查看胜率、事实错误和拒答变化,同时保留原始偏好对与标注版本。方向稳定以后再扩大样本,比先收一大堆模糊选择更省时间。

参考资料