ついにML-Agentsの新バージョンきました!まってました!
ML-Agents v0.3 Beta released: Imitation Learning, feedback-driven features, and more
↓ダウンロード
v0.3のGitHub
新しく追加された機能やv0.2と比べた変更点などを見ていきたいと思います!
今回の目玉機能
- Imitation Lerning
- Multi-Brain Training
- On-Demand Dsicion-Making
- Memory-Enhanced Agents
- Changes to ML-Agents semantics
- Easier setup with Docker Image
- New and revamped environments
#Imitation Learning
教師あり学習、教師なし学習というのを聞いたことがあると思います。
機械学習では大量のデータと教師データを使って意味ある特徴などを抽出しますが、しばしば現実では大量のデータや教師データを用意できない場合があります。
そういう状況では、強化学習のように試行錯誤しながら意味ある特徴を見つけ出していきます。しかし、試行錯誤をするので学習に時間がかかりますし、安定しないこともしばしばあります。少しでも教師データがあるならそれを使ったほうがより早く、安定して学習できるでしょう。
Imitation Learningでは実際に人間が何回かプレイして教師データとなるものを収集し、それをもとに強化学習を行っていきます。
今回のv0.3からこのImitation Learningができるようになりました!めっちゃ楽しみ!
#Multi-Brain training
今回からAgentごとに別々のBrainを使って学習を行っていけるようになったみたいです。
v0.2では敵と味方がいる場合、同じBrainを使ってRewardを反転させることで対応していました。
しかし、例えばサッカーの用に味方でオフェンス、ディフェンスで別れるような場合は一つのBrainでは学習できません。これを別々のBrainで学習することで対応できるようになりました。
#On-Demand Decision-Making
これに関してはちょっとよくわかりませんでした。すみません。わかり次第追記したいと思います。
公式によると、エージェントの意思決定をオンデマンドで決めることができるというものだそうです。
#Memory-Enhanced Agents
ML-AgentsではBrainのStateSizeとCollecteState()の数が一致していないといけません。
Stateの状態が増減するような場合、v0.2では以下のようにして対応していました。
if(gameObject.transform!=null)
{
state.Add(gameObject.transform.position.x);
state.Add(gameObject.transform.position.y);
state.Add(gameObject.transform.position.z);
}
else{
state.Add(0);
state.Add(0);
state.Add(0);
}
つまり、あらかじめ最大値でStateを設定しておき、オブジェクトがないときは0で埋めるというものです。
しかし、これだと常に最大のStateで計算をしなければならないですし、あとからStateの数が変わる場合もあります。
これに対応するためMemory-Enhanced Agentsでは部分観測を可能にしたということだと思います。詳しくは使ってみないとちょっとわからないですね。
これに関してはこちらの記事が参考になりました。
外部メモリ(External Memory)を利用した強化学習
#Changes to ML-Agents semantics
ML-Agentsを将来的に発展させるために、システム内で使用されている用語や概念を、強化学習に関する文献と同じになるよう統一したようです。
Old | New |
---|---|
State | Vector Observation |
Observation | Visual Observation |
(New) Text Observation | |
Action | Vector Action |
(New) Text Action |
とくに大きな変更がStateからVector Observationに変わったことです。
v0.2であれば、例えばボールの位置をStateで収集する場合次のように書きました。
state.Add(gameObject.transform.position.x);
state.Add(gameObject.transform.position.y);
state.Add(gameObject.transform.position.z);
これがv0.3からは
AddVectorObs(gameObject.transform.position);
というふうにベクトルで収集できるようになったみたいです。わかりやすい!これはありがたいですね。
ほかにもいろいろ関数の使い方が変更されたみたいです。
Migrating to ML-Agents v0.3
#Easier setup with Docker Image (Preview)
めんどくさい環境構築が一発でできるようにDockerFileが提供されるようです。
#New and revamped environments
アップデートに合わせて新たに4つのサンプルが追加されました!
Banana Collectors, Soccer TwosはMulti-Brain Trainingのサンプル。
BouncerはOn-Demand Decision-Makingのサンプル。
HallwayはMemory-Enhanced Agentsのサンプル。
Banana Collectors
紫バナナ(マイナス)を避けながら、黄色バナナ(プラス)を収集するゲームです。
レーザーを発射することで相手を一定時間フリーズさせることができます。
エージェントが他者を攻撃してバナナを集めるのか、それとも他者と平和的にバナナを共有するのかを学びます。
Soccer Twos
ゴールキーパーとシュートするエージェントに分かれて学習を行います。
Bouncer
エージェントは跳ね返る方向を制御してバナナをキャッチします。
Hallway
箱と同じ色に行けばゴールです。
#まとめ
かなりたくさんの機能が追加されましたね!これから使っていくのが楽しみです。
新機能はまた後日紹介していきたいと思います。