Ir al contenido
CoMLRL
Aprendizaje por refuerzo multi-LLM RL

Multi-LLM PbRL

Traducido automáticamente con translategemma:4b Original en inglés

Multi-agente PbRL entrena agentes colaborativos LLM a partir de preferencias entre sus respuestas conjuntas. CoMLRL construye los datos de preferencia a partir de elementos de la tarea y aprende con uno de dos algoritmos: MARLHF ajusta un modelo de recompensa conjunto y luego entrena las políticas con RL, mientras que MADPO optimiza las políticas directamente a partir de las preferencias. MARLHFTrainer, MADPOTrainer, y sus variantes iterativas MARLHFIterTrainer y MADPOIterTrainer están disponibles de comlrl.trainers.preference.

Todas las cuatro instancias de trainers requieren actualmente num_turns=1 y respuestas conjuntas alineadas (joint_mode="aligned"). Una iteración del trainers es una ronda de recopilación de datos y entrenamiento, no un turno de diálogo.

Datos de preferencia#

Cada agente \( i\in\mathcal{I}=\{1,\ldots,n\} \) muestrea \( a_{i,t}\sim\pi_{\theta_i}(\cdot\mid h_{i,t}) \) de su historial local, y las respuestas forman la acción conjunta \( \mathbf{a}_t=\{a_{1,t},\ldots,a_{n,t}\} \) con el historial conjunto \( \mathbf{h}_t \). Con un solo turno (\( H=1 \)), \( h_{i,0} \) es la instrucción del agente \( i \) y \( \mathbf{a}_0 \) es la respuesta conjunta.

Los usuarios proporcionan elementos de tarea, no datos de preferencia. La muestra trainers recopila respuestas conjuntas, las puntúa con una función de oráculo y convierte las puntuaciones en pares de preferencia.

Función de oráculo#

La función de oráculo puntúa cada respuesta conjunta con un valor compartido. Por defecto, es la recompensa de la tarea reward_func, después de la opcional reward_processor; puede seguir reglas o llamar a un modelo de recompensa LLM, según se describe en Inicialización del entrenamiento. Ambos algoritmos aprenden solo de qué respuesta conjunta gana, por lo que los valores de la puntuación solo importan para elegir pares. En MARLHFIterTrainer, preference_scoring_reward="reward_model" hace que el modelo de recompensa más recientemente ajustado sea el oráculo para nuevas comparaciones, con la recompensa de la tarea como respaldo hasta que exista uno.

Criterio de preferencia#

Para cada elemento de tarea, cada agente muestrea las respuestas preference_num_candidates a su instrucción, y las respuestas con el mismo índice candidato forman una respuesta conjunta. De cualquier par de respuestas conjuntas con diferentes puntuaciones, la de puntuación más alta se prefiere: es el ganador \( w \), y la otra es el perdedor \( l \). Los empates se descartan. pair_selection y preference_pairs_per_sample deciden qué pares conserva cada tarea. En el entrenamiento iterativo, cada comparación es en cambio entre la respuesta conjunta de los agentes actuales y la respuesta conjunta del comparador en el mismo índice candidato, y cualquiera de los dos puede ganar.

Preference Data Parámetros
  • preference_num_candidates: Candidatos muestreados por tarea y actor; al menos 2 (predeterminado 80)
  • preference_pairs_per_sample: Número máximo de pares conservados por tarea, o None para ningún límite (predeterminado 16)
  • pair_selection: "reward_gap" (predeterminado) conserva los pares con la mayor diferencia de recompensa, "random" un subconjunto aleatorio, y "all" cada par no empatado, lo que requiere preference_pairs_per_sample=None; la iterativa trainers añade "comparator_reward", su predeterminado, que prefiere recompensas comparativas más altas y luego mayores diferencias de recompensa
  • max_new_tokens, temperature, top_p, top_k: Configuración de generación de candidatos

Formato de datos#

Un par \( (\mathbf{h}_H^{w},\mathbf{h}_H^{l}) \) contiene los dos historiales conjuntos de una tarea. Cada par es un registro como el siguiente, con una entrada por agente en cada lista:

{
  "prompts": ["<agent 1 prompt>", "<agent 2 prompt>"],
  "winner_completions": ["<agent 1 response>", "<agent 2 response>"],
  "loser_completions": ["<agent 1 response>", "<agent 2 response>"],
  "winner_reward": 0.92,
  "loser_reward": 0.41,
  "candidate_reward_mean": 0.63,
  "raw_rewards": [0.92, 0.41],
  "target_raw_reward": 0.92,
  "comparator_raw_reward": 0.41
}

winner_reward y loser_reward son las puntuaciones de referencia de las dos respuestas conjuntas, y candidate_reward_mean es la puntuación media de los candidatos comparados para la tarea. Los tres campos finales provienen del entrenamiento iterativo: raw_rewards contiene las puntuaciones del ganador y el perdedor antes de reward_processor, y target_raw_reward y comparator_raw_reward contienen las de las muestras de los agentes actuales y la muestra del comparador. La iterativa trainers escribe cada par de rondas en iteration_0001.json, iteration_0002.json, y así sucesivamente bajo preference_replay_dir, como {"iteration": 1, "num_pairs": ..., "pairs": [...]}.

Pipeline de entrenamiento#

Entrenar un sistema multi-agente cooperativo con LLM-basado en PbRL alterna entre recopilar datos de preferencias de los agentes actuales y aprender de ellos con MARLHF o MADPO.

  • Base trainers (MARLHFTrainer, MADPOTrainer) recopilan los pares una vez, luego entrenan con ellos. Si ninguna tarea produce un par sin empate, el entrenamiento devuelve sin actualizar las políticas.
  • Iterativo trainers (MARLHFIterTrainer, MADPOIterTrainer) repite el ciclo para num_iterations rondas. La ronda \( \nu \) compara los agentes actuales con el comparador, almacena las nuevas parejas como \( \mathcal{D}^{(\nu)} \), permite que el buffer de re-petición seleccione los pares de entrenamiento \( \mathcal{B}^{(\nu)} \) de esta y rondas anteriores, y los utiliza para el entrenamiento. MADPO ejecuta sus actualizaciones para num_train_epochs por ronda. MARLHF ajusta un modelo de recompensa recién inicializado en ellos y luego ejecuta el aprendizaje de políticas.
Una iteración de entrenamiento La tarea recompensa convierte cada comparación con el comparador en una pareja de preferencia, el replay selecciona pares de entrenamiento de esta y rondas anteriores, y MADPO, o un modelo de recompensa seguido de RL, produce las siguientes políticas.
One iterative training round Current actors and a comparator produce responses. Reward ranking creates preference pairs, replay selects training pairs, and either MADPO or reward-model training followed by RL updates the actors for the next round. Current actors Comparator Rank pairs Replay MADPODirect update MARLHFReward model → RL Updated actors · next round

La evaluación siempre muestrea a partir de las políticas actuales y las califica con la recompensa de la tarea (reward_func y reward_processor), nunca con un modelo de recompensa aprendido.

PbRL Trainer Parámetros
  • agent_model o agents: Identificador de modelo para agentes homogéneos, o una lista de identificadores de modelo o instancias
  • num_agents: Número de agentes o roles de la tarea; debe coincidir con args.num_agents
  • tokenizer: Uno tokenizer, o uno por actor
  • train_dataset: Elementos de la tarea para la recopilación de preferencias y, en MARLHF, el aprendizaje de la política
  • eval_dataset: Conjunto de evaluación opcional
  • reward_func: Función llamable requerida que devuelve una recompensa de tarea compartida para cada respuesta conjunta alineada
  • reward_processor: Post-procesamiento opcional de las recompensas de la tarea
  • formatters: Un formateador de prompts compartido por todos los roles, o una lista de formateadores específicos de rol
  • args: La instancia de configuración de trainer
  • model_config: Configuración opcional de carga de modelo
  • wandb_config: Configuración opcional de Weights & Biases
  • eval_logger, eval_aggregator: Ganches de métricas opcionales de evaluación, como en MAGRPOTrainer
  • centralized_comparator_adapter: Constructor de prompt y analizador de roles conjunto para un actor o comparador centralizado; la configuración predeterminada escribe secciones indexadas de <agent_0>...</agent_0>
  • critic_model o critics (MARLHF solo): Fuentes opcionales de critic para un MAAC o IAC. critic_model debe ser una cadena de identificador de modelo. Los usuarios pueden proporcionar instancias de modelos cargadas a través de critics, utilizando una lista de un elemento para MAAC o una entrada por actor para critic IAC separados. Sin fuentes explícitas, se utiliza critic_model_name o el identificador de modelo actor
  • metrics_callback (MARLHF solo): Ganche de métricas personalizado para un actor-critic
MADPOIterConfig Parámetros
  • Herencia de MADPOConfig; num_train_epochs se aplica a cada iteración
  • num_iterations: Número de rondas de recopilación y entrenamiento (predeterminado 6)
  • Configuración de comparador y búfer de reproducción: descritas en Comparador y Búfer de Reproducción
MARLHFIterConfig Parámetros
  • Combina la configuración de MARLHF con num_iterations y la configuración del comparador y el búfer de reproducción
  • preference_scoring_reward: "task" (predeterminado) etiqueta nuevas comparaciones con la recompensa de la tarea; "reward_model" utiliza el modelo de recompensa de la iteración anterior una vez que existe
  • reward_num_train_epochs: Entrenamiento del modelo de recompensa epochs por iteración (predeterminado 2)

Comparador#

En el entrenamiento iterativo, el comparador proporciona el otro lado de cada comparación. Los agentes y el comparador actuales responden a la misma tarea, y cada comparación con el mismo índice con un ganador claro bajo la función oracle se convierte en una pareja, sin importar qué lado gane.

Pares de comparador El par actual de actors y la muestra de comparador para la misma tarea; la recompensa de la tarea decide cada comparación en el mismo índice en ambas direcciones, y las comparaciones decididas forman las parejas de preferencia de la iteración.
Comparator preference pairs Current actors and a comparator respond to the same task. Same-index candidates are ranked by the task reward. Either side can become the winner; ties are skipped. Task Current actors Comparator Task reward Winner · loserEither side can win Ties skipped

comparator_policy elige la fuente del comparador:

  • comparator_policy="current" (predeterminado): Pesos activos de actor, muestreados con un flujo de números aleatorios separado.

  • comparator_policy="current_copy": Pesos actuales de actor, copiados a comparator_devices para cada fase de recopilación cuando difieren de los dispositivos actor.

  • comparator_policy="model": Modelos explícitos de comparator_model_name o comparator_agents.

  • comparator_policy="history": Un punto de control actor guardado de comparator_history_k iteraciones atrás; la política inicial hasta que exista.

  • comparator_policy="api": Un punto final de modelo remoto.

La fuente history guarda puntos de control de política automáticamente. Los dos lados pueden muestrear diferentes números de candidatos; solo los índices presentes en ambos lados se comparan, y pair_selection="comparator_reward" no asume que el comparador gana. Por defecto, el comparador genera una respuesta por rol; con comparator_generation_mode="centralized", un modelo de comparador escribe cada respuesta del rol en una única respuesta conjunta, que se analiza en respuestas de rol antes de construir parejas.

Comparator Parámetros
  • comparator_policy: "current", "current_copy", "model", "history", o "api"
  • comparator_num_candidates: Número de muestras del comparador; por defecto preference_num_candidates
  • comparator_model_name o comparator_agents: Una fuente de modelo compartida, o una por rol, para "model"
  • comparator_history_k: Iteraciones hacia atrás para "history"; por defecto 1
  • comparator_devices: Ubicación del dispositivo para modelos de comparador locales
  • comparator_generation_mode: "decentralized" (predeterminado) o "centralized"
  • comparator_centralized_agent_index: Rol cuyo actor, punto de control, o modelo escribe la respuesta conjunta de un comparador centralizado; por defecto 0, que requiere un comparador centralizado actor
  • policy_checkpoint_dir: Ubicación opcional de actor-punto de control; establecerlo también guarda puntos de control para otras fuentes

Las fuentes de modelos pueden ser repositorios de modelos o puntos de control locales, según se describe en Entrenar Entidades:

comparator_policy=model
comparator_model_name=/path/to/comparator-checkpoint
comparator_generation_mode=centralized
comparator_centralized_agent_index=0
comparator_devices=cuda:1

API Comparadores#

Con comparator_policy="api", el comparador consulta un modelo remoto. comparator_api_format selecciona el formato de la solicitud:

  • comparator_api_format="generic" (predeterminado): La solicitud incluye el prompt, índice actor, elemento de tarea, número de candidatos y configuraciones de generación; las respuestas se leen de comparator_api_response_field.

  • comparator_api_format="openai": Completaciones de Chat, también utilizadas por puntos finales compatibles como DeepSeek.

  • comparator_api_format="anthropic": Mensajes de Anthropic API (https://api.anthropic.com/v1/messages, ANTHROPIC_API_KEY).

  • comparator_api_format="openai_responses" (alias responses o codex): Respuestas de OpenAI API (https://api.openai.com/v1/responses, OPENAI_API_KEY).

Los formatos Anthropic y Respuestas no tienen el parámetro n, por lo que envían una solicitud por cada candidato. Las solicitudes utilizan las indicaciones estándar centralizadas o descentralizadas.

comparator_policy=api
comparator_api_format=anthropic
comparator_api_url=https://api.anthropic.com/v1/messages
comparator_api_model=claude-sonnet-4-20250514
comparator_api_key_env=ANTHROPIC_API_KEY
Comparator API Parámetros
  • comparator_api_url: Punto final URL; requerido para "api"
  • comparator_api_format: "generic" (predeterminado), "openai", "anthropic" o "openai_responses"
  • comparator_api_model: Nombre del modelo pasado al punto final
  • comparator_api_key_env o comparator_api_key: Variable de entorno que contiene la clave, o la clave en sí
  • comparator_api_headers: Encabezados de solicitud adicionales
  • comparator_api_key_header, comparator_api_key_prefix: Encabezado de autenticación y prefijo; predeterminado "Authorization" y "Bearer", con manejo nativo de encabezados de Anthropic
  • comparator_api_timeout: Tiempo de espera de la solicitud en segundos; predeterminado 120
  • comparator_api_max_n_per_request: Número máximo de candidatos por llamada a Chat Completions, para endpoints que limitan n
  • comparator_api_response_field: Campo de Completions en una respuesta genérica; valor predeterminado "completions"
  • comparator_api_extra_body: Campos adicionales del cuerpo de la solicitud

Buffer de reproducción#

El buffer de reproducción selecciona las parejas almacenadas utilizadas para el entrenamiento en cada ronda. El conjunto de datos de la ronda actual se guarda primero, por lo que es elegible junto con rondas anteriores. preference_replay_mode establece qué rondas son elegibles:

  • preference_replay_mode="current" (predeterminado): Todas las parejas del conjunto de datos actual, sin muestreo histórico.

  • preference_replay_mode="nearest_k": Los últimos conjuntos de datos de rondas no vacías de preference_replay_k, incluyendo el actual.

  • preference_replay_mode="all_history": Cada conjunto de datos no vacío de la ronda actual de la ejecución trainer.

  • preference_replay_mode="lambda_decay": La misma historia, con un peso hacia rondas recientes.

Cada fila del diagrama muestra qué conjuntos de datos de ronda puede utilizar un modo y con qué fuerza se ponderan, con la ronda más reciente a la derecha.

Modos de replay De los cinco conjuntos de datos de rondas, ¿de cuál se extraen los modos de replay y con qué peso, antes de que se muestreen los pares de entrenamiento por esos pesos.
Replay selection modes Five round datasets run from oldest to newest. Current uses every current-round pair. Nearest-k samples the latest two non-empty rounds here; all-history samples all stored non-empty rounds equally; lambda-decay favors more recent rounds. OldestNewest current All pairs nearest_kLatest 2 rounds Sample all_history Sample lambda_decay Sample Eligible rounds · selection weight

nearest_k significa las rondas más recientes, no la recuperación de vecinos más cercanos. En nearest_k y all_history, los conjuntos de datos elegibles tienen el mismo peso independientemente de su tamaño, y los modos históricos muestrean de ellos en lugar de entrenar en cada pareja almacenada. Las parejas reproducidas se re-tokenizan a partir de los archivos de la ronda guardada. Establecer preference_replay_dir en una ejecución anterior solo no importa sus archivos, mientras que puntos de control de entrenamiento restauran el índice de reproducción y sus datos.

Decaimiento de Lambda#

Con la edad \( a=0 \) para los conjuntos de datos más recientes de \( K \), preference_replay_lambda (\( \lambda \)) establece los pesos de selección:

\[ w_a = \frac{\lambda^a}{\sum_{j=0}^{K-1}\lambda^j}, \qquad 0 \leq \lambda \leq 1. \]

\( \lambda=0 \) conserva solo el conjunto de datos más reciente, los valores más pequeños favorecen las rondas más recientes, y \( \lambda=1 \) pondera cada conjunto de datos por igual.

Muestreo#

Los modos históricos asignan cada uno de los preference_replay_sample_size dibujos a un conjunto de datos según el peso, luego muestrean pares dentro de cada conjunto de datos. El muestreo continúa sin repetición cuando el número asignado no excede el tamaño del conjunto de datos; los números más grandes se alternan a través de copias aleatorias. La muestra combinada se mezcla. El tamaño de muestra predeterminado es el número de pares de la ronda actual, o el tamaño del conjunto de datos más reciente no vacío si la ronda actual está vacía.

Replay Buffer Parámetros
  • preference_replay_mode: "current" (predeterminado), "nearest_k", "all_history", o "lambda_decay"
  • preference_replay_k: Número de conjuntos de datos no vacíos recientes para "nearest_k"; requerido en ese modo
  • preference_replay_lambda: Parámetro de decaimiento en [0, 1]; requerido para "lambda_decay"
  • preference_replay_sample_size: Pares muestreados por los modos históricos, o None para el predeterminado anterior
  • preference_replay_dir: Ubicación opcional de los conjuntos de datos de ronda guardados

current rechaza preference_replay_sample_size y preference_replay_lambda y acepta preference_replay_k solo como None o 1. La siguiente configuración, en cambio, muestrea 256 pares de todas las rondas, ponderados hacia las más recientes:

from comlrl.trainers.preference import MADPOIterConfig

args = MADPOIterConfig(
    num_agents=2,
    preference_replay_mode="lambda_decay",
    preference_replay_lambda=0.8,
    preference_replay_sample_size=256,
)

MARLHFIterConfig acepta las mismas opciones. Para reproducir solo las rondas más recientes, los usuarios pueden establecer preference_replay_mode="nearest_k" y el número de rondas a través de preference_replay_k.

MARLHF#

El Aprendizaje por Refuerzo Multiagente a partir de Retroalimentación Humana (MARLHF) ajusta un modelo de recompensa conjunta a los pares de preferencias, y luego entrena las políticas con RL utilizando la recompensa aprendida. Dado que el modelo de recompensa evalúa la respuesta completa del equipo, los actors aprenden a partir de una recompensa compartida.

Flujo de entrenamiento de MARLHF Las parejas de preferencia se ajustan a un modelo de recompensa conjunto, cuyos puntajes congelados entrenan ambas políticas con RL.
1 · Reward learning 2 · Policy learning Pairs Reward model New samples Shared reward RL update Agents Frozen

Aprendizaje de Recompensas#

El JointRewardModel \( \widetilde{R}_{\psi}(\mathbf{h}_t,\mathbf{a}_t) \) lee todas las indicaciones y respuestas de los agentes como un solo texto y aplica una cabeza escalar al último estado oculto del causal-LM backbone en el último token no de relleno token. Minimiza la pérdida de Bradley–Terry sobre los pares de entrenamiento \( \mathcal{B} \):

\[ \mathcal{L}_{\mathrm{RM}}(\psi) =-\mathbb{E}_{(\mathbf{h}_H^{w},\mathbf{h}_H^{l})\sim\mathcal{B}} \left[\log\sigma\left(\sum_{t=0}^{H-1}\Big[\widetilde{R}_{\psi}(\mathbf{h}_t^{w},\mathbf{a}_t^{w})-\widetilde{R}_{\psi}(\mathbf{h}_t^{l},\mathbf{a}_t^{l})\Big]\right)\right], \]

donde \( \sigma \) es la función sigmoide. La pérdida eleva la puntuación del ganador en relación con la del perdedor; no regresa a las recompensas de la tarea. Entidades de Entrenamiento describe cómo se carga el modelo de recompensa.

Aprendizaje de Políticas#

Después del aprendizaje de recompensas, \( \widetilde{R}_{\psi} \) se fija y reemplaza la recompensa de la tarea. Las políticas muestrean nuevas respuestas conjuntas para cada tarea, \( \widetilde{R}_{\psi} \) las puntúan sin gradientes, y un MARL backend actualiza la política de cada agente para maximizar el retorno aprendido:

\[ 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} \widetilde{R}_{\psi}(\mathbf{h}_t,\mathbf{a}_t)\Bigg]. \]

rl_algorithm selecciona el backend:

  • rl_algorithm="magrpo" (por defecto): MAGRPO, con una base de media grupal.

  • rl_algorithm="mareinforce": MAREINFORCE, con retornos brutos.

  • rl_algorithm="marloo": MARLOO, con una base de leave-one-out.

  • rl_algorithm="maremax": MAReMax, con una base de máximo grupal.

  • rl_algorithm="maac": MAAC, con un modelo centralizado critic.

  • rl_algorithm="iac": IAC, con-actor critics o adherido value heads.

Respuesta conjunta REINFORCE y Respuesta conjunta Actor-Critic describen estas actualizaciones, con \( \widetilde{R}_{\psi}(\mathbf{h}_t,\mathbf{a}_t) \) en lugar del modelo de recompensa \( r_t \). La regularización de referencia congelada opcional (KL, reference_kl_enabled, reference_kl_coef, reference_devices) se aplica solo al aprendizaje de la política: la estimación muestreada de KL de cada agente, escalada por reference_kl_coef, se resta de la señal de recompensa.

MARLHFConfig Parámetros
  • Herencia la configuración de MADPOConfig y datos de preferencia, excepto dpo_beta, que MARLHF no utiliza
  • reward_model_name: Identificador de modelo para el modelo de recompensa backbone; por defecto, el identificador de modelo actor cuando está disponible
  • reward_model_device: Dispositivo de modelo de recompensa; por defecto, "cuda:0", o None para utilizar el dispositivo trainer
  • reward_learning_rate, reward_num_train_epochs, reward_train_batch_size: Ajustes de optimización del modelo de recompensa
  • reward_max_length: Límite opcional de token para la entrada combinada del modelo de recompensa
  • reward_freeze_backbone: Entrena solo la cabeza de recompensa escalar cuando True
  • rl_algorithm: Backend de aprendizaje de la política; por defecto, "magrpo"
  • num_generations, actor: Muestras de aprendizaje de la política por consulta y el tamaño del grupo; al menos 2 para la familia MAGRPO, o al menos 1 para MAAC/IAC
  • num_train_epochs, agent_learning_rate: Aprendizaje de políticas epochs y tasa de aprendizaje
  • rollout_buffer_size, train_batch_size: Buffer de aprendizaje de políticas rollout y tamaños de lote de actualización; train_batch_size por defecto es rollout_buffer_size
  • critic_model_name, critic_learning_rate, critic_devices: Configuración de Critic para un backend actor-critic
  • critic_type: "v" o "q" para un backend actor-critic
  • use_separate_critic: Elección de critics separado o value heads conectado a actor para IAC
  • value_loss_coef, value_clip_range: Peso de pérdida de Critic y recorte compartido IAC y value-head, según se describe en Optimización de preferencias multiagente Actor-Critic
  • reference_kl_enabled, reference_kl_coef, reference_devices: Regularización de referencia congelada opcional para el aprendizaje de políticas

reward_model_name es requerido cuando actors son objetos de modelo sin identificador de modelo. MAAC y critic IAC también requieren fuentes critic explícitas o un identificador de modelo critic utilizable.

MADPO#

Optimización Directa de Preferencias Multi-Agente (MADPO) entrena las políticas directamente a partir de las parejas de preferencias, sin un modelo de recompensa ni una etapa RL. Su función de pérdida combina todas las preferencias de los agentes margins, de modo que cada política aprende del resultado del equipo.

Flujo de entrenamiento de MADPO Las acciones de los agentes de margins en cada pareja de preferencia suman una pérdida conjunta que actualiza directamente cada política.
Pairs Policy scores Joint loss UpdateEach agent Per agent No reward model

La margin de cada agente es la diferencia entre sus probabilidades logarítmicas de las respuestas ganadora y perdedora, y la suma conjunta de margin de estas en todos los agentes:

\[ \Delta_{\theta_i}=\sum_{t=0}^{H-1}\Big(\log\pi_{\theta_i}(a_{i,t}^{w}\mid h_{i,t}^{w})-\log\pi_{\theta_i}(a_{i,t}^{l}\mid h_{i,t}^{l})\Big), \qquad \Delta_{\boldsymbol{\theta}}=\sum_{i\in\mathcal{I}}\Delta_{\theta_i}. \]

MADPO minimiza

\[ \mathcal{L}_{\mathrm{MADPO}}(\boldsymbol{\theta}) =-\mathbb{E}_{(\mathbf{h}_H^{w},\mathbf{h}_H^{l})\sim\mathcal{B}} \Big[\log\sigma\big(\eta\,\Delta_{\boldsymbol{\theta}}\big)\Big], \]

donde \( \eta>0 \) es dpo_beta (predeterminado 0.1). La recompensa de la tarea solo ordena cada par; la pérdida utiliza los log-probabilidades de las políticas. El gradiente para el agente \( i \) es

\[ \nabla_{\theta_i}\mathcal{L}_{\mathrm{MADPO}}(\boldsymbol{\theta}) =-\eta\,\mathbb{E}_{\mathcal{B}} \Big[\sigma\big(-\eta\,\Delta_{\boldsymbol{\theta}}\big)\,\nabla_{\theta_i}\Delta_{\theta_i}\Big]. \]

El peso \( \sigma(-\eta\,\Delta_{\boldsymbol{\theta}}) \) depende de la respuesta conjunta de margin, mientras que el gradiente fluye solo a través del \( i \)’s propio margin. En cada lote, trainer calcula todos los margins una vez sin gradientes, luego actualiza cada agente con su propio margin diferenciable más los margins desconectados de los demás

El objetivo es sin referencia: los ajustes heredados reference_kl_enabled, reference_kl_coef y reference_devices no añaden términos de referencia a la pérdida MADPO. Las métricas de entrenamiento turn_1/reward_mean y turn_1/expected_return promedian las recompensas candidatas registradas cuando se recopilaron los pares, por lo que no reflejan las políticas actualizadas

El puntaje descentralizado excluye la última finalización token después de recortar los rellenos, por lo que la log-probabilidad de cada agente margin omite ese token. El puntaje centralizado cubre la finalización conjunta completa

MADPOConfig Parámetros
  • num_agents: Número de agentes, o de roles de tarea con un puntaje centralizado actor
  • collaboration_mode: "decentralized" (predeterminado) entrena un actor por agente; "centralized" entrena un actor que escribe la respuesta conjunta completa, y max_new_tokens luego cubre la respuesta conjunta completa
  • num_train_epochs: Optimización epochs sobre las parejas de preferencia recopiladas
  • agent_learning_rate: Tasa de aprendizaje de la política
  • dpo_beta: Coeficiente positivo en la respuesta conjunta margin (predeterminado 0.1)
  • train_batch_size: Parejas de preferencia por actualización; predeterminado rollout_buffer_size
  • parallel_training, agent_devices: Modo de ejecución de la política y colocación del dispositivo
  • eval_interval, eval_num_samples, eval_batch_size: Programa de evaluación y tamaños de muestra; MADPO cuenta eval_interval en las actualizaciones de preferencias
  • logging_steps: Intervalo de registro de entrenamiento
  • environment_steps_per_pair: Pasos del entorno contados por cada par de preferencias (predeterminado 2)
  • La configuración de datos de preferencia