追記
- tensorboardの記述を追記
- 学習後の動画を埋め込んでみました。
はじめに
youtubeでSirajさんの
Unity AI - Unity 3D Artificial Intelligenceを見て、これは勉強会のネタになりそうだ、ということで、unityのml-agentsでtensorflowを使った強化学習を試してみた。3DBallサンプルの記事は、日本語で素晴らしい記事がたくさんあるので、リンクだけ。
https://qiita.com/Ao_i/items/18dec197434c7f853a92
http://nn-hokuson.hatenablog.com/entry/2017/12/26/213456
http://naomo.co.jp/2017/09/unityがtensorflowに対応/
https://qiita.com/dora-gt/items/bacce436de2a3cdb1ef4
http://am1tanaka.hatenablog.com/entry/2017/11/08/230525
tennisサンプル
tennisとは言っても、卓球(table tennis)のシミュレーションのようだ。
このサンプルを動かす時にハマったのは、下記の3点。
- unityの[Hierarchy]タブの[Academy]以下にbrainが二つあると、python実行時にエラーになるので、一つにする
- unityのBuild時に[Scenes in Build]でtennisにチェックをつける(選択する)

- 最後に、学習済みモデルで動作させる際、[Graph Placeholder] sizeは 0のままで良いようだ。
tensorboard
学習の経過を確認するのに、tensorboardで見ることができます。うまく学習が進んでいるようです。
学習結果
unityのml-agentsで強化学習してみた。5万回の学習でtable tennisの初心者ぐらいにはなっている。 reinforcement learning by unity ml-agents https://t.co/IU2hgexXYG via @YouTube
— Kazutoshi Nakano (@kznx) January 28, 2018
最後に
pythonのコード自体は、3DBallもtennisも共通で行けるところが、頭では分かってはいたつもりだが、強化学習の汎用性の高さを感じる。また視覚的に動きが見えることで、強化学習の特徴が非常にわかりやすい。