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

07-强化学习对齐RLHF

阶段 7:强化学习对齐(RLHF / RLAIF)

教学目标

  • 理解强化学习在 LLM 对齐中的作用和必要性
  • 掌握 RL 统一框架,理解 DPO、PPO、GRPO、CISPO 的本质区别
  • 深入理解每个算法的损失函数和训练流程
  • 了解 Agentic RL(多轮 Tool-Use 强化学习)的设计
  • 能够运行至少一种 RL 对齐训练并分析效果

课时安排

  • 理论讲解:2.5 课时(RL 框架 + 各算法原理 + Agentic RL)
  • 训练实验:1.5 课时(运行 DPO/GRPO + 效果对比)

7.1 为什么需要强化学习对齐?

7.1.1 SFT 的局限性

SFT 后的模型虽然学会了"回答问题",但存在以下问题:

问题示例
回答可能不准确虚假信息、事实错误
可能产生有害内容偏见、歧视、危险建议
可能过于冗长不必要的重复和啰嗦
可能不一致同一问题不同次回答差异大
可能不符合人类偏好虽然语法正确但"不是用户想要的"

7.1.2 RLHF/RLAIF 的目标

SFT 后: 模型能回答问题,但质量参差不齐 RLHF/RLAIF 后: 模型学会"区分好坏",倾向于生成高质量回答 核心变化: 从"模仿训练数据中的回答" → 到"优化人类偏好的奖励信号"

7.1.3 RLHF vs RLAIF

方式奖励来源代表模型MiniMind 使用
RLHF人类标注者打分InstructGPT, ChatGPT
RLAIFAI 模型自动打分MiniMind

MiniMind 使用RLAIF(AI 反馈的强化学习),因为:

  • 无需人类标注,成本更低
  • 可重复、可扩展
  • 适合教学场景

7.2 RL 统一框架

7.2.1 核心公式

MiniMind 将所有偏好优化(PO)算法统一为一个框架:

J_PO = E[ f(r_t) · g(A_t) - h(KL_t) ]

其中三个组件:

  • 策略项f(r_t):基于奖励的函数(控制策略更新方向)
  • 优势项g(A_t):基于优势的函数(控制更新幅度和方向)
  • 正则项h(KL_t):KL 散度惩罚(防止策略偏离太远)

7.2.2 四种算法的对比

算法策略项 f®优势项 g(A)正则项 h(KL)训练模型数训练复杂度
DPOlog π_w / π_l无显式优势项隐含在 β 中1最低
PPOmin(r, clip®)R - V(s)β·E[KL]2(Actor + Critic)最高
GRPOmin(r, clip®)(R-μ)/σ 组内归一化β·KL_t1中等
CISPOclip(r,0,ε)·A·log π(R-μ)/σβ·KL_t1中等

7.2.3 算法选择指南

资源充足 + 追求效果 → PPO 资源有限 + 追求效率 → DPO 最新主流 + 效果平衡 → GRPO / CISPO 简单快速 + 原型验证 → DPO

7.3 DPO(Direct Preference Optimization)

7.3.1 核心思想

DPO 绕过了传统的"训练奖励模型 → 强化学习优化"两阶段流程,直接用偏好对数据进行优化

传统 RLHF: 偏好数据 → 训练奖励模型 → PPO 优化 DPO: 偏好数据 → 直接优化策略

7.3.2 DPO 数据格式

{"chosen":[{"role":"user","content":"请解释什么是机器学习"},{"role":"assistant","content":"机器学习是人工智能的一个分支,它使计算机能够从数据中学习模式和规律,而不需要被明确编程。常见的方法包括监督学习、无监督学习和强化学习。"}],"rejected":[{"role":"user","content":"请解释什么是机器学习"},{"role":"assistant","content":"机器学习就是一种学习的方法。它让机器自己学习。具体我也不知道怎么说。"}]}

7.3.3 DPO 损失函数

L_DPO = -E[ log σ(β · (log π_θ(y_w|x) - log π_ref(y_w|x) - log π_θ(y_l|x) + log π_ref(y_l|x))) ] 简化理解: L_DPO = -E[ log σ(β · (logit(好回答) - logit(坏回答)) ) ] 目标: 最大化好回答的对数概率,最小化坏回答的对数概率 β 控制对参考策略的偏离程度

7.3.4 DPO 训练

cdminimind/trainer python train_dpo.py

输出out/dpo_768.pth


7.4 PPO(Proximal Policy Optimization)

7.4.1 核心思想

PPO 是经典的强化学习算法,通过奖励模型(在 MiniMind 中由 AI 扮演)给模型输出打分,然后优化策略最大化奖励。

7.4.2 PPO 训练流程

┌──────────────────────────────────────────────────┐ │ PPO 训练循环 │ │ │ │ 1. 从当前策略生成回答 y │ │ π_θ(y|x) → y │ │ │ │ 2. 使用奖励模型/AI 评分 │ │ R(y, x) → r │ │ │ │ 3. 使用 Critic 网络估计价值 │ │ V(x) → v │ │ │ │ 4. 计算优势函数 │ │ A = r - v │ │ │ │ 5. 计算 PPO Clip 损失 │ │ r_t = π_new(y|x) / π_old(y|x) │ │ L = -min(r_t·A, clip(r_t, 1-ε, 1+ε)·A) + β·KL│ │ │ │ 6. 更新 Actor 和 Critic 网络 │ └──────────────────────────────────────────────────┘

7.4.3 PPO 代码核心

# 简化的 PPO 损失计算defppo_loss(new_log_probs,old_log_probs,advantages,beta=0.1,epsilon=0.2):# 重要性采样比率ratio=torch.exp(new_log_probs-old_log_probs)# PPO Clip 损失surr1=ratio*advantages surr2=torch.clamp(ratio,1-epsilon,1+epsilon)*advantages policy_loss=-torch.min(surr1,surr2).mean()# KL 散度惩罚kl_div=(new_log_probs-old_log_probs).mean()total_loss=policy_loss+beta*kl_divreturntotal_loss

7.4.4 PPO 训练

cdminimind/trainer python train_ppo.py

输出out/ppo_actor_768.pth(Actor 模型)+out/ppo_critic_768.pth(Critic 模型)


7.5 GRPO / CISPO

7.5.1 GRPO(Group Relative Policy Optimization)

GRPO 是 DeepSeek 提出的优化算法,核心创新是组内归一化替代 Critic 网络:

PPO: 需要 Critic 网络 V(x) 来估计基线 GRPO: 用同组采样的平均奖励作为基线 组内归一化优势: A_i = (R_i - mean(R_group)) / std(R_group) 其中: R_group = 同一个 prompt 采样 G 个回答的奖励集合 R_i = 第 i 个回答的奖励

优势

  • 不需要训练 Critic 网络(节省一半模型)
  • 组内归一化自动适应不同难度的 prompt

7.5.2 CISPO(Conervative ISPO)

CISPO 是 GRPO 的保守变体,通过额外的裁剪操作进一步稳定训练:

CISPO 的策略项: clip(ratio, 0, ε) · A · log π_θ(y|x) 与 GRPO 的区别: GRPO: min(ratio, clip(ratio, 1-ε, 1+ε)) · A CISPO: clip(ratio, 0, ε) · A · log π_θ(y|x)

7.5.3 GRPO / CISPO 训练

cdminimind/trainer# GRPO 训练python train_grpo.py--loss_typegrpo# CISPO 训练(修改 loss_type 即可)python train_grpo.py--loss_typecispo

输出out/grpo_768.pth

7.5.4 GRPO 与 DPO/PPO 的对比

维度DPOPPOGRPO/CISPO
训练模型数121
需要 Critic否(组内归一化)
需要偏好对否(需要奖励模型)否(需要奖励函数)
训练稳定性中-高
效果好(数据充足时)好(DeepSeek 验证)
MiniMind 推荐✅ 快速验证✅ 效果上限高✅ 最新主流

7.6 Agentic RL(多轮 Tool-Use 强化学习)

7.6.1 什么是 Agentic RL?

Agentic RL 将强化学习扩展到多轮工具调用场景,训练模型学会:

  • 何时使用工具
  • 选择哪个工具
  • 如何组织工具调用序列
  • 如何整合工具结果给出最终回答

7.6.2 训练流程

┌──────────────────────────────────────────────┐ │ Agentic RL 训练 │ │ │ │ 1. 给定一个需要工具的问题 │ │ "计算 (123 + 456) × 789 / 3" │ │ │ │ 2. 模型生成多轮动作 │ │ Round 1: 调用计算器 → 123+456=579 │ │ Round 2: 调用计算器 → 579×789=456,831 │ │ Round 3: 调用计算器 → 456831/3=152,277 │ │ Round 4: 给出最终回答 → "结果是 152,277" │ │ │ │ 3. 计算综合奖励 │ │ R = R_answer + R_tool + R_format - R_unfin │ │ │ │ 4. 使用 CISPO 优化策略 │ └──────────────────────────────────────────────┘

7.6.3 奖励函数设计

R(τ) = R_answer + R_tool + R_format + R_rm - R_unfinished 其中: R_answer : 最终答案是否正确(0 或 1) R_tool : 工具调用是否正确(0 或 1) R_format : 输出格式是否符合要求(0 或 1) R_rm : 推理过程中的推理步骤质量 R_unfinished: 未完成时惩罚(0 或 -1)

7.6.4 Agentic RL 训练

cdminimind/trainer# 基本训练python train_agent.py# 使用 SGLang 作为 rollout 引擎(更快)python train_agent.py--rollout_enginesglang--sglang_base_urlhttp://localhost:8998

输出out/agent_768.pth

7.6.5 效果对比

MiniMind 官方评测(数学 Tool Use 任务,20 题):

模型正确率
minimind-3 full_sft12/20 =60%
minimind-3 agent (CISPO)17/20 =85%

Agentic RL 将数学工具调用的正确率从 60% 提升到 85%,提升了25 个百分点


7.7 数据集

7.7.1 RLAIF 数据集

文件大小用途
rlaif.jsonl24MBPPO/GRPO/CISPO 训练
dpo.jsonl53MBDPO 偏好对齐训练
agent_rl.jsonl86MBAgentic RL 训练
agent_rl_math.jsonl18MB数学推理 Agent 训练

7.7.2 下载

modelscope download--modelgongjy/minimind_dataset\--include"dpo.jsonl"\--include"rlaif.jsonl"\--include"agent_rl.jsonl"\--local_dir./dataset

实践任务

任务 7.1:DPO 训练(必做)

  1. 下载 DPO 数据集
  2. 运行 DPO 训练
  3. 对比 DPO 前(SFT)和 DPO 后的回答质量
cdtrainer&&python train_dpo.pycd..&&python eval_llm.py--load_from./out/dpo_768.pth

测试问题建议

  • “用三步解释什么是深度学习”
  • “Python 的列表和元组有什么区别?”
  • “写一个判断质数的函数”

任务 7.2:RL 算法对比(选做)

运行多种 RL 算法,对比效果:

# DPOpython train_dpo.py# GRPOpython train_grpo.py--loss_typegrpo# CISPOpython train_grpo.py--loss_typecispo
算法训练 Loss训练时间回答质量(主观评分 1-5)
DPO
GRPO
CISPO

任务 7.3:DPO 数据分析(选做)

# 分析 DPO 偏好对数据importjson chosen_lengths=[]rejected_lengths=[]withopen('dataset/dpo.jsonl','r',encoding='utf-8')asf:forlineinf:data=json.loads(line)chosen_text=' '.join(msg['content']formsgindata['chosen'])rejected_text=' '.join(msg['content']formsgindata['rejected'])chosen_lengths.append(len(chosen_text))rejected_lengths.append(len(rejected_text))print(f"Chosen 平均长度:{sum(chosen_lengths)/len(chosen_lengths):.0f}字符")print(f"Rejected 平均长度:{sum(rejected_lengths)/len(rejected_lengths):.0f}字符")print(f"数据总量:{len(chosen_lengths)}对")# 分析好回答和坏回答的长度差异# 通常好回答更长、更完整

任务 7.4:Agentic RL 测试(选做)

# 运行 Agentic RL 训练(需要 SGLang 后端)python train_agent.py--rollout_enginesglang--sglang_base_urlhttp://localhost:8998# 测试工具调用能力python eval_toolcall.py--weightagent

挑战任务(选做)

  • 设计自己的奖励函数,修改 Agentic RL 的奖励计算逻辑
  • 对比不同 RL 算法在特定任务(如数学推理、代码生成)上的表现差异

下一阶段预告

在阶段 8 中,我们将学习模型部署与应用。将训练好的 MiniMind 模型部署为 OpenAI 兼容的 API 服务,集成到 vLLM、ollama 等推理框架,并接入 FastGPT、Dify 等 RAG 应用。

http://www.cnnetsun.cn/news/3457550.html

相关文章:

  • 08-应用部署
  • Qt 通过 NMC-G2 读取 UPS 状态
  • 3分钟掌握Forza Mods AIO:极限竞速地平线游戏修改的终极指南
  • cann/asc-devkit TQue分配Tensor函数
  • AudioShare音频共享解决方案:打破设备壁垒,实现跨平台音频同步传输
  • Akamai Cloud Manager完全指南:从入门到精通Linode服务管理
  • 终极指南:如何用Linkinator快速检测和修复网站死链
  • CANN/Ascend C SIMT-API FP8转换函数
  • 贾子的相变:当历史的筛选机制遇见认知的临界点
  • BetterDB Monitor Webhook配置:实时通知与自动化工作流集成
  • Material Combiner:Blender材质合并与UV修复的技术解决方案
  • Marge-bot 高级功能探索:Commit Trailers、审核者模拟和合并限制
  • 用 AI 藏 AI 痕迹:Academic Humanizer 掀学界论战,AI 智能落地有了新解法
  • 暂存区是不是叫stage? 工作区叫啥?
  • Go-Queryset错误处理与调试:常见问题排查与解决方案
  • Nintendo Switch帧率解锁终极指南:FPSLocker完全掌握手册
  • Smart 265视频编码技术解析与安防监控应用
  • 高效音频转字幕终极指南:AsrTools智能语音识别方案
  • JODConverter终极指南:5个技巧实现Java文档格式互转高效集成
  • 如何用node-persist实现服务器端localStorage:5分钟快速上手教程
  • Servest JSX服务端渲染:如何在Deno中实现现代化Web应用
  • Scala Scraper DSL高级特性:Option、Either与Functor的优雅运用
  • AI 生成组件的自动化回归测试:快照对比与交互回放的工程方案
  • TBAnnotationClustering社区与支持:如何贡献与获取帮助的终极指南
  • 17个Obsidian核心插件模板:快速搭建个人知识管理系统
  • WaveTools鸣潮性能调校完整解决方案:从诊断到优化的全流程指南
  • 收藏!2026年普通人也能抓住的AI就业5条赛道,速看!
  • 如何快速解决音频标签问题:Tag Editor完整使用指南与实用技巧
  • CANN/asc-devkit TQueBind分配Tensor
  • Cursor+FastAPI+Docker后端搭建全栈方案(企业级CI/CD预配置模板首次公开)