跳转至

utils.py — 提供一步离策略训练的工具函数

文件路径: verl/experimental/one_step_off_policy/utils.py

文件概述

提供一步离策略训练的工具函数。目前只包含一个函数:need_critic,用于判断是否需要 Critic 模型。

关键代码讲解

def need_critic(config: DictConfig) -> bool:
    """根据配置判断是否需要 Critic"""
    if config.algorithm.adv_estimator == AdvantageEstimator.GAE:
        return True  # GAE 需要 Critic 来估计价值函数
    elif config.algorithm.adv_estimator in [
        AdvantageEstimator.GRPO,
        AdvantageEstimator.GRPO_PASSK,
        AdvantageEstimator.REINFORCE_PLUS_PLUS,
        AdvantageEstimator.RLOO,
        AdvantageEstimator.OPO,
        AdvantageEstimator.REINFORCE_PLUS_PLUS_BASELINE,
        AdvantageEstimator.GPG,
    ]:
        return False  # 这些方法不需要 Critic
    else:
        raise NotImplementedError

优势估计方法说明

方法 需要 Critic 说明
GAE 是 广义优势估计,需要价值函数
GRPO 否 基于组排名的策略优化
REINFORCE++ 否 改进的 REINFORCE 算法
RLOO 否 Leave-One-Out 基线
OPO 否 在线策略优化
GPG 否 组策略梯度

核心类/函数列表

名称 类型 说明
need_critic() 函数 判断是否需要 Critic 模型

与其他模块的关系

  • 被 main_ppo.py 和 ray_trainer.py 调用
  • 与标准 verl.trainer.ppo.utils.need_critic 类似,但支持的算法列表可能不同

小结

简单的配置判断工具,根据所选的优势估计算法决定是否需要 Critic 模型。大多数现代 RLHF 算法(GRPO、REINFORCE++ 等)不需要 Critic,简化了训练流程。