Unity を検索

Unity AI ― Q 学習を用いた強化学習

2017年8月22日 カテゴリ: Engine & platform | 8 分 で読めます
取り上げているトピック
シェア

Is this article helpful for you?

Thank you for your feedback!

Unity AI に関するブログシリーズ第 2 回となる本記事では、前回に引き続きコンテクスチュアルバンディット問題を完全な強化学習問題へ拡張する方法を解説します。その一環として、学習された Q 関数(特定の環境下における特定のアクション実行の長期的価値を予測するもの)によって行動するエージェントの使用方法を示したデモもご提供します。この例では、簡単なグリッドと Q 関数の表のみを使用します。幸運なことに、このベーシックなコンセプトがほぼ全てのゲームに当てはまります。Q 学習のデモは、こちらのリンクからお試しにいただけます。以下本文では、Q 学習の仕組みに関する詳細なウォークスルーをお届けします。

Q 学習アルゴリズム

コンテクスチュアルバンディットに関する前回のまとめ

強化学習を行う目的は、特定の環境内で、未来の報酬を最大化させるための行動を学習できるエージェントをトレーニングすることです。本シリーズ前回の記事では、この環境は比較的静的なものでした。前回の環境においては、状態とは単純に「3 つの部屋のうちどれにエージェントがいるか」、そしてアクションとは「その部屋の中のどの宝箱を開けるかの選択」でした。そしてアルゴリズムは、この状態とアクションの各組合せの Q 関数(Q(s, a))を学習するものでした。この Q 関数は、特定の状態下での特定のアクションの実行によって時間と共に獲得が予測される未来の報酬を表すものでした。この問題を「コンテクスチュアルバンディット」と呼びます。

強化学習問題

このコンテクスチュアルバンディットの例は、2 つの要素(疎な報酬状態の移行)が欠けているために、完全な強化学習問題たり得ませんでした。「疎な報酬」とは、エージェントが、実行する全てのアクションからは報酬を得られない状態です。この報酬は時として遅延する(実際は最適であるアクションを実行したとしても、一連の最適なアクションが実行されるまでは報酬が受け取れない)場合があります。つまり、エージェントが正しい経路を進行していたとしても、その途中の各ステップごとにではなく、経路の最後でしか報酬を受け取れない場合があるということです。これらのアクションのそれぞれは(実行直後には報酬が与えられなかったとしても)最終的な報酬の獲得に不可欠であった可能性があるということです。このため、貢献度分配を実行する(「過去に実行したアクションが、間接的であれ価値のあるものだった」ことをエージェントが学習できるようにする)ための方法が必要です。

前回のコンテクスチュアルバンディットに欠如していた 2 つ目の要素は状態間の遷移です。完全な強化学習問題にはこれが備わっています。状態間の遷移がある場合、アクションは、報酬関数 R(s, a) ⇨ r に基づいて報酬を生成するだけでなく、状態遷移関数 P(s, a) ⇨ s' に基づいて新しい状態も生成します。具体的な例を挙げると、経路に沿って歩くエージェントは、その経路上を進む一歩ごとに、経路上の新しい場所(したがって新しい状態)に置かれます。ゆえにエージェントには、現在の潜在的報酬を最大化するための行動を学習させるだけでなく、それよりさらに大きな報酬をもたらすと分かっている状態に向かって遷移するための行動も学ばせる必要があります。

ベルマン更新

複雑性を高めるこれら 2 つの追加的要素は互いに関連性がないように思われますが、実際にはこれらは直接関連したものです。両方とも、エージェントが置かれる可能性のある未来の状態と、エージェントが受け取る可能性のある未来の報酬との関係を示すものです。少しの知識さえあれば、この関係性を利用して、これらの状況下で最適なアクションを取ることを学習することができます。つまり、「真の」 最適な Q 関数(実際には到達できない可能性のある理論上の関数)の下では、現在の状態とアクションの価値は「即時的報酬 r」+「そのアクションを実行することによってエージェントが次に置かれる状態における、将来的な最大予測報酬の割引」となります(以下参照)。

これはベルマン方程式と呼ばれ、以下のように記述することができます。

上記におけるγ(ガンマ)は割引率で、「エージェントに潜在的な未来の報酬をどの程度考慮させたいか」に関連します。γを 1.0 に設定すると、エージェントは全ての潜在的な未来の報酬を同等に考慮し、永久に続くトレーニングのエピソードにおいては、予測価値は無限に増加し得ます。このため、γは 0 より大きく 1 より小さい値に設定します。通常は 0.7 と 0.99 の間で設定されます。

ベルマン方程式は、Q 関数自体からブートストラッピングすることによって Q 関数を更新する方法を考える上で役立ちます。Q*(s, a) は最適な Q 関数を示しますが、現在の「次の状態の準最適な Q 値予測」も、現在の状態をより正確な方向に調整するために役立ち得ます。主にベースとなっているのは各ステップにおける真の報酬なので、Q 値予測自体が徐々に改善されることは確実です。ベルマン方程式を使用して、以下の通り新しい Q 学習の更新が作成できます。

これは前回のコンテクスチュアルバンディット更新アルゴリズムに類似していますが、Q ターゲットに「次のステップにおける未来の予測報酬の割引」が含まれている点において異なっています。

探索

エージェントが状態空間を適切に探索することを確実にするためには、Epsilon-Greedy(ε-グリーディー) と呼ばれる探索法を使用します。Epsilon-Greedy 法の使用方法は、イプシロン値 ϵ を 1.0 に設定し、エージェントがアクションを実行するたびにそれを少しずつ減少させるだけです。エージェントはアクションを選択する時、貪欲(グリーディー)なアクションである argmax(Q(s, a)) または、確率 ϵ を持つランダムなアクションのどちらかを選択します。直感的に理解できるのは、トレーニングの最初はエージェントの Q 値予測は非常に不正確な傾向にあるが、環境の学習が進み ϵ が減少する従って徐々に Q 関数が環境の真の Q 関数と一致してゆき、それを使用して実行するアクションが徐々に正確性を増していくということです。

Unity で作成した環境『Gridworld』

青いブロックはエージェント、赤いブロックは障害物、緑のブロックはゴールの位置を表します。緑と赤の球体は、GridWorld 内の各状態の予測価値を表しています。

Q 学習エージェントを実際にお見せするために、Unity で簡単な環境『GridWorld』を作成しました。この環境は次の 3 つの要素で構成されています ―[1]環境内にランダムに配置されたエージェント[2]ランダムに配置されたゴール位置(エージェントはゴール位置に向かって移動することを学習する)[3]ランダムに配置された障害物(エージェントはこれを回避することを学習する)。環境の状態 (s) は整数値で、グリッドの位置を表します。アクション (a) は 4 つ(上、下、左、右)あり、報酬 (r) は、ゴールがある状態に移動すると +1、障害物がある状態に移動すると -1、そして(エージェントがゴールに向かって迅速に移動することを促すために)ステップごとに -0.05 が与えられます。各エピソードは、100 ステップ完了後、またはエージェントがゴールあるいは障害物がある状態に移動した時に終了します。前回のチュートリアル同様、エージェントの Q 値は表を使用して保存されます。この表の行は状態を表し、列は可能なアクションを表します。この環境とエージェントのデモは、こちらからブラウザ上でプレイしていただけます。またこちらから、ご自分のゲーム用に修正可能な Unity プロジェクトのダウンロードも可能となっています。エージェントが環境を探索すると『GridWorld』環境内の各状態に色付きの球体が現れます。これは、その状態におけるエージェントの予測 Q 値の平均を表すものです。この球体は、エージェントが適切な方策を学習すると、開始点からゴールまでの直接の値の勾配として表示されます。

今後に向けて

ここでご紹介したエージェントと環境は、Q 学習問題では典型的な表形式になっています。このベーシックな環境は現代的なゲームとは掛け離れているのではとお考えの皆様も、ご心配には及びません。このアルゴリズムが 90 年代に公開されて以来、より幅広くダイナミックな状況で Q 学習の使用を可能にするための重要な開発が数多く行われて来ました。その最も重要なもののひとつは DeepMind 社の開発した Deep Q-Network であり、これは何十もの異なる ATARI ゲームを直接ピクセルからプレイすることを学習するために使用されました。これは、この例のようにルックアップテーブルのみを使用して行うのは不可能なことです。DeepMind 社はこれを実現するために、ディープニューラルネットワーク(DNN)によって制御されるエージェントを利用しました。ニューラルネットワークを使用することで、画面上のピクセルの新しい組み合わせなど、完全に未知の状態に適用可能な汎用 Q 関数の学習が可能となります。

今後、数週間にわたって、一式のアルゴリズムとサンプルプロジェクトを含むインターフェースを公開して参ります。これらは、今回と類似した深層強化学習エージェントのトレーニングを Unity ゲームやシミュレーションで行えるようにするものです。これらのツールでどんなことが可能かを、こちらの動画で簡単にご紹介しています。この初期リリースは限定的なものであり、主には研究、各業界、ゲーム QA テストに携わる方々に向けたものですが、私達は、モダンな深層学習の手法によるゲーム挙動の学習が拓く可能性に胸を高鳴らせています。この開発の発展とともに ML のゲームへの使用(複雑な NPC 挙動やゲームダイナミクスなどの制御)に対する関心が高まることを期待しています。深層学習のゲームへの使用はまだまだ始まったばかりです。Unity では今後も引き続き、皆様とともに、未来への歩みを進めていければと願っています。

2017年8月22日 カテゴリ: Engine & platform | 8 分 で読めます

Is this article helpful for you?

Thank you for your feedback!

取り上げているトピック