Search Unity

ML-Agents v0.3 ベータ版の公開 ― 模倣学習、フィードバックに基づいた機能などを搭載

, 3月 15, 2018

ML-Agents チームの提供するツールキットの最新版、v0.3が公開されました。

ML-Agents v0.3 はこれまでの ML-Agents チームからのリリースの中で最大級のものです。これに含まれる主要な機能の多くは、コミュニティの皆様からのフィードバックを基に開発されたものです。今回の新機能の主な目的は、模倣学習マルチブレイントレーニングオンデマンド意思決定、メモリ強化エージェントの追加によって、ML-Agents の能力を拡張することです。また、Docker イメージの追加、API セマンティクスの修正、そしてドキュメンテーションの大幅な改訂によって、より簡単で直感的な設定・使用が可能になりました。本記事では主な変更点についてご説明します。新バージョンのダウンロードは GitHub のこちらのページから行えます。またリリースページ(英語)で詳細な情報もご確認いただけます。

行動クローニングによる模倣学習

ML-Agents v0.3 には、模倣学習と呼ばれるエージェントのトレーニング方法を担当する新しいクラス内に、第一のアルゴリズムが含まれています。強化学習が主に報酬信号によって機能するのに対し、模倣学習では、模倣させたい挙動をやって見せるだけで、エージェントに学習信号を提供できます。

状況によっては、単純にエージェントとしてプレイすることで学習させるほうが、報酬を定義するよりも直感的に行える場合があり、これはゲーム内の挙動を作成するための新しい強力な方法であると私達は考えています。

模倣学習については多様なアルゴリズムが提案されていますが、v0.3 では最もシンプルな、行動クローニングを採用しました。トレーニングデータを教師エージェントから収集し、単純にそれを使用して挙動を直接学習します。これは画像分類などの従来の機械学習タスクに関して教師あり学習が機能する仕組みと同じです。

この機能の開発に当たっては、お寄せいただくフィードバックを基に、より直感的かつ安定したメソッドとトレーニングインターフェースを提供して行く計画です。ゲーム開発への模倣学習の適用は新しい試みであるため、できるだけ多くのコミュニティからのフィードバックを参考にしながら、開発者のワークフローに最適な形で統合する方法を決定して行きます。Unity の模倣学習をお試しになりたい方や、エディターにより良い形で統合するためのアイデアをお持ちの方は、ML-Agents@unity3d.com または GitHub の Issues のセクションにフィードバックをお寄せください。

マルチブレイントレーニング

早期に寄せられたフィードバックのひとつに、トレーニングを同時に複数のブレインで行えるようにしてほしいというものがありました。例えば、攻撃と防御など、異なるプレイヤーが別々に制御される必要のあるサッカーゲームがあるとします。マルチブレイントレーニング を使用すれば、フィールドの各「ポジション」に、独自の視点とアクション空間を持つ別々のブレインを与え、それを他のブレインと同時にトレーニングすることができます。

トレーニング終了時に、バイナリ(.bytes)ファイルを 1 つを受け取ることができます。これは 1 つのブレインにつき 1 つのニューラルネットワークモデルを含んでいます。これにより、異なるハイパーパラメータ―を組み合わせることが可能となり、またカリキュラム学習機能を使用して、異なるブレインとエージェントのセットが環境内でどのようにインタラクトするかを、時間の経過と共に次第に変化させることが可能となります。

オンデマンド意思決定

デベロッパーのコミュニティから寄せれらたもうひとつの要望は、エンジンの毎ステップあるいは数ステップごとにエージェントに意思決定を強制するのではなく、オンデマンドでエージェントに意思決定をリクエストしたいというものです。

ゲームには様々なジャンルがあります。カードゲーム、リアルタイムストラテジーゲーム、ロールプレイングゲーム、ボードゲームなどです。その全てが、エージェントの、様々な長さの時間の経過後に意思決定を行う能力に依存しています。ML-Agents はこれに対応しています。ボタンクリック一つで、エージェントごとに個々にオンデマンド意思決定の有効・無効を切り替えられるようになりました!ご自身のエージェントでこれを有効にし、エージェントに簡単な関数呼び出しを行うことで、そのブレインによる意思決定をリクエストできます。

ML-Agents セマンティクスへの変更事項

ML-Agents を将来の変更に耐えうるものにするため、ツールキットのセマンティクスに一連の変更を加えました。これらの変更は、システム内で使用する言語や概念を、より強化学習の言語体系に沿ったものにするために設計されました。

このうち最も大きな変更は、「ステート(State)」の概念が排除されたことです。代わりに、エージェントが様々な種類(ベクトル、画像、テキスト)の観測情報(Observation)を環境から受け取り、その観測情報がそれぞれのブレインに送られて意思決定が(ベクトルあるいはテキストで)計算され、その後この決定がブレインから受け取られて、それを使ってアクション(Action)が実行されます。変更の概要は以下の表をご覧ください。これらの変更に伴い API への変更が必要となります。これらの変更が ML-Agents 0.2 およびそれ以前のバージョンでビルドされた既存の環境に与える影響に関しては、こちら(英語)でご確認いただけます。

State(ステート) Vector Observation(ベクトル観測情報)
Observation(観測情報) Visual Observation(視覚的観測情報)
(新規)Text Observation(テキスト観測情報)
Action(アクション) Vector Action(ベクトルアクション)
(新規)Text Action(テキストアクション)

部分的観測による学習

セマンティクスをステートから観測に変更した理由のひとつは、実際にはエージェントは(ほとんどの環境においては)環境の完全なステートを認識することがないからです。その代わりにエージェントは、(多くの場合)ローカルな、あるいは不完全な情報から成る部分的な観測情報を受け取ります。エージェントに完全なステートを提供するコストは往々にして高過ぎますし、そのステートをどのように表現するかさえ不明確になる場合があります。これを解決するため、学習環境内にメモリ強化エージェントによって部分的観測を扱う方法を 2 つ持たせています。

一つ目のメモリ強化は 観測情報のスタッキングです。これにより、エージェントが 1 エピソード内の直前の 10 回の観測情報まで把握できるようになり、それら全てをブレインにフィードして意思決定に使用させることが可能になります。二つ目のメモリ強化は、トレーニングされているニューラルネットワーク用の再帰型レイヤー(オプション)の追加です。これらの再帰型ニューラルネットワーク(RNN)は、ある程度の時間幅を持たせて重要な情報の履歴を隠れステート内に記憶した状態で学習する能力を持ちます。

Docker イメージを使用した、より簡単なセットアップ(プレビュー版)

ML-Agents を使用したデベロッパーに頻繁に起こった問題のひとつとして、(これは ML-Agents 自体の問題ではありませんが、)前提条件となるもの(Python や TensorFlow など)を全てインストールすることが困難であることが挙げられます。

私達は、デベロッパーが Unity と C# 以外のことに気を煩わせなくて済むように、できるだけシンプルに開発を行えるようにしたいと思っています。そのための第一歩として、Docker イメージの作成を可能にしました。これは、ML-Agents 環境を使用したトレーニングに必要な条件を全て満たしています。

(1 つあるいは複数の)ブレインのトレーニングを行うには、Docker をインストールし(Python などの依存をインストールするより簡単です)、ターゲットを Linux に設定して Unity 環境をビルドし、その Docker イメージをご自身の環境の名前で起動してください。

改良された新しい環境

v0.3 には、まったく新しい 4 つのサンプル環境(『Banana Collectors』『Soccer Twos』『Bouncer』『Hallway』)が含まれています。最初の 2 つは複数エージェント環境で、環境内のエージェントが協力的、あるいは競合的、あるいはその両方の形で相互にインタラクトします。

Banana Collectors

『Banana Collectors』の中では、複数のエージェントが 1 つの領域内を動き回り、損害を与えるバナナ(紫)を回避しながら報酬を与えるバナナ(黄色)をできるたけ多く収集します。チャレンジ要素は、エージェントが相互に発射するレーザーで相手をその場でフリーズさせられることです。これは昨年公開された DeepMind による研究(英語)にヒントを得たものですが、シーン内にある報酬を与えるバナナの数によって、エージェントはバナナを取り合うことも、平和的に分け合うことも、どちらでも学習できます。

Soccer Twos

2 つ目の環境『Soccer Twos』には 2 対 2 の対戦環境が含まれています。各チームには(それぞれに別々の報酬機能とブレインを持つ)ストライカーとゴールキーパーが含まれています。

Bouncer

3 つ目の環境『Bouncer』は、Unity の新しい「オンデマンド意思決定」機能の例です。この環境内ではエージェントが自分自身に力を適用することができ、宙に浮いたバナナを取れるようにプラットフォームを跳ね回ります。この環境は、エージェントが行う意思決定が一種類だけであるという点で、他の環境と異なっています。エージェントは、(様々な間隔で)床に着地するたびに、次にどこに跳ねるかの意思決定を行います。

Hallway

4 つ目の環境は『Hallway』です。(こちらの論文(英語)からアイデアを得て作成されました。)これはエージェントの記憶能力のテストを提供しており、新しく「再帰型ニューラルネットワーク」タイプのモデルのトレーニングにも対応しています。この環境内ではエージェントは、通路(Hallway)内を動き回ったり、ブロックの色を検知したり、その情報を使って報酬をもらえるゴールに向かうために、局所的な認知を使用する必要があります。

上述の 3 つの環境に加え、『Push Block』『Wall Jump』にも大幅な改良を行い、全てのサンプル環境の見た目に統一性を持たせました。今回の改良によって、これらの環境内での皆様のモデルのトレーニングが、より行いやすくなることを願っています。また、これらの環境を、ご自身のプロジェクトに活かせるヒントとして役立てて頂ければ嬉しく思います。

是非お試しください

本記事でご紹介した新機能を是非お試しになって、ご意見をお寄せください。こちらはベータ版であるため変更が行われる場合があり、また不具合や問題がある可能性があります。何か問題を発見された場合は、GitHub の Issues のページ(英語)に是非ご報告ください。全体的なフィードバックや、本ツールキットの他のユーザーと ML-Agents について意見を交換したい場合は、Unity Connect チャンネル(英語) をご利用ください。また E メール(ml-agents@unity3d.com)にも、フィードバック・ご質問・開発中プロジェクトのご紹介など、どしどしお寄せください。楽しいトレーニングを!

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

  1. Hely Antonio Rojas Prieto

    3月 18, 2018 5:37 pm

    Nice, Intellient, think a human.
    Easy for developer bahaviors, cars, soldiers, characters, etc.
    BUT when compile, libtensorflow.dll increase size in 42MB

    The only negative aspect is the increase in the size of the binary file.
    As a great positive point, there is the ease of writing behaviors for game characters.
    I need a tensor flow lib LITE, very Lite

  2. I love that Unity is working so hard on bringing ML to games, thank you!

    One thing I have been struggling with is that I find it inefficient that the AI have to try to figure out what GOALS it has and not just come up with ways to reach those goals. For example in a racing game, wouldn’t it be more efficient if the AI knew from the beginning that it should reach the end of the track as fast as possible? Currently it is just dropped in clueless, moving around hitting everything until starting to figure out that it gets reward when doing certain things. But it still doesn’t really know what goal it has, just that it manages to do things that gives it rewards. Am I making sense? Maybe somehow combine Goal Oriented Action Planning with ML, so the ML part only need to focus on finding ways to reach a known goal.

    1. You could address this issue in two ways.
      1) Define short-term rewards with regard to a long term goal. For instance, assigning small penalties for every step the agent takes should encourage it to reach the end of the track as fast as possible.
      2) Look into hierarchical reinforcement learning.
      https://blog.openai.com/learning-a-hierarchy/

  3. How am I supposed to keep focus when unity keep adding so much cool stuff that has to be learnt

    1. You use ML to keep up with all the cool Unity stuff too :P

    2. LOL, you’re right!! I don’t know where to get more free hours to learn all of this! :P

  4. Amazing!

  5. Pakapon Kaewmark

    3月 15, 2018 3:19 pm

    Thanks for your awesome work guys!

    PS. There is a typo in Section “Changes to ML-Agents semantics” at line 4 of paragraph 2 for the word “receive”.

    1. Thanks, Pakapon! Just fixed.