直接偏好优化 (DPO) 微调允许您基于提示和对齐的响应来微调模型。这种方法使模型能够从更具主观性的人类偏好中学习,从而优化出更可能受到青睐的输出。目前,DPO 仅支持文本输入和输出。
| 工作原理 | 适用场景 | 适用场景 |
|---|---|---|
为提示提供一个正确和不正确的示例响应。指出正确的响应有助于模型表现得更好。 |
|
|
数据格式
数据集中的每个示例应包含:
- 一个提示,例如用户消息。
- 一个首选输出(理想的助手响应)。
- 一个非首选输出(次优的助手响应)。
数据应采用 JSONL 格式,其中每一行 代表一个示例 in the following structure:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
{
"input": {
"messages": [
{
"role": "user",
"content": "Hello, can you tell me how cold San Francisco is today?"
}
],
"tools": [],
"parallel_tool_calls": true
},
"preferred_output": [
{
"role": "assistant",
"content": "Today in San Francisco, it is not quite cold as expected. Morning clouds will give away to sunshine, with a high near 68°F (20°C) and a low around 57°F (14°C)."
}
],
"non_preferred_output": [
{
"role": "assistant",
"content": "It is not particularly cold in San Francisco today."
}
]
}目前,我们仅针对每个示例进行单轮对话训练,其中首选和非首选消息必须是最后的助手消息。
创建 DPO 微调作业
上传训练数据并使用经过 DPO 微调的模型遵循 此处所述的相同流程.
要创建 DPO 微调作业,请在 method 字段中使用 微调作业创建端点,您可以在其中指定 type 以及任何关联的 hyperparameters。对于 DPO:
- 将
type参数设置为dpo - 可选择设置
hyperparameters属性为您想要配置的任何选项。
The beta 超参数是一项仅适用于 DPO 的新选项。它是一个介于 0 and 2 之间的浮点数,用于控制新模型在遵循其先前行为与遵循所提供偏好之间的严格程度。数值越高越保守(偏向先前行为),数值越低越激进(更频繁地偏向新提供的偏好)。
您还可以将此值设置为 auto (默认值),以使用平台配置的值。
以下示例展示了如何使用 OpenAI SDK 配置 DPO 微调作业。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
import OpenAI from "openai";
const openai = new OpenAI();
const job = await openai.fineTuning.jobs.create({
training_file: "file-all-about-the-weather",
model: "gpt-4o-2024-08-06",
method: {
type: "dpo",
dpo: {
hyperparameters: { beta: 0.1 },
},
},
});结合使用 SFT 和 DPO
目前,OpenAI 提供 有监督微调 (SFT) 作为微调作业的默认方法。在运行后续的 DPO 作业之前,先对首选响应(或其子集)执行 SFT,可以显著增强模型的对齐度和性能。通过首先对期望的响应微调模型,它可以更好地识别正确的模式,从而为 DPO 进一步优化行为提供坚实的基础。
推荐的工作流程如下:
- 使用一部分首选响应,通过 SFT 微调基础模型。重点确保数据质量和任务代表性。
- 以经过 SFT 微调的模型为起点,应用 DPO 根据偏好比较来调整模型。
安全检查
在生产环境中发布之前,请审查并遵循以下安全信息。
后续步骤
现在您已经了解了 DPO 的基础知识,不妨也探索一下这些其他方法。
通过为样本输入提供正确输出来微调模型。
了解如何使用图像输入进行微调以处理计算机视觉任务。
通过对其输出进行评分来微调推理模型。