支持的算法¶
算法速查表¶
LightRFT 支持丰富的强化学习算法生态系统,用于大语言模型的微调。本综合指南提供算法细节、实现参考。
实现状态说明: 当前源码中,GRPO、CPGD、FIRE Sampling、DAPO 的部分机制以及高熵 token 筛选具有明确执行路径。GSPO 尚未接入实际实例化的策略损失,REINFORCE++ 尚未映射到优势计算器工厂,GMPO/Dr.GRPO 也不是完整的端到端选项。下文相关小节仅作为设计说明保留,其中的示例命令不构成 0.1.1 版本的可运行接口。
本指南的目的¶
随着 RFT 领域的快速发展和新算法创新的涌现,本指南帮助你:
快速识别 哪些算法适合你的需求
理解实现 通过将算法映射到代码模块
规划集成 通过识别协同效应或冲突来集成多个算法
保持清晰 通过记录算法与组件之间的关系
算法概览与实现¶
算法 |
类型 |
模块 |
描述 |
实现位置 |
论文 |
|---|---|---|---|---|---|
GRPO |
策略优化 |
优势估计 |
使用基于组的归一化进行优势估计,无需独立的价值网络 |
|
|
GSPO(WIP) |
策略优化 |
策略损失 |
序列视角的策略优化方案 |
命令行与损失函数尚未接通 |
|
REINFORCE++(WIP) |
优势估计 |
优势估计 |
通过改进的基线估计修改回报和优势计算 |
优势计算器映射尚未接通 |
|
CPGD |
优势估计 |
优势估计 |
添加基于 KL 的漂移约束和裁剪对数比率以实现稳定的回报/优势计算 |
|
|
FIRE Sampling |
采样策略 |
经验生成 |
第一个 token 使用高温度采样,剩余 tokens 使用常规温度,以提高多样性 |
|
|
GMPO(WIP) |
策略优化 |
策略损失 |
通过几何平均策略优化修改策略损失 |
尚未端到端实现 |
|
Dr.GRPO(WIP) |
策略优化 |
策略损失 |
引入无偏策略优化以缓解长度偏差并提高 token 效率 |
尚未端到端实现 |
|
DAPO |
策略优化 |
策略损失 |
引入解耦裁剪和动态采样方案以稳定大规模 RL 优化 |
|
|
Token-Level Policy |
策略优化 |
策略损失 |
在 token 粒度上优化策略以改善稳定性和信用分配 |
|
|
Reward Norm/Clip |
奖励处理 |
奖励处理 |
应用奖励归一化和裁剪以稳定优势计算 |
|
|
select_high_entropy_tokens |
策略优化 |
策略损失 |
修改 PolicyLoss 以在训练期间实现高熵 token 选择 |
|
算法架构¶
核心训练组件¶
LightRFT 的算法实现围绕三个主要模块组织:
1. 策略损失计算 (lightrft/models/loss.py)¶
用途:实现具有多种代理目标的 PPO 策略损失
核心方法:
forward(log_probs, old_log_probs, advantages, action_mask)受影响算法:GSPO、GMPO、Dr.GRPO、DAPO、Token-Level Policy、select_high_entropy_tokens
修改类型:损失函数设计和 token 选择策略
2. 数据生成 (lightrft/trainer/fast_exp_maker.py)¶
用途:使用 vLLM 和其他推理后端生成经验
核心方法:
generate_samples():使用各种策略生成样本_compute_advantages_and_returns():分派回报和优势计算
受影响算法:FIRE Sampling
修改类型:采样策略和推理优化
3. 优势与奖励处理 (lightrft/trainer/fast_exp_maker.py)¶
用途:处理奖励并计算策略更新的优势
核心方法:
_compute_advantages_and_returns():分派优势估计器受影响算法:GRPO、REINFORCE++、CPGD、Reward Norm/Clip
修改类型:优势估计方法和奖励塑形
修改类型¶
算法改变:
损失设计:核心目标函数修改
优势估计:优势计算方法更新
采样策略:样本生成过程改变
Token 选择:训练中使用哪些 token
奖励塑形:奖励预处理和过滤
实现改变:
效率优化:性能改进(例如 FP8)
参数调优:超参数调整
流程集成:新组件或工作流改变
策略优化算法¶
GRPO (Group Relative Policy Optimization)¶
概述:GRPO 使用基于组的归一化进行优势估计,无需单独的价值网络即可提供稳定的训练。
实现位置:FastExperienceMaker._compute_advantages_and_returns() - 优势估计模块
修改类型:优势估计
核心特性:
不需要 critic 网络
组归一化优势
大批量稳定训练
内存高效
使用方法:
python train.py \
--advantage_estimator group_norm \
--n_samples_per_prompt 8 \
--kl_estimator k3
最适合:
内存有限的大规模训练
无价值网络的快速原型设计
数学推理和代码任务
GSPO (Group Sequence Policy Optimization)¶
概述:GSPO 通过灵活的代理函数推广 PPO 目标,允许更好地控制策略更新。
实现位置:PolicyLoss.forward() - 策略损失模块
修改类型:损失设计
核心特性:
广义裁剪目标
自适应信赖域更新
更好的样本效率
使用方法:
python train.py \
--advantage_estimator gspo \
--gspo_alpha 0.1 \
--clip_range 0.2
最适合:
需要精确策略控制的任务
多任务学习场景
GMPO (Geometric-Mean Policy Optimization)¶
概述:GMPO 利用镜像下降原理进行策略优化,提供理论保证和改进收敛性。
实现位置:PolicyLoss.forward() - 策略损失模块
修改类型:损失设计
核心特性:
镜像下降更新
理论收敛保证
自适应步长
使用方法:
python train.py \
--advantage_estimator gmpo \
--mirror_tau 0.01
最适合:
需要理论保证的研究应用
复杂的奖励地形
Dr.GRPO (Group Relative Policy Optimization Done Right)¶
概述:Dr.GRPO 通过显式建模和缓解奖励-长度相关性来解决奖励模型中的长度偏差。
实现位置:PolicyLoss.forward() - 策略损失模块
修改类型:损失设计(长度偏差缓解)
核心特性:
长度偏差缓解
奖励去偏机制
改善响应质量
使用方法:
python train.py \
--advantage_estimator group_norm \
--use_length_penalty \
--length_penalty_coef 0.01
最适合:
对响应长度敏感的任务
指令遵循
开放式生成
DAPO (Dynamic sAmpling Policy Optimization)¶
概述:DAPO (Decoupled Clip and Dynamic sAmpling Policy Optimization) 对优势加权的策略更新使用单独的上下裁剪边界,并结合动态采样策略,提高训练稳定性。
实现位置:PolicyLoss.forward() - 策略损失模块
修改类型:损失设计(解耦裁剪)
核心特性:
正/负优势的解耦裁剪
动态采样策略
更好地处理分布偏移
改善稳定性
使用方法:
python train.py \
--use_clip_higher \
--clip_range_higher 0.3 \
--clip_range_lower 0.2
最适合:
高噪声奖励信号
大分布偏移
挑战性领域
Token-Level Policy¶
概述:在 token 粒度上优化策略,提高稳定性和信用分配。
实现位置:PolicyLoss.forward() - 策略损失模块
修改类型:Token 选择
核心特性:
Token 粒度优化
改善信用分配
长序列中更好的稳定性
使用方法:通常通过实现修改与其他策略优化方法结合使用。
优势估计方法¶
REINFORCE++¶
概述:改进的基线估计方法,使用控制变量来降低策略梯度估计的方差。
实现位置:FastExperienceMaker._compute_advantages_and_returns() - 优势估计模块
修改类型:优势估计
核心特性:
更低方差梯度
更快收敛
与所有策略优化方法兼容
使用方法:
python train.py \
--advantage_estimator reinforce_plus \
--baseline_type value_network
最适合:
高方差环境
稀疏奖励
与 PPO 或其他在策略方法结合
CPGD (Clipped Policy Gradient Optimization with Policy Drift)¶
概述:CPGD 使用 KL 散度约束策略更新,防止灾难性遗忘并保持稳定训练。
实现位置:FastExperienceMaker._compute_advantages_and_returns() - 优势估计模块
修改类型:优势估计(KL 约束)
核心特性:
KL 约束更新
防止灾难性遗忘
自适应约束调整
使用方法:
python train.py \
--advantage_estimator cpgd \
--kl_target 0.01 \
--kl_horizon 10000
最适合:
微调预训练模型
保留原始能力
多阶段训练
奖励处理¶
奖励归一化和裁剪¶
概述:标准奖励预处理技术以稳定训练。
实现位置:FastExperienceMaker._compute_advantages_and_returns() - 奖励处理模块
修改类型:奖励塑形(归一化/裁剪)
核心特性:
运行奖励统计
优势归一化
奖励裁剪
使用方法:
python train.py \
--reward_running_norm \
--reward_running_norm_minus_mean \
--reward_clip 10.0 \
--advantage_clip 10.0
最适合:
所有训练场景(推荐基线)
提示间奖励尺度变化
训练稳定性
采样策略¶
FIRE Sampling¶
概述:FIRE(Flaming-hot Initiation with Regular Execution,炽热初始化与常规执行)是一种简单而有效的采样方法,可提高响应生成的多样性和质量。
实现位置:FastExperienceMaker.generate_samples() - 经验生成模块
修改类型:采样策略
核心机制: 根据论文,FIRE 采样通过以下方式工作:
使用非常高的温度(例如 10.0)采样第一个 token - “炽热初始化”
使用常规温度(例如 0.7 或 1.0)采样剩余 tokens
重要:所有其他采样参数(top_k、top_p、min_p)在第一个 token 和剩余 tokens 之间保持完全相同
这种方法在生成开始时促进多样性,同时保持连贯的续写,从而提高 pass@n 率并实现更有效的训练。
核心特性:
通过高温度第一个 token 增加多样性
更好的 pass@n 性能(在 N 次尝试内的成功率提高)
无额外计算成本
同时有益于推理和训练阶段
使用方法:
python examples/gsm8k_geo3k/train_colocate.py \
--use_fire \
--first_token_temperature 10.0 \
最适合:
数学推理任务
代码生成
具有可验证正确性的任务(沙箱检查器)
Best-of-N 采样场景
初始推理路径多样性有益的场景
实现注意事项¶
所有策略损失算法修改 PolicyLoss 模块的
forward()方法优势估计算法修改 FastExperienceMaker 的
_compute_advantages_and_returns()方法采样策略修改 FastExperienceMaker 的
generate_samples()方法奖励处理算法主要在
_compute_advantages_and_returns()方法内工作大多数修改在核心训练循环组件而非外围工具中
参考资料¶
详细的算法描述和实验结果请参阅链接的论文。实现细节可在源代码中找到:
策略损失:
lightrft/models/loss.py经验生成器:
lightrft/trainer/fast_exp_maker.pyvLLM 工具:
lightrft/strategy/vllm_utils/