Ir al contenido
CoMLRL
Aprendizaje por refuerzo multi-LLM RL

Aprendizaje multiagente Actor-Critic

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

Los métodos Actor-Critic (AC) son ampliamente utilizados métodos de gradiente de política que utilizan critics para apoyar el entrenamiento. Los métodos AC pueden lograr una varianza más baja y una mejor eficiencia de muestreo que REINFORCE, pero esto requiere un diseño y ajuste cuidadosos de critic para garantizar un entrenamiento estable. En el Aprendizaje por Refuerzo Multiagente (MARL), Actor-Critic incluyen Multiagente Actor-Critic (MAAC) y Independiente Actor-Critic (IAC).

Ambos lanzan los agentes conjuntamente y puntúan su respuesta conjunta con la función de recompensa, pero utilizan critics de forma diferente. MAAC entrena un critic con la historia conjunta, de modo que cada agente comparte su TD error. IAC entrena un critic por agente con la historia de ese agente, de modo que cada agente obtiene su propio TD error.

Flujo de entrenamiento de Actor-critic MAAC's centralizado critic otorga a todos los agentes lo mismo TD error; IAC's independiente critics otorga a cada agente lo propio.

MAAC#

El Aprendizaje Multiagente Actor-Critic (MAAC) utiliza un Centralizado Critic (CC) en los agentes para evaluar los valores de las historias conjuntas \( V_{\boldsymbol{\phi}}(\mathbf{h}_t) \) con critic_type="v", o de las parejas historia-acción conjuntas \( Q_{\boldsymbol{\psi}}(\mathbf{h}_t, \mathbf{a}_t) \) con critic_type="q". El critic recibe las indicaciones de los agentes unidas en una secuencia de texto única; el modo Q también incluye sus completaciones generadas. El gradiente de política de cada agente es:

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

donde \( \boldsymbol{\delta}_t = r_t + \gamma V_{\boldsymbol{\phi}}(\mathbf{h}_{t+1}) - V_{\boldsymbol{\phi}}(\mathbf{h}_{t}) \), y el critic se actualiza por:

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

Aquí, \( r_t \) es la recompensa procesada, con la penalización de referencia KL opcional restada cuando está habilitada; las recompensas pueden compartirse entre agentes o suministrarse por agente. La última vuelta recopilada, incluyendo una vuelta terminada prematuramente o de una sola vuelta rollout, utiliza la recompensa como objetivo, sin bootstrapping. La probabilidad del registro de finalización es la suma de las probabilidades de registro de las recompensas generadas token; se excluyen el prompt y el relleno tokens. La pérdida luego se promedia en muestras. Los búferes se agrupan por agente y vuelta antes de actualizar, y advantage_normalization normaliza los errores TD dentro de cada grupo. Los objetivos y ventajas permanecen fijos durante la actualización. El objetivo compartido critic se actualiza secuencialmente con cada lote de agentes, y value_loss_coef escala su pérdida.

En modo Q, la implementación utiliza el mismo peso TD-residual actor, con una acción siguiente muestreada en el bootstrapping. No implementa un objetivo actor separado ponderado directamente por Q o una línea de base solo de estado para Q.

MAACConfig Parámetros
  • num_agents: Número de agentes
  • num_turns: Número de vueltas
  • critic_type: Tipo de objetivo Critic (v para V(h), q para Q(h,a))
  • num_train_epochs: Número de muestras de entrenamiento epochs
  • agent_learning_rate: Tasa de aprendizaje para agentes
  • critic_learning_rate: Tasa de aprendizaje para el objetivo compartido critic
  • value_loss_coef: Peso en la pérdida critic
  • advantage_normalization: Si se normalizan las ventajas antes de las actualizaciones
  • rollout_buffer_size: Número de muestras a recopilar por agente antes de una actualización
  • train_batch_size: Tamaño del mini-batch dentro de cada actualización
  • max_new_tokens: Máximo tokens a generar por finalización
  • temperature: Temperatura para muestreo
  • top_p: Top-p para muestreo nuclear
  • top_k: Top-k para muestreo
  • num_generations: Número de generaciones por prompt por agente
  • external_prompt_passthrough: Si utilizar prompts externos directamente en el entrenamiento multi-turno
  • discount: Factor de descuento para la predicción critic del siguiente turno en los objetivos TD; expected_return utiliza recompensas sin descontar
  • early_termination_threshold: Un rollout termina después de un turno cuyo promedio de recompensa procesada excede este umbral; None deshabilita la parada temprana
  • eval_interval: Intervalo de evaluación (en lotes de entrenamiento)
  • eval_num_samples: Número de muestras de evaluación por intervalo
  • eval_batch_size: Tamaño del lote de evaluación DataLoader
  • logging_steps: Número mínimo de evaluaciones de recompensa de acciones conjuntas entre los registros de métricas de entrenamiento
  • parallel_training: none para un dispositivo o mp para la colocación explícita del agente/critic dispositivo
  • agent_devices, critic_devices: Asignación de dispositivos, requerida en el modo mp
  • reference_kl_enabled, reference_kl_coef: Si la penalización de recompensa de referencia congelada KL está habilitada, y su peso (deshabilitado por defecto)
  • reference_devices: Ubicación de dispositivo opcional para modelos de referencia
MAACTrainer Parámetros
  • agent_model o agents: Cadena identificadora del modelo Actor para agentes homogéneos, o lista de modelos de agente (el agente multi-agente agent_model debe ser una cadena)
  • critic_model o critics: Único compartido critic, suministrado como identificador, instancia de modelo o lista de 1 elemento
  • tokenizer: tokenizer compartido, o lista por agente cuando se utiliza agents; requerido con agents o una instancia de modelo, de lo contrario, cargado de agent_model
  • reward_func: Función que devuelve recompensas (requerido)
  • reward_processor: Procesador de recompensas opcional
  • formatters: Función única o lista para el formato de indicaciones por agente
  • args: Instancia de MAACConfig (opcional)
  • train_dataset: Conjunto de datos de entrenamiento (obligatorio)
  • eval_dataset: Conjunto de datos de evaluación (opcional)
  • model_config: Opciones de carga del modelo; critic_value_head_hidden_dim configura la configuración del critic del value head (opcional)
  • wandb_config: Configuración de registro de Weights & Biases (opcional)
  • metrics_callback: Callback opcional que toma muestras de rollout y devuelve un diccionario de métricas escalares
  • external_transition: Función de transición requerida cuando se utiliza num_turns > 1

MAAC actualiza las muestras recopiladas sin muestreo de importancia ni recorte de ratio de política. MAACConfig no tiene opción value_clip_range. El conjunto compartido critic utiliza el primer agente tokenizer, que debe ser compatible con critic

El trainer utiliza un entrenamiento fijo DataLoader tamaño del lote de 1. Para num_turns > 1, an external_transition y num_generations=1 son necesarios. train_batch_size por defecto rollout_buffer_size; las actualizaciones actuales utilizan las muestras disponibles en cada grupo de agente/turno, incluyendo grupos más pequeños cuando se vacían los búferes.

IAC#

Agente independiente Actor-Critic (IAC) optimiza la política de cada agente de forma independiente, utilizando respuestas conjuntas de múltiples agentes. Cada agente mantiene su propio actor y critic, y otros agentes sirven como parte del entorno. Las recompensas pueden ser compartidas o específicas del agente. critic se basa en el prompt/historial del agente en modo V, o en su prompt y finalización en modo Q. El gradiente de política para cada agente es:

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

donde \( \delta_{i,t} = r_t + \gamma V_{\phi_i}(h_{i,t+1}) - V_{\phi_i}(h_{i,t}) \). actor utiliza la misma pérdida promedio de muestra y la suma de finalizaciones de token como MAAC, con una normalización opcional dentro de cada grupo de agente/turno. actor en modo Q también utiliza este TD error.

CoMLRL soporta dos variantes de IAC:

  • Modelo separado Critic: Utiliza un modelo independiente para la estimación de valores. Los parámetros de Actor y critic se optimizan por separado, a costa de almacenar un modelo adicional por agente.

  • Modelo compartido: Adjunta un pequeño value head al transformador backbone, compartiendo las representaciones de historia (o historia-acción) del modelo actor para reducir los requisitos de espacio.

Los critics se actualizan minimizando el error de TD:

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

Cuando se utiliza un modelo compartido (use_separate_critic=False), actor y value head optimizan la pérdida de actor más la pérdida de critic ponderada por value_loss_coef. A menos que value_clip_range=None, se aplica un recorte de valor para mejorar la estabilidad del entrenamiento:

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

donde \( \hat{V}_t \) es el objetivo de TD, \( \epsilon \) es value_clip_range, y los errores se promedian en el mini-batch. Los modelos separados de critics utilizan el error cuadrático sin recortar.

IACConfig Parámetros
  • num_agents: Número de agentes
  • num_turns: Número de turnos
  • num_train_epochs: Número de pasos de entrenamiento de epochs
  • agent_learning_rate: Tasa de aprendizaje para los agentes
  • critic_learning_rate: Tasa de aprendizaje para critics separado; los modelos compartidos utilizan agent_learning_rate para actor y value head
  • value_loss_coef: Coeficiente para la pérdida de valor
  • value_clip_range: Rango de recorte de valor en modo de modelo compartido; None deshabilita el recorte
  • advantage_normalization: Si normalizar las ventajas
  • rollout_buffer_size: Número de muestras a recolectar antes de una actualización
  • train_batch_size: Tamaño del mini-batch para actualizaciones de la política
  • max_new_tokens: Número máximo de tokens a generar
  • temperature: Temperatura para muestreo
  • top_p: Top-p para muestreo nuclear
  • top_k: Top-k para muestreo
  • num_generations: Número de generaciones por prompt por agente
  • use_separate_critic: Si utilizar un modelo critic separado
  • critic_type: Tipo de objetivo Critic (v para V(h), q para Q(h,a))
  • critic_value_head_hidden_dim: Dimensión oculta para critic value head
  • value_head_hidden_dim: Dimensión oculta para value head en modo de modelo compartido
  • external_prompt_passthrough: Si utilizar indicaciones externas directamente en el entrenamiento de múltiples turnos
  • discount: Factor de descuento en los objetivos de TD; expected_return utiliza sumas de recompensas sin descuento
  • early_termination_threshold: Un rollout termina cuando la recompensa promedio procesada del turno excede este umbral; None desactiva la parada temprana
  • eval_interval: Intervalo de evaluación (en lotes de entrenamiento)
  • eval_num_samples: Número de muestras de evaluación por intervalo
  • eval_batch_size: Tamaño del lote de evaluación DataLoader
  • logging_steps: Número mínimo de evaluaciones de recompensa de acción conjunta entre los registros de métricas de entrenamiento
  • parallel_training: none para un dispositivo o mp para la colocación explícita del agente/critic
  • agent_devices, critic_devices: Asignaciones de dispositivos; mp requiere agent_devices y, para dispositivos separados critics, critic_devices
  • reference_kl_enabled, reference_kl_coef: Si se habilita la penalización de recompensa de referencia congelada KL y su peso (deshabilitado por defecto)
  • reference_devices: Dispositivo de referencia opcional
IACTrainer Parámetros
  • agent_model o agents: Cadena identificadora de modelo para agentes homogéneos, o lista de modelos de agente (el agente multi-agent_model debe ser una cadena)
  • critic_model o critics: Identificador de Critic, instancia de modelo, o lista de modelos de critic cuando se utiliza use_separate_critic=True
  • tokenizer: tokenizer compartido, o lista por agente cuando se utiliza agents; requerido con agents o una instancia de modelo, de lo contrario, cargado desde agent_model
  • reward_func: Función que devuelve una lista de flotantes (requerida)
  • reward_processor: Procesador opcional para aplicar a las recompensas
  • formatters: Función única o lista de funciones por agente para formatear los elementos del conjunto de datos en indicaciones
  • args: Instancia de IACConfig (opcional)
  • train_dataset: Conjunto de datos de entrenamiento (requerido)
  • eval_dataset: Conjunto de datos de evaluación (opcional)
  • model_config: Diccionario de configuración del modelo (opcional)
  • wandb_config: Configuración para el registro de Weights & Biases (opcional)
  • metrics_callback: Callback opcional que recibe muestras de rollout y devuelve un diccionario de métricas escalares
  • external_transition: Función de transición opcional requerida para el entrenamiento de múltiples turnos

IAC actualiza muestras sin muestreo de importancia ni recorte de ratio de política. En modo de modelo compartido (use_separate_critic=False), los value heads están asociados a los modelos actor; pasar critic_model o critics genera un error, y value_clip_range solo se aplica en este modo. Los agentes pueden ser homogéneos o heterogéneos. En modo separado (critic) (use_separate_critic=True), los usuarios pueden proporcionar una lista de critics de longitud num_agents o una única fuente critic_model para la transmisión. Instancias de modelo distintas o un identificador cargado por separado para cada critic mantienen sus parámetros independientes; reusar los parámetros de un objeto de modelo pre-cargado. Cada critic consume el actor de su token IDs, por lo que un modelo diferente critic debe ser compatible con el actor’s tokenizer.

El trainer utiliza un entrenamiento fijo DataLoader tamaño del lote de 1. Para num_turns > 1, an external_transition y num_generations=1 son necesarios. train_batch_size por defecto rollout_buffer_size; las actualizaciones actuales utilizan las muestras disponibles en cada grupo de agente/turno, incluyendo grupos más pequeños cuando se vacían los búferes.