Search Unity

ML-Agents Toolkit v0.6:ブレインと模倣学習のユーザビリティ改善

, 12月 17, 2018

ユーザーの皆様からのフィードバックに基づき、ML-Agents Toolkit v0.6 では新たに 2 つの改良を加えました。1 つ目はブレインを MonoBehaviour ベースから ScriptableObject ベースに移行してユーザビリティを向上させたこと。2 つ目は、エキスパートによるデモンストレーションを記録してオフライン学習に利用できるようになったことで ML-Agents Toolkit v0.3 の記事でご紹介した模倣学習を行う際のユーザーワークフローが改善されたことです。

ScriptableObject ベースのブレイン

以前のバージョンの ML-Agents Toolkit では、ブレインはアカデミーのゲームオブジェクトの子として、アカデミーにアタッチされるゲームオブジェクトでした。この仕様では、同じプロジェクトの複数の Unity シーンに渡ってブレインを再利用することが困難でした。この状況を改善するため、最新の v0.6 リリースではブレインを ScriptableObject として実装しなおし、標準の Unity アセットとして扱えるようにしました。この変更により、ブレインを複数のシーンにわたって再利用したり、またエージェントのプレハブにあらかじめブレインをアタッチしたりすることが容易になりました。この移行を完了させるために、私たちは新たに Learning Brain という名前の ScriptableObject を導入し、以前に存在した Internal Brain と External Brain を置き換えました。さらに移行を完全なものにするため、Player Brain と Heuristic Brain という名前の ScriptableObject を、Player と Heuristic の Brain Type をそれぞれ置き換えるものとして導入しました。

下の画像は「3DBall」環境におけるブレインの実装が移行前と後とでどのように変化するかを示したものです。

(左)ML-Agents v0.5 の Brain ゲームオブジェクト(右)ML-Agents v0.6 で導入された ScriptableObject ベースの Brain

ML-Agents v0.6 では、Brain Type ドロップダウンでブレインのタイプを変更することはできなくなりました。ブレインのタイプを変更するには、プレイヤーや学習に使うブレインを別に作る必要があります。ただし、ブレインのインスペクターにある「Copy Brain Parameters from」選択ボックスを使えば、あるブレインのパラメーターを別のブレインに簡単にコピーすることができます。新しく作ったブレインのインスペクターを開いて、このフィールドにすでにあるブレインをドラッグ・アンド・ドロップするだけで、そのブレインのパラメーターが新しく作ったブレインにコピーされます。

さらに、ブレインはシーンの一部ではなくなったので、Unity のメニューバーにある「Assets」メニューからブレインを作ることも可能になりました。

「Assets」メニューからブレインを作成

もうひとつの改良点は、どのブレインの学習を進めているかの追跡が容易になった点が挙げられます。この改良は Academy コンポーネントの BroadcastHub によって実現しました。このコンポーネントにブレインのアセットをドラッグすると、ブレインを外部の学習プロセスに渡すことができます。

「Control」チェックボックス

ブレインの「Control」チェックボックスをオンにすると、以前のバージョンの ML-Agents Toolkit で External Brain Type を使う場合と同等の動作になります。要するに、「Control」チェックボックスをオンにするということは、そのブレインが学習を行うブレインであるということを示すということです。学習を行わない場合は、BroadcastHub にあるすべてのブレインの「Control」チェックボックスをオフにするだけです。

ScriptableObject ベースのブレインの作り方を解説した動画をご覧ください。

詳細については Github のドキュメントをご覧ください

Demonstration Recorder

開発中のゲームの実行時にエージェントの行動や観測を記録したり、記録した内容をあとから模倣学習やデータ分析を通じてエージェントの学習に使ったりすることが可能になりました。これまでは学習を繰り返すときに毎回データを作る必要がありましたが、この改良によって学習データを複数の学習セッションにわたって再利用することが可能になりました。エージェントの記録を取りたいときに、Demonstration Recorder コンポーネントをエージェントに追加し、「Record」のチェックをオンにして、デモンストレーションに名前をつけるとその記録を取ることができます。

Demonstration Recorder コンポーネント

再生モードに入り、エージェントに取らせたい行動を実行してください。記録が終わったら再生モードを終了します。すると、デモンストレーションを記録したアセットが「Demonstrations」フォルダーの中に作成されます。

デモンストレーションのアセット

この記録を使ってエージェントに学習させるには、学習設定のハイパーパラメーターを調整します。

この調整に関する詳細については、Github のドキュメントを参照してください。

次のステップ

皆さまからのご意見は非常に重要です。Unity ML-Agents Toolkit を引き続き改良して育てていく上で、皆さまからのご意見やアイデアが必要不可欠です。ぜひアンケートにもご協力をいただき、皆さまの声をお寄せください。

ML-Agents Toolkit に関するフィードバックやご質問については、ML-Agents GitHub の Issues ページにお寄せください。また、直接 ml-agents@unity3d.com までメールでご連絡くださってもかまいません。

Unity で機械学習の開発に関わることにご関心がある方は、求人情報をチェックしてください。

コメント受付を終了しました。

  1. Edwardboima

    1月 28, 2019 8:47 am

    Forex Trader predicts and makes $10,000 less than 3 hours: http://profit.bitcoin-forex-invest.com/how-to-make-easy-money-online-for-paypal.php

  2. For the “Control” textbox, what’s behind that naming choice? It’d be great to know to help me remember the purpose it serves.

    For example, does it stand for something like “External Control”?

    I do get it that it’s function is to flag the brain for external training.

    Thanks for any details.

  3. Great, thank you! Please implement RND ( https://github.com/openai/random-network-distillation ) from OpenAI for ML Agents next! It’s an extension or improvement on PPO which uses two extra networks for curiousity, but it makes such a HUGE positive difference, especially in sparse reward scenarios which are quite common in unity! I tried it on a number of gym environments (atari, nes) and it works really well, much better than PPO, PPO2 or AC3 ever could! Implementing that for unity would open so much possibilities!

  4. ML-Agents is my favourite thing about Unity Engine. it is simple and elegant. I wish we could train our agents without leaving Unity environment but still, I love it. Thanks a lot for this awesome project.