版本依赖:ms-swift>=3.10
REINFORCE++ Baseline 是 REINFORCE++ 算法的简化版本,适用于 outcome rewards(response-level 标量奖励)。它与 GRPO 类似,对每个prompt输入采样多条模型输出,并使用组内 baseline 来估计优势函数,主要区别在于标准化时使用的统计量不同。
为便于理解,我们基于 GRPO(Group Relative Policy Optimization)算法进行对比说明。
GRPO 和 REINFORCE++ Baseline 都采用组内对比的方式来估计优势函数,主要区别在于:
GRPO (Group Relative Policy Optimization)
对每个 prompt 生成
当设置 scale_rewards='batch' 时,使用原始奖励的批次 std:
其中
REINFORCE++ Baseline
对每个 prompt 生成
其中
关键区别:
-
GRPO:标准化时使用原始奖励
$R$ 的标准差 -
REINFORCE++:标准化时使用减去组内均值后的奖励
$\tilde{A}$ 的标准差
与 RLOO 类似,REINFORCE++ Baseline 将 KL 散度整合到奖励项中:
其中 beta),$\pi_{\text{ref}}$ 是参考策略。
我们可以基于 GRPOTrainer,通过设置以下参数实现 REINFORCE++ Baseline 训练:
--advantage_estimator reinforce_plus_plus
--scale_rewards batch
--kl_in_reward true训练可以参考该脚本
-
--advantage_estimator:选择优势函数估计方法-
grpo(默认):标准化时使用原始奖励的标准差 -
reinforce_plus_plus:标准化时使用减去组内均值后的奖励的标准差
-
-
--kl_in_reward:控制 KL 散度正则化项的处理位置-
false:KL 散度作为损失函数的独立正则化项(GRPO 默认) -
true:KL 散度直接从奖励中扣除(REINFORCE++ 原始实现)
-
-
--scale_rewards:控制标准化方式-
group(默认):组内标准化 -
batch:全局批次标准化(REINFORCE++原始实现) -
none:不进行标准化
-
-
--num_generations:每个 prompt 生成的样本数量$G$ -
--beta:KL 散度正则化系数$\beta$
其他参数参考 GRPO参数