Zum Inhalt springen
CoMLRL
Multi-LLM RL

Multi-Agent Actor-Critic

Automatisch übersetzt mit translategemma:4b Englisches Original

Actor-Critic (AC) Methoden sind weit verbreitete Policy-Gradient-Methoden, die critics zur Unterstützung des Trainings verwenden. AC-Methoden können eine geringere Varianz und eine bessere Stichprobeneffizienz als REINFORCE erreichen, erfordert dies aber eine sorgfältige Gestaltung und Abstimmung von critic, um ein stabiles Training zu gewährleisten. Im Multi-Agent Reinforcement Learning (MARL) umfassen Actor-Critic-Methoden Multi-Agent Actor-Critic (MAAC) und Independent Actor-Critic (IAC).

Beide führen die Agenten gemeinsam aus und bewerten ihre gemeinsame Antwort mit der Belohnungsfunktion, aber sie verwenden critics unterschiedlich. MAAC trainiert einen critic auf der gemeinsamen Historie, sodass jeder Agent seinen TD-Fehler teilt. IAC trainiert einen critic pro Agent auf der Historie dieses Agenten, sodass jeder Agent seinen eigenen TD-Fehler erhält.

Actor-critic Trainingsablauf MAAC's zentralisiertes critic gibt allen Agenten den gleichen TD-Fehler; IAC's unabhängiges critics gibt jedem Agenten seinen eigenen.

MAAC#

Multi-Agent Actor-Critic (MAAC) verwendet eine zentralisierte Critic (CC) über die Agenten hinweg, um die Werte von gemeinsamen Historien \( V_{\boldsymbol{\phi}}(\mathbf{h}_t) \) mit critic_type="v" oder von gemeinsamen Historie-Aktionspaaren \( Q_{\boldsymbol{\psi}}(\mathbf{h}_t, \mathbf{a}_t) \) mit critic_type="q" zu bewerten. Die critic empfängt die Agenten-Prompts, die zu einer einzelnen Textsequenz zusammengefügt wurden; der Q-Modus umfasst auch ihre generierten Vervollständigungen. Der Policy-Gradient jedes Agenten ist:

\[ \nabla_{\theta_i} J(\theta_i) = \mathbb{E}_{\boldsymbol{\pi}}\left[\sum_{t=0}^{H-1} \nabla_{\theta_i} \log \pi_{\theta_i}(a_{i,t}|h_{i,t})\,\boldsymbol{\delta}_t\right] \]

wobei \( \boldsymbol{\delta}_t = r_t + \gamma V_{\boldsymbol{\phi}}(\mathbf{h}_{t+1}) - V_{\boldsymbol{\phi}}(\mathbf{h}_{t}) \) und die critic aktualisiert wird durch:

\[ \mathcal{L}(\boldsymbol{\phi}) = \mathbb{E}_{\boldsymbol{\pi}}\left[\sum_{t=0}^{H-1} \big(r_t + \gamma V_{\phi}(\mathbf{h}_{t+1}) - V_{\phi}(\mathbf{h}_{t})\big)^2\right]. \]

Hier ist \( r_t \) das verarbeitete Belohnungsmodell, wobei die optionale Referenz-KL-Strafe bei Aktivierung abgezogen wird; Belohnungen können zwischen Agenten geteilt oder pro Agent bereitgestellt werden. Die finale, gesammelte Runde, einschließlich einer frühzeitig beendeten oder einer Ein-Runden-rollout, verwendet die Belohnung allein als Ziel, ohne Bootstrapping. Die Wahrscheinlichkeit des Abschlusses ist die Summe der generierten token-Log-Wahrscheinlichkeiten; der Prompt und das nachfolgende Padding tokens werden ausgeschlossen. Der Verlust wird dann über Samples gemittelt. Puffer werden nach Agent und Runde gruppiert, bevor sie aktualisiert werden, und advantage_normalization normalisiert die TD-Fehler innerhalb jeder solchen Gruppe. Ziele und Vorteile bleiben während der Aktualisierung unverändert. Das gemeinsam genutzte critic wird sequentiell mit jeder Agenten-Batch aktualisiert, und value_loss_coef skaliert seinen Verlust.

Im Q-Modus verwendet die Implementierung das gleiche TD-Residual-actor-Gewicht mit einer abgetasteten nächsten Aktion im Bootstrapping. Es implementiert kein separates actor-Ziel, das direkt durch Q oder eine Zustands-basierte Baseline für Q gewichtet wird.

MAACConfig Parameter
  • num_agents: Anzahl der Agenten
  • num_turns: Anzahl der Runden
  • critic_type: Critic-Zieltyp (v für V(h), q für Q(h,a))
  • num_train_epochs: Anzahl der Trainings-epochs
  • agent_learning_rate: Lernrate für Agenten
  • critic_learning_rate: Lernrate für das gemeinsam genutzte critic
  • value_loss_coef: Gewicht für critic-Verlust
  • advantage_normalization: Ob Vorteile vor der Aktualisierung normalisiert werden sollen
  • rollout_buffer_size: Anzahl der Samples, die pro Agent vor einer Aktualisierung gesammelt werden
  • train_batch_size: Mini-Batch-Größe innerhalb jeder Aktualisierung
  • max_new_tokens: Maximaler tokens, der pro Vervollständigung generiert werden kann
  • temperature: Temperatur für das Sampling
  • top_p: Top-p für Nucleus-Sampling
  • top_k: Top-k für Sampling
  • num_generations: Anzahl der Generationen pro Prompt pro Agent
  • external_prompt_passthrough: Ob externe Prompts direkt im mehrstufigen Training verwendet werden sollen
  • discount: Diskontfaktor für die Vorhersage des nächsten Schritts critic in TD-Zielen; expected_return verwendet nicht diskontierte Summen von Belohnungen
  • early_termination_threshold: Ein rollout endet nach einer Runde, deren durchschnittliche verarbeitete Belohnung diesen Schwellenwert überschreitet; None deaktiviert das frühe Stoppen
  • eval_interval: Evaluationsintervall (in Trainings-Batches)
  • eval_num_samples: Anzahl der Evaluationssamples pro Intervall
  • eval_batch_size: Bewertung DataLoader Batch-Größe
  • logging_steps: Minimal Anzahl von gemeinsamen Aktions-Belohnungsbewertungen im Trainings-Metrik-Log
  • parallel_training: none für ein Gerät oder mp für explizite Agenten-/critic-Geräteplatzierung
  • agent_devices, critic_devices: Gerätezuweisungen, erforderlich im mp-Modus
  • reference_kl_enabled, reference_kl_coef: Ob die eingefrorene KL-Belohnungsstrafe aktiviert ist und ihr Gewicht (standardmäßig deaktiviert)
  • reference_devices: Optionale Geräteplatzierung für Referenzmodelle
MAACTrainer Parameter
  • agent_model oder agents: Actor-Modell-Identifier-String für homogene Agenten oder Liste von Agentenmodellen (für Multi-Agenten agent_model muss ein String sein)
  • critic_model oder critics: Erforderliche einzelne gemeinsame critic, die als Identifier, Modellinstanz oder 1-Element-Liste angegeben wird
  • tokenizer: Gemeinsame tokenizer oder eine Agenten-Liste, wenn agents verwendet wird; erforderlich mit agents oder einer Modellinstanz, andernfalls aus agent_model geladen
  • reward_func: Aufruf, der Belohnungen zurückgibt (erforderlich)
  • reward_processor: Optionale Belohnungs-Post-Processor
  • formatters: Einzelner Aufruf oder Liste für Agenten-spezifische Prompt-Formatierung
  • args: Instanz von MAACConfig (optional)
  • train_dataset: Trainingsdatensatz (erforderlich)
  • eval_dataset: Optionaler Evaluationsdatensatz
  • model_config: Optionen zum Laden des Modells; critic_value_head_hidden_dim konfiguriert die zentrale critic’s value head (optional)
  • wandb_config: Weights & Biases-Protokollierungskonfiguration (optional)
  • metrics_callback: Optionaler Callback, der rollout-Beispiele entgegennimmt und ein Wörterbuch mit Skalarwerten zurückgibt
  • external_transition: Benötigte Übergangsfunktion, wenn num_turns > 1

MAAC aktualisiert die gesammelten Beispiele ohne Importance Sampling oder Policy-Ratio Clipping. MAACConfig hat keine value_clip_range-Option. Das gemeinsame critic verwendet das tokenizer des ersten Agenten, das mit dem critic-Modell kompatibel sein muss.

Das trainer verwendet eine feste Trainings-DataLoader-Batchgröße von 1. Für num_turns > 1 sind external_transition und num_generations=1 erforderlich. train_batch_size verwendet standardmäßig rollout_buffer_size; tatsächliche Updates verwenden die verfügbaren Beispiele in jeder Agenten-/Turn-Gruppe, einschließlich kleinerer Gruppen, wenn Puffer geleert werden.

IAC#

Unabhängiger Actor-Critic (IAC) optimiert die Politik jedes Agenten unabhängig, während er gemeinsame Antworten aus mehreren Agenten verwendet. Jeder Agent behält seine eigene actor und critic bei, und andere Agenten dienen als Teil der Umgebung. Belohnungen können geteilt oder agentenspezifisch sein. Das critic ist auf den Prompt/die Historie des Agenten im V-Modus oder auf den Prompt und die Vervollständigung im Q-Modus angewiesen. Der Policy-Gradient für jeden Agenten ist:

\[ \nabla_{\theta_i} J(\theta_i) = \mathbb{E}_{\boldsymbol{\pi}}\left[\sum_{t=0}^{H-1} \nabla_{\theta_i} \log \pi_{\theta_i}(a_{i,t}|h_{i,t})\,\delta_{i,t}\right] \]

wobei \( \delta_{i,t} = r_t + \gamma V_{\phi_i}(h_{i,t+1}) - V_{\phi_i}(h_{i,t}) \). Das actor verwendet den gleichen sample-averaged Loss und Completion-token-Summe wie MAAC, mit optionaler Normalisierung innerhalb jeder Agenten-/Turn-Gruppe. Das Q-Modus actor verwendet auch diesen TD-Fehler.

CoMLRL unterstützt zwei Varianten von IAC:

  • Unabhängiges Critic: Verwendet ein unabhängiges Modell zur Wertschätzung. Die Parameter von Actor und critic werden separat optimiert, was mit dem Speichern eines zusätzlichen Modells pro Agent verbunden ist.

  • Gemeinsames Modell: Fügt ein kleines value head zu dem Transformer backbone hinzu und teilt die historischen Darstellungen (oder Darstellungen von Historie-Aktion) des actor, um den Speicherbedarf zu reduzieren.

Die critics werden aktualisiert, indem der TD-Fehler minimiert wird:

\[ \mathcal{L}(\phi_i) = \mathbb{E}_{\boldsymbol{\pi}}\left[\sum_{t=0}^{H-1} \big(r_t + \gamma V_{\phi_i}(h_{i,t+1}) - V_{\phi_i}(h_{i,t})\big)^2\right]. \]

Bei Verwendung eines gemeinsamen Modells (use_separate_critic=False) optimieren actor und value head den actor-Verlust sowie den critic-Verlust, gewichtet durch value_loss_coef. Es wird ein Wert-Clipping angewendet, um die Trainingsstabilität zu verbessern, es sei denn, value_clip_range=None.

\[ L(\phi_i) = \max\Big( (V_{\phi_i}(h_t) - \hat{V}_t)^2,\ (V_{\phi_i}^{\text{clip}}(h_t) - \hat{V}_t)^2 \Big) \\ V_{\phi_i}^{\text{clip}}(h_t) = V_{\phi_i}^{\text{old}}(h_t) + \mathrm{clip}(V_{\phi_i}(h_t) - V_{\phi_i}^{\text{old}}(h_t), -\epsilon, \epsilon), \]

wobei \( \hat{V}_t \) das Ziel ist TD, \( \epsilon \) ist value_clip_range, und die Fehler werden über den Mini-Batch gemittelt. Separate critics verwenden den ungeklappten quadratischen Fehler.

IACConfig Parameter
  • num_agents: Anzahl der Agenten
  • num_turns: Anzahl der Turns
  • num_train_epochs: Anzahl der Trainings-epochs
  • agent_learning_rate: Lernrate für Agenten
  • critic_learning_rate: Lernrate für das separate critics; gemeinsame Modelle verwenden agent_learning_rate für actor und value head
  • value_loss_coef: Koeffizient für Wertverlust
  • value_clip_range: Wert-Clipping-Bereich im gemeinsamen-Modus; None deaktiviert Clipping
  • advantage_normalization: Ob Vorteile normalisiert werden sollen
  • rollout_buffer_size: Anzahl der Samples, die vor einem Update gesammelt werden
  • train_batch_size: Mini-Batch-Größe für Policy-Updates
  • max_new_tokens: Maximale Anzahl neuer tokens, die generiert werden können
  • temperature: Temperatur für Sampling
  • top_p: Top-p für Nucleus-Sampling
  • top_k: Top-k für Sampling
  • num_generations: Anzahl der Generationen pro Prompt pro Agent
  • use_separate_critic: Ob ein separates critic-Modell verwendet werden soll
  • critic_type: Critic Zieltyp (v für V(h), q für Q(h,a))
  • critic_value_head_hidden_dim: Versteckte Dimension für critic value head
  • value_head_hidden_dim: Versteckte Dimension für value head im shared-model Modus
  • external_prompt_passthrough: Ob externe Prompts direkt im mehrstufigen Training verwendet werden sollen
  • discount: Diskontfaktor in TD-Zielen; expected_return verwendet ungezogene Belohnungssummen
  • early_termination_threshold: Ein rollout endet, wenn der durchschnittliche verarbeitete Belohnungswert einer Runde diesen Schwellenwert überschreitet; None deaktiviert das frühe Stoppen
  • eval_interval: Evaluationsintervall (in Trainingsbatches)
  • eval_num_samples: Anzahl der Evaluationsbeispiele pro Intervall
  • eval_batch_size: Evaluationsgröße für DataLoader
  • logging_steps: Minimale Anzahl von gemeinsamen-Aktions-Belohnungs-Evaluierungen zwischen Trainingsmetrik-Logs
  • parallel_training: none für ein Gerät oder mp für explizite Platzierung von Agenten/critic
  • agent_devices, critic_devices: Gerätezuweisungen; mp erfordert agent_devices und, für separate critics, critic_devices
  • reference_kl_enabled, reference_kl_coef: Ob die deaktivierte KL-Belohnungsstrafe aktiviert ist und ihr Gewicht (standardmäßig deaktiviert)
  • reference_devices: Optionale Geräteplatzierung für Referenzmodelle
IACTrainer Parameter
  • agent_model oder agents: Modell-Identifier-String für homogene Agenten, oder Liste von Agentenmodellen (multi-Agent agent_model muss ein String sein)
  • critic_model oder critics: Critic-Identifier, Modellinstanz, oder Liste von critic-Modellen, wenn use_separate_critic=True verwendet wird
  • tokenizer: Gemeinsame tokenizer, oder eine Liste pro Agent, wenn agents verwendet wird; erforderlich mit agents oder einer Modellinstanz, andernfalls aus agent_model geladen
  • reward_func: Aufruf, der eine Liste von Fließkommazahlen zurückgibt (erforderlich)
  • reward_processor: Optionale Prozessor für die Anwendung auf Belohnungen
  • formatters: Einzelner Aufruf oder Liste von Agenten-Aufrufen zur Formatierung von Datensatz-Elementen in Prompts
  • args: Instanz von IACConfig (optional)
  • train_dataset: Trainingsdatensatz (erforderlich)
  • eval_dataset: Evaluationsdatensatz (optional)
  • model_config: Modellkonfigurations-Dictionary (optional)
  • wandb_config: Konfiguration für das Protokollieren von Weights & Biases (optional)
  • metrics_callback: Optionaler Callback, der rollout-Beispiele entgegennimmt und ein Dictionary mit Skalarwerten zurückgibt
  • external_transition: Optionaler Übergangsfunktion erforderlich für das mehrstufige Training

IAC Aktualisierungen der gesammelten Samples ohne Importance Sampling oder Policy-Ratio-Clipping. Im gemeinsamen-Modus (use_separate_critic=False), value heads sind an die actor Model angehängt; das Übergeben von critic_model oder critics führt zu einem Fehler, und value_clip_range gilt nur in diesem Modus. Agenten können homogen oder heterogen sein. Im separaten-critic Modus (use_separate_critic=True), können Benutzer eine critics Liste mit der Länge num_agents oder eine einzelne critic_model Quelle für die Verbreitung angeben. Unterschiedliche Model-Instanzen oder ein Identifier, der separat geladen wurde für jedes critic behalten ihre Parameter unabhängig; das Verbreiten eines vorgefertigten Model-Objekts verwendet seine Parameter wieder. Jedes critic verbraucht seine actor’s token IDs, sodass ein anderes critic Model kompatibel mit diesem actor’s tokenizer.

trainer verwendet eine feste Trainings-DataLoader-Batchgröße von 1. Für num_turns > 1 sind external_transition und num_generations=1 erforderlich. train_batch_size verwendet standardmäßig rollout_buffer_size; tatsächliche Updates verwenden die verfügbaren Samples in jeder Agenten-/Turn-Gruppe, einschließlich kleinerer Gruppen, wenn Puffer geleert werden.