Actor-Critic (AC) メソッドは、広く使用されているポリシー勾配メソッドであり、critics を使用して学習をサポートします。 AC メソッドは、REINFORCE よりも低い分散と優れたサンプル効率を実現できますが、これには critic の慎重な設計と調整が必要です。 マルチエージェント強化学習 (MARL) において、Actor-Critic メソッドには、マルチエージェント Actor-Critic (MAAC) と独立型 Actor-Critic (IAC) が含まれます。
両者はエージェントを共同で展開し、共同応答を報酬関数で評価しますが、異なる方法を使用します critics 異なります. MAAC 1つずつエージェントを訓練 critic 共同履歴に基づいて訓練するため、すべてのエージェントは自身の TD エラーを共有. IAC 1つずつエージェントを訓練 critic エージェントごとの履歴に基づいて訓練するため、各エージェントは自身の TD エラー.
MAAC#
複数のエージェント Actor-Critic (MAAC) は、エージェント間で共通の Critic (CC) を使用して、共同履歴 \( V_{\boldsymbol{\phi}}(\mathbf{h}_t) \) と critic_type="v"、または履歴-行動ペア \( Q_{\boldsymbol{\psi}}(\mathbf{h}_t, \mathbf{a}_t) \) と critic_type="q" の値を評価します。 critic は、エージェントからのプロンプトを単一のテキストシーケンスに統合して受け取ります。 Q モードには、生成された完了も含まれます。 各エージェントのポリシー勾配は次のとおりです:
ここで、\( \boldsymbol{\delta}_t = r_t + \gamma V_{\boldsymbol{\phi}}(\mathbf{h}_{t+1}) - V_{\boldsymbol{\phi}}(\mathbf{h}_{t}) \) が使用され、critic は次の手順で更新されます:
ここに \( r_t \) は処理された報酬があり、オプションで参照-KL ペナルティを有効にした場合に差し引くことができます。報酬はエージェント間で共有することも、エージェントごとに供給することもできます。最終的に収集されたターン、および早期に終了した、または単ターンで rollout を使用した場合も、報酬のみを目標として使用し、ブートストラップは行いません。完了ログの確率の合計は、生成された token のログ確率の合計です。プロンプトと末尾のパディング tokens は除外されます。損失はサンプルごとに平均されます。バッファはエージェントとターンごとにグループ化され、advantage_normalization は、そのような各グループ内で TD の誤差を正規化します。ターゲットと利点は更新中に固定されます。共有された critic は、各エージェントのバッチごとに順次更新され、value_loss_coef はその損失をスケーリングします。
Q モードでは、実装は TD-残差 actor の重みを同じに使用し、ブートストラップでサンプリングされた次の行動を使用します。Q または状態のみのベースラインで重み付けされた、個別の actor の目的を実装していません。
num_agents: エージェントの数num_turns: ターンの数critic_type: Critic ターゲットの種類 (vは V(h) 用、qは Q(h,a) 用)num_train_epochs: 訓練の epochs の数agent_learning_rate: エージェントの学習率critic_learning_rate: 共有の critic の学習率value_loss_coef: critic 損失への重みadvantage_normalization: 更新前に利点を正規化するかどうかrollout_buffer_size: 更新ごとに収集するサンプルの数train_batch_size: 各更新におけるミニバッチサイズmax_new_tokens: 完了あたりの最大 tokens の生成数temperature: サンプリングのための温度top_p: ヌクレウスサンプリングのための Top-ptop_k: サンプリングのための Top-knum_generations: プロンプトあたりのエージェントごとの生成数external_prompt_passthrough: マルチターントレーニングにおける外部プロンプトの直接使用discount: 次ターンの critic 予測における割引係数; TD ターゲットで、ログされたexpected_returnは割引なしの報酬の合計を使用early_termination_threshold: rollout は、あるターンにおいて平均された報酬がこの閾値を超えた場合に終了します;Noneは早期停止を無効化しますeval_interval: 評価間隔 (トレーニングバッチ単位)eval_num_samples: 1つの間隔あたりの評価サンプル数eval_batch_size: DataLoader バッチサイズの評価logging_steps: 共同応答の報酬評価回数の最小値、学習メトリクスログparallel_training:noneを 1 つのデバイスで使用、またはmpを使用してエージェント/critic デバイスの配置を明示的に指定agent_devices,critic_devices: デバイスの割り当て、mpモードで必要reference_kl_enabled,reference_kl_coef: 凍結された参照 KL の報酬ペナルティが有効かどうか、およびその重み (デフォルトでは無効)reference_devices: 参照モデルのためのオプションのデバイス配置
agent_modelまたはagents: 同種エージェント用の Actor モデル識別子文字列、またはエージェントモデルのリスト (マルチエージェントagent_modelは文字列である必要があります)critic_modelまたはcritics: 必要な共有 critic、識別子、モデルインスタンス、または 1 つの要素のリストとして提供tokenizer: 共有 tokenizer、またはagentsを使用する場合の 1 つのエージェントごとのリスト、agentsまたはモデルインスタンスと必要、またはagent_modelから読み込まれますreward_func: 報酬を返す関数 (必要)reward_processor: オプションの報酬後処理formatters: 1 つの関数またはエージェントごとのプロンプトフォーマットのリストargs:MAACConfigのインスタンス (オプション)train_dataset: 訓練データ (必須)eval_dataset: オプションの評価データmodel_config: モデルの読み込みオプション;critic_value_head_hidden_dimは、集中型の critic の value head を構成 (オプション)wandb_config: Weights & Biases のログ設定 (オプション)metrics_callback: rollout のサンプルを受け取り、スカラーメトリックの辞書を返すオプションのコールバックexternal_transition:num_turns > 1を使用する場合、遷移関数が必要です
MAAC は、重要度サンプリングやポリシー比のクリッピングなしで収集されたサンプルを更新します。
MAACConfigにはvalue_clip_rangeオプションはありません。共有の critic は、最初のエージェントの tokenizer を使用し、これは critic モデルと互換性がある必要があります。
固定 trainer バッチサイズを1に設定します。 DataLoader 1。
num_turns > 1, これexternal_transitionとnum_generations=1が必要です.train_batch_sizeデフォルトでrollout_buffer_size; 実際の更新では、各エージェント/ターングループの利用可能なサンプルを使用し、バッファをフラッシュする際に、より小さなグループも使用します.
IAC#
独立した Actor-Critic (IAC) は、複数のエージェントからの共同応答を使用して、各エージェントのポリシーを独立して最適化します。各エージェントは、独自の actor と critic を維持し、他のエージェントは環境の一部として機能します。報酬は共有またはエージェント固有の可能性があります。critic は、V モードではエージェントのプロンプト/履歴、または Q モードではプロンプトと完了に依存します。各エージェントのポリシー勾配は次のとおりです。
どこで \( \delta_{i,t} = r_t + \gamma V_{\phi_i}(h_{i,t+1}) - V_{\phi_i}(h_{i,t}) \). The actor 同じサンプル平均化された損失と完了-token 合計を使用 MAAC, オプションの正規化は、各エージェント/ターングループ内で行われます。Qモードもこれを使用 actor もこれを使用 TD エラー.
CoMLRL は以下の 2 つの IAC バリアントをサポートします:
独立した Critic を使用: 価値推定のための独立したモデルを使用します。 Actor および critic のパラメータは、エージェントごとに追加のモデルを保存するコストを伴い、個別に最適化されます。
共有モデル: 小さな value head をトランスフォーマー backbone に接続し、actor モデルの履歴 (または履歴-行動) の表現を共有することで、メモリ要件を削減します。
critics は、TD の誤差を最小化することで更新されます:
共有モデル (use_separate_critic=False) を使用する場合、actor および value head は、actor の損失と、value_loss_coef で重み付けされた critic の損失を最適化します。 value_clip_range=None でない場合、学習の安定性を向上させるために、値のクリッピングが適用されます:
ここで、\( \hat{V}_t \) は TD のターゲット、\( \epsilon \) は value_clip_range であり、誤差はミニバッチ全体で平均されます。 独立した critics は、クリップされていない二乗誤差を使用します。
num_agents: エージェントの数num_turns: ターン数num_train_epochs: 訓練に使用する epochs の数agent_learning_rate: エージェントの学習率critic_learning_rate: critics の学習率; 共有モデルはagent_learning_rateを actor および value head の両方で使用value_loss_coef: 価値損失に対する係数value_clip_range: 共有モデルモードにおける値のクリッピング範囲;Noneはクリッピングを無効化advantage_normalization: 利益の正規化の有無rollout_buffer_size: 更新前に収集するサンプルの数train_batch_size: ポリシー更新のためのミニバッチサイズmax_new_tokens: 生成する最大数の新しい tokenstemperature: サンプリングのための温度top_p: ニュクウスサンプリングのための Top-ptop_k: サンプリングのための Top-knum_generations: 1つのプロンプトあたりのエージェントによる世代数use_separate_critic: 別の critic モデルの使用の有無critic_type: Critic のターゲットタイプ (vは V(h),qは Q(h,a))critic_value_head_hidden_dim: critic および value head 用の隠れた次元value_head_hidden_dim: 共有モデルモードでの value head 用の隠れた次元external_prompt_passthrough: マルチターントレーニングでの外部プロンプトの直接使用の有無discount: TD の割引係数;expected_returnは未割引の報酬合計を使用early_termination_threshold: rollout は、あるターンの平均処理された報酬がこの閾値を超えると終了;Noneは早期停止を無効化eval_interval: 評価間隔 (トレーニングバッチ単位)eval_num_samples: 評価サンプル数 (1つの間隔)eval_batch_size: 評価 DataLoader バッチサイズlogging_steps: トレーニングメトリックログ間の最小の共同行動報酬評価数parallel_training:none1つのデバイスまたはmp明示的なエージェント/critic デバイス配置agent_devices,critic_devices: デバイス割り当て;mpはagent_devicesおよび、別個の critics の場合critic_devicesを必要とするreference_kl_enabled,reference_kl_coef: 凍結された参照 KL の報酬ペナルティの有効化と、その重み (デフォルトでは無効化)reference_devices: 参照モデル用のオプションなデバイス配置
agent_modelまたはagents: 同種エージェント用のモデル識別子文字列、またはエージェントモデルのリスト (マルチエージェントagent_modelは文字列である必要があります)critic_modelまたはcritics: Critic の識別子、モデルインスタンス、または critic モデルのリスト (use_separate_critic=Trueの場合)tokenizer: 共有 tokenizer、またはエージェントごとのリストを使用する場合のagents、agentsまたはモデルインスタンスと組み合わせて使用する必要があり、そうでない場合はagent_modelから読み込まれますreward_func: 浮動小数点数のリストを返す関数 (必須)reward_processor: 報酬に適用するオプションなプロセッサformatters: データセットアイテムをプロンプトに変換するための単一の関数またはエージェントごとの関数リストargs:IACConfigのインスタンス (オプション)train_dataset: トレーニングデータセット (必須)eval_dataset: 評価データセット (オプション)model_config: モデル構成辞書 (オプション)wandb_config: Weights & Biases のログ設定 (オプション)metrics_callback: オプションのコールバック関数で rollout のサンプルを受け取り、スカラーメトリックの辞書を返すexternal_transition: 複数ターンでの学習に必要なオプションの遷移関数
IAC は、重要度サンプリングやポリシー比クリッピングなしで、収集されたサンプルを更新します。共有モデルモード (
use_separate_critic=False) では、value heads は actor モデルに接続され、critic_modelまたはcriticsを渡すとエラーが発生し、value_clip_rangeはこのモードでのみ適用されます。エージェントは同種または異種である可能性があります。別個モード (critic) (use_separate_critic=True) では、ユーザーはcriticsの長さがnum_agentsのリストまたは単一のcritic_modelソースを指定してブロードキャストできます。個別のモデルインスタンスまたは、各 critic に対して個別にロードされた識別子は、パラメータを独立して保持し、プレロードされたモデルオブジェクトをブロードキャストすると、そのパラメータが再利用されます。各 critic は、actor の token IDs を消費するため、異なる critic モデルは、actor の tokenizer と互換性がある必要があります。
固定 trainer バッチサイズを1に設定します。 DataLoader 1。
num_turns > 1, これexternal_transitionとnum_generations=1が必要です.train_batch_sizeデフォルトでrollout_buffer_size; 実際の更新では、各エージェント/ターングループの利用可能なサンプルを使用し、バッファをフラッシュする際に、より小さなグループも使用します.