直接偏好优化(DPO):用更简单的方法让 AI 更符合人类偏好
发布时间:2025年4月17日|作者:Ivan Provilkov、Zain Hasan、Max Ryabinin
我们非常高兴宣布,Together 的微调平台现在支持 Direct Preference Optimization(DPO)技术!这是一种让语言模型(如 ChatGPT)更贴近人类喜好的方法,让 AI 回答更准确、有帮助,也更有礼貌。下面是对这个技术的简单介绍。
语言模型的训练分三步:
- 预训练:用海量网络数据训练出通用模型。
- 监督微调(SFT):用高质量例子让模型更适应特定任务。
- 偏好微调(比如 DPO):让模型学会更符合人类喜好的回答方式。
什么是 DPO?
DPO 是一种用人类偏好来优化模型的方式,它比传统的 RLHF(从人类反馈中强化学习)简单很多。
你只需要三样东西:
- 一段输入(问题或指令)
- 一个更好的回答(人类偏好的)
- 一个不太好的回答
DPO 会训练模型更倾向于生成好答案,而避免生成差答案。
举个例子:
假设用户问:“罗马帝国是怎么崛起的?” 好答案可能是详细解释历史背景,不好答案可能是一个很简单的总结。
DPO 就是教模型:“以后像好答案那样回答,不要像差答案那样。”
类比:像改进菜谱一样
想象你是个厨师,模型就是你的一本菜谱。DPO 的训练方法就像根据顾客的反馈,改进你做菜的方式——更偏向大家喜欢的做法,避免他们不喜欢的做法。但你不会完全推翻原来的菜谱,而是在原有基础上做优化。
调节参数 β(贝塔)控制你可以改多少:
- 数值小 → 改得多
- 数值大 → 改得少
DPO 和 RLHF 有什么不同?
方法 | 描述 |
---|---|
RLHF | 训练一个“美食评论家”(奖励模型),再用复杂的算法(比如 PPO)调整模型。过程复杂,训练慢。 |
DPO | 不用奖励模型,直接用好/坏答案做训练,方法简单、效率更高。 |
DPO 像直接根据顾客的喜好改菜谱,而不是请一个评论家反复评分再调整。
最佳实践:先做 SFT,再做 DPO
最好的做法是两步走:
- 先用 SFT 训练模型学会基本任务(比如怎么写总结、怎么写代码)。
- 然后用 DPO 让模型更懂“哪种方式更受欢迎”。
这种方法能得到效果更好的模型。
什么时候该用 DPO?
DPO 适合以下情况:
- Prompt 不够好用时:提示词可以引导模型,但不稳定,成本高。DPO 更直接。
- 人类更容易比较答案,而不是创造答案时:人们更擅长挑哪个好,而不是写出最完美答案。
- 对已有模型做小优化时:模型已经不错,只需要调整风格、语气、准确性等。
DPO 适合的任务:
应用 | 原因 |
---|---|
聊天机器人 | 优化对话风格,特别适合特定场景(如心理、医疗、角色扮演等) |
总结写作 | 人类可以轻松比较哪个摘要更好 |
代码生成 | 不同风格的代码都可能正确,偏好重要 |
问答任务 | 多种答案都可以,但人类有偏好 |
写作辅助 | 写作风格主观性强,DPO 有用 |
不适合的任务:
- 数学计算
- 信息提取
- 工具调用 这些任务通常只有唯一正确答案。
如何开始使用 DPO?
我们提供了代码示例(notebook),你可以直接上手尝试。
关键参数是 --dpo-beta
:
- 数值越小,模型改变越多(偏向好答案)
- 数值越大,模型保留原有行为更多
监控训练时,可以关注两个指标:
- 准确率:模型选对好答案的频率
- KL散度:新模型和原模型差异的大小
通过 DPO,开发者可以更轻松地让 AI 更符合用户需求,更友好、更靠谱。欢迎你试试看!