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 | [ |
解释:
- “instruction” (输入): 代表用户给模型的指令或问题。
- “output” (输出): 代表模型应该生成的期望回复或答案。
- 数据目标: SFTTrainer 的目标是让模型学习将 “instruction” 映射到 “output”,模仿训练数据中的这种对应关系。
应用场景例子:内容生成 (Content Generation) - 生成产品描述
- 样例数据格式 (JSON 格式示例):
1 | [ |
解释:
- “input” (输入): 可以是更结构化的信息,例如产品的特征、材质等。
- “output” (输出): 是基于输入信息生成的期望产品描述文本。
2. 偏好数据 (Pairwise Ranking) - DPOTrainer 使用
这种数据形式用于直接偏好优化 (DPOTrainer)。 对于同一个输入,我们提供两个模型生成的输出,并标注哪个输出更符合偏好。
应用场景例子:对话系统 (Chatbot) - 提升回复质量和偏好
- 样例数据格式 (JSON 格式示例):
1 | [ |
- 解释:
- “instruction” (输入): 用户的问题或指令。
- “chosen” (偏好输出): 被认为更好或更符合偏好的回复。例如,更详细、更礼貌、更乐于助人的回复。
- “rejected” (非偏好输出): 被认为相对较差或不太符合偏好的回复。例如,更简短、更生硬、信息量较少的回复。
- 数据目标: DPOTrainer 学习到,对于相同的 “instruction”,模型应该倾向于生成类似 “chosen” 这样的回复,而不是 “rejected” 这样的回复。偏好可以是基于礼貌程度、信息量、是否乐于助人、是否符合特定价值观等等。
3. 奖励信号 (Reward Signal) - GRPOTrainer 使用
奖励信号是一个数值,用于评价模型在特定环境或任务中生成的输出质量。 GRPOTrainer 使用强化学习方法,目标是最大化模型获得的累积奖励。
应用场景例子:游戏 AI (Game AI) - 训练游戏 Bot 下围棋
- 奖励函数示例 (Python 伪代码):
1 | def reward_function(game_state, action): |
- 解释:
- 奖励函数:
reward_function就是一个奖励函数,它根据当前的游戏状态和模型采取的动作,计算出一个数值奖励。 - 奖励信号: 每次模型在游戏中执行一个动作后,环境 (围棋游戏) 会根据
reward_function计算出一个奖励值,并将这个奖励值反馈给模型。 - 数据目标: GRPOTrainer 通过不断尝试不同的动作,并根据获得的奖励信号学习,目标是找到一个策略 (即模型的参数),使得在围棋游戏中能够获得尽可能高的累积奖励 (例如,最终赢得游戏)。
- 奖励函数: