Advantage
Advantage (优势函数) 是强化学习中用于计算动作相对于平均水平的优势值的组件。在 RLHF 训练中,优势函数用于指导策略优化。
基本接口
class Advantage:
def __call__(self,
rewards: Union['torch.Tensor', List[float]],
num_generations: int = 1,
scale: Literal['group', 'batch', 'none'] = 'group',
**kwargs) -> 'torch.Tensor':
"""
计算优势值
Args:
rewards: 奖励值列表或张量
num_generations: 每个 prompt 生成的样本数量
scale: 归一化方式
- 'group': 对每组样本进行归一化 (GRPO)
- 'batch': 对整个 batch 进行归一化
- 'none': 不进行归一化
Returns:
优势值张量
"""
...
可用的优势函数
Twinkle 提供了两种优势函数实现:
GRPOAdvantage
GRPO (Group Relative Policy Optimization) 优势函数通过减去组内均值来计算优势。
简单高效,适合大多数场景
减少方差,提高训练稳定性
在组内进行相对比较
详见: GRPOAdvantage
RLOOAdvantage
RLOO (Reinforcement Learning with Leave-One-Out) 优势函数使用留一法计算基线。
理论上更优,减少偏差
需要更多样本(建议 8 个以上)
更准确的反事实基线估计
详见: RLOOAdvantage
如何选择
GRPO: 适合样本数量较少(4 个左右)的场景,计算效率高
RLOO: 适合样本数量较多(8 个以上)的场景,理论效果更好
优势函数的选择对 RLHF 训练效果有重要影响。建议根据计算资源和样本数量选择合适的方法。