Unity を検索

ML-Agents 2.0 がリリースされました ― 複雑な協調動作のサポートを追加

ML-Agents v2.0 release hero image
ML-Agents v2.0 release hero image
取り上げているトピック
シェア

Is this article helpful for you?

Thank you for your feedback!

約 1 年前、ML-Agents v1.0 の Unity パッケージのリリースを発表しました。これは Unity 2020.2 エディターのリリースに合わせて検証済みとされたパッケージでした。本日、ML-Agents v2.0 の Unity パッケージのリリースを発表します。現在、Unity 2021.2 エディターのリリースに合わせて検証済みの状態に出来るよう、作業を進めております。この 1 年間、私たちは ML-Agents GitHub プロジェクトにおいて、ユーザーワークフローの改善、新しい学習アルゴリズムと機能の導入、そして大幅なパフォーマンスの向上など、15 以上の重要なアップデートを行いました。今回のブログ記事では、3 つの主要な開発成果をご紹介します。1 つ目は、協調学習機能、2 つ目は、エージェントが環境中の様々なエンティティを観測する機能、3 つ目は、タスクのパラメーター化による複数タスクの学習機能です。これらの成果により、ML-Agents は複雑な協調環境を完全にサポートするプラットフォームにまた一歩近づきました。

2020 年の年末に投稿したブログ記事では、2020 年 5 月に v1.0 をリリースしてから同年 12 月までの進捗状況を簡単にまとめました。この記事では 2021 年前半にその改良に注力する予定の 3 つの主要なアルゴリズムについても紹介しました。3 つのアルゴリズムとは、マルチエージェントの協調動作、エージェントが可変数のエンティティを観測する能力、そして複数のタスクを解決できる単一のモデルの確立です。この 3 つの大きな改良はすべて ML-Agents に取り込まれました。 

これら 3 つの機能に加えて、メインの ML-Agents パッケージに以下の変更が加えられました。

  1. Grid Sensors コンポーネントや Match-3 ゲームボードなど、これまで付属の拡張 Unity パッケージとして提供していたいくつかの機能の追加。 
  2. 推論中のメモリ割り当ての改善。一部のデモシーンでメモリ使用量が 98% 削減された例を確認。
  3. 非推奨の API の削除と、API フットプリントの縮小。API に対して破壊的なこれらの変更により、1.x から 2.0 へのバージョンアップが必要となりました。簡単にアップグレードするための詳細は、リリースノート移行ガイドをご覧ください。

このブログ記事の残りの部分では、協調動作、可変長の観測、タスクのパラメーター化の役割と、拡張パッケージにあった機能の本体機能への昇格と、包括的なパフォーマンスという 2 つの段階的な改善について説明します。また、ML-Agents Cloud の最新情報や、今後数週間のうちにリリース予定の複雑な協調動作に焦点を当てたエキサイティングな新しいゲーム環境についてもご紹介します。

協調動作の学習

Among Us』のようなマルチプレイヤーゲームなど、ゲーム内のプレイヤーが協力して目の前の課題を解決する必要がある環境というのは数多くあります。これまでも、シーン内に複数のエージェントがいる状態で ML-Agents をトレーニングすることは可能だったかもしれませんが、リリース 15(2020 年 3 月)までは、共通の目標を持つ特定のエージェントグループを定義することはできませんでした。ML-Agents では、協調行動のトレーニングを明示的にサポートするようになりました。これにより、複数のエージェントからなるグループを共通の目標に向かって行動させ、各エージェントの成功がグループ全体の成功に結びつくような振る舞いを取らせることができます。

このようなシナリオでは、エージェントは通常、グループとして報酬を受け取ります。そのため、あるエージェントのチームが敵チームとの試合に勝つと、その勝利に直接貢献していないエージェントも含めて全員が報酬を受け取ることになります。これがエージェントが単独で何をすべきかを学ぶことが難しくする要因です。そこで私たちは、まったく新しいマルチエージェント学習機(MA-POCA(Multi-Agent POsthumous Credit Assignment)、arXiv に論文の全文を近日公開予定)を開発しました。これは中枢となる「評論家」、あるいはエージェントの集団全体にとっての「コーチ」として振る舞うニューラルネットワークを学習させるためのしくみです。 

この機能の追加により、チーム全体に報酬を与え続けることができるだけでなく、エージェントは共有した達成目標に最も貢献できる方法を学ぶことができます。また、エージェントが個別に報酬を受け取ることができるため、モチベーションを維持し、エージェント間で目標達成のために援助しあうようになります。加えて、エピソードの途中でエージェントをグループに追加したり、削除したりすることができます。これはたとえば、ゲーム中でエージェントが出現したり、倒されたりした場合に相当します。エージェントがエピソードの途中で削除された場合でも、エージェントは自分のアクションが後でチームの勝利に貢献したかどうかを把握できます。これにより、たとえ自己犠牲などのゲーム上の判断でゲームから脱落することになっても、グループを優先して行動することができるようになります。MA-POCA とセルフプレイを組み合わせれば、エージェントのチーム同士を対戦させて学習を進めることもできます。

さらに、「Cooperative Push Block」と「Dungeon Escape」という 2 つの新しいサンプル環境を開発しました。「Cooperative Push Block」では、複数のエージェントが協力しないと完了できないタスクを扱っています。下の動画は「Dungeon Escape」で、これは 1 人のエージェントがドラゴンを倒すためにエピソードの途中で退場することで、残ったチームメイトが鍵を拾ってダンジョンを脱出するというタスクです。

協調的なエージェントをプロジェクトに導入する方法については、ドキュメントをご覧ください。

可変数のエンティティを観測する

このツールキットに寄せられた要望の中で最も多かったのが、様々な数のエンティティに対するゲームキャラクターのリアクションを可能にすることでした。ビデオゲームでは、キャラクターが一度に複数の敵やアイテムに対処する方法を学ぶことがよくあります。この要望に応えるため、リリース 15(2020 年 3 月)では、「observation buffer」と呼ばれる任意の長さの観測値の配列を指定できるようになりました。エージェントは、可変数の観測を符号化して処理する Attention モジュールを通じて、任意のサイズのバッファを利用する方法を学ぶことができます。 

Attention モジュールは、例えば、ゲーム内のキャラクターに飛び道具の避け方を学ばせる必要があるが、シーン内の飛び道具の数が一定ではないような状況で素晴らしいソリューションとして機能します。下の動画では、飛び道具が位置を表す 2 つの数値と速度を表す 2 つの数値の合計 4 つの数値で表されています。シーン内の各飛び道具に対して、この 4 つの数値が飛び道具の観測バッファーに追加されます。エージェントは、衝突軌道に乗っていない飛び道具を無視して、より衝突する可能性が高い飛び道具に特に注意を払うことを学習することができます。

さらに、エージェントはシーン内のエンティティ間の関係に基づいて、エンティティの重要度を学習することができます。たとえば、タイルを昇順に並べる方法を学ぶ必要がある場合、エージェントはすべてのタイルの情報に基づいて、次に並べるべき正しいタイルを把握することができます。この新しい環境は「Sorter」という名前でサンプル環境の一部として提供されていますので、ダウンロードしてお使いください。

 

可変長の観測データをプロジェクトに取り入れる方法については、ドキュメントをご覧ください。

タスクのパラメーター化:1 つのモデルで全体の規則を定める

ビデオゲームのキャラクターは、様々なゲームモードで複数のタスクに当たることがよくあります。このような場合、複数の行動を別々に学習させ、それらを入れ替えるという方法があります。しかし、複数のタスクを同時に処理できるようなモデルを 1 つだけ学習させられればそちらの方が好ましいです。モデルを 1 つにすることで、完成したゲーム内でのメモリ使用量を減らすことができます。また、モデルが複数のタスクにわたってニューラルネットワークの一部を再利用できるため、全体的なトレーニング時間を短縮することができます。そのため、最新のリリース(リリース 17)では、ハイパーネットワークを使って 1 つのモデルで複数の動作をエンコードできる機能を追加しました。 

実際には、「goal signal」と呼ばれる新しいタイプの観測と、「ハイパーネットワーク」と呼ばれる小さなニューラルネットワークを使って、別の大きなニューラルネットワークの重みの一部を生成します。この大きなネットワークは、エージェントの動作に関する情報を与え、動作を起こすニューラルネットワークがエージェントの目標に応じて異なる重みを持つことを可能にしつつ、目標の間で必要に応じて共有される部分を維持するものです。

下の動画は、エージェントが ML-Agents のサンプルにある 2 つのタスク(WallJumpPushBlock)を同時に解決しているところです。手前の床の色が緑ならば、エージェントはブロックを緑のゾーンに押し込まなければなりません。一方、右上のマスが緑ならば、エージェントは壁を飛び越えて緑のマスに入らなければなりません。

goal signal を使ったタスクのパラメーター化をプロジェクトに実装する方法については、ドキュメントをご覧ください。

拡張パッケージから昇格した機能

グリッドセンサー

ML-Agents called Grid Sensor

2020 年 11 月に、Eidos が「グリッドセンサー」と呼ばれる ML-Agents の新しいタイプのセンサーを開発したことに関する記事を書きました。このグリッドセンサーの実装は当時の拡張パッケージに追加されましたが、その後、追加実装を繰り返し、今回の最新リリースにおいてメインの ML-Agents パッケージに昇格させました。 

Match-3

ML-Agents のリリース 10(2020 年 11 月)では、新しく Match-3 環境を導入し、マッチ 3 ゲームの学習を可能にするユーティリティを拡張パッケージに追加しました。その後、Code Monkey の協力のもと、チュートリアル動画を公開しました。グリッドセンサーと同様に、マッチ 3 ゲームをトレーニングするためのユーティリティを、最新のリリースでは ML-Agents のコアパッケージの一部としました。

パフォーマンスの改善

私たちは、ML-Agents を改善し続けるために仕事をしています。推論時に割り当てられるメモリ量に関するご意見をいただいた後、速やかに割り当て量の大幅な削減を実現しました。以下の表は、バージョン 1.0(2020 年 5 月リリース)と 2.0(2021 年 4 月リリース)の間の、2 つのサンプルシーンにおけるガベージコレクションのメトリクス(アカデミーステップあたりのキロバイト数)の比較を示しています。これらのメトリクスには、Barracuda(ML-Agents がクロスプラットフォーム推論のために利用している Unity 推論エンジン)が使用するメモリは含まれていません。

a comparison of the garbage collection metrics in two of our example scenes between versions 1.0 and 2.0

ML-Agents Cloud のアップデート

v1.0 のブログ記事で、はじめて ML-Agents Cloud の詳細をご紹介しました。ML-Agents Cloud は、クラウド上で複数の学習セッションを並行して実行することで、効率よく時間を使って実験を行うことができるサービスです。現在、ML-Agents Cloud のコア機能では、以下の機能を提供しています。

  1. ML-Agents を実装したゲームのビルドをアップロードする(C#)

  2. トレーニング実験を開始、一時停止、再開、停止します。学習実験を開始、一時停止、再開、停止する。同時に複数の実験を開始したり、ハイエンドマシンを活用して各学習実験において多数の Unity インスタンスを同時に生成することができ、すべての実験を短時間で完了させることができる

  3. 複数の学習実験の結果をダウンロードできる

2021 年の残りの期間は、アルファ版をご利用されている皆さんからのフィードバックに基づいて、ML-Agents Cloud の開発を加速させる予定です。注力する追加機能としては、結果のビジュアライズ、ウェブ UI からの実験管理、ハイパーパラメーターチューニングの活用などを予定しています。アルファ版プログラムへの参加者は現在も募集中ですので、ご興味のある方は、こちらからご登録ください。

今後のリリース予定

この記事では、ML-Agents が複雑な協調型ゲームをサポートできる状態に近づくために行った 3 つの改善についてそれぞれご紹介しました。また、最近ツールキットに追加されたサンプル環境についてもご紹介しました。ここでもう 1 つ、「Dodgeball」と名付けた環境についてご紹介したいと思います。近日公開予定の Dodgeball は、チームが対抗するゲームにおいて、3 つの機能が一緒に働く様子をお見せするものです。エージェントは、複雑な環境の中で推論を行い、複数のモードを解決し、チームメイトと協調し、シーン内のさまざまなエンティティを観測する必要があります。この環境はこれから数週間以内に公開する予定で、その解説を行うブログ記事の準備も現在進めております。この記事では、エージェントがドッジボールの学習を行っている様子を動画でご覧ください。 

謝辞

Unity の ML-Agents チームを代表して、何年にも及んでいる長い開発を継続的に支えてくださっている皆さんにお礼申し上げます。

機械学習とゲームが融合するこのエキサイティングな分野で働いてみたいとお考えの方は、いくつかのポジションで採用を行っておりますので、ご応募をご検討ください。ご応募はこちらのサイトから行っていただけます。

皆様からのフィードバックをお待ちしております。Unity ML-Agents ツールキットに関するご意見・ご感想は、こちらのアンケートフォームからご送信いただくか、直接 ml-agents@unity3d.com までメールでお寄せください。何か問題が発生した場合は、遠慮なく ML-Agents の GitHub issues ページにご投稿ください。その他、一般的なコメントや質問については、Unity ML-Agents のフォーラムでお知らせください。

Is this article helpful for you?

Thank you for your feedback!

取り上げているトピック
関連する投稿