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 奖励管理器通过超长惩罚鼓励模型生成简洁有效的回答。