REINFORCE 是一种策略梯度方法,它直接优化策略,使用样本回报。 这些方法广泛用于 LLM 的微调,因为它们简单高效。 例子包括 GRPO, Dr. GRPO, RLOO, ReMax, TreeRPO, 和 REINFORCE++. REINFORCE 可以扩展到多智能体设置,其中多个 LLM 智能体在每个回合中响应,并且它们的联合响应获得一个共享奖励。
所有 MAREINFORCE trainers 共享一个训练循环。 在每个 rollout 节点,每个智能体采样 \( K \) 的响应,trainer 评估与共享奖励相关的联合响应,并且每个智能体在进行缓冲优化步骤之前,将自身的对数概率乘以由此产生的共享优势。
MAREINFORCE#
多智能体 REINFORCE (MAREINFORCE) 的策略梯度代理,在优势归一化或参考正则化之前,可以表示为:
REINFORCE 方法不使用 critic 模型进行价值估计。 它们的策略梯度估计由于随机采样和长期信用分配,可能具有高方差。 常用的减少这种方差的方法包括使用与动作无关的基线或在更多样本上进行平均,例如在每个联合历史 \( \mathbf{h}_t \) 中,\( K \) 样本。
MAGRPO#
多智能体群体相对策略优化 (MAGRPO) 是基于 MAREINFORCE 的一种实例化,受到 GRPO 的启发,其中群体平均基线是 \( K \) 样本的平均回报。 在默认的 aligned 联合模式中,在优势归一化之前的替代方案是:
被采样的群体平均值包括正在更新的样本,因此它不是上述一般表达式中假设的与动作无关的基线。 在多轮训练中,每个分支的回报是其立即奖励加上其子节点的平均回报,没有折扣。 在 cross 模式中,每个智能体的完成接收所有包含该完成的联合组合的回报的总和。
默认情况下,advantage_normalization=True 然后使用种群标准偏差,最小分母为 1e-6,在每个节点的生成组内对优势进行中心化和缩放。 如果启用了参考 KL 正则化,则在应用基线和归一化之前,从回报中减去采样的参考惩罚。
当前的
MAGRPOTrainer损失切片缺少最终完成 token,因此其实现的序列得分与上方的完整序列对数概率不同。 规范设置是joint_mode="cross";接受的"crossed"别名生成笛卡尔组合,但不会应用相同的每完成返回聚合。
num_agents:配置的智能体数量,应与 trainer 设置匹配num_turns:每 episode 的回合数num_train_epochs:训练的 epochs 数量agent_learning_rate:学习率logging_steps:步数中的日志间隔num_generations:每个智能体针对每个提示的生成次数max_new_tokens:生成的最大新 tokens 数量temperature:采样温度top_p:用于采样的 Top-ptop_k:用于采样的 Top-kdiscount: 保留的配置字段;当前的 MAGRPO 实现计算不折扣的回报,不使用此值joint_mode: 联合行动组合 (aligned用于索引对齐,cross用于笛卡尔积)early_termination_threshold: 训练分支在当其节点的平均即时奖励超过此阈值时停止扩展 (默认-0.2;None禁用提前终止)rollout_buffer_size: 每个智能体在更新之前,每个节点的样本数量train_batch_size: 每个优化器步骤中的节点样本数量;默认为rollout_buffer_sizeadvantage_normalization: 是否在每个节点的生成组内对优势进行中心化和缩放 (默认True)eval_interval: 评估在 N 的倍数索引处运行,包括每个 epoch 的第一个批次;0禁用周期性评估eval_num_samples: 评估运行中每个评估的样本数量eval_batch_size: 评估 DataLoader 批次大小external_prompt_passthrough: 是否直接在多轮训练中使用外部提示advantage_mode: 基线模式 (mean,max,rloo,raw)parallel_training: 智能体执行模式 (none或mp)agent_devices: 智能体设备放置; 必须明确指定用于parallel_training="mp"reference_kl_enabled: 是否启用冻结参考 KL 惩罚 (默认False)reference_kl_coef: 参考惩罚的权重 (默认0.1)reference_devices: 可选的参考模型放置
agent_model或agents: 同构智能体的模型标识字符串,或模型标识或预加载模型的列表; 预加载的模型通过agents提供num_agents: 从agent_model创建的智能体数量 (默认2),独立于args配置。仅提供agents时,其长度确定智能体数量tokenizer: 共享的 tokenizer 或每个智能体; 针对模型标识的选项,对于预加载的模型是必需的reward_func: 返回浮点数列表的函数 (必需)reward_processor: 可选的处理器,用于应用于奖励 (例如,缩放)formatters: 单个函数或每个智能体函数的列表,用于提示格式化args:MAGRPOConfig的实例 (可选)train_dataset: 在调用train()时需要的数据集eval_dataset: 评估数据集 (可选)model_config: 模型配置字典 (可选)wandb_config: Weights & Biases 日志配置 (可选)external_transition: 提供转换到下一轮的函数; 在调用num_turns > 1时 (默认值为2) 必须提供eval_logger: 可选任务-指标回调,在eval_logger(agent_completions_turns=..., batch_items=..., prompts=...)中调用; 返回一个评估项的指标字典,并与eval_aggregator配合使用eval_aggregator: 可选回调,在eval_aggregator(metrics, num_turns=...)中调用; 返回的turn_k/...指标在eval/中记录。 评估回调必须同时提供,用于自定义指标
MAGRPO 收集样本到 rollout 缓冲区,并在更新期间重新计算它们的对数概率,而不使用重要性采样或比率裁剪。 因此,样本可能比来自相同缓冲区或 rollout 树的先前更新更早。 由于 trainer 没有 critic 模型,因此
value_clip_range不适用。
trainer 使用固定训练 DataLoader 批次大小为 1,并且需要至少
num_generations=2,包括原始返回变体。 默认情况下,train_batch_size=rollout_buffer_size: 每个智能体在一次优化步骤中平均其缓冲节点的样本损失。 较小的迷你批次会产生多个优化步骤; 每次 epoch 结束时会清除部分缓冲区。
其他变体#
CoMLRL 还提供其他 MAREINFORCE 变体,具有不同的基准:
- MARLOO: 多智能体 REINFORCE 逐个淘汰。 基准是同一节点样本组中其他生成的平均回报,而不是其他智能体。
- MAReMax: 多智能体 REINFORCE 与 Group Max (
MAReMaxConfig和MAReMaxTrainer)。基线是节点上的最大采样组返回值;此实现不会生成单独的贪心基线响应。
MAREINFORCETrainer,MARLOOTrainer, 和MAReMaxTrainer继承自comlrl.trainers.reinforce.MAGRPOTrainer。 它们的对应配置类继承自MAGRPOConfig,具有默认的advantage_mode值,分别为raw,rloo, 和max。 它们共享相同的 trainer 接口和配置字段。
这四个 trainers 仅在共享的返回值中有所不同。 对于一个具有 \( K=4 \) 联合响应的节点,下面的动画比较了它们的优势,在归一化之前:MAREINFORCE 保留原始返回值,如 REINFORCE; MAGRPO 减去组均值,如 GRPO; MARLOO 减去其他 \( K-1 \) 返回值的均值,如 RLOO,该值通过 \( K/(K-1) \) 缩放 MAGRPO 的优势;以及 MAReMax 减去组最大值,因此没有响应获得正向优势。
这些变体公式描述的是在归一化之前的优势。 所有变体都继承自
advantage_normalization=True,该公式重新中心化,即使是原始返回值和最大基线优势。 除了标准差的下限和数值精度之外,这四个模式会产生相同的归一化优势。 用户可以通过设置advantage_normalization=False来保留上述的基线差异,包括原始返回值的 MAREINFORCE 估计器。