TadaoYamaokaの開発日記

個人開発しているスマホアプリや将棋AIの開発ネタを中心に書いていきます。

AlphaStarの論文を読む その7(アーキテクチャその3)

アーキテクチャ詳細の続きです。
ベースラインと損失に関する部分です。

勝敗ベースライン(Winloss Baseline)

  • 入力:prev_state, scalar_features, opponent_observations, cumulative_score, action_type, lstm_output
  • 出力:
    • winloss_baseline : 「action_type」引数に使用されるベースライン値
  • ベースラインは、最初にベースラインで使用されるさまざまな観測値を収集して前処理する。 使用される観測は、(そのまま使用される「lstm output」を除いて)スカラーエンコーダーと同じ方法で処理される「lstm_output」、「agent_statistics」、「unit_counts_bow」、「upgrades」、「beginning_build_order」、および「scalar_features」の「cumulative_statistics」(アップグレードとスペルの効果を除く)である。 値の1Dテンソルとしての「cumulative_score」は、「agent_statistics」のように処理される。 ベースラインは「opponent_observations」からこれらと同じ観測を抽出する。 これらの特徴量はすべて連結されて、 「action_type_input」を生成し、サイズ256のリニアを通過し、256の隠れユニットとレイヤー正規化を伴う16のResBlocksを通過し、ReLUを通過し、1つの隠れユニットを含む全結合層を通過する。 このベースライン値は( (2.0 / PI) * atan((PI / 2.0) * baseline) )によって変換され、ベースライン値 「winloss_baseline」として使用される。

Winloss Split VTrace Actor-Critic, TDLambda, UpGo Loss

  • 入力:action_type_logits, delay_logits, queued_logits, units_logits, target_unit_logits, target_location_logits, winloss_baseline
  • Winloss報酬はゲームの終了時にのみ付与され、エージェントがゲームに勝った場合は+1、それ以外の場合は-1である。
  • action_type引数、遅延、および他のすべての引数は、個別の(「分割」)VTrace Actor-Critic損失を使用して個別に更新される。 これらの更新の重みは1.0と見なす。 action_type、delay、およびその他の引数も同様に、UPGOを使用して、VTrace Actor-Critic損失と同じように、相対的な重み1.0で個別に更新される。 ベースラインは、TD(λ)を使用して更新され、相対的な重みは10.0、またlambda 0.8である。

ビルド順序ベースライン(Build Order Baseline)

  • Winloss Baselineと同様だが、 「cumulative_statistics」にはアップグレードとスペルの効果が含まれる。

Build Order Split VTrace Actor-Critic, TDLambda Loss

  • ビルド順序の報酬は、真(人間のリプレイ)のビルド順序とエージェントのビルド順序の間の負のレーベンシュタイン距離です。 ただし、ユニットのタイプが同じ場合は1_{(a != b)}の代わりにlev_{a, b}(i - 1, j - 1) + 1_{(a != b)}となる。コストは、真のビルドされたエンティティとエージェントのエンティティ間の距離の2乗であり、[0,0.8]以内に再スケーリングされる。2つ以上のゲートウェイが離れている場合、最大0.8になる。(何か新しいものを建築したため)エージェントのビルド順序が変更されるたびに、報酬が与えられる。 ビルドされていないユニット(自動砲塔や幼虫など)、労働者ユニット、補給施設のビルド順序はスキップされる。
  • 人間の探査(ビルドユニット、アップグレード、および効果)のリプレイはゲームの開始時に選択され、エージェントが見るゲームと同じホーム種族およびアウェイ種族を伴う同じマップになる。
  • 更新はWinlossと同様に計算されるが、UPGOを使用せず、ビルド順序ベースラインを使用して適用され、相対重み付けは方策に4.0、ベースラインに1.0が適用される。

ビルドユニットベースライン(Built Units Baseline)

  • 勝敗ベースラインと同様

Built Units Split VTrace Actor-Critic, TDLambda Loss

  • ビルドされたユニットの報酬は、人間のリプレイでビルドされたエンティティとエージェントがビルドしたエンティティ間のハミング距離である。 8分後、報酬に0.5が乗算される。 16分後、報酬にさらに0.5が乗算される。 24分後以降は報酬がない。
  • 更新はWinlossと同様に計算されるが、UPGOがない場合、ビルドユニットベースラインを使用して適用され、相対重み付けは方策に6.0、ベースラインに1.0が適用される。

アップグレードベースライン(Upgrades Baseline)

  • 勝敗ベースラインと同様だが、「cumulative_statistics」にはアップグレードのみが含まれる点が異なる。

Upgrades Split VTrace Actor-Critic, TDLambda Loss

  • ビルドされたユニットの報酬は、人間のリプレイのアップグレードとエージェントが調査したアップグレードとのハミング距離である。 8分後、報酬に0.5が乗算される。 16分後、報酬にさらに0.5が乗算される。 24分後以降は報酬がない。
  • 更新は、UPGOを使用せず、アップグレードベースラインを使用して適用されることを除いて、Winlossと同様に計算され、相対重み付けは方策に6.0、ベースラインに1.0が適用される。

エフェクトベースライン(Effects Baseline)

  • 勝敗ベースラインと同様だが、「cumulative_statistics」にはエフェクトのみが含まれる。

Effects Split VTrace Actor-Critic, TDLambda Loss

  • ビルドされたユニットの報酬は、人間のリプレイのエフェクトとエージェントが作成したエフェクト間のハミング距離である。 8分後、報酬に0.5が乗算される。 16分後、報酬にさらに0.5が乗算される。 24分後以降は報酬がない。
  • 更新はWinlossと同様に計算されるが、UPGOを使用せず、エフェクトベースラインを使用して適用され、相対重み付けは方策に6.0、ベースラインに1.0が適用される。

エントロピー損失(Entropy Loss)

  • すべてのアクション引数に重み1e-4のエントロピー損失があり、特定のアクションタイプに対してどの引数が可能かによってマスクされている。

蒸留損失(Distillation Loss)

  • 同じ観測が与えられたファインチューニングされた教師あり方策の出力ロジットと一致させるため、すべてのアクション引数に2e-3の重みで蒸留損失がある。
  • 軌跡が「cumulative_statistics」に条件付けられていた場合、ゲームの最初の4分間のアクションタイプロジットに重量1e-1の追加の蒸留損失がある。
感想

探索に人間のリプレイを活用するために、報酬と方策の損失の2か所に人間のリプレイの統計が使用されています。
報酬は、ゲームの序盤により高く与えられています。
RTSゲームには序盤の定跡のようなものがあって、例えばAge of Empiresでは村人はまずガゼルを見つけて狩って、食料が貯まったら村人を生産してといった効率的な手順が確立されています。初心者はまずそれを覚えて練習するということをします。
序盤のビルド順序に人間のリプレイからの報酬を与えているのは、それと同じことをしていると思われます。
その手順自体を強化学習自身で発見できないものかと思いますが、まだできないのが現状のようです。

アーキテクチャ詳細は以上です。
(続く)

AlphaStarの論文を読む - TadaoYamaokaの開発日記
AlphaStarの論文を読む その2 - TadaoYamaokaの開発日記
AlphaStarの論文を読む その3 - TadaoYamaokaの開発日記
AlphaStarの論文を読む その4 - TadaoYamaokaの開発日記
AlphaStarの論文を読む その5(アーキテクチャ) - TadaoYamaokaの開発日記
AlphaStarの論文を読む その6(アーキテクチャその2) - TadaoYamaokaの開発日記
AlphaStarの論文を読む その7(アーキテクチャその3) - TadaoYamaokaの開発日記
AlphaStarの論文を読む その8(教師あり学習、強化学習) - TadaoYamaokaの開発日記
AlphaStarの論文を読む その9(マルチエージェント学習) - TadaoYamaokaの開発日記
AlphaStarの論文を読む その10(リーグ構成) - TadaoYamaokaの開発日記
AlphaStarの論文を読む その11(インフラ) - TadaoYamaokaの開発日記
AlphaStarの論文を読む その12(評価) - TadaoYamaokaの開発日記
AlphaStarの論文を読む その13(分析、AlphaStarの一般性) - TadaoYamaokaの開発日記