본문으로 이동
CoMLRL
Multi-LLM RL

여러 LLM 와 PbRL

translategemma:4b 자동 번역 영어 원문

다중 에이전트 PbRL는 공동 응답 간의 선호도를 사용하여 협력하는 LLM 에이전트를 훈련합니다. CoMLRL는 작업 항목과에서 선호 데이터 세트를 구축하고 다음 두 알고리즘 중 하나를 사용하여 학습합니다: MARLHF는 공동 보상 모델을 맞추고, RL를 사용하여 정책을 훈련하고, MADPO는 선호도에서 직접 정책을 최적화합니다. MARLHFTrainer, MADPOTrainer, 그리고 반복적인 변형인 MARLHFIterTrainer 및 MADPOIterTrainer는 comlrl.trainers.preference에서 사용할 수 있습니다.

현재 모든 trainers 는 num_turns=1 과 일치하는 공동 응답 (joint_mode="aligned") 을 필요로 합니다. 반복적인 trainers 의 한 반복은 데이터 수집 및 훈련의 1회이며, 대화 턴이 아닙니다.

선호 데이터#

각 에이전트 \( i\in\mathcal{I}=\{1,\ldots,n\} \) 는 자체의 로컬 기록에서 \( a_{i,t}\sim\pi_{\theta_i}(\cdot\mid h_{i,t}) \) 를 샘플링하고, 응답은 공동 행동 \( \mathbf{a}_t=\{a_{1,t},\ldots,a_{n,t}\} \) 와 공동 기록 \( \mathbf{h}_t \) 를 형성합니다. 단일 턴 (\( H=1 \)) 에서, \( h_{i,0} \) 는 에이전트 \( i \) 의 프롬프트이고, \( \mathbf{a}_0 \) 는 공동 응답입니다.

사용자는 작업 항목을 제공하며, 선호 데이터가 아닙니다. trainers 는 공동 응답을 샘플링하고, 오라클 함수로 점수를 매기고, 점수를 선호 쌍으로 변환합니다.

오라클 함수#

오라클 함수는 각 공동 응답에 대해 하나의 공유된 값을 점수합니다. 기본적으로는 reward_func 작업 보상이며, 선택적으로 reward_processor 다음에 따라갈 수 있습니다. 또한, 학습 초기화에 설명된 규칙을 따르거나 LLM 보상 모델을 호출할 수 있습니다. 두 알고리즘은 공동 응답 중 승리한 것만 학습하므로, 점수 값은 단순히 쌍을 선택하는 데만 중요합니다. MARLHFIterTrainer에서, preference_scoring_reward="reward_model"는 새로운 비교에 대해 가장 최근에 적합한 보상 모델을 오라클로 사용하며, 해당 모델이 존재하지 않을 경우 작업 보상을 백업으로 사용합니다.

선호 기준#

각 작업 항목에 대해, 각 에이전트는 자신의 프롬프트에 대해 preference_num_candidates 응답을 샘플링하고, 동일한 후보 인덱스를 가진 응답들은 공동 응답을 형성합니다. 서로 다른 점수를 가진 두 개의 공동 응답 중, 더 높은 점수를 가진 응답이 선호됩니다: 이는 승리하는 응답 \( w \)이고, 다른 응답은 패배하는 응답 \( l \)입니다. 무승부는 제거됩니다. pair_selection 와 preference_pairs_per_sample 는 각 작업에 어떤 쌍을 유지할지 결정합니다. 반복적인 훈련에서, 각 비교는 현재 에이전트의 공동 응답과 동일한 후보 인덱스에 있는 비교기의 공동 응답 간에 이루어지며, 어느 쪽이든 승리할 수 있습니다.

Preference Data 매개변수
  • preference_num_candidates: 작업별 샘플링된 후보 및 actor; 최소 2 (기본값 80)
  • preference_pairs_per_sample: 작업별 유지되는 최대 쌍 또는 None (제한 없음) (기본값 16)
  • pair_selection: "reward_gap" (기본값)은 가장 큰 보상 격차를 가진 쌍을 유지하고, "random"는 무작위 부분 집합, "all"는 모든 묶이지 않은 쌍을 유지하며, 이를 위해 preference_pairs_per_sample=None가 필요합니다. 반복적인 trainers는 "comparator_reward"를 추가하며, 이는 기본적으로 더 높은 비교 보상을 선호하고, 그 다음 더 큰 보상 격차를 선호합니다.
  • max_new_tokens, temperature, top_p, top_k: 후보 생성 설정

데이터 형식#

쌍 \( (\mathbf{h}_H^{w},\mathbf{h}_H^{l}) \)는 하나의 작업의 두 개의 공동 기록을 포함합니다. 각 쌍은 다음 형식의 레코드로, 각 목록의 각 에이전트에 대한 항목이 하나씩 있습니다:

{
  "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 및 loser_reward는 두 개의 공동 응답의 오라클 점수를 나타내고, candidate_reward_mean는 작업에 대해 비교된 후보의 평균 점수를 나타냅니다. 마지막 세 필드는 반복적인 훈련에서 비롯됩니다: raw_rewards는 reward_processor 이전의 승자와 패자의 점수를 포함하고, target_raw_reward 및 comparator_raw_reward는 현재 에이전트의 샘플과 비교기의 샘플의 점수를 포함합니다. 반복적인 trainers는 각 라운드의 쌍을 iteration_0001.json, iteration_0002.json 등으로 preference_replay_dir 아래에서 씁니다. {"iteration": 1, "num_pairs": ..., "pairs": [...]}.

훈련 파이프라인#

LLM 기반의 협력 멀티 에이전트 시스템을 훈련하는 방법은 PbRL가 현재 에이전트로부터 선호 데이터를 수집하고, MARLHF 또는 MADPO를 사용하여 이를 학습하는 것을 반복합니다.

  • 기본 trainers (MARLHFTrainer, MADPOTrainer)는 쌍을 한 번 수집한 다음, 훈련합니다. 작업이 묶이지 않은 쌍을 생성하지 않으면 훈련은 정책을 업데이트하지 않고 종료됩니다.
  • 반복적 trainers (MARLHFIterTrainer, MADPOIterTrainer) 반복을 num_iterations 라운드. 라운드 \( \nu \) 현재 에이전트와 비교 비교기, 새로운 쌍을 저장 \( \mathcal{D}^{(\nu)} \), 재생 버퍼 학습 쌍을 선택 이 라운드와 이전 라운드에서, 그리고 학습 \( \mathcal{B}^{(\nu)} \) 업데이트를 실행. MADPO 각 라운드마다 num_train_epochs 새로 초기화된 보상 모델에 맞추고, 정책 학습을 실행. MARLHF 새로 초기화된 보상 모델에 맞추고, 정책 학습을 실행.
한 번의 반복적인 학습 라운드 작업 보상은 각 비교를 비교기와의 비교를 선호 쌍으로 만듭니다. 재연습은 이 라운드와 이전 라운드에서 학습 쌍을 선택하고, MADPO 또는 보상 모델 다음에 RL이 다음 정책을 생성합니다.
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

평가는 항상 현재 정책에서 샘플링하고 작업 보상(reward_func 및 reward_processor)으로 점수를 매깁니다. 학습된 보상 모델을 사용하지 않습니다.

PbRL Trainer 매개변수
  • agent_model 또는 agents: 동종 에이전트의 모델 식별자, 또는 모델 식별자 또는 인스턴스의 목록
  • num_agents: 에이전트 또는 작업 역할의 수; args.num_agents와 일치해야 합니다
  • tokenizer: 하나의 tokenizer, 또는 actor당 하나
  • train_dataset: 선호도 수집 및, MARLHF의 경우, 정책 학습을 위한 작업 항목
  • eval_dataset: 선택 사항인 평가 데이터 세트
  • reward_func: 필요한 호출 가능한 함수로, 정렬된 공동 응답당 하나의 공유 작업 보상을 반환합니다
  • reward_processor: 작업 보상의 선택 사항인 후처리
  • formatters: 모든 역할에 공유되는 프롬프트 포맷터, 또는 역할별 포맷터 목록
  • args: trainer의 구성 인스턴스
  • model_config: 선택적 모델 로딩 구성
  • wandb_config: 선택적 Weights & Biases 구성
  • eval_logger, eval_aggregator: 선택적 평가 지표 훅, MAGRPOTrainer과 유사
  • centralized_comparator_adapter: 중앙 집중식 actor 또는 비교기를 위한 공동 프롬프트 빌더 및 역할 파서; 기본적으로 인덱싱된 <agent_0>...</agent_0> 섹션을 작성
  • critic_model 또는 critics (MARLHF만 해당): MAAC 또는 IAC 백엔드용 선택적 critic 소스. critic_model는 모델 식별자 문자열이어야 합니다. 사용자는 critics를 사용하여 로드된 모델 인스턴스를 제공할 수 있으며, MAAC 또는 actor에 대해 한 요소 목록 또는 critic, IAC에 대해 별도의 항목을 사용할 수 있습니다. 명시적인 소스가 없으면 critic_model_name 또는 actor 모델 식별자가 사용됩니다
  • metrics_callback (MARLHF만 해당): actor-critic 백엔드용 선택적 사용자 지정 지표 콜백
MADPOIterConfig 매개변수
  • MADPOConfig를 상속; num_train_epochs는 각 반복에 적용
  • num_iterations: 수집 및 훈련 라운드 수 (기본값 6)
  • 비교 및 재연 설정: 비교 및 재연 버퍼에서 설명
MARLHFIterConfig 매개변수
  • MARLHF 설정과 num_iterations 및 비교 및 재연 설정을 결합
  • preference_scoring_reward: "task" (기본) 레이블은 새로운 비교를 작업 보상과 연결; "reward_model"는 이전 반복의 보상 모델을 사용합니다.
  • reward_num_train_epochs: 보상 모델 훈련 epochs 각 반복 (기본값 2)

비교기#

반복 훈련에서, 비교기는 각 비교의 다른 한쪽을 제공합니다. 현재 에이전트와 비교기는 동일한 작업을 수행하며, 오라클 함수에서 명확한 승자가 있는 동일 인덱스 비교는 쌍으로 구성됩니다.

비교 쌍 현재 actors 와 동일한 작업의 비교기 샘플; 작업 보상은 양방향 모두에서 동일한 인덱스 비교를 결정하고, 결정된 비교는 반복의 선호 쌍을 형성합니다.
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는 비교기의 소스를 선택합니다:

  • comparator_policy="current" (기본): 활성 actor 가중치, 별도의 난수 스트림으로 샘플링됩니다.

  • comparator_policy="current_copy": 현재 actor 가중치, comparator_devices로 복사하여 actor 장치와 다른 경우 각 수집 단계에 대해.

  • comparator_policy="model": comparator_model_name 또는 comparator_agents에서 가져온 명시적 모델.

  • comparator_policy="history": comparator_history_k 반복에서 저장된 actor 체크포인트; 초기 정책은 하나가 존재하는 경우까지.

  • comparator_policy="api": 원격 모델 엔드포인트.

history 소스는 정책 체크포인트를 자동으로 저장합니다. 두쪽은 서로 다른 수의 후보를 샘플링할 수 있습니다; 동일한 인덱스가 존재하는 경우에만 비교하며, pair_selection="comparator_reward"는 비교기가 승리한다고 가정하지 않습니다. 기본적으로, 비교기는 각 역할에 대해 하나의 응답을 생성합니다. comparator_generation_mode="centralized"를 사용하면, 하나의 비교기 모델이 모든 역할의 응답을 단일 공동 응답에 작성하여, 쌍이 구성되기 전에 역할 응답으로 파싱됩니다.

Comparator 매개변수
  • comparator_policy: "current", "current_copy", "model", "history", 또는 "api"
  • comparator_num_candidates: 비교기 샘플 개수; 기본값은 preference_num_candidates
  • comparator_model_name 또는 comparator_agents: 공유 모델 소스, 또는 각 역할에 하나씩, "model"
  • comparator_history_k: "history"를 위한 반복 횟수; 기본값은 1
  • comparator_devices: 로컬 비교기 모델용 장치 배치
  • comparator_generation_mode: "decentralized" (기본) 또는 "centralized"
  • comparator_centralized_agent_index: actor, 체크포인트, 또는 모델이 중앙 비교기의 공동 응답을 작성하는 역할; 기본값은 0, 이는 중앙 actor가 필요
  • policy_checkpoint_dir: 선택 사항인 actor-체크포인트 위치; 이를 설정하면 다른 소스에 대한 체크포인트도 저장

모델 소스는 모델 저장소 또는 로컬 체크포인트일 수 있으며, 학습 엔티티에서 설명된 대로

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

API 비교기#

comparator_policy="api"를 사용하면 비교기가 원격 모델을 쿼리합니다. comparator_api_format는 요청 형식을 선택합니다:

  • comparator_api_format="generic" (기본): 요청에는 프롬프트, actor 인덱스, 작업 항목, 후보 개수, 및 생성 설정이 포함됩니다; 완료는 comparator_api_response_field에서 읽습니다.

  • comparator_api_format="openai": 챗 컴플리션, DeepSeek 와 같은 호환 가능한 엔드포인트에서 사용되기도 함.

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

  • comparator_api_format="openai_responses" (별칭 responses 또는 codex): OpenAI 응답 API (https://api.openai.com/v1/responses, OPENAI_API_KEY).

Anthropic 및 Responses 형식에는 n 매개변수가 없으므로, 각 후보에 대해 하나의 요청만 전송합니다. 요청은 표준 중앙 집중식 또는 분산형 비교 프로ンプ트를 사용합니다.

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 매개변수
  • comparator_api_url: 엔드포인트 URL; "api" 에 필요
  • comparator_api_format: "generic" (기본값), "openai", "anthropic", 또는 "openai_responses"
  • comparator_api_model: 엔드포인트로 전달되는 모델 이름
  • comparator_api_key_env 또는 comparator_api_key: 키를 포함하는 환경 변수, 또는 키 자체
  • comparator_api_headers: 추가 요청 헤더
  • comparator_api_key_header, comparator_api_key_prefix: 인증 헤더 및 접두사; 기본 "Authorization" 및 "Bearer", Anthropic 헤더를 기본적으로 처리
  • comparator_api_timeout: 요청 시간 초 (초 단위); 기본값 120
  • comparator_api_max_n_per_request: 채팅 완료 호출당 최대 후보 수, n 제한을 받는 엔드포인트에 적용
  • comparator_api_response_field: 일반 응답의 Completions 필드; 기본값 "completions"
  • comparator_api_extra_body: 추가 요청 본문 필드

재생 버퍼#

재생 버퍼는 각 라운드에서 훈련에 사용될 저장된 쌍을 선택합니다. 현재 라운드의 데이터 세트를 먼저 저장하여, 이전 라운드와 함께 사용할 수 있습니다. preference_replay_mode는 어떤 라운드가 사용할 수 있는지 설정합니다:

  • preference_replay_mode="current" (기본): 현재 라운드의 모든 쌍, 역사적 샘플링 없이

  • preference_replay_mode="nearest_k": 최신 preference_replay_k 비어 있지 않은 라운드 데이터 세트, 현재 데이터 세트 포함.

  • preference_replay_mode="all_history": 현재 trainer 실행의 모든 비어 있지 않은 라운드 데이터 세트

  • preference_replay_mode="lambda_decay": 동일한 역사, 최근 라운드에 가중치 부여

그림의 각 행은 모드가 사용할 수 있는 라운드 데이터 세트와 각 세트의 강도를 보여줍니다. 가장 최근의 라운드는 오른쪽에 있습니다.

재연습 모드 각 재연습 모드가 어떤 5 라운드 데이터 세트에서 가져오고, 어떤 가중치로 가져오는지, 그리고 그 가중치로 학습 쌍을 샘플링하기 전에,
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는 가장 최근의 라운드를 의미하며, 근접 이웃 검색이 아닙니다. nearest_k 및 all_history에서, 사용 가능한 데이터 세트는 크기에 관계없이 동일한 가중치를 가집니다. 역사적 모드는 저장된 모든 쌍을 훈련하는 대신, 이들을 샘플링합니다. 저장된 라운드 파일에서 재연된 쌍은 다시 토큰화됩니다. preference_replay_dir를 이전 실행으로 설정하는 것만으로는 해당 파일이 가져오지 않지만, 훈련 체크포인트는 재연 인덱스와 데이터를 복원합니다.

람다 감쇠#

나이가 많은 \( a=0 \) 데이터셋을 사용하여 \( K \) 및 preference_replay_lambda (\( \lambda \)) 데이터셋을 선택하는 가중치를 설정합니다:

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

\( \lambda=0 \)는 최신 데이터셋만 유지하며, 작은 값은 최근 라운드를 선호하고, \( \lambda=1 \)는 모든 데이터셋에 동일한 가중치를 부여합니다.

샘플링#

역사적 모드는 각 preference_replay_sample_size 샘플을 가중치에 따라 데이터셋에 할당한 다음, 각 데이터셋 내에서 쌍을 샘플링합니다. 할당된 수가 데이터셋 크기를 초과하지 않는 경우, 샘플링은 중복 없이 진행됩니다. 더 큰 수는 셔플된 복사본을 순환합니다. 결합된 샘플은 셔플됩니다. 기본 샘플 크기는 현재 라운드의 쌍 수이거나, 현재 라운드가 비어 있는 경우 가장 최근 비어 있지 않은 데이터셋의 크기입니다.

Replay Buffer 매개변수
  • preference_replay_mode: "current" (기본), "nearest_k", "all_history", 또는 "lambda_decay"
  • preference_replay_k: "nearest_k"에 사용되는 최근 비어 있지 않은 데이터셋 수; 이 모드에서는 필요합니다.
  • preference_replay_lambda: [0, 1] 범위의 감쇠 매개변수; "lambda_decay"에 필요합니다.
  • preference_replay_sample_size: 역사적 모드에서 샘플링된 쌍 또는 None를 기본값으로 사용합니다.
  • preference_replay_dir: 저장된 라운드 데이터셋의 선택적 위치

current는 preference_replay_sample_size 및 preference_replay_lambda를 거부하고 preference_replay_k만 None 또는 1로 허용합니다. 다음 구성은 모든 라운드에서 256개의 쌍을 샘플링하며, 최근 라운드로 가중치를 부여합니다:

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는 동일한 옵션을 허용합니다. 가장 최근 라운드만 재생하려면, 사용자는 preference_replay_mode="nearest_k" 및 라운드 수를 preference_replay_k를 통해 설정할 수 있습니다.

MARLHF#

인간 피드백 기반 다중 에이전트 강화 학습 (MARLHF)은 선호 쌍에 대한 공동 보상 모델을 학습하고, 학습된 보상을 사용하여 RL를 사용하여 정책을 훈련합니다. 보상 모델은 팀의 전체 응답을 평가하므로, 별도의 actors는 공유된 보상에서 학습합니다.

MARLHF 학습 흐름 선호 쌍은 공동 보상 모델에 맞고, 이 모델의 고정된 점수는 RL를 사용하여 두 정책을 훈련합니다.
1 · Reward learning 2 · Policy learning Pairs Reward model New samples Shared reward RL update Agents Frozen

보상 학습#

JointRewardModel 와 \( \widetilde{R}_{\psi}(\mathbf{h}_t,\mathbf{a}_t) \) 는 모든 에이전트의 프롬프트와 응답을 하나의 텍스트로 읽고, 인과적 모델 LM 와 backbone 의 마지막 은닉 상태를 최종 패딩되지 않은 상태 token 에 대해 스칼라 헤드를 적용합니다. 이는 다음 훈련 쌍 \( \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], \]

여기서 \( \sigma \) 는 시그모이드 함수입니다. 손실은 승자의 점수를 패자의 점수에 비해 높입니다. 이는 작업 보상으로 되돌아가지 않습니다. 학습 대상 은 보상 모델이 어떻게 로드되는지 설명합니다.

정책 학습#

보상 학습 후, \( \widetilde{R}_{\psi} \) 가 고정되어 작업 보상의 역할을 수행합니다. 정책은 각 작업에 대해 새로운 공동 응답을 샘플링하고, \( \widetilde{R}_{\psi} \) 는 기울기가 없는 방식으로 점수를 매기고, MARL 백엔드는 학습된 보상을 최대화하기 위해 각 에이전트의 정책을 업데이트합니다:

\[ 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 는 백엔드를 선택합니다:

  • rl_algorithm="magrpo" (기본): MAGRPO, 그룹 평균 기반을 사용합니다.

  • rl_algorithm="mareinforce": MAREINFORCE, 원시 보상을 사용합니다.

  • rl_algorithm="marloo": MARLOO, leave-one-out 기반을 사용합니다.

  • rl_algorithm="maremax": MAReMax, 그룹 최대 기반을 사용합니다.

  • rl_algorithm="maac": MAAC, 중앙 집중식 critic 과 함께 사용 가능

  • rl_algorithm="iac": IAC, actor 또는 critics 또는 연결된 value heads 과 함께 사용 가능.

다중 에이전트 REINFORCE 및 다중 에이전트 Actor-Critic는 이러한 업데이트를 설명하며, \( \widetilde{R}_{\psi}(\mathbf{h}_t,\mathbf{a}_t) \)가 \( r_t \)를 대체합니다. 선택적인 정지된 참조 KL 정규화(reference_kl_enabled, reference_kl_coef, reference_devices)는 정책 학습에만 적용됩니다: 각 에이전트의 샘플링된 KL 추정치, reference_kl_coef로 스케일링된 값은 보상 신호에서 뺴집니다.

MARLHFConfig 매개변수
  • MADPOConfig 및 선호 데이터 설정 상속, dpo_beta 는 MARLHF 에서 사용되지 않음
  • reward_model_name: 보상 backbone 에 대한 모델 식별자; actor 모델 식별자가 사용 가능할 경우 기본값
  • reward_model_device: 보상 모델 장치; 기본값은 "cuda:0" 또는 None (trainer 장치 사용)
  • reward_learning_rate, reward_num_train_epochs, reward_train_batch_size: 보상 모델 최적화 설정
  • reward_max_length: 결합된 보상 모델 입력에 대한 선택적 token 제한
  • reward_freeze_backbone: True 일 때, 단일 보상 헤드만 학습
  • rl_algorithm: 정책 학습 백엔드; 기본값은 "magrpo"
  • num_generations, actor (그룹 크기) : MAGRPO 가족의 경우 최소 2개, 또는 MAAC/IAC 의 경우 최소 1개
  • num_train_epochs, agent_learning_rate: 정책 학습 epochs 및 학습률
  • rollout_buffer_size, train_batch_size: 정책 학습 rollout 버퍼 및 업데이트 배치 크기; train_batch_size는 rollout_buffer_size로 기본 설정
  • critic_model_name, critic_learning_rate, critic_devices: Critic 설정으로 actor-critic 백엔드
  • critic_type: "v" 또는 "q"로 actor-critic 백엔드
  • use_separate_critic: 별도의 critics 또는 actor에 연결된 value heads를 선택하여 IAC
  • value_loss_coef, value_clip_range: Critic 손실 가중치 및 IAC 공유-value-head 클리핑, Multi-Agent Actor-Critic에 설명된 대로
  • reference_kl_enabled, reference_kl_coef, reference_devices: 정책 학습에 대한 선택적 고정 참조 정규화

reward_model_name 는 actors 가 모델 객체이지만 모델 식별자를 가지고 있지 않은 경우 필요합니다. MAAC 및 별도의 critic, IAC 또한 critic 의 명시적인 소스 또는 사용 가능한 critic 모델 식별자를 필요로 합니다.

MADPO#

Multi-Agent Direct Preference Optimization (MADPO)는 선호 쌍에서 정책을 직접 학습하며, 보상 모델 또는 RL 단계가 필요하지 않습니다. 손실은 모든 에이전트의 선호 margins를 결합하여, 각 정책이 팀의 결과에서 학습합니다.

MADPO 학습 흐름 에이전트의 margins 각 선호 쌍은 하나의 공동 손실로 합쳐져 모든 정책을 직접 업데이트합니다.
Pairs Policy scores Joint loss UpdateEach agent Per agent No reward model

각 에이전트의 margin는 승리 및 패배 응답의 로그 확률의 차이이며, 공동 margin는 이러한 합계를 에이전트별로 계산합니다:

\[ \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는 최소화

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

\( \eta>0 \) 가 dpo_beta (기본값 0.1) 일 때, 작업 보상은 각 쌍을 순서대로만 평가합니다. 손실 함수는 정책의 로그 확률을 사용합니다. 에이전트 \( i \) 의 기울기는

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

가중치 \( \sigma(-\eta\,\Delta_{\boldsymbol{\theta}}) \) 는 팀의 공동 margin 에 따라 결정되며, 기울기는 에이전트 \( i \) 의 자체 margin 를 통해서만 흐릅니다. 각 배치에서 trainer 는 기울기 없이 모든 margins 를 한 번 계산한 다음, 각 에이전트에 자체 미분 가능한 margin 와 다른 에이전트의 분리된 margins 를 업데이트합니다.

목표는 참조를 사용하지 않습니다: 상속된 reference_kl_enabled, reference_kl_coef, 및 reference_devices 설정은 MADPO 손실에 참조 항을 추가하지 않습니다. 훈련 지표 turn_1/reward_mean 및 turn_1/expected_return 는 쌍이 수집될 때 기록된 후보 보상의 평균을 계산하므로, 업데이트된 정책을 반영하지 않습니다.

분산된 점수는 패딩을 제거한 마지막 완료 token 를 제외하므로, 각 에이전트의 margin 는 해당 token 의 로그 확률을 제외합니다. 중앙화된 점수는 전체 공동 완료를 다룹니다.

MADPOConfig 매개변수
  • num_agents: 에이전트 수 또는 중앙 집중식 actor 를 가진 작업 역할 수
  • collaboration_mode: "decentralized" (기본값) 는 각 에이전트에 대해 actor 를 1개 훈련시키고, "centralized" 는 전체 공동 응답을 작성하는 actor 를 훈련시키고, max_new_tokens 는 전체 공동 응답을 다룹니다.
  • num_train_epochs: epochs 에 대한 수집된 선호 쌍에 대한 최적화
  • agent_learning_rate: 정책 학습률
  • dpo_beta: 공동 margin 에 대한 양수 계수 (기본값 0.1)
  • train_batch_size: 업데이트당 선호 쌍 수; 기본값은 rollout_buffer_size
  • parallel_training, agent_devices: 정책 실행 모드 및 장치 배치
  • eval_interval, eval_num_samples, eval_batch_size: 평가 일정 및 샘플 크기; MADPO 는 eval_interval 를 선호 학습 업데이트에 포함
  • logging_steps: 훈련 로깅 간격
  • environment_steps_per_pair: 선호 쌍별 환경 단계 수 (기본값 2)
  • 선택 선호 데이터 설정