本项目实现了三种主流的强化学习/对齐算法:PPO、DPO 和 GRPO。每种算法都包含详细的代码注释和 Jupyter Notebook 演示。
RLHF/
├── PPO/ # Proximal Policy Optimization
│ ├── ppo.py # PPO核心实现
│ └── ppo_demo.ipynb # PPO演示和验证
├── DPO/ # Direct Preference Optimization
│ ├── dpo.py # DPO核心实现
│ └── dpo_demo.ipynb # DPO演示和验证
├── GRPO/ # Generative Reward-guided Policy Optimization
│ ├── grpo.py # GRPO核心实现
│ └── grpo_demo.ipynb # GRPO演示和验证
├── common/
│ └── utils.py # 通用工具和基础模块
├── test_all_algorithms.py # 综合测试脚本
└── README.md # 本文件
特点:
- 使用剪裁替代目标限制策略更新步长
- 多个 epoch 的小批量梯度更新
- 使用价值函数作为基线减少方差
- 加入熵正则化鼓励探索
核心公式:
L^CLIP = E_t[min(r_t * A_t, clip(r_t, 1-ε, 1+ε) * A_t)]
其中 r_t = π_θ(a_t|s_t) / π_θ_old(a_t|s_t)
适用场景:
- 通用的策略梯度优化
- 需要稳定训练的场景
- 离散和连续控制任务
特点:
- 直接从人类偏好数据学习,无需显式奖励函数
- 使用 Bradley-Terry 模型建模偏好关系
- 简化了 RLHF 流程
- 计算高效
核心公式:
L_DPO = -log σ(β * (log π(y_w|x) - log π(y_l|x)
- log π_ref(y_w|x) + log π_ref(y_l|x)))
适用场景:
- 语言模型对齐
- 从成对偏好数据学习
- 避免显式奖励函数的场景
特点:
- 显式学习奖励函数指导策略优化
- 同时训练策略、奖励模型和价值函数
- KL 散度约束防止过度优化
- 多目标平衡
核心公式:
L = L_policy + β*KL(π||π_ref) - α*H(π)
L_policy = -E[log π(a|s) * (A_t + λ*r_pred(s,a))]
适用场景:
- 需要可解释的奖励函数
- 长期奖励不好定义的场景
- 多目标优化问题
pip install numpy torch gym matplotlibjupyter notebook PPO/ppo_demo.ipynbcd PPO
python ppo.pycd DPO
python dpo.pycd GRPO
python grpo.pypython test_all_algorithms.py此命令会依次测试 PPO、DPO 和 GRPO,验证所有算法是否正常工作。
包含所有算法共用的工具:
| 类/函数 | 说明 |
|---|---|
SimplePolicy |
离散动作空间的策略网络 |
SimpleValueNetwork |
状态价值函数网络 |
SimpleRewardModel |
奖励模型网络 |
SimpleEnv |
简单的测试环境 |
compute_gae() |
计算广义优势估计 (GAE) |
TrajectorySampler |
轨迹采样器 |
convert_to_tensor() |
数据类型转换 |
| 类 | 说明 |
|---|---|
PPOAgent |
PPO 智能体实现 |
PPOAgent.compute_policy_loss() |
计算剪裁替代目标损失 |
PPOAgent.update() |
单步更新 |
PPOAgent.train() |
完整训练流程 |
| 类/函数 | 说明 |
|---|---|
DPOTrainer |
DPO 训练器 |
DPOTrainer.compute_dpo_loss() |
计算 DPO 损失 |
generate_preference_data() |
生成偏好数据 |
| 类 | 说明 |
|---|---|
GRPOAgent |
GRPO 智能体实现 |
GRPOAgent.compute_policy_loss() |
计算策略损失 |
GRPOAgent.compute_reward_loss() |
计算奖励模型损失 |
GRPOAgent.update() |
多目标更新 |
运行 Jupyter Notebook 后,每个算法都会生成训练图表:
- 平均奖励
- 策略损失
- 价值损失
- 策略熵
- DPO 损失
- 偏好预测准确率
- 平均奖励
- 策略损失
- 奖励模型损失
- 价值损失
- 策略熵
- KL 散度
advantage = δ + γλ * δ_next + (γλ)² * δ_next2 + ...
其中 δ = r + γV(s') - V(s)防止新策略与旧策略差异过大,确保训练的稳定性:
KL(π_new || π_old) < δ
∇L = E[∇log π(a|s) * A(s,a)]
所有代码文件都包含详细的中文注释:
- 函数注释:说明参数、返回值和算法逻辑
- 类注释:解释核心思想和算法特性
- 行内注释:澄清复杂计算步骤
所有训练过程都会输出:
迭代 10/50 | 平均奖励: 0.2500
迭代 20/50 | 平均奖励: 0.4200
迭代 30/50 | 平均奖励: 0.5100
...
- 导入错误:确保所有依赖库已安装
- 形状错误:检查输入张量的维度
- 梯度为零:检查是否冻结了不该冻结的参数
- 损失不下降:调整学习率和批量大小
- 论文:Proximal Policy Optimization Algorithms (Schulman et al., 2017)
- 关键特性:剪裁替代目标、多 epoch 更新
- 论文:Direct Preference Optimization (Rafailov et al., 2023)
- 关键特性:无奖励函数、偏好学习
- 特点:奖励模型 + 策略梯度 + KL 约束
- 应用:多目标平衡优化
- 从 PPO 开始:理解基本的策略梯度方法
- 学习 DPO:了解如何从偏好数据学习
- 深入 GRPO:掌握多目标优化技术
- 添加连续动作空间支持
- 实现更复杂的环境
- 并行数据收集
- 分布式训练
- 其他 RLHF 算法(如 IPO、KTO)
MIT License
Implementation of RLHF Algorithms (PPO, DPO, GRPO)
最后更新:2025年12月6日
如有问题或改进建议,欢迎提出!