したかみ ぶろぐ

Unity成分多め

ML-Agentsの訓練設定ファイルを生成するEditor拡張の作成

始めに

ML-Agentsの訓練設定ファイルをUnityで編集できるエディタ拡張を作成致しました。

github.com



※まだ開発途中です!今後更新又は修正していく予定です

TrainingSettingFileEditor

f:id:vxd-naoshi-19961205-maro:20201011151856p:plain



機能

各パラメータを設定して.yamlファイルを生成することが出来ます。

開き方

Winodw/ML-Agents/TrainingSettingFileEditorからエディタを開くことが出来ます。 f:id:vxd-naoshi-19961205-maro:20201011222238p:plain



Curiosityやセルフプレイなどのオプション項目

Curiosityやセルフプレイなどを使って学習したい場合はチェックボックスをチェックすることで設定項目が出てきます。

f:id:vxd-naoshi-19961205-maro:20201011162912p:plain



保存

設定が完了したら一番下の "Generate TrainingSettingFile"を押すと保存先を指定するウィンドウが開きます。

そこでファイル名と保存先をしていすることで、訓練設定ファイルを生成することが出来ます。

ファイル名はデフォルトで "BehaviorName" + ppr or sacとなります。

f:id:vxd-naoshi-19961205-maro:20201011170604p:plain

f:id:vxd-naoshi-19961205-maro:20201011170728p:plain

例として生成されたファイルは次のようになります。

TestBehaivor_ppo.yaml

behaviors:
  TestBehavior:
    trainer_type: ppo
    max_steps: 0
    time_horizon: 0
    summary_freq: 0
    keep_checkpoints: 5
    checkpoint_interval: 500000
    threaded: true

    hyperparameters:
      batch_size: 0
      buffer_size: 0
      learning_rate: 0
      learning_rate_schedule: linear
      beta: 0
      epsilon: 0
      lambd: 0
      num_epoch: 0

    network_settings:
      vis_encoder_type: simple
      normalize: false
      hidden_units: 0
      num_layers: 0

    reward_signals:
      extrinsic:
        strength: 0
        gamma: 0

      curiosity:
        gamma: 0
        strength: 0
        encoding_size: 64
        learning_rate: 0.0003

    self_play:
      save_steps: 0
      team_change: 0
      swap_steps: 0
      window: 0
      play_against_latest_model_ratio: 0
      initial_elo: 0

これから追加予定の機能

tooltip

今のところすべて "tooltip" と出力されますが、これから各パラメータの説明文を追加する予定です。

f:id:vxd-naoshi-19961205-maro:20201011161812p:plain



複数のbehaviorの設定

公式のML-Agentsサンプルでのサッカーでは2つのbehaviorの設定をしています。 以下にその訓練設定ファイルを載せます。

このようなファイルの生成がまだ出来ないのでこれからその設定項目を作成する予定です。

StrikersVsGoalie.yaml

behaviors:
  Goalie:
    trainer_type: ppo
    hyperparameters:
      batch_size: 2048
      buffer_size: 20480
      learning_rate: 0.0003
      beta: 0.005
      epsilon: 0.2
      lambd: 0.95
      num_epoch: 3
      learning_rate_schedule: constant
    network_settings:
      normalize: false
      hidden_units: 512
      num_layers: 2
      vis_encode_type: simple
    reward_signals:
      extrinsic:
        gamma: 0.99
        strength: 1.0
    keep_checkpoints: 5
    max_steps: 50000000
    time_horizon: 1000
    summary_freq: 10000
    threaded: true
    self_play:
      save_steps: 50000
      team_change: 200000
      swap_steps: 1000
      window: 10
      play_against_latest_model_ratio: 0.5
      initial_elo: 1200.0
  Striker:
    trainer_type: ppo
    hyperparameters:
      batch_size: 2048
      buffer_size: 20480
      learning_rate: 0.0003
      beta: 0.005
      epsilon: 0.2
      lambd: 0.95
      num_epoch: 3
      learning_rate_schedule: constant
    network_settings:
      normalize: false
      hidden_units: 512
      num_layers: 2
      vis_encode_type: simple
    reward_signals:
      extrinsic:
        gamma: 0.99
        strength: 1.0
    keep_checkpoints: 5
    max_steps: 50000000
    time_horizon: 1000
    summary_freq: 10000
    threaded: true
    self_play:
      save_steps: 50000
      team_change: 200000
      swap_steps: 4000
      window: 10
      play_against_latest_model_ratio: 0.5
      initial_elo: 1200.0



カリキュラム学習、環境パラメータのランダム化

これらの設定も出来るようにしたかったのですが、ブログを上げるまでに間に合いませんでした。



参考

EditorWindowでもtooltipを表示させる方法を調べた際に参考にさせて頂きました。

answers.unity.com


ファイルを保存する際に保存先を指定する方法で参考にさせて頂きました。 baba-s.hatenablog.com


訓練設定ファイルの項目については以下の本を参考にさせて頂きました。