本文为"从零手搓大语言模型"系列第 5 篇,系统梳理 LLM 后训练阶段的强化学习方法论与实现差异。

一、为什么需要强化学习对齐

SFT 让模型学会了对话,但"会说话"不等于"说得好"。模型可能:

  • 生成不安全/有害内容
  • 回答冗长无重点
  • 在多种合理回答中缺乏偏好导向

强化学习对齐的目标是让模型生成更符合人类偏好的回答——更安全、更有帮助、更简洁。

二、三种主流方法的对比

维度 DPO GRPO PPO
全称 Direct Preference Optimization Group Relative Policy Optimization Proximal Policy Optimization
是否需要奖励模型
数据来源 人工标注的好坏回答对 模型自己生成多个回答 模型生成 + 奖励模型打分
探索能力 无(静态数据) 有(在线采样) 有(在线采样)
实现复杂度
训练稳定性 较高 低(超参敏感)
代表应用 Llama 2, Zephyr DeepSeek-R1 ChatGPT(早期)

三、DPO:直接偏好优化

3.1 核心思想

跳过奖励模型训练,直接从偏好数据中学习。给定同一问题的两个回答(chosen 和 rejected),让模型更倾向于生成 chosen。

3.2 数据格式

{
  "chosen": [
    {"role": "user", "content": "如何学编程"},
    {"role": "assistant", "content": "建议从 Python 入手,循序渐进..."}
  ],
  "rejected": [
    {"role": "user", "content": "如何学编程"},
    {"role": "assistant", "content": "编程很简单啊随便学学就会了"}
  ]
}

3.3 训练架构

DPO 需要两个模型同时存在:

model, _ = init_model(config, 'full_sft')       # 策略模型(正在训练)
ref_model, _ = init_model(config, 'full_sft')   # 参考模型(冻结不动)
ref_model.requires_grad_(False)

两者初始权重相同,但只有策略模型会被更新。参考模型作为"基准线",防止策略模型偏离原始行为过远。

3.4 Loss 计算

# 策略模型对好/坏回答的概率比
pi_logratios = chosen_policy_log_probs - reject_policy_log_probs

# 参考模型对好/坏回答的概率比
ref_logratios = chosen_ref_log_probs - reject_ref_log_probs

# DPO loss:让策略模型的偏好程度超过参考模型
loss = -logsigmoid(beta * (pi_logratios - ref_logratios))

直观理解:策略模型相对于参考模型更加偏好 chosen 回答时,loss 下降;否则 loss 上升。beta(=0.15)控制允许偏离参考模型的程度。

3.5 超参数特点

学习率极低(4e-8,比 SFT 小 250 倍),仅对偏好方向做微小调整,避免遗忘已有能力。

四、GRPO:组内相对策略优化

4.1 核心思想

不依赖外部标注数据,让模型对同一 prompt 生成多个回答,组内排名后自我改进。

4.2 流程

1. 给定 prompt:"解释什么是机器学习"
2. 模型生成 N=8 个不同回答(通过采样)
3. 对每个回答用规则/AI 打分(如:流畅度、准确性、格式)
4. 计算组内优势值:高分回答 → 正优势,低分回答 → 负优势
5. 用 PPO 风格的策略梯度更新模型

4.3 与 DPO 的本质区别

DPO 从外部数据学习偏好(被动),GRPO 从自身生成中学习(主动探索)。模型的好坏对比标准不是人给的静态数据,而是自己当前能力下的相对排名。

4.4 奖励函数设计

MiniMind 中 GRPO 的奖励信号来源于自动化规则:

  • 文本长度是否合理
  • 是否包含重复片段
  • 数学题是否答对(可验证场景)
  • 格式是否正确

这类自动化反馈称为 RLAIF(RL from AI Feedback),区别于依赖人类标注的 RLHF。

五、PPO:近端策略优化

5.1 核心思想

训练一个独立的奖励模型(Reward Model),然后用强化学习(PPO 算法)让策略模型最大化奖励。

5.2 系统组成

PPO 训练时需要 4 个模型/组件同时工作:

组件 作用
策略模型(Actor) 正在训练的生成模型
参考模型(Reference) 冻结的基准模型,防止偏离
奖励模型(Reward Model) 对生成结果打分
价值模型(Critic) 预估每个状态的期望回报

5.3 复杂度分析

PPO 的工程复杂度最高:需要维护多个模型、处理异步采样、平衡探索与利用、调节多组超参数(clip ratio, GAE lambda, KL penalty 等)。但其理论上限也最高。

六、Agentic RL:多轮工具调用强化

MiniMind 还提供了 train_agent.py,将 GRPO 扩展到多轮 Tool Use 场景:

Prompt → 模型决定是否调用工具 → 调用工具 → 获取结果 → 继续回答
       └── 奖励信号:最终结果是否正确(由 ground truth 校验)

模型需要学会"何时调工具、调哪个工具、传什么参数",这是 RLAIF 在 Agent 场景的自然延伸。

七、训练全流程回顾

随机初始化
    │
    ▼ Pretrain(学语言规律,lr=5e-4)
    │
    ▼ SFT(学对话格式,lr=1e-5)
    │
    ├── LoRA(可选:领域适配,仅训 1.5% 参数)
    │
    ▼ DPO/GRPO/PPO(对齐人类偏好,lr=4e-8 ~ 1e-6)
    │
    ▼ 可部署的对话模型

每个阶段的学习率递减,反映了"知识越丰富,调整应越审慎"的原则。

八、实践建议

  1. 入门建议:先跑 DPO(实现最简单),再研究 GRPO(理解在线采样),最后看 PPO
  2. 小模型限制:64M 参数的模型在强化学习阶段的效果提升有限,偏好对齐在百亿级模型上效果更显著
  3. 数据质量:DPO 的效果高度依赖偏好数据质量;GRPO 的效果取决于奖励函数的设计
  4. 训练稳定性:DPO > GRPO > PPO,工程实现难度也是如此

九、小结

强化学习对齐是 LLM 从"能说话"到"说好话"的关键一步。三种方法各有取舍:DPO 最简单但缺乏探索,PPO 最强大但最难调,GRPO 是实用的折中方案。在 DeepSeek-R1 验证了 GRPO 在推理能力训练中的有效性后,GRPO 正成为业界越来越主流的选择。


系列总结

本系列 5 篇文章覆盖了大语言模型从零训练的完整流程:

篇目 主题 核心内容
第 1 篇 模型结构 Transformer Decoder-Only、RoPE、GQA、SwiGLU、RMSNorm
第 2 篇 数据处理与预训练 Tokenizer、数据格式、训练循环、混合精度
第 3 篇 有监督微调 Chat Template、对话格式、loss mask、超参差异
第 4 篇 LoRA 微调 低秩分解、参数冻结、动态注入、权重合并
第 5 篇 强化学习对齐 DPO、GRPO、PPO 原理与实现对比

模型的本质是参数矩阵,训练的本质是将随机数值调整为能准确预测下一个 token 的有意义数值。全部核心算法均可使用 PyTorch 原生实现,不依赖第三方高层封装。理解每一行代码的含义,是深入理解大语言模型内部机制的必经之路。

Logo

欢迎加入 MCP 技术社区!与志同道合者携手前行,一同解锁 MCP 技术的无限可能!

更多推荐