SFT、DPO、GRPO三种训练器的训练数据与应用场景

结论总结:

模型名称 SFTTrainer - Supervised Fine-Tuning Trainer - 监督式微调训练器 DPOTrainer - Direct Preference Optimization Trainer - 直接偏好优化训练器 GRPOTrainer - Generative Reward Policy Optimization Trainer - 生成式奖励策略优化训练器
训练目标 模仿训练数据 对齐人类偏好 最大化奖励函数
数据需求 输入-输出数据对。数据形式是 “指令 -> 期望输出” 的对应关系 偏好数据。”指令 -> (偏好输出, 非偏好输出)” 的成对比较 奖励信号。数据形式是一个数值奖励,用于评价模型在环境中的行为
核心算法 监督学习 (交叉熵损失) 直接偏好优化 (DPO 损失) 强化学习 (PPO 算法)
优势 简单易用, 高效, 适用多种任务 更符合人类偏好, 避免奖励函数设计难题, 训练稳定, 对奖励函数偏差更鲁棒 直接优化目标指标, 可学习复杂策略, 适用于与环境交互任务, 精细行为控制
劣势 可能放大数据偏差, 难处理复杂偏好, 可能过拟合 需要偏好数据, 对偏好数据质量敏感, 可能牺牲部分生成能力 训练复杂不稳定, 奖励函数设计困难, 计算成本高, 可能奖励函数偏移
复杂度
应用场景示例 - 内容生成: 自动生成产品描述、新闻稿、社交媒体文案等。
- 指令跟随: 简单的问答系统、文档摘要、代码生成等。
- 数据增强: 生成特定格式或风格的合成数据,例如特定风格的文本或代码。
- 对话系统: 训练客服机器人、聊天机器人,使其回复更礼貌、更人性化、更符合用户期望。
- 内容审核: 训练模型判断文本是否安全、无害、符合道德标准。
- 偏好排序: 训练模型根据用户偏好对多个选项进行排序或选择 (例如,排序新闻摘要、推荐商品)。
- 游戏 AI: 训练游戏 Bot,在游戏中获得高分或战胜对手。
- 交易策略: 训练交易机器人,使其在股票市场或加密货币市场中最大化收益。
- 机器人控制: 训练机器人完成复杂任务,例如导航、物体抓取等,最大化任务完成效率或成功率。
- 复杂对话策略: 训练对话系统进行多轮对话,最终达成用户目标 (例如,预定餐厅、解决复杂问题)。

1. 输入-输出数据对 (Input-Output Data Pairs) - SFTTrainer 使用

这种数据形式是最直接的,用于监督式微调 (SFTTrainer)。 每个数据样本都包含一个 输入 (Input) 和一个期望的 输出 (Output)。

应用场景例子:指令跟随 (Instruction Following) - 简单的问答任务
示例:

  • 问答系统: “问题 -> 答案”
  • 翻译任务: “原文 -> 译文”
  • 摘要生成: “文章 -> 摘要”
  • 样例数据格式 (JSON 格式示例):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[
{
"instruction": "法国的首都是哪里?",
"output": "法国的首都是巴黎。"
},
{
"instruction": "请写一个关于夏天的简短故事。",
"output": "阳光洒在金色的沙滩上,海风轻轻吹拂,孩子们在海边嬉戏,冰淇淋融化在甜甜的笑容里,夏天真美好。"
},
{
"instruction": "将这句话翻译成英文:你好世界。",
"output": "Hello world."
}
// ... 更多数据样本
]

解释:

  • “instruction” (输入): 代表用户给模型的指令或问题。
  • “output” (输出): 代表模型应该生成的期望回复或答案。
  • 数据目标: SFTTrainer 的目标是让模型学习将 “instruction” 映射到 “output”,模仿训练数据中的这种对应关系。

应用场景例子:内容生成 (Content Generation) - 生成产品描述

  • 样例数据格式 (JSON 格式示例):
1
2
3
4
5
6
7
8
9
10
11
[
{
"input": {
"product_name": "智能咖啡机",
"features": ["一键操作", "多种咖啡模式", "可预约", "自动清洗"],
"materials": ["不锈钢", "耐热玻璃"]
},
"output": "这款智能咖啡机让您在家也能轻松享受咖啡馆级的美味。一键操作,多种咖啡模式随心选择,更有预约功能,让您早晨醒来就能品尝到香浓咖啡。采用不锈钢和耐热玻璃材质,坚固耐用,并具备自动清洗功能,省心省力。"
},
// ... 更多数据样本
]

解释:

  • “input” (输入): 可以是更结构化的信息,例如产品的特征、材质等。
  • “output” (输出): 是基于输入信息生成的期望产品描述文本。

2. 偏好数据 (Pairwise Ranking) - DPOTrainer 使用

这种数据形式用于直接偏好优化 (DPOTrainer)。 对于同一个输入,我们提供两个模型生成的输出,并标注哪个输出更符合偏好。

应用场景例子:对话系统 (Chatbot) - 提升回复质量和偏好

  • 样例数据格式 (JSON 格式示例):
1
2
3
4
5
6
7
8
9
10
11
12
13
[
{
"instruction": "今天天气怎么样?",
"chosen": "今天天气晴朗,阳光明媚,非常适合户外活动。",
"rejected": "天气还行。"
},
{
"instruction": "请问你能推荐一家附近的意大利餐厅吗?",
"chosen": "当然,附近有一家评价很高的意大利餐厅,名叫“托斯卡纳阳光”,他们家的披萨和意面非常受欢迎,地址是… [地址信息] …,您要我帮您查询一下电话或者预定吗?",
"rejected": "我推荐一家意大利餐厅。"
},
// ... 更多数据样本
]
  • 解释:
    • “instruction” (输入): 用户的问题或指令。
    • “chosen” (偏好输出): 被认为更好或更符合偏好的回复。例如,更详细、更礼貌、更乐于助人的回复。
    • “rejected” (非偏好输出): 被认为相对较差或不太符合偏好的回复。例如,更简短、更生硬、信息量较少的回复。
    • 数据目标: DPOTrainer 学习到,对于相同的 “instruction”,模型应该倾向于生成类似 “chosen” 这样的回复,而不是 “rejected” 这样的回复。偏好可以是基于礼貌程度、信息量、是否乐于助人、是否符合特定价值观等等。

3. 奖励信号 (Reward Signal) - GRPOTrainer 使用

奖励信号是一个数值,用于评价模型在特定环境或任务中生成的输出质量。 GRPOTrainer 使用强化学习方法,目标是最大化模型获得的累积奖励。

应用场景例子:游戏 AI (Game AI) - 训练游戏 Bot 下围棋

  • 奖励函数示例 (Python 伪代码):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
def reward_function(game_state, action):
"""
定义围棋游戏中的奖励函数.

Args:
game_state: 当前的棋局状态.
action: 模型采取的落子动作.

Returns:
reward: 一个数值奖励信号.
"""

if is_illegal_move(game_state, action): # 落子是否为非法
reward = -10 # 非法落子,负奖励,惩罚模型
elif is_capture_opponent_piece(game_state, action): # 是否吃掉对方棋子
reward = +5 # 吃掉对方棋子,正奖励
elif is_win(game_state): # 是否赢得游戏
reward = +100 # 赢得游戏,巨大正奖励
elif is_lose(game_state): # 是否输掉游戏
reward = -50 # 输掉游戏,负奖励
else:
reward = -0.1 # 常规落子,轻微负奖励 (鼓励尽快结束游戏,避免无意义的步骤 - 可根据实际情况调整)

return reward
  • 解释:
    • 奖励函数: reward_function 就是一个奖励函数,它根据当前的游戏状态和模型采取的动作,计算出一个数值奖励。
    • 奖励信号: 每次模型在游戏中执行一个动作后,环境 (围棋游戏) 会根据 reward_function 计算出一个奖励值,并将这个奖励值反馈给模型。
    • 数据目标: GRPOTrainer 通过不断尝试不同的动作,并根据获得的奖励信号学习,目标是找到一个策略 (即模型的参数),使得在围棋游戏中能够获得尽可能高的累积奖励 (例如,最终赢得游戏)。