版本依赖:ms-swift>=3.10
REINFORCE Leave-One-Out (RLOO) 基于经典的 REINFORCE 策略梯度方法,通过留一法(Leave-One-Out)构造无偏的优势函数基线。
为便于理解,我们基于 GRPO(Group Relative Policy Optimization)算法进行对比说明。
GRPO 和 RLOO 都采用组内对比的方式来估计优势函数,避免了全局基线估计带来的高方差问题。两者的核心区别主要体现在以下两个方面:
1. GRPO (Group Relative Policy Optimization)
GRPO 对每个 prompt 生成
其中:
-
$R_i$ 是第$i$ 个样本的奖励值 - $\text{mean}({R_j}{j=1}^G) = \frac{1}{G}\sum{j=1}^G R_j$ 是组内均值
-
$\text{std}({R_j}_{j=1}^G)$ 是组内标准差
2. RLOO (REINFORCE Leave-One-Out)
RLOO 对每个 prompt 生成
这个公式可以等价地改写为:
其中
说明:这里使用
$K$ 对齐论文符号,与 GRPO 中的$G$ 含义一致,均对应配置参数num_generations
为什么使用留一法?
留一法的关键优势在于无偏性。对于第
为防止策略偏离参考策略过远,两种算法都引入了 KL 散度正则化,但处理方式不同:
GRPO:将 KL 散度作为独立的正则化项添加到损失函数中:
RLOO:将 KL 散度直接整合到奖励项中,构造修正后的奖励:
其中 beta),$\pi_{\text{ref}}$ 是参考策略(通常是 SFT 模型或初始策略)。
我们可以基于 GRPOTrainer,通过设置以下参数实现 RLOO 训练:
# 基本 RLOO 配置
--advantage_estimator rloo # 使用 RLOO 的留一法优势函数计算
--kl_in_reward true # 将 KL 散度项整合到奖励中(RLOO 默认方式)训练可以参考该脚本
-
--advantage_estimator:选择优势函数估计方法-
grpo(默认):使用组内均值和标准差进行标准化 -
rloo:使用留一法(Leave-One-Out)构造基线
-
-
--kl_in_reward:控制 KL 散度正则化项的处理位置-
false:KL 散度作为损失函数的独立正则化项(GRPO 方式) -
true:KL 散度直接从奖励中扣除,构造修正后的奖励(RLOO 方式)
-
-
--num_generations:每个 prompt 生成的样本数量$K$ -
--beta:KL 散度正则化系数$\beta$ - 控制策略更新的保守程度
其他参数与 GRPO参数一致