跳至正文
CoMLRL
多重 LLM RL

多智能体 REINFORCE

由 translategemma:4b 自动翻译 英文原文

REINFORCE 是一种策略梯度方法,它直接优化策略,使用样本回报。 这些方法广泛用于 LLM 的微调,因为它们简单高效。 例子包括 GRPO, Dr. GRPO, RLOO, ReMax, TreeRPO, 和 REINFORCE++. REINFORCE 可以扩展到多智能体设置,其中多个 LLM 智能体在每个回合中响应,并且它们的联合响应获得一个共享奖励。

所有 MAREINFORCE trainers 共享一个训练循环。 在每个 rollout 节点,每个智能体采样 \( K \) 的响应,trainer 评估与共享奖励相关的联合响应,并且每个智能体在进行缓冲优化步骤之前,将自身的对数概率乘以由此产生的共享优势。

MAREINFORCE 训练流程 每个联合样本获得一个共享回报;它的优势权重每个智能体的自身策略梯度。

MAREINFORCE#

多智能体 REINFORCE (MAREINFORCE) 的策略梯度代理,在优势归一化或参考正则化之前,可以表示为:

\[ J(\theta_i) = \mathbb{E}_{\mathbf{o}_0 \sim \mathcal{D}, \mathbf{h}_t \sim \boldsymbol{\pi}_{\boldsymbol{\theta}}} \Bigg[\sum_{t=0}^{H-1} R_t \cdot \log \pi_{\theta_i}(a_{i,t}\mid h_{i,t})\Bigg], \]
其中 \( R_t \) 是在 \( t \) 这一回合的返回值,而 \( H \) 是时间步(即对话回合数)。 期望是对数据集的初始观察结果进行求和 \( \mathcal{D} \) 以及所有遵循的策略的联合行动历史 episodes 后续策略 \( \boldsymbol{\pi}_{\boldsymbol{\theta}} \).

REINFORCE 方法不使用 critic 模型进行价值估计。 它们的策略梯度估计由于随机采样和长期信用分配,可能具有高方差。 常用的减少这种方差的方法包括使用与动作无关的基线或在更多样本上进行平均,例如在每个联合历史 \( \mathbf{h}_t \) 中,\( K \) 样本。

\[ J(\theta_i) = \mathbb{E}_{\mathbf{o}_0 \sim \mathcal{D}, \mathbf{h}_t \sim \boldsymbol{\pi}_{\boldsymbol{\theta}}} \Bigg[\frac{1}{K}\sum_{k=1}^{K} \sum_{t=0}^{H-1} \left(R^{k}_t - b(\mathbf{h}_t)\right) \cdot \log \pi_{\theta_i}(a^{k}_{i,t}\mid h_{i,t})\Bigg], \]
其中,基线 \( b(\mathbf{h}_t) \) 是与动作无关的。

MAGRPO#

多智能体群体相对策略优化 (MAGRPO) 是基于 MAREINFORCE 的一种实例化,受到 GRPO 的启发,其中群体平均基线是 \( K \) 样本的平均回报。 在默认的 aligned 联合模式中,在优势归一化之前的替代方案是:

\[ J(\theta_i) = \mathbb{E}_{\mathbf{o}_0 \sim \mathcal{D}, \mathbf{h}_t \sim \boldsymbol{\pi}_{\boldsymbol{\theta}}} \Bigg[\frac{1}{K}\sum_{k=1}^{K}\sum_{t=0}^{H-1} \left(R^{k}_t - \frac{1}{K}\sum_{l=1}^{K}R^{l}_t\right) \cdot \log \pi_{\theta_i}(a^{k}_{i,t}\mid h_{i,t})\Bigg]. \]

被采样的群体平均值包括正在更新的样本,因此它不是上述一般表达式中假设的与动作无关的基线。 在多轮训练中,每个分支的回报是其立即奖励加上其子节点的平均回报,没有折扣。 在 cross 模式中,每个智能体的完成接收所有包含该完成的联合组合的回报的总和。

默认情况下,advantage_normalization=True 然后使用种群标准偏差,最小分母为 1e-6,在每个节点的生成组内对优势进行中心化和缩放。 如果启用了参考 KL 正则化,则在应用基线和归一化之前,从回报中减去采样的参考惩罚。

当前的 MAGRPOTrainer 损失切片缺少最终完成 token,因此其实现的序列得分与上方的完整序列对数概率不同。 规范设置是 joint_mode="cross";接受的 "crossed" 别名生成笛卡尔组合,但不会应用相同的每完成返回聚合。

MAGRPOConfig 参数
  • 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-p
  • top_k:用于采样的 Top-k
  • discount: 保留的配置字段;当前的 MAGRPO 实现计算不折扣的回报,不使用此值
  • joint_mode: 联合行动组合 (aligned 用于索引对齐,cross 用于笛卡尔积)
  • early_termination_threshold: 训练分支在当其节点的平均即时奖励超过此阈值时停止扩展 (默认 -0.2; None 禁用提前终止)
  • rollout_buffer_size: 每个智能体在更新之前,每个节点的样本数量
  • train_batch_size: 每个优化器步骤中的节点样本数量;默认为 rollout_buffer_size
  • advantage_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: 可选的参考模型放置
MAGRPOTrainer 参数
  • 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 逐个淘汰。 基准是同一节点样本组中其他生成的平均回报,而不是其他智能体。
\[ J(\theta_i) = \mathbb{E}_{\mathbf{o}_0 \sim \mathcal{D}, \mathbf{h}_t \sim \boldsymbol{\pi}_{\boldsymbol{\theta}}} \Bigg[\frac{1}{K}\sum_{k=1}^{K}\sum_{t=0}^{H-1} \left(R^{k}_t - \frac{1}{K-1}\sum_{l=1, l\neq k}^{K}R^{l}_t\right) \cdot \log \pi_{\theta_i}(a^{k}_{i,t}\mid h_{i,t})\Bigg]. \]
  • MAReMax: 多智能体 REINFORCE 与 Group Max (MAReMaxConfig 和 MAReMaxTrainer)。基线是节点上的最大采样组返回值;此实现不会生成单独的贪心基线响应。
\[ J(\theta_i) = \mathbb{E}_{\mathbf{o}_0 \sim \mathcal{D}, \mathbf{h}_t \sim \boldsymbol{\pi}_{\boldsymbol{\theta}}} \Bigg[\frac{1}{K}\sum_{k=1}^{K}\sum_{t=0}^{H-1} \left(R^{k}_t - \mathrm{max}_l\, R^l_t \right) \cdot \log \pi_{\theta_i}(a^{k}_{i,t}\mid h_{i,t})\Bigg]. \]

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 减去组最大值,因此没有响应获得正向优势。

MAREINFORCE 变体的基线 每一行从相同的共享回报中减去不同的基线;阴影条标记优势值,在归一化之前。

这些变体公式描述的是在归一化之前的优势。 所有变体都继承自 advantage_normalization=True,该公式重新中心化,即使是原始返回值和最大基线优势。 除了标准差的下限和数值精度之外,这四个模式会产生相同的归一化优势。 用户可以通过设置 advantage_normalization=False 来保留上述的基线差异,包括原始返回值的 MAREINFORCE 估计器。