跳转至

dapo.py — DAPO 奖励管理器

文件概述

DAPO(Dynamic Advantage Proximal Optimization)奖励管理器,增加了超长序列的缓冲区惩罚。

核心类

DAPORewardManager

@register("dapo")
class DAPORewardManager(AbstractRewardManager):
    def __call__(self, data, return_dict=False):
        """计算带超长惩罚的奖励

        特殊处理:
        - 如果 response 达到最大长度(被截断),给予额外惩罚
        - 这鼓励模型生成更简洁的回答
        """
        for i in range(len(data)):
            score = self.compute_score(...)

            # 超长惩罚: 如果 response 被截断
            if valid_response_length[i] >= max_response_length:
                score = score * overlong_buffer_penalty_factor

            reward_tensor[i, valid_response_length[i] - 1] = score

DAPO 的设计思想

在标准 PPO 奖励之上增加了对超长生成的惩罚,防止模型学会通过不断生成来"拖延"。

与其他模块的关系

  • 继承 abstract.py 的 AbstractRewardManager
  • 使用 @register("dapo") 注册

小结

DAPO 奖励管理器通过超长惩罚鼓励模型生成简洁有效的回答。