Zum Inhalt springen
CoMLRL
Multi-LLM RL

Multi-LLM PbRL

Automatisch übersetzt mit translategemma:4b Englisches Original

Multi-Agent PbRL trainiert kollaborierende LLM Agenten aus Präferenzen zwischen ihren gemeinsamen Antworten. CoMLRL erstellt die Präferenzdaten aus Aufgaben-Items und lernt daraus mit einem von zwei Algorithmen: MARLHF passt ein gemeinsames Belohnungsmodell an und trainiert dann die Richtlinien mit RL, während MADPO die Richtlinien direkt aus den Präferenzen optimiert. MARLHFTrainer, MADPOTrainer und ihre iterativen Varianten MARLHFIterTrainer und MADPOIterTrainer sind von comlrl.trainers.preference erhältlich.

Alle vier trainers benötigen derzeit num_turns=1 und eine abgestimmte gemeinsame Antwort (joint_mode="aligned"). Eine Iteration des iterativen trainers ist eine Runde der Datenerfassung und des Trainings, nicht ein Dialogschritt.

Präferenzdaten#

Jeder Agent \( i\in\mathcal{I}=\{1,\ldots,n\} \) entnimmt \( a_{i,t}\sim\pi_{\theta_i}(\cdot\mid h_{i,t}) \) aus seiner lokalen Historie, und die Antworten bilden die gemeinsame Aktion \( \mathbf{a}_t=\{a_{1,t},\ldots,a_{n,t}\} \) mit der gemeinsamen Historie \( \mathbf{h}_t \). Bei einem einzelnen Schritt (\( H=1 \)) ist \( h_{i,0} \) der Prompt von \( i \) und \( \mathbf{a}_0 \) ist die gemeinsame Antwort.

Benutzer geben Aufgaben ein, nicht Präferenzdaten. Das trainers entnimmt gemeinsame Antworten, bewertet sie mit einer Oracle-Funktion und wandelt die Bewertungen in Präferenzpaare um.

Oracle-Funktion#

Die Oracle-Funktion bewertet jede gemeinsame Antwort mit einem gemeinsamen Wert. Standardmäßig ist dies die Aufgabenbelohnung reward_func, nach der optionalen reward_processor; sie kann Regeln befolgen oder ein LLM Belohnungsmodell aufrufen, wie in Trainingsinitialisierung beschrieben. Beide Algorithmen lernen nur aus dem, welcher gemeinsame Antwort gewinnt, daher spielen die Werte nur bei der Auswahl von Paaren eine Rolle. In MARLHFIterTrainer macht preference_scoring_reward="reward_model" das zuletzt angepasste Belohnungsmodell zur Oracle für neue Vergleiche, wobei die Aufgabenbelohnung als Fallback verwendet wird, bis eines existiert.

Präferenzkriterium#

Für jedes Aufgabenitem entnimmt jeder Agent preference_num_candidates Antworten auf seinen Prompt, und Antworten mit dem gleichen Kandidatenindex bilden eine gemeinsame Antwort. Von zwei gemeinsamen Antworten mit unterschiedlichen Bewertungen wird die höher bewertete bevorzugt: sie ist der Gewinner \( w \) und die andere ist der Verlierer \( l \). Gleichstände werden verworfen. pair_selection und preference_pairs_per_sample entscheiden, welche Paare jede Aufgabe behalten. Bei iterativen Trainings ist jede Verknüpfung stattdessen zwischen der aktuellen gemeinsamen Antwort der Agenten und der gemeinsamen Antwort des Vergleichers mit dem gleichen Kandidatenindex, wobei jede Seite gewinnen kann.

Preference Data Parameter
  • preference_num_candidates: Anzahl der pro Aufgabe abgetasteten Kandidaten und actor; mindestens 2 (Standard: 80)
  • preference_pairs_per_sample: Maximale Anzahl der pro Aufgabe beibehaltenen Paare, oder None für keine Beschränkung (Standard: 16)
  • pair_selection: "reward_gap" (Standard) speichert die Paare mit dem größten Belohnungsunterschied, "random" ein zufälliges Teilmenge und "all" jedes nicht-gleichzusammengeführte Paar, was preference_pairs_per_sample=None erfordert; die iterative trainers fügt "comparator_reward" hinzu, deren Standard, der höhere Comparator-Belohnungen bevorzugt und dann größere Belohnungsunterschiede
  • max_new_tokens, temperature, top_p, top_k: Einstellungen zur Kandidatengenerierung

Datenformat#

Ein Paar \( (\mathbf{h}_H^{w},\mathbf{h}_H^{l}) \) enthält die beiden gemeinsamen Historien einer Aufgabe. Jedes Paar ist ein Datensatz wie der folgenden, mit einem Eintrag pro Agent in jeder 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 und loser_reward sind die Oracle-Scores der beiden gemeinsamen Antworten, und candidate_reward_mean ist der Mittelwert der für die Aufgabe verglichenen Kandidaten. Die letzten drei Felder stammen aus iterativer Schulung: raw_rewards enthält die Scores des Gewinners und des Verlierers vor reward_processor, und target_raw_reward und comparator_raw_reward enthalten die Scores der aktuellen Agenten- und des Comparator-Samples. Die iterative trainers schreibt die Paare jeder Runde in iteration_0001.json, iteration_0002.json usw. unter preference_replay_dir, wie {"iteration": 1, "num_pairs": ..., "pairs": [...]}.

Trainingspipeline#

Training eines kooperativen LLM-basierten Mehr-Agenten-Systems mit PbRL wechselt zwischen dem Sammeln von Präferenzdaten von den aktuellen Agenten und dem Lernen daraus mit MARLHF oder MADPO.

  • Basis trainers (MARLHFTrainer, MADPOTrainer) sammeln die Paare einmal und trainieren dann darauf. Wenn keine Aufgabe ein nicht-gleichzusammengeführtes Paar erzeugt, kehrt das Training ohne Aktualisierung der Richtlinien zurück.
  • Iteratives trainers (MARLHFIterTrainer, MADPOIterTrainer) wiederholen den Zyklus für num_iterations Runden. Runde \( \nu \) vergleicht die aktuellen Agenten mit dem Vergleichsmechanismus, speichert die neuen Paare als \( \mathcal{D}^{(\nu)} \), lässt den Wiedergabepuffer die Trainingspaare \( \mathcal{B}^{(\nu)} \) aus dieser und früheren Runden auswählen und trainiert darauf. MADPO führt seine Updates für num_train_epochs pro Runde durch. MARLHF passt ein neu initialisiertes Belohnungsmodell darauf an und führt dann das Policy-Lernen durch.
Eine iterative Trainingsrunde Die Aufgabenbelohnung wandelt jede Vergleiche mit dem Vergleicher in ein Präferenzpaar um, Replay wählt Trainingspaare aus dieser und früheren Runden aus, und MADPO oder ein Belohnungsmodell gefolgt von RL erzeugt die nächsten Richtlinien.
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

Bewertung sammelt immer von den aktuellen Richtlinien und bewertet diese mit der Aufgabenbelohnung (reward_func und reward_processor), niemals mit einem gelernten Belohnungsmodell.

PbRL Trainer Parameter
  • agent_model oder agents: Modell-Identifier für homogene Agenten, oder eine Liste von Modell-Identifiers oder Instanzen
  • num_agents: Anzahl der Agenten oder Aufgabenrollen; muss args.num_agents entsprechen
  • tokenizer: Ein tokenizer, oder einer pro actor
  • train_dataset: Aufgaben-Items für die Präferenzsammlung und, in MARLHF, Policy-Lernen
  • eval_dataset: Optionales Evaluationsdatensatz
  • reward_func: Erforderliche Callable, die einen gemeinsamen Aufgabenbelohnung pro ausgerichteter gemeinsamer Antwort zurückgibt
  • reward_processor: Optionales Post-Processing der Aufgabenbelohnungen
  • formatters: Ein gemeinsamer Prompt-Formatter für alle Rollen, oder eine Liste von rollenspezifischen Formattern
  • args: Die Konfigurationsinstanz von trainer
  • model_config: Optionale Konfiguration zum Laden des Modells
  • wandb_config: Optionale Konfiguration für Weights & Biases
  • eval_logger, eval_aggregator: Optionale Hooks zur Bewertung, wie in MAGRPOTrainer
  • centralized_comparator_adapter: Gemeinsamer Prompt-Builder und Rollen-Parser für ein zentrales actor oder einen Vergleicher; standardmäßig werden indizierte <agent_0>...</agent_0>-Abschnitte geschrieben
  • critic_model oder critics (nur MARLHF): Optionale critic-Quellen für ein MAAC oder IAC-Backend. critic_model muss eine Modell-ID-Zeichenfolge sein. Benutzer können geladene Modellinstanzen über critics bereitstellen, wobei eine Liste mit einem Element für MAAC oder eine einzelne Zeile pro actor für separate critic und IAC verwendet wird. Ohne explizite Quellen werden critic_model_name oder die actor-Modell-ID verwendet
  • metrics_callback (nur MARLHF): Optionale benutzerdefinierte Metriken-Callback für ein actor-critic-Backend
MADPOIterConfig Parameter
  • Erbt von MADPOConfig; num_train_epochs gilt für jede Iteration
  • num_iterations: Anzahl der Sammlung- und Trainingsrunden (Standard: 6)
  • Comparator- und Replay-Einstellungen: beschrieben in Comparator und Replay Buffer
MARLHFIterConfig Parameter
  • Kombiniert die MARLHF-Einstellungen mit num_iterations und den Comparator- und Replay-Einstellungen
  • preference_scoring_reward: "task" (Standard): Neue Vergleiche mit der Aufgabenbelohnung; "reward_model" verwendet das Belohnungsmodell der vorherigen Iteration, falls vorhanden
  • reward_num_train_epochs: Belohnungsmodell-Training epochs pro Iteration (Standard: 2)

Vergleicher#

Beim iterativen Training liefert der Vergleicher die andere Seite des Vergleichs. Die aktuellen Agenten und der Vergleicher reagieren auf die gleiche Aufgabe, und jeder Vergleich mit einem klaren Gewinner unter der Oracle-Funktion wird zu einem Paar, unabhängig davon, welcher Seite es zugesprochen wird.

Vergleiche Das aktuelle actors und die Vergleicherprobe für die gleiche Aufgabe; die Aufgabenbelohnung entscheidet über jede Vergleichsaktion in beide Richtungen, und die entschiedenen Vergleiche bilden die Präferenzpaare der Iteration.
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 wählt die Quelle des Vergleichers:

  • comparator_policy="current" (Standard): Aktuelle actor-Gewichte, die mit einem separaten Zufallszahl-Stream abgetastet werden.

  • comparator_policy="current_copy": Aktuelle actor-Gewichte, die an comparator_devices kopiert werden, wenn sie sich von actor unterscheiden.

  • comparator_policy="model": Explizite Modelle von comparator_model_name oder comparator_agents.

  • comparator_policy="history": Ein gespeichertes actor-Checkpoint von comparator_history_k Iterationen zurück; die anfängliche Richtlinie, falls vorhanden.

  • comparator_policy="api": Ein Remote-Modell-Endpunkt.

Die history-Quelle speichert Richtlinien-Checkpoints automatisch. Die beiden Seiten können unterschiedliche Anzahl von Kandidaten abtasten; nur die Indizes, die auf beiden Seiten vorhanden sind, werden verglichen, und pair_selection="comparator_reward" geht davon aus, dass der Vergleicher gewinnt. Standardmäßig generiert der Vergleicher eine Antwort pro Rolle; mit comparator_generation_mode="centralized" schreibt ein Vergleicher-Modell jede Rollenantwort in eine gemeinsame Antwort, die dann in Rollenantworten aufgeteilt wird, bevor Paare erstellt werden.

Comparator Parameter
  • comparator_policy: "current", "current_copy", "model", "history" oder "api"
  • comparator_num_candidates: Anzahl der Stichproben für den Comparator; Standardwert ist preference_num_candidates
  • comparator_model_name oder comparator_agents: Eine gemeinsame Modellquelle, oder eine pro Rolle, für "model"
  • comparator_history_k: Iterationen zurück für "history"; Standardwert ist 1
  • comparator_devices: Platzierung des Geräts für lokale Comparator-Modelle
  • comparator_generation_mode: "decentralized" (Standard) oder "centralized"
  • comparator_centralized_agent_index: Rolle, deren actor, Checkpoint oder Modell eine gemeinsame Antwort eines zentralen Comparators schreibt; Standardwert ist 0, was ein zentraler actor benötigt
  • policy_checkpoint_dir: Optionaler actor-Checkpoint-Ort; Das Festlegen setzt auch Checkpoints für die anderen Quellen

Modellquellen können Modell-Repositories oder lokale Checkpoints sein, wie in Training Entities beschrieben:

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

API Comparators#

Mit comparator_policy="api" fragt der Comparator ein Remote-Modell ab. comparator_api_format wählt das Anfrageformat:

  • comparator_api_format="generic" (Standard): Die Anfrage enthält den Prompt, actor-Index, das Task-Item, die Anzahl der Kandidaten und die Generierungseinstellungen; die Ergebnisse werden von comparator_api_response_field gelesen.

  • comparator_api_format="openai": Chat Completions, auch von kompatiblen Endpunkten wie DeepSeek verwendet.

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

  • comparator_api_format="openai_responses" (Alias responses oder codex): OpenAI Antworten API (https://api.openai.com/v1/responses, OPENAI_API_KEY).

Die Anthropic- und Responses-Formate haben keinen n-Parameter, daher wird für jeden Kandidaten eine Anfrage gesendet. Anfragen verwenden die standardmäßigen zentralisierten oder dezentralisierten Comparator-Prompts.

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 Parameter
  • comparator_api_url: Endpoint URL; erforderlich für "api"
  • comparator_api_format: "generic" (Standard), "openai", "anthropic" oder "openai_responses"
  • comparator_api_model: Modellname, der an den Endpoint übergeben wird
  • comparator_api_key_env oder comparator_api_key: Umgebungsvariable, die den Schlüssel enthält, oder der Schlüssel selbst
  • comparator_api_headers: Zusätzliche Anfragetypen
  • comparator_api_key_header, comparator_api_key_prefix: Authentifizierungsheader und Präfix; Standard "Authorization" und "Bearer", mit nativem Anthropic-Header-Handling
  • comparator_api_timeout: Anfragedauer in Sekunden; Standard 120
  • comparator_api_max_n_per_request: Maximale Anzahl der Kandidaten pro Chat Completions-Aufruf, für Endpunkte, die n begrenzen
  • comparator_api_response_field: Completions-Feld in einer generischen Antwort; Standard "completions"
  • comparator_api_extra_body: Zusätzliche Felder im Anfrage-Body

Wiederholungs-Puffer#

Der Wiederholungs-Puffer wählt die gespeicherten Paare aus, die für das Training in jeder Runde verwendet werden. Der aktuelle Datensatz der aktuellen Runde wird zuerst gespeichert, so dass er zusammen mit früheren Runden verwendet werden kann. preference_replay_mode legt fest, welche Runden verwendet werden können:

  • preference_replay_mode="current" (Standard): Alle Paare aus der aktuellen Runde, ohne historische Stichproben.

  • preference_replay_mode="nearest_k": Die neuesten, nicht leeren Rund-Datensätze von preference_replay_k, einschließlich des aktuellen.

  • preference_replay_mode="all_history": Jedes nicht leere Datensatz der aktuellen trainer-Ausführung.

  • preference_replay_mode="lambda_decay": Derselbe Verlauf, gewichtet auf aktuelle Runden.

Jede Zeile des Diagramms zeigt, aus welchen Runden-Datensätzen ein Modus auswählen kann und wie stark jedes gewichtet ist, wobei die neueste Runde rechts steht.

Replay-Modi Aus welchen von fünf Runden-Datensätzen jeder Replay-Modus zieht und mit welcher Gewichtung, bevor die Trainingspaare anhand dieser Gewichte ausgewählt werden.
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 bedeutet die kürzesten Runden, nicht Nearest-Neighbor-Retrieval. In nearest_k und all_history haben berechtigte Datensätze die gleiche Gewichtung, unabhängig von der Größe, und historische Modi stichproben diese, anstatt von jedem gespeicherten Paar zu trainieren. Wiederholte Paare werden aus den gespeicherten Runden-Dateien neu tokenisiert. Das Festlegen von preference_replay_dir auf eine frühere Ausführung importiert allein nicht ihre Dateien, während Trainings-Checkpoints den Wiederholungs-Index und seine Daten wiederherstellen.

Lambda Decay#

Mit zunehmendem Alter, \( a=0 \) für die neuesten von \( K \) geeigneten Datensätzen, preference_replay_lambda (\( \lambda \)) legt die Auswahlgewichte fest:

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

\( \lambda=0 \) behält nur den neuesten Datensatz bei, kleinere Werte bevorzugen kürzere Runden, und \( \lambda=1 \) gewichtet jeden Datensatz gleich.

Sampling#

Historische Modi weisen jeden der preference_replay_sample_size-Auszüge anhand des Gewichts einem Datensatz zu, und anschließend werden Paare innerhalb jedes Datensatzes ausgewählt. Das Sampling erfolgt ohne Wiederholung, wenn die zugewiesene Anzahl die Datensatzgröße nicht überschreitet; größere Zahlen durchlaufen verschachtelte Kopien. Die kombinierte Stichprobe wird gemischt. Die Standard-Stichprobengröße entspricht der Anzahl der Paare der aktuellen Runde oder der Größe des neuesten nicht leeren Datensatzes, falls die aktuelle Runde leer ist.

Replay Buffer Parameter
  • preference_replay_mode: "current" (Standard), "nearest_k", "all_history" oder "lambda_decay"
  • preference_replay_k: Anzahl der letzten nicht leeren Datensätze für "nearest_k"; erforderlich in diesem Modus
  • preference_replay_lambda: Abklingparameter in [0, 1]; erforderlich für "lambda_decay"
  • preference_replay_sample_size: Paare, die von den historischen Modi ausgewählt wurden, oder None für den Standard oben
  • preference_replay_dir: Optionaler Speicherort für die gespeicherten Datensätze der Runde

current lehnt preference_replay_sample_size und preference_replay_lambda ab und akzeptiert preference_replay_k nur als None oder 1. Die folgende Konfiguration wählt stattdessen 256 Paare aus allen Runden aus, wobei die jüngeren bevorzugt werden:

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 akzeptiert die gleichen Optionen. Um nur die neuesten Runden abzufragen, können Benutzer preference_replay_mode="nearest_k" und die Anzahl der Runden über preference_replay_k festlegen.

MARLHF#

Multi-Agent Reinforcement Learning from Human Feedback (MARLHF) passt ein gemeinsames Belohnungsmodell zu den Präferenzpaaren an, trainiert dann die Richtlinien mit RL anhand des gelernten Belohnungsmodells. Da das Belohnungsmodell die vollständige Antwort des Teams bewertet, lernen separate actors aus einem gemeinsamen Belohnungsmodell.

MARLHF Trainingsablauf Präferenzpaare passen ein gemeinsames Belohnungsmodell, dessen gefrorene Werte dann beide Richtlinien mit RL trainieren.
1 · Reward learning 2 · Policy learning Pairs Reward model New samples Shared reward RL update Agents Frozen

Belohnungs-Lernen#

Der JointRewardModel \( \widetilde{R}_{\psi}(\mathbf{h}_t,\mathbf{a}_t) \) liest alle Anfragen und Antworten der Agenten als einen Text und wendet eine skalare Kopf auf den letzten verborgenen Zustand des kausalen LM backbone im finalen Nicht-Padding token an. Es minimiert den Bradley–Terry-Verlust über die Trainingspaare \( \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], \]

wobei \( \sigma \) die Sigmoid-Funktion ist. Der Verlust erhöht den Score des Gewinners relativ zum Score des Verlierers; er regressiert nicht auf die Aufgabenbelohnungen. Trainings-Entitäten beschreiben, wie das Belohnungsmodell geladen wird.

Richtlinien-Lernen#

Nach dem Präferenzlernen wird \( \widetilde{R}_{\psi} \) festgelegt und ersetzt den Task-Reward. Die Policies sampeln neue gemeinsame Antworten für jede Aufgabe, \( \widetilde{R}_{\psi} \) bewerten diese ohne Gradienten, und ein MARL-Backend aktualisiert die Policy jedes Agents, um den gelernten Return zu maximieren:

\[ 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 wählt das Backend:

  • rl_algorithm="magrpo" (Standard): MAGRPO, mit einer Gruppen-Mean-Baseline.

  • rl_algorithm="mareinforce": MAREINFORCE, mit Roh-Returns.

  • rl_algorithm="marloo": MARLOO, mit einer Leave-One-Out-Baseline.

  • rl_algorithm="maremax": MAReMax, mit einer Gruppen-Maximum-Baseline.

  • rl_algorithm="maac": MAAC, mit einem zentralen critic.

  • rl_algorithm="iac": IAC, mit pro-actor critics oder angehängtem value heads.

Multi-Agent REINFORCE und Multi-Agent Actor-Critic beschreiben diese Aktualisierungen, wobei \( \widetilde{R}_{\psi}(\mathbf{h}_t,\mathbf{a}_t) \) anstelle von \( r_t \) verwendet wird. Optionale, gefrorene Referenz-KL-Regularisierung (reference_kl_enabled, reference_kl_coef, reference_devices) gilt nur für das Lernen der Richtlinien: Der von jedem Agenten abgeleitete KL-Schätzwert, skaliert mit reference_kl_coef, wird von seinem Belohnungsignal abgezogen.

MARLHFConfig Parameter
  • Erbt die Einstellungen für MADPOConfig und Präferenzdaten, außer dpo_beta, das MARLHF nicht verwendet
  • reward_model_name: Modell-Identifier für die Belohnung backbone; standardmäßig der actor-Modell-Identifier, falls verfügbar
  • reward_model_device: Belohnungsmodell-Gerät; standardmäßig "cuda:0" oder None, um das trainer-Gerät zu verwenden
  • reward_learning_rate, reward_num_train_epochs, reward_train_batch_size: Optimierungseinstellungen für das Belohnungsmodell
  • reward_max_length: Optionale token-Grenze für die kombinierte Eingabe des Belohnungsmodells
  • reward_freeze_backbone: Trainiert nur den skalaren Belohnungs-Head, wenn True
  • rl_algorithm: Backend für das Lernen der Richtlinien; standardmäßig "magrpo"
  • num_generations: Anzahl der Samples für das Lernen der Richtlinien pro Prompt und actor (die Gruppengröße); mindestens 2 für die MAGRPO-Familie oder mindestens 1 für MAAC/IAC
  • num_train_epochs, agent_learning_rate: Policy-Lernen mit epochs und Lernrate
  • rollout_buffer_size, train_batch_size: Puffer für Policy-Lernen mit rollout und Batch-Größen; train_batch_size verwendet standardmäßig rollout_buffer_size
  • critic_model_name, critic_learning_rate, critic_devices: Einstellungen für Critic als actor-critic Backend
  • critic_type: "v" oder "q" für ein actor-critic Backend
  • use_separate_critic: Wahl zwischen separatem critics oder actor-verbundenem value heads für IAC
  • value_loss_coef, value_clip_range: Critic Verlustgewicht und IAC geteilt-value-head Clipping, wie in Multi-Agent Actor-Critic
  • reference_kl_enabled, reference_kl_coef, reference_devices: Optionale, feste Regularisierung für Policy-Lernen

reward_model_name ist erforderlich, wenn actors Modellobjekte ohne Modell-ID sind. MAAC und separate critic IAC benötigen ebenfalls explizite critic-Quellen oder eine nutzbare critic-Modell-ID.

MADPO#

Mehr-Agenten-Direkte Präferenzoptimierung (MADPO) trainet die Richtlinien direkt aus den Präferenzpaaren, ohne ein Belohnungsmodell oder eine RL Stufe. Ihre Verlustfunktion kombiniert die Präferenzen aller Agenten margins, so dass jede Richtlinie aus dem Ergebnis des Teams lernt.

MADPO Trainingsablauf Die Agenten' margins auf jedem Präferenzpaar summieren sich zu einem gemeinsamen Verlust, der jede Richtlinie direkt aktualisiert.
Pairs Policy scores Joint loss UpdateEach agent Per agent No reward model

Die margin jedes Agenten ist die Differenz zwischen seinen Log-Wahrscheinlichkeiten für die gewinnende und die verlorene Antwort, und die gemeinsame margin summiert diese über alle Agenten:

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

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

wobei \( \eta>0 \) dpo_beta ist (Standard 0,1). Die Aufgabenbelohnung ordnet nur jedes Paar; die Verlustfunktion verwendet die Log-Wahrscheinlichkeiten der Richtlinien. Der Gradient für den Agenten \( i \) ist

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

Der Wert \( \sigma(-\eta\,\Delta_{\boldsymbol{\theta}}) \) hängt von der gemeinsamen Antwort des Teams margin ab, während der Gradient nur durch den eigenen \( i \) margin fließt. In jeder Batch berechnet trainer alle margins einmal ohne Gradienten, aktualisiert dann jeden Agenten mit seinem eigenen differenzierbaren margin plus den detacheten margins der anderen.

Das Ziel ist referenzfrei: die geerbten reference_kl_enabled, reference_kl_coef und reference_devices-Einstellungen fügen der MADPO-Verlustfunktion keine Referenzterme hinzu. Die Trainingsmetriken turn_1/reward_mean und turn_1/expected_return berechnen den Durchschnitt der Kandidatenbelohnungen, die bei der Erfassung der Paare aufgezeichnet wurden, und spiegeln daher nicht die aktualisierten Richtlinien wider

Der dezentrale Scorer schließt die letzte Vervollständigung token aus, nachdem Padding entfernt wurde, sodass jede Agents margin den Log-Wahrscheinlichheitswert dieser token nicht berücksichtigt. Der zentrale Scorer deckt die vollständige gemeinsame Vervollständigung ab.

MADPOConfig Parameter
  • num_agents: Anzahl der Agenten oder der Aufgabenrollen mit einem zentralen actor
  • collaboration_mode: "decentralized" (Standard) trainiert einen actor pro Agent; "centralized" trainiert einen actor, der die vollständige gemeinsame Antwort schreibt, und max_new_tokens deckt dann die gesamte gemeinsame Antwort ab
  • num_train_epochs: Optimierung epochs über die gesammelten Präferenzpaare
  • agent_learning_rate: Lernrate für Richtlinien
  • dpo_beta: Positiver Koeffizient für die gemeinsame margin (Standard 0,1)
  • train_batch_size: Anzahl der Präferenzpaare pro Update; Standard rollout_buffer_size
  • parallel_training, agent_devices: Modus für die Richtlinienausführung und Geräteplatzierung
  • eval_interval, eval_num_samples, eval_batch_size: Evaluationschema und Stichprobengrößen; MADPO zählt eval_interval in Präferenzaktualisierungen
  • logging_steps: Trainingsprotokolldauer
  • environment_steps_per_pair: Anzahl der Umgebungsschritte pro Präferenzpaar (Standard: 2)
  • Die Präferenzdaten-Einstellungen