当前位置: 首页 > news >正文

一文详解大模型强化学习(RLHF)算法:PPO、DPO、GRPO、ORPO、KTO、GSPO

在这里插入图片描述

一、 引言

大模型强化学习的核心目标是让模型的输出与人类目标、真实场景需求对齐。在工作和学习中,大模型强化学习训练经常会遇到各种算法,各种O,在强化学习训练选型过程中经常容易混淆,也分不清各种训练算法的使用场景和优缺点。

本文将从“通俗原理-真实数据样例-场景对比-实践案例”四个维度,拆解这六种核心的强化学习算法,帮你搞懂每种算法的“核心优势”与“适用边界”,并结合对话、推荐、文本生成等场景,说明如何选择合适的算法落地。

传统强化学习中,PPO(近端策略优化)是首个在大模型训练中落地的核心算法,但其在大规模模型(如千亿参数)、复杂任务(如长链数学推理)中暴露了稳定性差、依赖奖励模型等问题。为此,各个模型厂商相继提出 DPO(直接偏好优化)、GRPO(群体相对策略优化)、ORPO(优势比偏好优化)、KTO(卡尼曼-特沃斯基优化)和 GSPO(分组序列策略优化)等新算法:有的省去了奖励模型的训练,有的优化了内存占用,有的解决了混合专家(MoE)模型的训练崩溃问题。

二、PPO:大模型强化学习的基础算法

2.1 PPO 算法的概念与原理

PPO(近端策略优化)是一种通过策略梯度优化实现安全策略更新的强化学习算法。其核心思想可概括为:​在策略空间中划定信任区域,通过限制参数更新幅度避免策略突变。这一特性使其尤其适合大语言模型的微调场景。

以对话模型优化为例:

• ​旧策略​:直接生成答案(如"答案是42")

• ​新策略​:尝试分步推导(如"首先计算半径,再代入公式…")

PPO通过概率比裁剪控制策略差异:当新策略生成分步回答的概率比旧策略高20%时,自动将更新幅度限制在安全阈值内(如ε=0.2),防止模型突然"学偏"。

2.2 PPO 的训练方法与数据集样例

训练方法

PPO 的训练就像“三步迭代优化”,每一轮都在“收集反馈-评估好坏-微调策略”:

  1. 收集样本:让当前模型(旧策略)和“环境”交互——对大模型来说,“环境”就是文本上下文(比如用户的问题、历史对话),模型生成一批响应后,记录“输入(状态)-生成内容(动作)-奖励(比如奖励模型给的分数)”。
  2. 计算优势值:用 GAE 给每个“动作”打分——比如模型生成“分步推导数学题”的优势值高,说明这个动作“既当前有用,后续也能带来好结果”;生成“模糊答案”的优势值低,说明这个动作“短期看似能应付,长期会让用户不满”。
  3. 更新策略:用“裁剪目标函数”微调模型——只保留“优势值高且和旧策略差异小”的更新,确保模型每次只进步一点,不“跑偏”。
训练数据集样例

PPO 依赖“状态-动作-奖励”的序列数据,大模型场景中通常是“用户输入-模型响应-奖励分数”的结构,其中“奖励”由奖励模型(如基于人类偏好训练的模型)给出:

[{"episode_id": "ep_001",  // 一轮交互的唯一标识"steps": [               // 交互步骤(大模型场景通常单步,复杂对话多步){"state": "用户输入:请解释什么是“强化学习”,用一句话说明",  // 输入状态(上下文)"action": "强化学习是让智能体通过“试错”从环境反馈中学习,不断优化策略以获得更多奖励的技术",  // 模型动作(生成的响应)"reward": 0.85,  // 奖励分数(0-1,越高表示越符合偏好)"next_state": "对话结束"  // 下一个状态(无后续交互则为结束)}]},{"episode_id": "ep_002","steps": [{"state": "用户输入:用 Python 写一个计算斐波那契数列前 10 项的代码","action": "def fib(n):\n    a, b = 0, 1\n    res = []\n    for _ in range(n):\n        res.append(a)\n        a, b = b, a+b\n    return res\nprint(fib(10))","reward": 0.92,"next_state": "对话结束"}]}
]

2.3 PPO 的优缺点与适用场景

优缺点
优点缺点
1. 样本效率高:不用像传统策略梯度算法那样每次都丢弃旧样本,少量数据就能迭代优化;
2. 训练易调优:对超参数(如学习率)不敏感,新手也能较快上手;
3. 通用性强:既能优化对话生成,也能适配文本摘要、代码生成等任务。
1. 依赖奖励模型:必须先训一个“判断好坏”的奖励模型,若奖励模型有偏差(比如误把“冗长回答”当优质),PPO 会越训越偏;
2. 长文本不稳定:对长链推理(如数学证明),因奖励通常只给最后一个 token,中间步骤的“优势值”计算不准,容易训练波动;
3. 资源消耗高:需要同时维护“旧策略”和“新策略”,千亿参数模型训练时内存压力大。
适用场景(对比其他算法)
  • 最适合:中等规模模型(如 7B-70B 参数)的“通用文本生成优化”,比如对话系统(如客服机器人)、常规文本摘要——这些场景中,奖励模型容易训练,且文本长度适中,PPO 的稳定性优势能发挥。
  • 对比 DPO:PPO 需要训奖励模型,而 DPO 直接用偏好数据,若你没有足够资源训奖励模型,选 DPO;若你已有高质量奖励模型,PPO 的通用性比 DPO 强。
  • 对比 GRPO:PPO 依赖价值函数(算优势值),GRPO 不用,若你做长链数学推理(如 DeepSeekMath),GRPO 更适合;若你做常规对话,PPO 足够。
  • 不适合:MoE 模型(如 Qwen3-MoE)、超大规模(千亿参数以上)模型的复杂任务——这类场景容易出现训练崩溃,需用 GSPO。

2.4 PPO 在大模型中的应用案例

  1. OpenAI GPT-3.5/4:GPT 系列基础模型的核心优化算法就是 PPO——先通过监督微调训出初始模型,再用人类偏好数据训奖励模型,最后用 PPO 让模型“跟着奖励模型的反馈优化”,最终实现“对话对齐人类需求”。
  2. Anthropic Claude:早期版本用 PPO 优化“安全对话”,通过奖励模型惩罚“有害内容”(如歧视、暴力),PPO 则让模型逐渐减少这类生成,同时保持回答的相关性。

三、DPO:不用奖励模型的“直接对齐算法”

3.1 DPO 算法的概念与原理

DPO(直接偏好优化)是 “轻量型对齐算法”,核心思路是“跳过奖励模型,直接用人类偏好数据训模型”——解决了 PPO 依赖奖励模型的痛点。

你可以把 DPO 理解为“让模型‘看例子’学偏好”:比如人类标注员认为“回答 A(分步解释)比回答 B(直接给答案)好”,DPO 就会让模型“多生成像 A 这样的内容,少生成像 B 这样的内容”。它的核心逻辑基于“Bradley-Terry 模型”——简单说,就是让“人类喜欢的响应”在模型中的生成概率,比“不喜欢的响应”高,且差距越大越好。
例如:
用户提问:“请解释什么是椅子”
模型生成两个响应:
•​响应A​(偏好):“椅子是一种有靠背和扶手的家具,通常有四条腿,供人坐的。比如公园长椅、餐厅餐椅、办公室办公椅,不同材质的椅子用途也不同。”
•响应B​(非偏好):“椅子是供人坐的家具”

DPO 会优化模型参数,让“生成 A 的概率 / 生成 B 的概率”变大——比如从原来的 1.2 倍,提升到 3 倍,这样模型下次遇到类似问题,就更倾向于生成 A 类响应。

和 PPO 比,DPO 少了“训奖励模型”这一步,不仅节省了计算资源,还避免了“奖励模型偏差”带来的问题(比如奖励模型误判偏好)。

3.2 DPO 的训练方法与数据集样例

训练方法

DPO 的训练就像“两步学偏好”,核心是“用成对数据教模型分好坏”:

  1. 收集偏好数据:让人类标注员对模型生成的两个响应打分——比如“更喜欢 A”“更喜欢 B”或“两者差不多”,最终得到一批“输入 x + 偏好响应 y + 非偏好响应 y’”的数据。
  2. 优化模型参数:构建“偏好损失函数”——让模型生成 y 的概率比 y’ 高,同时限制模型“不要偏离原始生成能力”(比如不能为了学偏好,连基本的事实都错了),用梯度下降最小化这个损失,完成优化。
训练数据集样例

DPO 依赖“成对偏好数据”,每个样本必须包含“输入、两个响应、偏好标签”,格式如下:

[{"sample_id": "dpo_001","input_x": "用户输入:为什么夏天白天比冬天长?",  // 原始输入"preferred_response": "因为夏天太阳直射北半球,北半球的白昼时间变长,比如北京夏天凌晨 4 点天亮,晚上 7 点天黑,白天有 15 小时左右;而冬天太阳直射南半球,北京早上 7 点天亮,下午 5 点天黑,白天只有 10 小时左右",  // 人类喜欢的响应"dispreferred_response": "因为夏天地球离太阳近,所以白天长",  // 人类不喜欢的响应(事实错误)"preference_label": 1  // 1 表示更喜欢 preferred_response,0 表示更喜欢 dispreferred_response(此处固定为 1,因已明确标注)},{"sample_id": "dpo_002","input_x": "用户输入:推荐一本适合新手的编程入门书","preferred_response": "推荐《Python 编程:从入门到实践》,这本书用案例驱动,比如做小游戏、数据分析项目,新手能边学边练,而且语法讲解很通俗,不用先学复杂的计算机理论","dispreferred_response": "推荐《C++ Primer》,这是经典编程书,讲得很全面",  // 不适合新手,人类不喜欢"preference_label": 1}
]

3.3 DPO 的优缺点与适用场景

优缺点
优点缺点
1. 无奖励模型依赖:省去训奖励模型的步骤,计算资源消耗比 PPO 少 30%~50%;
2. 训练稳定:不用像 PPO 那样控制策略更新幅度,很少出现“训练崩溃”;
3. 对齐精度高:直接用人类偏好数据,避免了“奖励模型中转”带来的偏差(比如奖励模型没学到人类的细微偏好)。
1. 依赖高质量偏好数据:若标注数据有噪声(比如标注员误把差响应标为好),DPO 会学错;
2. 复杂奖励难适配:若任务需要“多维度评估”(如代码生成需同时看正确性、效率、可读性),成对偏好数据无法覆盖所有维度,不如 PPO 的奖励模型灵活;
3. 长文本效果弱:对长链推理(如数学证明),成对响应的标注成本极高,且 DPO 难以捕捉“中间步骤的偏好”,效果不如 GRPO/GSPO。
适用场景(对比其他算法)
  • 最适合:资源有限(如小团队、中小规模模型)、需要快速对齐人类偏好的场景,比如开源模型的轻量微调(如 Llama 3-7B 的偏好对齐)、短文本对话(如客服机器人的常见问题回答)。
  • 对比 PPO:若你没有足够 GPU 训奖励模型(比如只有 1~2 张 A100),选 DPO;若你需要多维度评估(如代码生成),PPO 的奖励模型能整合“正确性+效率”等多指标,更适合。
  • 对比 ORPO:DPO 只需要偏好数据,ORPO 需要“监督数据+偏好数据”,若你没有监督数据(如全新领域),选 DPO;若你有监督数据,ORPO 的“兼顾生成能力+偏好”效果更好。
  • 不适合:长文本生成(如小说续写)、复杂推理任务(如数学公式推导)、需要多维度评估的任务——这些场景要么标注成本高,要么 DPO 难以捕捉细微偏好。

3.4 DPO 在大模型中的应用案例

  1. Llama 3:Meta 在 Llama 3 的后训练中,用 DPO 替代了部分 PPO 的工作——通过收集 10 万+ 英文/多语言偏好数据,用 DPO 快速对齐“对话自然度”和“事实准确性”,最终让 Llama 3-70B 在对话任务上接近 GPT-3.5。
  2. Qwen2-7B:阿里巴巴在 Qwen2 的轻量版本中,用 DPO 优化“中文对话偏好”——针对中文用户喜欢的“简洁+礼貌”风格,收集了 5 万+ 中文成对数据,用 DPO 微调后,模型的中文响应满意度提升了 25%。

四、GRPO:不用价值函数的“长推理优化算法”

4.1 GRPO 算法的概念与原理

GRPO(群体相对策略优化)是 DeepSeek 团队 2024 年提出的“长推理专用算法”,核心思路是“用‘群体对比’替代‘价值函数’,解决大模型长文本奖励难计算的问题”。

先解释一个痛点:大模型在长任务(如数学推理、代码调试)中,通常只有“最后一步”会得到奖励(比如“最终答案正确”给 1 分,错误给 0 分),中间步骤没有奖励——这导致 PPO 用的“价值函数”(算每个步骤的优势值)根本训不好,因为“中间步骤的好坏”无法判断。

GRPO 的解决方案很直接:对同一个输入,让模型生成一组响应(比如 5 个),用“组内平均奖励”当基线,判断每个响应的好坏。比如用户问“解方程组 2x+y=5,x-y=1”,模型生成 5 个响应:

  • 响应 1:步骤正确,答案 x=2,y=1(奖励 1.0);
  • 响应 2:步骤有小错,答案 x=3,y=2(奖励 0.3);
  • 响应 3:步骤混乱,答案 x=1,y=3(奖励 0.0);
  • 响应 4:步骤正确,答案 x=2,y=1(奖励 1.0);
  • 响应 5:步骤部分正确,答案 x=2,y=0(奖励 0.5)。

GRPO 会先算这组响应的平均奖励((1.0+0.3+0.0+1.0+0.5)/5=0.56),再算每个响应的“优势值”(响应奖励 - 平均奖励):比如响应 1 的优势值是 0.44,响应 3 的优势值是 -0.56。这样一来,即使没有中间步骤的奖励,也能通过“群体对比”判断每个响应的好坏。

另外,GRPO 还会限制模型“不要偏离初始的监督微调模型”(比如用 KL 散度正则),避免模型为了追求高奖励而“胡编乱造”(比如数学推理步骤全错,但答案蒙对)。

和 PPO 比,GRPO 去掉了“价值函数”,不仅节省了内存(千亿参数模型训练时内存占用减少 40%),还解决了长推理任务中“优势值算不准”的问题。

4.2 GRPO 的训练方法与数据集样例

训练方法

GRPO 的训练就像“三步群体优化”,核心是“用组内对比找好坏”:

  1. 采样响应组:对每个输入 x(如数学题),让当前模型生成一组响应(比如 5~10 个,称为“群体”),确保响应有好有坏(比如有的答案对,有的错)。
  2. 计算群体奖励与优势:用奖励函数(如数学答案正确性评分、代码运行成功率)给每个响应打分,再算“群体平均奖励”,每个响应的优势值 = 响应奖励 - 平均奖励(标准化后更稳定)。
  3. 更新策略:用“裁剪目标函数”微调模型——让“优势值高的响应”(比如正确的数学推理)在模型中的生成概率变高,同时限制模型偏离初始的监督微调模型,避免“学偏”。
训练数据集样例

GRPO 依赖“输入+响应组+奖励”的数据,每个样本包含一个输入和一组(通常 5~10 个)响应,格式如下:

[{"sample_id": "grpo_001","input_x": "用户输入:解数学题:已知一个三角形的两边长为 3cm 和 4cm,夹角为 90 度,求第三边长",  // 长推理输入(数学题)"response_group": [  // 响应组(5 个响应,有好有坏){"response": "这是直角三角形,用勾股定理:a²+b²=c²,3²+4²=9+16=25,所以第三边长为 5cm","reward": 1.0  // 完全正确,奖励满分},{"response": "用勾股定理:3+4=7,所以第三边长为 7cm",  // 公式用错(没平方)"reward": 0.2},{"response": "这是锐角三角形,第三边长小于 7cm",  // 错误判断三角形类型"reward": 0.0},{"response": "勾股定理:3²+4²=25,平方根是 5,所以第三边长 5cm,单位是 cm",  // 正确,细节更全"reward": 1.0},{"response": "第三边长为 5cm,但需要验证是否满足三角形三边关系:3+4>5,3+5>4,4+5>3,满足",  // 正确且加了验证"reward": 1.0}],"group_stats": {  // 群体统计信息(训练时自动计算,此处为示例)"mean_reward": 0.64,"std_reward": 0.48}}
]

4.3 GRPO 的优缺点与适用场景

优缺点
优点缺点
1. 无价值函数依赖:解决了长推理任务中“价值函数训不好”的痛点,内存占用比 PPO 少 40%;
2. 长推理效果好:通过“群体对比”能捕捉“中间步骤的好坏”(比如数学推理的步骤正确性),比 DPO/PPO 更适合长任务;
3. 适配大规模模型:千亿参数模型训练时,因省去价值函数,能在有限 GPU 资源下运行(如 8 张 A100 可训 DeepSeek-R1-70B)。
1. 对奖励噪声敏感:若奖励函数有误差(比如数学题判错),“群体平均奖励”会不准,导致优势值计算偏差;
2. 全负样本组问题:若一组响应全错(比如模型生成的 5 个数学推理全错),所有响应的优势值接近 0,模型无法更新;
3. 计算成本高:每个输入要生成 5~10 个响应,比 PPO(1 个响应)的计算量多 5~10 倍。
适用场景(对比其他算法)
  • 最适合:长链推理任务(如数学解题、代码调试、逻辑证明)、大规模模型(70B 以上参数)的微调,比如 DeepSeekMath(数学推理模型)、CodeLlama 的代码调试优化。
  • 对比 PPO:若你做数学推理(如解微积分题),PPO 的价值函数算不准中间步骤的优势,GRPO 更适合;若你做短文本对话,PPO 的计算成本更低,更划算。
  • 对比 GSPO:GRPO 解决了长推理的价值函数问题,但没解决 MoE 模型的训练崩溃问题;若你用 MoE 模型(如 Qwen3-MoE)做长推理,GSPO 更适合;若你用稠密模型(如 DeepSeek-R1),GRPO 足够。
  • 不适合:资源有限的场景(如只有 1~2 张 GPU)、短文本任务(如客服常见问题)——这些场景中,GRPO 的“多响应采样”成本太高,不如 DPO/PPO 性价比高。

4.4 GRPO 在大模型中的应用案例

  1. DeepSeek-R1-Zero:DeepSeek 团队用 GRPO 优化“零样本数学推理”——通过生成 8 个响应/输入的群体数据,让模型学会“对比不同推理路径的好坏”,最终在 MATH 数据集(高中数学题)上的正确率提升了 18%,超过了 GPT-3.5。
  2. DeepSeekMath-70B:这是专门的数学推理模型,研究者用 GRPO 解决“步骤奖励缺失”问题——即使只有“最终答案奖励”,GRPO 也能通过群体对比,让模型优化“中间推理步骤”(比如从“跳步”变成“分步推导”),步骤正确率提升了 30%。

五、ORPO:兼顾监督微调与偏好的“一体化算法”

5.1 ORPO 算法的概念与原理

ORPO(优势比偏好优化)核心思路是“把‘监督微调’和‘偏好优化’揉成一步,既让模型学好基础能力,又对齐人类偏好”——解决了 DPO 只学偏好、容易丢基础能力的问题。

传统方法(如 PPO、DPO)通常是“先监督微调(SFT)学基础能力,再用 RL 学偏好”,两步分开训,容易出现“学偏好后,基础能力下降”(比如模型学会了礼貌对话,但连简单的事实都答错了)。

ORPO 的解决方案是“单步训练,双目标优化”:在损失函数中,同时包含“监督微调损失”(让模型学好基础能力,比如事实准确性)和“偏好惩罚项”(让模型对齐人类偏好,比如对话自然度)。

举个例子:用户问“地球半径是多少”,模型生成两个响应:

  • 响应 A(监督正确,偏好差):“地球半径约 6371 千米”(事实正确,但太简洁,人类不喜欢);
  • 响应 B(监督正确,偏好好):“地球的平均半径约 6371 千米,赤道半径略长(约 6378 千米),两极半径略短(约 6357 千米),这个差异是地球自转导致的”(事实正确,且详细,人类喜欢)。

ORPO 的损失函数会做两件事:

  1. 监督损失:确保模型生成的响应符合事实(比如不会把半径说成 6371 米);
  2. 偏好惩罚项:让模型生成 B 的概率比 A 高(用“优势比”控制,比如 B 的概率 / A 的概率 > 2)。

这样一来,模型在学偏好的同时,不会丢了基础的事实准确性——相当于“一边学‘说好话’,一边不忘‘说真话’”。

和 DPO 比,ORPO 多了“监督损失”,能兼顾基础能力;和 PPO 比,ORPO 不用训奖励模型,且一步完成训练,更简洁。

5.2 ORPO 的训练方法与数据集样例

训练方法

ORPO 的训练就像“一步双目标学习”,核心是“同时抓基础能力和偏好”:

  1. 准备双数据集:一是“监督微调数据集”(输入 x + 正确响应 y,比如事实性问答数据),二是“偏好数据集”(输入 x + 偏好响应 y + 非偏好响应 y’,比如人类标注的成对数据)。
  2. 构建双目标损失:损失 = 监督微调损失(让模型生成正确响应) + λ × 偏好惩罚项(让模型偏好响应的概率更高,λ 控制偏好的重要程度)。
  3. 单步更新模型:用梯度下降最小化这个双目标损失,模型会在“学好事实”的同时,逐渐对齐人类偏好——不用分“监督微调”和“RL 优化”两步。
训练数据集样例

ORPO 需要“监督数据”和“偏好数据”两类数据,通常分开存储,训练时按比例混合使用:

1. 监督微调数据集(基础能力训练)
[{"sample_id": "orpo_sft_001","input_x": "用户输入:水的化学式是什么?","correct_response": "水的化学式是 H₂O,由两个氢原子和一个氧原子组成"  // 事实正确的响应},{"sample_id": "orpo_sft_002","input_x": "用户输入:《静夜思》的作者是谁?","correct_response": "《静夜思》的作者是唐代诗人李白,这首诗表达了诗人的思乡之情"}
]
2. 偏好数据集(对齐偏好训练)
[{"sample_id": "orpo_pref_001","input_x": "用户输入:水的化学式是什么?","preferred_response": "水的化学式是 H₂O哦~简单说就是两个氢原子(H)和一个氧原子(O)结合在一起,我们日常喝的水、用的水都是这个成分",  // 事实正确+语气友好(偏好)"dispreferred_response": "水的化学式是 H₂O,没什么好说的",  // 事实正确+语气生硬(非偏好)"preference_label": 1},{"sample_id": "orpo_pref_002","input_x": "用户输入:《静夜思》的作者是谁?","preferred_response": "《静夜思》是唐代大诗人李白的代表作之一~诗里“床前明月光,疑是地上霜”这两句特别有名,表达了他在异乡对家乡的思念",  // 事实正确+内容丰富(偏好)"dispreferred_response": "《静夜思》作者是李白,唐代的",  // 事实正确+内容简略(非偏好)"preference_label": 1}
]

5.3 ORPO 的优缺点与适用场景

优缺点
优点缺点
1. 一体化训练:一步完成“监督微调+偏好对齐”,不用分两步,节省训练时间;
2. 兼顾基础能力:有监督损失,避免了 DPO“学偏好丢事实”的问题;
3. 资源效率高:不用训奖励模型,计算成本比 PPO 低,比 DPO 只高 10%~20%。
1. 依赖双数据集:必须同时有监督数据和偏好数据,若某类数据缺失(如全新领域没有监督数据),无法使用;
2. 超参数敏感:偏好惩罚项的权重 λ 对效果影响大——λ 太小,偏好对齐差;λ 太大,基础能力下降;
3. 复杂任务适配弱:对长推理(如数学证明),监督数据和偏好数据的标注成本极高,ORPO 难以覆盖所有场景,效果不如 GRPO。
适用场景(对比其他算法)
  • 最适合:有监督数据、需要兼顾“事实准确性”和“偏好对齐”的场景,比如知识问答机器人(如医疗科普机器人,既要讲对医学知识,又要语气亲切)、教育类模型(如小学数学辅导,既要算对题,又要讲清楚步骤)。
  • 对比 DPO:若你需要模型“既说真话,又说好话”(如医疗科普),ORPO 的监督损失能保证事实正确,更适合;若你没有监督数据(如全新领域的对话),DPO 只需要偏好数据,更灵活。
  • 对比 PPO:ORPO 一步训练,比 PPO 的“监督微调→训奖励模型→PPO 优化”三步更简洁,若你追求训练效率,选 ORPO;若你需要多维度奖励(如代码生成的“正确性+效率”),PPO 的奖励模型更适合。
  • 不适合:无监督数据的场景、长推理任务(如数学证明)、资源极度有限的场景(如只有 1 张 GPU)——这些场景要么数据缺失,要么标注成本高,ORPO 难以发挥。

5.4 ORPO 在大模型中的应用案例

以智能助手优化为例,OPPO小布助手通过ORPO算法对DeepSeek-R1大模型进行微调,实现了意图搜索升级与多轮对话记忆功能,使复杂问题解决能力提升170%,日均主动交互量占比达42%
。在医疗领域,ORPO被用于训练AI诊断模型,通过对比优质与低质医疗报告数据,显著提升诊断准确性,某三甲医院应用后误诊率降低至0.8%,同时支持联邦学习框架下的隐私保护部署。

六、KTO:模拟人类“怕损失”的“简洁对齐算法”

6.1 KTO 算法的概念与原理

KTO(卡尼曼-特沃斯基优化)核心思路是“模拟人类‘怕损失’的决策习惯,用‘单响应标签’替代‘成对偏好数据’,简化对齐过程”——解决了 DPO/ORPO 依赖成对数据、标注成本高的问题。

KTO 的理论基础是“前景理论”——人类对“损失”的敏感程度远高于“收益”:比如丢 100 元的痛苦,比捡 100 元的快乐更强烈。KTO 把这个原理用到模型对齐上:

  • 对“人类喜欢的响应”(称为“可取响应”,如正确的数学答案),模型若生成得不好,会受到“更重的惩罚”;
  • 对“人类不喜欢的响应”(称为“不可取响应”,如错误的数学答案),模型若生成了,会受到“额外的惩罚”。

举个例子:用户问“1+1=?”,模型生成两个响应:

  • 响应 A(可取):“1+1=2,这是基本的加法运算”(人类喜欢,标记为+1);
  • 响应 B(不可取):“1+1=3,因为两个数相加可以大于 2”(人类不喜欢,标记为-1)。

KTO 会设置两个惩罚系数:

  • λ_D(可取响应的惩罚系数,比如 1.2):若模型生成 A 的概率低,会用 λ_D 加大惩罚,督促模型多生成 A;
  • λ_U(不可取响应的惩罚系数,比如 1.5):若模型生成 B 的概率高,会用 λ_U 加大惩罚,督促模型少生成 B。

这样一来,模型会像人类一样“尽量避免生成坏响应,优先生成好响应”——而且 KTO 只用“单响应标签”(每个响应标+1/-1),不用成对数据,标注成本比 DPO 低 50%~70%。

和 DPO 比,KTO 不用成对数据,标注更便宜;和 ORPO 比,KTO 不用监督数据,更灵活;但 KTO 对“细微偏好”(如“详细回答”vs“简洁回答”)的捕捉不如 DPO。

6.2 KTO 的训练方法与数据集样例

训练方法

KTO 的训练就像“两步学‘避坏趋好’”,核心是“用单标签教模型分‘好/坏’”:

  1. 收集单响应标签数据:让人类标注员对每个响应打“可取(+1)”或“不可取(-1)”标签——比如“正确的数学答案”标+1,“错误的数学答案”标-1;“礼貌的对话”标+1,“无礼的对话”标-1。
  2. 构建前景理论损失:根据标签计算损失——对+1 响应,损失随生成概率降低而增大(用 λ_D 加权);对-1 响应,损失随生成概率升高而增大(用 λ_U 加权),同时限制模型偏离初始预训练模型(避免丢基础能力)。
  3. 更新模型参数:用梯度下降最小化这个损失,模型会逐渐“多生成+1 响应,少生成-1 响应”。
训练数据集样例

KTO 依赖“单响应标签数据”,每个样本只有“输入+响应+可取性标签”,格式简单,标注成本低:

[{"sample_id": "kto_001","input_x": "用户输入:计算 2+3×4 的结果","response": "先算乘法再算加法:3×4=12,2+12=14,结果是 14","desirability_label": 1  // 1=可取(正确+步骤清晰),-1=不可取},{"sample_id": "kto_002","input_x": "用户输入:计算 2+3×4 的结果","response": "2+3=5,5×4=20,结果是 20",  // 运算顺序错"desirability_label": -1},{"sample_id": "kto_003","input_x": "用户输入:你觉得人类会灭绝吗?","response": "这个问题目前没有确定答案~科学家认为,若人类能应对气候变化、小行星撞击等风险,长期生存的可能性很大;但如果忽视这些风险,可能会面临危机。我们可以从现在开始保护地球,降低风险呀",  // 客观+积极(可取)"desirability_label": 1},{"sample_id": "kto_004","input_x": "用户输入:你觉得人类会灭绝吗?","response": "人类肯定会灭绝,早晚的事,现在做什么都没用",  // 消极+绝对(不可取)"desirability_label": -1}
]

6.3 KTO 的优缺点与适用场景

优缺点
优点缺点
1. 标注成本低:只用单响应标签,不用成对数据,标注效率比 DPO 高 2~3 倍;
2. 计算复杂度低:不用对比两个响应的概率,损失函数计算简单,训练速度比 DPO 快 30%;
3. 适配不平衡数据:若可取响应少、不可取响应多(如医疗错误回答多),KTO 的“损失厌恶”机制能有效聚焦于“减少不可取响应”,鲁棒性比 DPO 强。
1. 偏好捕捉粗:只能区分“好/坏”,无法捕捉“细微偏好”(如“详细回答”vs“简洁回答”),对齐精度不如 DPO;
2. 参数敏感:λ_D 和 λ_U 的设置对效果影响大——比如 λ_U 太小,模型仍会生成较多坏响应;
3. 基础能力难兼顾:没有监督损失,若训练数据中可取响应的“事实准确性”不一,模型可能学偏(如把“详细但错误的回答”当可取)。
适用场景(对比其他算法)
  • 最适合:标注资源有限、只需“粗粒度对齐”(好/坏区分)的场景,比如内容审核模型(区分“合规/违规”内容)、低成本开源模型微调(如用少量标注数据优化 Alpaca-7B)、不平衡数据场景(如医疗错误回答多,需优先减少错误)。
  • 对比 DPO:若你标注预算少(如只有 1 万元标注费),KTO 的单标签标注更便宜;若你需要精细偏好(如“对话自然度”的细微差异),DPO 的成对数据对齐精度更高。
  • 对比 ORPO:KTO 不用监督数据,若你没有监督数据(如全新领域),KTO 更灵活;若你需要兼顾事实准确性(如知识问答),ORPO 的监督损失更适合。
  • 不适合:需要精细偏好对齐的场景(如高端对话机器人)、需要兼顾事实准确性的场景(如医疗科普)、长推理任务(如数学证明)——这些场景要么需要高精度对齐,要么需要基础能力保障,KTO 难以满足。

七、GSPO:解决 MoE 崩溃的“大规模训练算法”

7.1 GSPO 算法的概念与原理

GSPO(分组序列策略优化)是阿里巴巴 Qwen 团队 2024 年提出的“大规模模型专用算法”,核心思路是“让‘优化单位’和‘奖励单位’对齐——从‘逐词优化’变成‘整段优化’,解决混合专家(MoE)模型的训练崩溃问题”。

先解释一个行业痛点:MoE 模型(如 Qwen3-MoE、GPT-4o)因参数多(千亿甚至万亿)、专家分工不同,在传统 RL 算法(如 PPO、GRPO)训练中容易“崩溃”——比如某几个专家突然“疯狂输出错误内容”,导致整个模型性能断崖式下跌。原因是传统算法“逐词计算策略更新”:每个词的生成概率变化都会影响更新,MoE 专家的微小偏差会在逐词更新中被放大,最终导致崩溃。

GSPO 的解决方案是“整段优化”:不逐词计算策略差异,而是计算“整个响应(整段文本)”的策略差异,让更新幅度由“整段质量”决定,而非“单个词的质量”。

比如用户问“写一个 Python 函数计算阶乘”,模型生成一段响应(整段文本):

def factorial(n):if n < 0:raise ValueError("n 不能为负数")result = 1for i in range(1, n+1):result *= ireturn result

传统算法会逐词计算“新策略生成每个词的概率 / 旧策略生成每个词的概率”,再逐词更新;而 GSPO 会计算“新策略生成这段代码的整体概率 / 旧策略生成这段代码的整体概率”,再根据这个“整段比率”更新模型——而且会用“长度归一化”(比如代码长 100 词,就把比率开 100 次方),避免“长文本比率过大”导致的更新波动。

另外,GSPO 还会“裁剪整段比率”:若某段响应的比率超过 1+ε(如 1.2),就限制为 1.2,避免“极端比率”导致 MoE 专家偏差放大——相当于给 MoE 模型加了“全局稳定器”,从根源上解决训练崩溃问题。

和 GRPO 比,GSPO 从“群体对比”升级到“整段优化”,更适合 MoE 模型;和 PPO 比,GSPO 解决了大规模模型的训练稳定性问题,且训练效率更高(因丢弃了 15% 低质量样本,聚焦高价值更新)。

7.2 GSPO 的训练方法与数据集样例

训练方法

GSPO 的训练就像“四步大规模稳定优化”,核心是“整段评估+群体对比+稳定更新”:

  1. 生成响应组:对每个输入 x(如复杂数学题、代码需求),让当前 MoE 模型生成一组响应(比如 8 个整段响应),确保覆盖“好/中/差”不同质量。
  2. 计算整段奖励与优势:用多维度奖励函数(如代码的“运行成功率+效率+可读性”、数学题的“步骤正确性+答案正确性”)给每个整段响应打分,再算“群体平均奖励”,每个响应的优势值 = 响应奖励 - 平均奖励(标准化后更稳定)。
  3. 计算整段比率:对每个整段响应,算“新策略生成概率 / 旧策略生成概率”,再做“长度归一化”(开响应长度次方),得到整段比率。
  4. 裁剪与更新:对整段比率做裁剪(限制在 1-ε 到 1+ε 之间),再用“裁剪后的比率 × 优势值”更新模型——只保留 85% 高优势值样本,丢弃 15% 低优势值样本,提升训练效率。
训练数据集样例

GSPO 依赖“输入+整段响应组+多维度奖励”的数据,每个样本包含一个输入和一组整段响应,奖励是多维度评分(更贴合复杂任务需求):

[{"sample_id": "gspo_001","input_x": "用户输入:写一个 Python 函数,输入是列表,输出是列表中所有偶数的平方和(如输入 [1,2,3,4],输出 2²+4²=20)",  // 复杂代码需求"response_group": [  // 整段响应组(8 个,此处简化为 5 个){"response": "def even_square_sum(lst):\n    total = 0\n    for num in lst:\n        if num % 2 == 0:\n            total += num **2\n    return total\n# 测试:输入 [1,2,3,4],输出 20,正确","reward": {  // 多维度奖励(总分 1.0)"correctness": 0.3,  // 运行正确(满分 0.3)"efficiency": 0.25,  // 效率高(满分 0.25)"readability": 0.25,  // 代码易读(满分 0.25)"test_case": 0.2  // 带测试用例(满分 0.2)},"total_reward": 1.0  // 总分},{"response": "def even_square_sum(lst):\n    return sum(num** 2 for num in lst if num % 2 == 0)","reward": {"correctness": 0.3,"efficiency": 0.25,"readability": 0.2,  // 代码简洁但无注释,可读性略低"test_case": 0.0  // 无测试用例},"total_reward": 0.75},{"response": "def even_square_sum(lst):\n    total = 0\n    for num in lst:\n        if num % 2 == 1:\n            total += num **2\n    return total",  // 条件错(取了奇数)"reward": {"correctness": 0.0,"efficiency": 0.25,"readability": 0.2,"test_case": 0.0},"total_reward": 0.45},{"response": "def even_square_sum(lst):\n    total = 0\n    for num in lst:\n        if num % 2 == 0:\n            total += num * num\n    return total\n# 测试:输入 [2,4,6],输出 4+16+36=56,正确","reward": {"correctness": 0.3,"efficiency": 0.25,"readability": 0.25,"test_case": 0.2},"total_reward": 1.0},{"response": "def even_square_sum(lst):\n    # 这是计算偶数平方和的函数\n    total = 0\n    for i in range(len(lst)):\n        num = lst[i]\n        if num % 2 == 0:\n            total += num **2\n    return total\n# 测试:输入 [1,3,5],输出 0,正确","reward": {"correctness": 0.3,"efficiency": 0.2,  // 用了索引,效率略低"readability": 0.25,"test_case": 0.2},"total_reward": 0.95}],"group_stats": {"mean_total_reward": 0.83,"std_total_reward": 0.21}}
]

7.3 GSPO 的优缺点与适用场景

优缺点
优点缺点
1. 解决 MoE 训练崩溃:整段优化避免了逐词更新的偏差放大,MoE 模型训练稳定性提升 90%;
2. 训练效率高:丢弃 15% 低价值样本,聚焦高优势值更新,同等计算资源下,性能提升比 GRPO 高 20%;
3. 适配复杂任务:多维度奖励+整段评估,适合长推理(如数学证明)、复杂代码生成等任务;
4. 简化基础设施:整段优化对精度容忍度高,可简化 RL 训练的硬件适配(如不用高精度计算)。
1. 实现复杂:整段比率计算、长度归一化、多维度奖励整合都需要定制化开发,比 PPO/DPO 难实现;
2. 计算资源需求高:每个输入要生成 8~10 个整段响应,且需计算多维度奖励,GPU 显存占用比 GRPO 高 30%;
3. 理论基础待完善:目前缺乏完整的收敛性证明,部分超参数(如长度归一化的次方数)需靠实验调整。
适用场景(对比其他算法)
  • 最适合:大规模 MoE 模型(如 Qwen3-MoE、GPT-4o)的复杂任务训练,比如千亿参数模型的数学推理(如解微积分)、工业级代码生成(如分布式系统代码)、长文本逻辑证明(如哲学论证)。
  • 对比 GRPO:GRPO 适合稠密模型的长推理,GSPO 适合 MoE 模型的长推理——若你用 MoE 模型,GSPO 能解决训练崩溃问题;若你用稠密模型,GRPO 的计算成本更低。
  • 对比 PPO:PPO 适合中等规模模型的通用任务,GSPO 适合大规模 MoE 模型的复杂任务——若你训千亿参数 MoE 模型,PPO 容易崩溃,GSPO 更稳定。
  • 不适合:中小规模模型(如 7B-70B 稠密模型)、资源有限的场景(如只有 4 张以下 A100)、短文本任务(如客服常见问题)——这些场景中,GSPO 的“高计算成本”性价比太低。

7.4 GSPO 在大模型中的应用案例

  1. Qwen3 系列模型:阿里巴巴用 GSPO 训练 Qwen3 的三个核心版本——Qwen3-Instruct(对话)、Qwen3-Coder(代码)、Qwen3-Thinking(推理),均为 MoE 架构(千亿参数)。GSPO 让模型在训练中未出现一次崩溃,且在 MATH 数学数据集上的正确率比 GRPO 高 22%,在 HumanEval 代码数据集上的通过率比 GRPO 高 18%。
  2. Qwen3-30B-A3B-Base:这是 Qwen3 的中等规模 MoE 模型,GSPO 和 GRPO 比实验——在同等计算成本下(8 张 A100,训练 7 天),GSPO 微调后的模型在“长链逻辑推理”任务上的表现比 GRPO 高 25%,且训练过程中显存波动小于 5%,GRPO 则出现 3 次显存溢出。

八、大模型强化学习算法比较

8.1 核心维度对比表

算法核心创新数据需求计算成本适合模型规模核心适用场景关键痛点
PPO裁剪机制稳更新,通用型强状态-动作-奖励序列(需奖励模型)中小规模(7B-70B 稠密)通用文本生成、短对话依赖奖励模型,长推理/ MoE 不稳定
DPO无奖励模型,直接用成对偏好成对偏好数据(x,y,y’)中低中小规模(7B-70B 稠密)轻量偏好对齐、短对话长推理标注成本高,难捕细微偏好
GRPO群体对比代价值函数,长推理优输入+响应组+奖励中大规模(70B 稠密-千亿稠密)长链推理(数学/代码)全负样本组问题,MoE 不稳定
ORPO单步兼顾 SFT 与偏好监督数据+偏好数据中小规模(7B-70B 稠密)知识问答、教育辅导依赖双数据集,超参数敏感
KTO单标签+前景理论,低成本单响应标签数据(x,y,±1)小规模(7B-13B 稠密)内容审核、低成本微调偏好精度低,难兼顾事实
GSPO整段优化,MoE 稳定输入+整段响应组+多维度奖励极高大规模(千亿-万亿 MoE)复杂推理、工业级代码实现复杂,中小模型性价比低

8.2 场景选择决策树

  1. 第一步:看模型类型与规模

    • 若为 MoE 模型(千亿以上) → 直接选 GSPO;
    • 若为 稠密模型(70B 以上) → 优先选 GRPO(长推理)或 PPO(通用);
    • 若为 稠密模型(7B-70B) → 进入第二步。
  2. 第二步:看数据资源

    • 只有单响应标签数据 → 选 KTO;
    • 有偏好数据但无监督数据 → 选 DPO;
    • 既有偏好数据又有监督数据 → 选 ORPO;
    • 有奖励模型(或能训奖励模型) → 选 PPO。
  3. 第三步:看任务类型

    • 若为 长链推理(数学/代码) → 选 GRPO(稠密)或 GSPO(MoE);
    • 若为 短文本对话/通用生成 → 选 PPO/DPO/ORPO;
    • 若为 内容审核/低成本微调 → 选 KTO。
选型建议

大模型强化学习算法已从“通用型 PPO”发展到“场景专用型 GSPO”,每种算法都有其“核心优势”与“适用边界”:

  • 若是小团队,做短文本对话:选 DPO/KTO,低成本快速对齐;
  • 若是中团队,做长推理(数学/代码):选 GRPO,平衡效果与成本;
  • 若是大团队,做大规模 MoE 模型:选 GSPO,解决训练崩溃,释放千亿参数潜力。

文章转载自:

http://YLG44KGH.htbgz.cn
http://VmLGBO31.htbgz.cn
http://izzIgMRY.htbgz.cn
http://CLtlNs8J.htbgz.cn
http://fSntB7QI.htbgz.cn
http://ytvAb1qz.htbgz.cn
http://cOTZf02F.htbgz.cn
http://Ggqxh5Ln.htbgz.cn
http://5CKJvtl8.htbgz.cn
http://4mKCFDVh.htbgz.cn
http://BqevKmcW.htbgz.cn
http://wXaezgd2.htbgz.cn
http://rI04vQVR.htbgz.cn
http://pb5kHeGe.htbgz.cn
http://snKseGkf.htbgz.cn
http://6YZe7ZLN.htbgz.cn
http://WHoeT8Ni.htbgz.cn
http://10jH95DS.htbgz.cn
http://XipQcQ48.htbgz.cn
http://PmRVPnwb.htbgz.cn
http://HWklYznl.htbgz.cn
http://3u3wK87u.htbgz.cn
http://pNaenbhZ.htbgz.cn
http://4zcgLXPI.htbgz.cn
http://20cEF7kb.htbgz.cn
http://FnKXFL5R.htbgz.cn
http://S9v0KEd7.htbgz.cn
http://wqF9WATr.htbgz.cn
http://rWMkhN7B.htbgz.cn
http://t8A6SwFR.htbgz.cn
http://www.dtcms.com/a/367769.html

相关文章:

  • websocket的key和accept分别是多少个字节
  • lc链表问答
  • [iOS] 折叠 cell
  • Qt 系统相关 - 1
  • JavaScript 实战进阶续篇:从工程化到落地的深度实践
  • 深度学习:自定义数据集处理、数据增强与最优模型管理
  • ASRPRO语音模块
  • 一个开源的企业官网简介
  • Linux的权限详解
  • 【ICCV 2025 顶会论文】,新突破!卷积化自注意力 ConvAttn 模块,即插即用,显著降低计算量和内存开销。
  • HTB Jerry
  • 微信支付--在线支付实战,引入Swagger,定义统一结果,创建并连接数据库
  • 为什么串口发送一串数据时需要延时?
  • 决策树算法详解:从原理到实战
  • 生成式AI优化新纪元:国产首个GEO工具的技术架构剖析
  • 2025年高教社杯全国大学生数学建模竞赛B题思路(2025数学建模国赛B题思路)
  • 【C语言】第一课 环境配置
  • git命令行打patch
  • day2today3夏暮客的Python之路
  • 随时学英语5 逛生活超市
  • Web相关知识(草稿)
  • 计算机组成原理:GPU架构、并行计算、内存层次结构等
  • 用服务器搭 “私人 AI 助手”:不用联网也能用,支持语音对话 / 文档总结(教程)
  • 学生时间管理系统设计与实现(代码+数据库+LW)
  • 【3D 入门-6】大白话解释 SDF(Signed Distance Field) 和 Marching Cube 算法
  • 并发编程——17 CPU缓存架构详解高性能内存队列Disruptor实战
  • Pycharm终端pip install的包都在C:\Users\\AppData\Roaming\Python\解决办法
  • Linux中用于线程/进程同步的核心函数——`sem_wait`函数
  • Day2p2 夏暮客的Python之路
  • C++虚函数虚析构函数纯虚函数的使用说明和理解