Aller au contenu
CoMLRL
Multi-LLM RL

Multi-LLM PbRL

Traduit automatiquement avec translategemma:4b Original en anglais

Multi-agent PbRL entraîne les agents collaboratifs LLM à partir des préférences entre leurs réponses conjointes. CoMLRL construit les données de préférence à partir des éléments de tâche et les apprend avec l’un des deux algorithmes : MARLHF s’adapte à un modèle de récompense conjoint et entraîne ensuite les politiques avec RL, tandis que MADPO optimise directement les politiques à partir des préférences. MARLHFTrainer, MADPOTrainer et leurs variantes itératives MARLHFIterTrainer et MADPOIterTrainer sont disponibles à partir de comlrl.trainers.preference.

Les quatre trainers nécessitent actuellement num_turns=1 et des réponses conjointes alignées (joint_mode="aligned"). Une itération de l’algorithme trainers est une phase de collecte et d’entraînement de données, et non une tourn de dialogue.

Données de préférence#

Chaque agent \( i\in\mathcal{I}=\{1,\ldots,n\} \) échantillonne \( a_{i,t}\sim\pi_{\theta_i}(\cdot\mid h_{i,t}) \) de son historique local, et les réponses forment l’action conjointe \( \mathbf{a}_t=\{a_{1,t},\ldots,a_{n,t}\} \) avec l’historique conjoint \( \mathbf{h}_t \). Avec une seule tourn (\( H=1 \)), \( h_{i,0} \) est la requête de \( i \) et \( \mathbf{a}_0 \) est la réponse conjointe.

Les utilisateurs fournissent des éléments de tâche, et non des données de préférence. L’échantillon trainers obtient des réponses conjointes, les évalue avec une fonction oracle, et transforme les scores en paires de préférence.

Fonction oracle#

La fonction oracle évalue chaque réponse conjointe avec une valeur partagée. Par défaut, il s’agit de la récompense de la tâche reward_func, après l’optionnel reward_processor; elle peut suivre des règles ou appeler un modèle de récompense LLM, comme décrit dans Initialisation de l’entraînement. Les deux algorithmes apprennent uniquement à partir de la réponse conjointe qui gagne, de sorte que les valeurs de score ne comptent que pour choisir des paires. Dans MARLHFIterTrainer, preference_scoring_reward="reward_model" fait que le modèle de récompense le plus récemment ajusté soit l’oracle pour de nouvelles comparaisons, avec la récompense de la tâche comme sauvegarde jusqu’à ce qu’il existe.

Critère de préférence#

Pour chaque élément de tâche, chaque agent échantillonne les réponses preference_num_candidates à sa requête, et les réponses avec le même index candidat forment une réponse conjointe. Parmi deux réponses conjointes avec des scores différents, celle avec le score le plus élevé est préférée : elle est la gagnante \( w \), et l’autre est la perdante \( l \). Les égalités sont rejetées. pair_selection et preference_pairs_per_sample décident quelles paires chaque tâche conserve. Dans l’entraînement itératif, chaque comparaison est au lieu entre la réponse conjointe des agents actuels et la réponse conjointe du comparateur au même index candidat, et chaque côté peut gagner.

Preference Data Paramètres
  • preference_num_candidates : Nombre de candidats échantillonnés par tâche et actor ; au moins 2 (par défaut 80)
  • preference_pairs_per_sample : Nombre maximal de paires conservées par tâche, ou None pour aucune limite (par défaut 16)
  • pair_selection : "reward_gap" (par défaut) conserve les paires avec les plus grandes différences de récompense, "random" un sous-ensemble aléatoire, et "all" toutes les paires non liées, ce qui nécessite preference_pairs_per_sample=None ; l’itération trainers ajoute "comparator_reward", qui est leur valeur par défaut, et qui préfère les récompenses comparatrices plus élevées, puis les plus grandes différences de récompense
  • max_new_tokens, temperature, top_p, top_k : Paramètres de génération de candidats

Format des données#

Une paire \( (\mathbf{h}_H^{w},\mathbf{h}_H^{l}) \) contient les deux historiques de réponse conjointe d’une tâche. Chaque paire est un enregistrement comme suit, avec une entrée par agent dans chaque liste:

{
  "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 et loser_reward sont les scores oracle des deux réponses conjointes, et candidate_reward_mean est le score moyen des candidats comparés pour la tâche. Les trois derniers champs proviennent de l’entraînement itératif : raw_rewards contient les scores du gagnant et du perdant avant reward_processor, et target_raw_reward et comparator_raw_reward contiennent ceux des agents et du comparateur actuels. L’itération trainers écrit les paires de chaque tour dans iteration_0001.json, iteration_0002.json, etc., sous preference_replay_dir, comme {"iteration": 1, "num_pairs": ..., "pairs": [...]}.

Pipeline d’entraînement#

L’entraînement d’un système multi-agent coopératif basé sur LLM avec PbRL alterne entre la collecte de données de préférence auprès des agents actuels et l’apprentissage à partir de celles-ci avec MARLHF ou MADPO.

  • Base trainers (MARLHFTrainer, MADPOTrainer) collectent les paires une seule fois, puis entraînent sur celles-ci. Si aucune tâche ne produit une paire non liée, l’entraînement se termine sans mettre à jour les politiques.
  • Boucle trainers (MARLHFIterTrainer, MADPOIterTrainer) répète le cycle pour num_iterations tours. Le tour \( \nu \) compare les agents actuels avec le comparateur, stocke les nouveaux paires comme \( \mathcal{D}^{(\nu)} \), permet au tampon de relecture de sélectionner les paires d’entraînement \( \mathcal{B}^{(\nu)} \) de ce tour et des tours précédents, et les utilise pour l’entraînement. MADPO effectue ses mises à jour pour num_train_epochs par tour. MARLHF ajuste un modèle de récompense nouvellement initialisé sur ces données, puis exécute l’apprentissage de la politique.
Une seule étape d'entraînement itérative La tâche récompense transforme chaque comparaison avec le comparateur en une paire de préférences, la réplication sélectionne des paires d'entraînement à partir de cette et des étapes précédentes, et MADPO, ou un modèle de récompense suivi de RL, produit les politiques suivantes.
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

L’évaluation échantillonne toujours à partir des politiques actuelles et les évalue avec la récompense de la tâche (reward_func et reward_processor), et non avec un modèle de récompense appris.

PbRL Trainer Paramètres
  • agent_model ou agents: Identifiant de modèle pour les agents homogènes, ou une liste d’identifiants de modèles ou d’instances
  • num_agents: Nombre d’agents ou de rôles de tâche; doit correspondre à args.num_agents
  • tokenizer: Un tokenizer, ou un pour chaque actor
  • train_dataset: Éléments de tâche pour la collecte de préférences et, dans MARLHF, l’apprentissage de la politique
  • eval_dataset: Ensemble de données d’évaluation facultatif
  • reward_func: Appel requis qui renvoie une récompense de tâche partagée pour chaque réponse conjointe alignée
  • reward_processor: Post-traitement facultatif des récompenses de tâche
  • formatters: Un formatteur de prompt partagé pour tous les rôles, ou une liste de formatteurs spécifiques aux rôles
  • args: L’instance de configuration de trainer
  • model_config : Configuration facultative de chargement de modèle
  • wandb_config : Configuration facultative de Weights & Biases
  • eval_logger, eval_aggregator : Accros facultatifs pour les métriques d’évaluation, comme dans MAGRPOTrainer
  • centralized_comparator_adapter : Constructeur de requête conjointe et analyseur de rôle pour un actor ou un comparateur ; par défaut, <agent_0>...</agent_0> écrit des sections indexées
  • critic_model ou critics (MARLHF uniquement) : Sources facultatives de critic pour un MAAC ou IAC. critic_model doit être une chaîne d’identifiant de modèle. Les utilisateurs peuvent fournir des instances de modèles chargées via critics, avec une liste d’un élément pour MAAC ou une entrée par actor pour des critic et IAC séparés. Sans sources explicites, critic_model_name ou l’identifiant de modèle actor est utilisé
  • metrics_callback (MARLHF uniquement) : Accro facultatif de callback de métriques personnalisées pour un actor-critic
MADPOIterConfig Paramètres
  • Hérite de MADPOConfig ; num_train_epochs s’applique à chaque itération
  • num_iterations : Nombre de tours de collecte et d’entraînement (par défaut : 6)
  • Paramètres de comparateur et de tampon de relecture : décrits dans Comparateur et Tampon de relecture
MARLHFIterConfig Paramètres
  • Combine les paramètres de MARLHF avec num_iterations et les paramètres de comparateur et de tampon de relecture
  • preference_scoring_reward: "task" (par défaut) associent de nouvelles comparaisons à la récompense de la tâche; "reward_model" utilise le modèle de récompense de l’itération précédente une fois qu’il existe
  • reward_num_train_epochs: Entraînement du modèle de récompense epochs par itération (par défaut 2)

Comparateur#

Dans l’entraînement itératif, le comparateur fournit le côté de chaque comparaison. Les agents actuels et le comparateur répondent à la même tâche, et chaque comparaison avec un vainqueur clair sous la fonction oracle devient un couple, quel que soit le vainqueur.

Paires de comparaison L'exemple actors actuel et le comparateur pour la même tâche ; la récompense de la tâche décide chaque comparaison au même index dans les deux directions, et les comparaisons décidées forment les paires de préférences de l'itération.
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 choisit la source du comparateur:

  • comparator_policy="current" (par défaut): Poids actifs actor, échantillonnés avec un flux de nombres aléatoires distinct.

  • comparator_policy="current_copy": Poids actuels actor, copiés vers comparator_devices pour chaque phase de collecte lorsque ceux-ci diffèrent des appareils actor.

  • comparator_policy="model": Modèles explicites de comparator_model_name ou comparator_agents.

  • comparator_policy="history": Un point de contrôle actor sauvegardé de comparator_history_k itérations en arrière; la politique initiale jusqu’à ce qu’elle existe.

  • comparator_policy="api": Un point de terminaison de modèle distant.

La source history sauvegarde automatiquement les points de contrôle de la politique. Les deux côtés peuvent échantillonner différents nombres de candidats; seuls les indices présents des deux côtés sont comparés, et pair_selection="comparator_reward" ne suppose pas que le comparateur gagne. Par défaut, le comparateur génère une réponse par rôle; avec comparator_generation_mode="centralized", un modèle de comparateur écrit chaque réponse du rôle dans une réponse conjointe, qui est analysée en réponses de rôle avant que les paires ne soient construites.

Comparator Paramètres
  • comparator_policy: "current", "current_copy", "model", "history", ou "api"
  • comparator_num_candidates: Nombre d’échantillons du comparateur; valeur par défaut preference_num_candidates
  • comparator_model_name ou comparator_agents: Une source de modèle partagée, ou une par rôle, pour "model"
  • comparator_history_k: Itérations en arrière pour "history"; valeur par défaut 1
  • comparator_devices: Position de l’appareil pour les modèles de comparateur locaux
  • comparator_generation_mode: "decentralized" (par défaut) ou "centralized"
  • comparator_centralized_agent_index: Le rôle dont actor, point de contrôle, ou modèle écrit la réponse conjointe d’un comparateur centralisé; valeur par défaut 0, ce qui est requis par un comparateur centralisé actor
  • policy_checkpoint_dir: Emplacement optionnel de actor-point de contrôle; la définition enregistre également les points de contrôle pour les autres sources

Les sources de modèles peuvent être des référentiels de modèles ou des points de contrôle locaux, comme décrit dans Entraîner les entités:

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

Comparateurs API#

Avec comparator_policy="api", le comparateur interroge un modèle distant. comparator_api_format sélectionne le format de la requête:

  • comparator_api_format="generic" (par défaut): La requête inclut le prompt, l’index actor, l’élément de tâche, le nombre de candidats et les paramètres de génération; les complétions sont lues à partir de comparator_api_response_field.

  • comparator_api_format="openai": Complétion de Chat, également utilisé par des points de terminaison compatibles tels que DeepSeek.

  • comparator_api_format="anthropic": Messages d’Anthropic API (https://api.anthropic.com/v1/messages, ANTHROPIC_API_KEY).

  • comparator_api_format="openai_responses" (alias responses ou codex): Réponses OpenAI API (https://api.openai.com/v1/responses, OPENAI_API_KEY).

Les formats Anthropic et Réponses n’ont pas de paramètre n, ils envoient donc une requête par candidat. Les requêtes utilisent les invites de comparateur centralisées ou décentralisées standard.

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 Paramètres
  • comparator_api_url: Point de terminaison URL; requis pour "api"
  • comparator_api_format: "generic" (par défaut), "openai", "anthropic" ou "openai_responses"
  • comparator_api_model: Nom du modèle transmis au point de terminaison
  • comparator_api_key_env ou comparator_api_key: Variable d’environnement contenant la clé, ou la clé elle-même
  • comparator_api_headers: En-têtes de requête supplémentaires
  • comparator_api_key_header, comparator_api_key_prefix: En-tête d’authentification et préfixe; par défaut "Authorization" et "Bearer", avec gestion native des en-têtes Anthropic
  • comparator_api_timeout: Délai d’attente de la requête en secondes; par défaut 120
  • comparator_api_max_n_per_request: Nombre maximum de candidats par appel à Chat Completions, pour les points de terminaison qui limitent n
  • comparator_api_response_field: Champ Completions dans une réponse générique; valeur par défaut "completions"
  • comparator_api_extra_body: Champs supplémentaires du corps de la requête

Tampon de relecture#

Le tampon de relecture sélectionne les paires stockées utilisées pour l’entraînement à chaque étape. L’ensemble de données de la phase actuelle est enregistré en premier, ce qui le rend éligible ainsi que les phases précédentes. preference_replay_mode définit quelles phases sont éligibles:

  • preference_replay_mode="current" (par défaut): Toutes les paires de la phase actuelle, sans échantillonnage historique.

  • preference_replay_mode="nearest_k": Les derniers ensembles de données non vides preference_replay_k, y compris le dernier.

  • preference_replay_mode="all_history": Chaque ensemble de données non vide de la phase actuelle de l’exécution trainer.

  • preference_replay_mode="lambda_decay": Le même historique, avec une pondération vers les phases récentes.

Chaque ligne du diagramme montre quelles phases un mode peut utiliser et comment chaque phase est pondérée, avec la phase la plus récente à droite.

Modes de réplication Quels des ensembles de données des cinq étapes chaque mode de réplication utilise, et avec quel poids, avant que les paires d'entraînement ne soient échantillonnées à partir de ces poids.
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 signifie les phases les plus récentes, et non la récupération par voisin le plus proche. Dans nearest_k et all_history, les ensembles de données éligibles ont le même poids, quel que soit leur taille, et les modes historiques y échantillonnent plutôt que d’entraîner sur toutes les paires stockées. Les paires ré-tokenisées sont récupérées à partir des fichiers de la phase enregistrée. Définir preference_replay_dir sur une phase antérieure ne importe pas ses fichiers, tandis que les points de contrôle d’entraînement restaurent l’index de relecture et ses données.

Décroissance de Lambda#

Avec l’âge, \( a=0 \) pour les plus récents des ensembles de données \( K \), preference_replay_lambda (\( \lambda \)) définit les poids de sélection :

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

\( \lambda=0 \) conserve uniquement le dernier ensemble de données, les valeurs plus petites favorisent les dernières itérations, et \( \lambda=1 \) attribue le même poids à chaque ensemble de données.

Échantillonnage#

Les modes historiques attribuent chaque tirage preference_replay_sample_size à un ensemble de données selon un poids, puis échantillonnent des paires au sein de chaque ensemble de données. L’échantillonnage se poursuit sans répétition lorsque le nombre attribué ne dépasse pas la taille de l’ensemble de données ; les nombres plus importants passent en revue des copies mélangées. L’échantillon combiné est mélangé. La taille d’échantillonnage par défaut est le nombre de paires de la dernière itération, ou la taille de l’ensemble de données non vide le plus récent si la dernière itération est vide.

Replay Buffer Paramètres
  • preference_replay_mode : "current" (par défaut), "nearest_k", "all_history" ou "lambda_decay"
  • preference_replay_k : Nombre de derniers ensembles de données non vides pour "nearest_k" ; requis dans ce mode
  • preference_replay_lambda : Paramètre de décroissance dans [0, 1] ; requis pour "lambda_decay"
  • preference_replay_sample_size : Paires échantillonnées par les modes historiques, ou None pour la valeur par défaut ci-dessus
  • preference_replay_dir : Emplacement facultatif pour les ensembles de données des rondes enregistrés

current rejette preference_replay_sample_size et preference_replay_lambda et accepte preference_replay_k uniquement si None ou 1. La configuration suivante échantillonne 256 paires de toutes les rondes, avec une pondération vers les dernières :

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 accepte les mêmes options. Pour rejouer uniquement les dernières rondes, les utilisateurs peuvent définir preference_replay_mode="nearest_k" et le nombre de rondes via preference_replay_k.

MARLHF#

L’apprentissage par renforcement multi-agents à partir des retours humains (MARLHF) ajuste un modèle de récompense conjoint aux paires de préférences, puis entraîne les politiques avec RL sur le modèle de récompense appris. Étant donné que le modèle de récompense évalue la réponse complète de l’équipe, des modèles actors apprennent à partir d’une récompense partagée.

Flux d'entraînement MARLHF Les paires de préférences s'adaptent à un modèle de récompense conjoint, dont les scores figés entraînent les deux politiques avec RL.
1 · Reward learning 2 · Policy learning Pairs Reward model New samples Shared reward RL update Agents Frozen

Apprentissage de la récompense#

Le JointRewardModel \( \widetilde{R}_{\psi}(\mathbf{h}_t,\mathbf{a}_t) \) lit les invites et les réponses de tous les agents en tant que texte et applique une tête scalaire à l’état caché final du causal-LM backbone à la dernière position non-remplie token. Il minimise la perte de Bradley–Terry sur les paires d’entraînement \( \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], \]

où \( \sigma \) est la fonction sigmoïde. La perte augmente la note du gagnant par rapport à la note du perdant ; elle ne se régresse pas vers les récompenses de la tâche. Entités d’entraînement décrit comment le modèle de récompense est chargé.

Apprentissage de la politique#

Après l’apprentissage de la récompense, \( \widetilde{R}_{\psi} \) est fixé et remplace la récompense de la tâche. Les politiques échantillonnent de nouvelles réponses conjointes pour chaque tâche, \( \widetilde{R}_{\psi} \) les évaluent sans gradients, et un MARL backend met à jour la politique de chaque agent pour maximiser le retour appris :

\[ 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 sélectionne le backend :

  • rl_algorithm="magrpo" (par défaut) : MAGRPO, avec une base de moyenne de groupe.

  • rl_algorithm="mareinforce" : MAREINFORCE, avec des retours bruts.

  • rl_algorithm="marloo" : MARLOO, avec une base de leave-one-out.

  • rl_algorithm="maremax" : MAReMax, avec une base de maximum de groupe.

  • rl_algorithm="maac": MAAC, avec un modèle centralisé critic.

  • rl_algorithm="iac": IAC, avec-actor critics ou fixé value heads.

Réponse conjointe REINFORCE et Réponse conjointe Actor-Critic décrivent ces mises à jour, avec \( \widetilde{R}_{\psi}(\mathbf{h}_t,\mathbf{a}_t) \) à la place du modèle de récompense \( r_t \). La régularisation de référence optionnelle (KL, reference_kl_enabled, reference_kl_coef, reference_devices) s’applique uniquement à l’apprentissage de la politique : l’estimation de KL échantillée par chaque agent, mise à l’échelle par reference_kl_coef, est soustraite du signal de récompense.

MARLHFConfig Paramètres
  • Hérite des paramètres MADPOConfig et des données de préférence, sauf dpo_beta, qui n’est pas utilisé par MARLHF
  • reward_model_name: Identifiant de modèle pour le modèle de récompense backbone; par défaut, l’identifiant de modèle actor est utilisé si disponible
  • reward_model_device: Appareil de modèle de récompense; par défaut, "cuda:0", ou None pour utiliser l’appareil trainer
  • reward_learning_rate, reward_num_train_epochs, reward_train_batch_size: Paramètres d’optimisation du modèle de récompense
  • reward_max_length: Limite optionnelle token pour l’entrée combinée du modèle de récompense
  • reward_freeze_backbone: Entraîne uniquement la tête de récompense scalaire lorsque True
  • rl_algorithm: Backend d’apprentissage de la politique; par défaut, "magrpo"
  • num_generations: Échantillons d’apprentissage de la politique par requête et actor (la taille du groupe); au moins 2 pour la famille MAGRPO, ou au moins 1 pour MAAC/IAC
  • num_train_epochs, agent_learning_rate: Apprentissage de la politique epochs et taux d’apprentissage
  • rollout_buffer_size, train_batch_size: Tampon d’apprentissage de la politique rollout et tailles de lots de mise à jour; train_batch_size par défaut rollout_buffer_size
  • critic_model_name, critic_learning_rate, critic_devices: Paramètres Critic pour un backend actor-critic
  • critic_type: "v" ou "q" pour un backend actor-critic
  • use_separate_critic: Choix de critics séparé ou value heads attaché à actor pour IAC
  • value_loss_coef, value_clip_range: Poids de perte Critic et troncature partagée IAC et value-head, tel que décrit dans Optimisation de préférences multi-agents Actor-Critic
  • reference_kl_enabled, reference_kl_coef, reference_devices: Régularisation de référence figée optionnelle pour l’apprentissage de la politique

reward_model_name est requis lorsque les objets de modèle actors n’ont pas d’identifiant de modèle. MAAC et critic séparés IAC nécessitent également des sources critic explicites ou un identifiant de modèle critic utilisable.

MADPO#

L’optimisation directe des préférences multi-agents (MADPO) entraîne les politiques directement à partir des paires de préférences, sans modèle de récompense ni étape RL. Sa fonction de perte combine toutes les préférences des agents margins, de sorte que chaque politique apprend de l’issue de l’équipe.

Flux d'entraînement MADPO Les actions des agents margins sur chaque paire de préférences s'additionnent pour former une perte conjointe qui met à jour chaque politique directement.
Pairs Policy scores Joint loss UpdateEach agent Per agent No reward model

La margin de chaque agent est la différence entre ses probabilités logarithmiques des réponses gagnantes et perdantes, et la margin additionne ces valeurs pour tous les agents:

\[ \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 minimise

\[ \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], \]

où \( \eta>0 \) est dpo_beta (par défaut 0,1). La récompense de la tâche ne commande qu’à chaque paire; la perte utilise les probabilités logarithmiques des politiques. Le gradient pour l’agent \( i \) est

\[ \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]. \]

Le poids \( \sigma(-\eta\,\Delta_{\boldsymbol{\theta}}) \) dépend de la réponse conjointe de l’équipe margin, tandis que le gradient ne traverse que la propre margin de l’agent \( i \). Dans chaque lot, le trainer calcule toutes les margins une fois sans gradients, puis met à jour chaque agent avec sa propre fonction différentiable margin plus les margins détachées des autres

L’objectif est sans référence : les paramètres hérités reference_kl_enabled, reference_kl_coef et reference_devices n’ajoutent aucun terme de référence à la perte MADPO. Les métriques d’entraînement turn_1/reward_mean et turn_1/expected_return calculent la moyenne des récompenses candidates enregistrées lors de la collecte des paires, de sorte qu’elles ne reflètent pas les politiques mises à jour

Le scoreur décentralisé exclut la dernière complétion token après avoir supprimé les rembourrages, de sorte que la probabilité logarithmique de chaque agent margin omet cette token. Le scoreur centralisé couvre la complétion conjointe complète

MADPOConfig Paramètres
  • num_agents : Nombre d’agents, ou de rôles de tâche avec un scoreur centralisé actor
  • collaboration_mode : "decentralized" (par défaut) entraîne un actor par agent ; "centralized" entraîne un actor qui écrit la réponse conjointe complète, et max_new_tokens couvre alors la réponse conjointe complète
  • num_train_epochs : Optimisation epochs sur les paires de préférences collectées
  • agent_learning_rate : Taux d’apprentissage de la politique
  • dpo_beta : Coefficient positif sur la réponse conjointe margin (par défaut 0,1)
  • train_batch_size : Paires de préférences par mise à jour ; par défaut rollout_buffer_size
  • parallel_training, agent_devices : Mode d’exécution de la politique et placement de l’appareil
  • eval_interval, eval_num_samples, eval_batch_size : Planning d’évaluation et tailles d’échantillon ; MADPO compte eval_interval dans les mises à jour de préférences
  • logging_steps : Intervalle d’enregistrement de l’entraînement
  • environment_steps_per_pair : Nombre d’étapes de l’environnement par paire de préférences (par défaut 2)
  • Les données de préférence