【新バージョン！】Unity ML-Agents v0.3 Beta きたーーーーー！！！

ついにML-Agentsの新バージョンきました！まってました！

[ML-Agents v0.3 Beta released: Imitation Learning, feedback-driven features, and more](https://blogs.unity3d.com/jp/2018/03/15/ml-agents-v0-3-beta-released-imitation-learning-feedback-driven-features-and-more/)
↓ダウンロード
[v0.3のGitHub](https://github.com/Unity-Technologies/ml-agents)

<img width="1281" alt="SnapCrab_NoName_2018-3-16_14-39-18_No-00.png" src="https://qiita-image-store.s3.amazonaws.com/0/225485/8e05f6be-fea6-c30d-780f-1f7a1696bba4.png">

新しく追加された機能やv0.2と比べた変更点などを見ていきたいと思います！

**今回の目玉機能**
1. Imitation Lerning
2. Multi-Brain Training
3. On-Demand Dsicion-Making
4. Memory-Enhanced Agents
5. Changes to ML-Agents semantics
6. Easier setup with Docker Image
7. 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では以下のようにして対応していました。

```c#
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）を利用した強化学習](https://qiita.com/okdshin/items/c486da9c3e563147b0ff)

#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で収集する場合次のように書きました。

```c#

state.Add(gameObject.transform.position.x);
state.Add(gameObject.transform.position.y);
state.Add(gameObject.transform.position.z);
```

これがv0.3からは

```c#
AddVectorObs(gameObject.transform.position);
```

というふうにベクトルで収集できるようになったみたいです。わかりやすい！これはありがたいですね。
ほかにもいろいろ関数の使い方が変更されたみたいです。
[Migrating to ML-Agents v0.3](https://github.com/Unity-Technologies/ml-agents/blob/master/docs/Migrating-v0.3.md)

#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**

![banana.gif](https://qiita-image-store.s3.amazonaws.com/0/225485/1f9a347b-81e3-14b4-b50b-14d4b4fbb4c7.gif)

紫バナナ(マイナス)を避けながら、黄色バナナ(プラス)を収集するゲームです。
レーザーを発射することで相手を一定時間フリーズさせることができます。
エージェントが他者を攻撃してバナナを集めるのか、それとも他者と平和的にバナナを共有するのかを学びます。

**Soccer Twos**

![soccer.gif](https://qiita-image-store.s3.amazonaws.com/0/225485/1b116a6d-f801-fdb8-b5c0-996785ad9272.gif)

ゴールキーパーとシュートするエージェントに分かれて学習を行います。

**Bouncer**

![bouncer.gif](https://qiita-image-store.s3.amazonaws.com/0/225485/bdfbb396-6314-8f2f-9b7b-f911c21b378c.gif)

エージェントは跳ね返る方向を制御してバナナをキャッチします。

**Hallway**

![hallway.gif](https://qiita-image-store.s3.amazonaws.com/0/225485/8af97016-feb5-a1ee-4fb4-466cb1314ff1.gif)

箱と同じ色に行けばゴールです。

#まとめ
かなりたくさんの機能が追加されましたね！これから使っていくのが楽しみです。
新機能はまた後日紹介していきたいと思います。

1. [【Unity ML-Agents】強化学習で物体を避ける](https://qiita.com/God_KonaBanana/items/e56fcee3ae544be7dfca)