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 训练效果有重要影响。建议根据计算资源和样本数量选择合适的方法。