Unreal Engine 4&5で機械学習AIエージェントを作成する
マインドメーカーの紹介:https://www.youtube.com/watch?v=erm_pzhapia
BluePrintsの概要:https://youtu.be/tuo423nujek
Discord Group:https://discord.gg/shxfwtmsha
マインドメーカーAIプラグインは、自律型機械学習エージェントをトレーニングするために、UE4およびUE5内のゲームとシミュレーションがOpenAIジム環境として機能することを可能にするオープンソースプラグインです。このプラグインは、学習環境を含む非現実的なエンジンプロジェクトと、非現実的なエンジンからデータを受け取るPython MLライブラリと、エージェントをトレーニングするためのカスタムOpenaiジム環境へのPython MLライブラリとの間のネットワーク接続を促進します。スタンドアロンの機械学習ライブラリは、マインドメーカーのリモートMLサーバーを使用して独自のMLツールを作成している場合のカスタムPythonスクリプトであるか、マインドメーカーのDRLエンジン(Stable-Baselines3 Algorithms)などの事前コンパイルされた学習エンジンである可能性があります。選択したオプションに関係なく、マインドメーカーのAIプラグイン開発者と研究者を使用して、2D、3D、およびVRプロジェクトの機械学習エージェントを簡単にトレーニングできます。
可能なアプリケーションは、ゲームデザインを超えて、さまざまな科学的および技術的な努力にまで及びます。これらには、ロボットシミュレーション、自律運転、生成アーキテクチャ、手続き上のグラフィックなどが含まれます。このAPIは、機械学習の進歩がこれらの分野の多くに到達できる中央プラットフォームを提供します。ゲーム開発者の場合、自己最適化エージェントのユースケースには、NPCの動作の制御(マルチエージェントや敵対などのさまざまな設定)、ゲームデザインの決定、ゲームビルドの自動テストが含まれます。
DRL学習エンジンは、コンテンツ Mindmaker Source DirectoryにあるPythonソースコードと、それを変更するためのPythonソースコードへのリンクに含まれています。現在DRL学習エンジンがサポートしているアルゴリズムには、俳優批評家(A2C)、エクスペリエンスリプレイを備えた効率的なアクタークリティック(ACER)、Kronecker-Factored Trust Region(ACKTR)、Deep Q Network(DQN)、近位政策最適化(PPO)、Soft Actoritic(SAC)、Twin Delated Delied delied related ddpgなどを使用して、俳優批評家(ACER)のサンプル俳優批評家が含まれます。決定論的ポリシーグラデーション(DDPG)。プラグインは、すべてのアプリケーションにカスタムOpenaiジム環境を作成する必要があるのではなく、いくつかの利点を持つUnityのMLエージェントと機能的に類似しています。単一の環境を使用し、MLアルゴリズムに公開するエージェントの観測とアクションを選択するだけです。出来上がり、学習を始めましょう!
マインドメーカープラグインを操作しながら使用する2つの主要なコンポーネント、学習環境を含む非現実的なエンジンプロジェクト、およびエージェントが学習しようとしているものを最適化するために使用するスタンドアロンの機械学習ライブラリがあります。スタンドアロンの機械学習ライブラリは、マインドメーカーのリモートMLサーバーを使用して独自のMLツールを作成している場合のカスタムPythonスクリプトであるか、マインドメーカーDRLエンジン(Stable Baselines Algorithms)などの事前コンパイルされた学習エンジンである可能性があります。
MindMakerと組み合わせてさまざまなMLライブラリを使用して実験するには、MindMaker Remote ML Serverを使用します。これにより、事前にコンパイルされたマインドメーカーDRLエンジンを使用するのではなく、独自のPython学習エンジンをカスタマイズできます。リモートMLサーバーを使用するには、次の手順に従ってください。
たとえば、マルチエージェントシナリオでは、単一の学習環境に接続された複数のMLクライアントを採用したい場合は、Mindmaker ServerとPluginを使用して実行できます。
複数の学習エージェントを作成するには、最初に青写真の例の1つに示されているように、学習エージェントをセットアップします。新しい学習エージェントごとに、新しいAIコントローラーのSocketioポート設定を1で増やす必要があります。サーバーの起動時に、Mindmaker.exeの新しいインスタンスごとに新しいサーバーポート番号が自動的に作成されます。
たとえば、2番目の学習エージェントをマップに追加すると、最初の学習エージェントにある同じ機能、起動マインドメーカーの青写真ノードなどが必要になりますが、これをポート3000に割り当てる代わりに、青写真でポート3001を割り当てます。青写真のSocketioポート設定を変更することに加えて、Connect Socketio BluePrint関数を変更するために変更する必要もあります。たとえば、「http:// localhost:3001」を作成した新しい番号にinアドレスとポートを変更する必要があります。
これが完了したら、2番目の学習エージェントに接続するMindmaker_client.pyファイルの2番目のインスタンスを作成する必要があります。トレーニングは同時に、並行して実行できます。 Mindmaker_client.pyに必要な唯一の変更は、ファイルの下部にあるsio.connect( 'http:// localhost:3000')をsio.connect( 'http:// localhost:3001')またはあなたが働いている新しい学習系列人の数を変更することです。 5つの学習エージェントがいる場合、クライアントの5つのインスタンスが実行され、それぞれが3005までずっと新しいポート番号があります。
stapableBaseLinesを使用した模倣学習3マインドメーカーPythonソースは、サポートされているstableBaseLines模倣学習アルゴリズムを使用して模倣学習をサポートするために変更できます
トレーニングされたモデルを保存するには、起動マインドメーカー関数の「トレーニング後の保存モデル」チェックボックスをTrueに設定します。トレーニングエピソードの数がゼロ以外の数であることを確認する必要があります。トレーニングが完了した後、モデルは保存されます。訓練されたモデルをロードするには、「トレーニング後のモデルの保存」チェックボックスを外し、代わりに起動マインドメインメイン機能の「プリトレーニングモデルのロード」チェックボックスをTRUEに設定します。また、トレーニングが発生しないため、トレーニングエピソードの数をゼロに設定する必要があります。評価のエピソードの数がゼロ以外の整数であることを確認してください。これは、事前に訓練されたモデルが学習を実証する方法だからです。モデルは、コンピューターの「AppDataローミング」フォルダーにローカルに保存されています。
デフォルトでは、MindmakerはWindowsマシン上のAppData/Roamingディレクトリにのみ保存します。テンソルボードロギングを有効にするには、次の手順に従ってください。
これは3段階のプロセスです。エージェントが実行できるアクション、報酬基準がどのようになるか、およびエージェントが環境についてどのような観察を行う必要があるかを決定する必要があります。
マインドメーカーを起動する--------->アクションを受信--------> OBSを作成----->報酬をチェックしてください--------> obsとrwrdをマインドメーカーに送信します------アクションを受信するために戻ります
学習プロセスでは、マインドメーカー学習エンジンは、エージェントが使用している観測スペースと、エージェントが利用できるアクションの総数で構成する必要があります。報酬情報を初期化したときに提供する必要はありません。これは、トレーニング中にのみ遭遇します。
学習の全体的なプロセスは、発売されて非現実的なエンジンに接続された接続が行われると、マインドメーカー学習エンジンが非現実的なエンジンエージェントが服用するランダムアクションの提供を開始し、それに応じて、UEを持つエージェントは、アクションが取得された後に行われた観測値のリストを返信します。上記の図を参照してください。多くのエピソードで、マインドメーカーが採用しているアルゴリズムは、UEから受け取った観察と報酬に応じてエージェントアクションを最適化します。このプロセスは、マインドメーカーと一緒に採用することを選択した機械学習アルゴリズムに関係なく同じです。この情報により、使用される学習アルゴリズムがマインドメーカーがエージェントのアクション決定の最適化を開始し、理想的には一貫して報酬を受け取るために必要なシーケンスを発見します。ランダムアクションと意図的なアクションとの間のトレードオフは、マインドメーカー、たとえば安定したベースラインで使用するために選択したMLライブラリの探索/搾取パラメーターで制御されます。このプロセスは、トレーニングのエピソードごとに繰り返されます。固定された数のトレーニングエピソードの後、アルゴリズムを使用してランダムなアクションを実行する代わりに「最適な」アクションを予測することに完全に切り替えることができます。
マインドメーカーは、Openaiジム互換形式で非現実的な環境を包むことで機能し、Openaiジムで作業するように設計されたMLライブラリを非現実的なエンジン環境に展開できるようにします。オープンAIジムを使用する目的は、学習に関連する要因、つまりエージェントの観察、報酬、およびアクションを受信するための形式を標準化することです。そのため、ML AlgorityHMは、特定のタスクごとに再洗浄する必要なく、学習の関連変数にアクセスできます。 Openaiジムで動作するアルゴリズムは、標準化されたOpenAIプロトコルを使用しているあらゆる環境やエージェントで動作するよりも操作できます。
Mindmaker Learning Engineの構成最初に、学習エージェント向けのUnreal Engine内の起動マインドメーカー機能を構成する必要があります。これは、マインドメーカー内のAction_Space変数を設定して、エージェントが利用できるアクションの総数に等しく等しくすることによって行われます。また、エージェントが受け取ろうとしている報酬に関して、エージェントが使用する観測値の数とタイプに一致するように、oberveration_space変数を構成する必要があります。デフォルトでは、観測はアレイとしてUnrealから渡されます。プロジェクトの例を参照してください。エージェントが使用するのに必要だと思う観測数に応じて、観察のサイズは変更されます。
報酬 - 報酬は、エージェントが学習または最適化するために選択した特定の基準に従って設定される変数です。 UE4ブループリントでは、ブランチノードを使用して、報酬をアクティブにするためにどの環境条件とエージェントアクションを満たす必要があるかを判断します。これは、Socketio ConnectionによってMindMakerに渡されるよりもです。プロジェクトの例を参照してください。アクション - これは、エージェントがとったアクションを表す整数値を含む変数です。また、エージェントが利用可能なアクションの総数を決定し、マインドメーカーの最大をこの数に等しく設定する必要があります。観察 - あなたが扱う最も難しい変数をperhapseします。これを正しく設定するための鍵は、報酬関数で参照されている他の環境基準に加えて、エージェントアクション自体が観測変数に含める必要があることを理解することです。エージェントは、それがどのような行動や行動が報酬に影響を与え、環境変数が変化したかを知る必要があります。これらは、アレイとしてマインドメーカー学習エンジンに渡され、その中の観測変数で更新されます。
ここでは、Mindmaker BluePrints関数の主なコンポーネントであるLaunchMindmaker Blueprintノードの個々のパラメーターについて説明します。
RLアルゴリズム - これは、エージェントをトレーニングしたいRLアルゴリズムのフレーバーを選択できる場所です。ドロップダウンメニューには10のオプションがあり、各アルゴリズムに独自の長所と短所があります。関連するアルゴリズムとそのユースケースの利用可能な詳細については、こちらでご覧いただけます。 https://spinningup.openai.com/en/latest/spinningup/rl_intro2.html
NUM Train EP - これは、エージェントが引き受けることを望むトレーニングエピソードの数を表す整数入力です。トレーニングエピソードの数が多いほど、トレーニング中に獲得する戦略的行動に移行する前に、エージェントがより多くの調査を行います。エージェントが学習しようとしているアクションの複雑さは、通常、必要なトレーニングエピソードの数を決定します。より複雑な戦略と行動には、より多くのトレーニングエピソードが必要です。
Num Eval EP - これは整数入力でもあり、トレーニング後にエージェントが受ける評価エピソードの数を表します。これらは、エージェントが学習した行動を実証するエピソードです。
連続アクションスペース - これは、エージェントが連続アクション空間を使用しているかどうかを決定するブール入力です。連続アクション空間とは、たとえば、エージェントが操縦することを学んでいる場合、エージェントが取ることができるアクションが無限にあるものであり、ステアリングカラムが変更できる角度の範囲は0〜180の間の小数値です。エージェントに無限の数のアクションまたは取ることができる有限数のアクションがあるかどうかを使用する最初に特定する必要があります。アクション空間は連続的または離散的でなければならず、両方にすることはできません。
離散アクションスペース - これは、エージェントが離散アクション空間を使用しているかどうかを決定するブール入力です。離散アクション空間とは、AIが1つのスペースのみを移動できるか、1つのスペースを離れることができるかなど、エージェントが実行できるアクションが有限であるものがあります。その場合、利用可能な2つのアクションのみがあり、アクション空間は個別です。ユーザーは、マインドメーカーを使用する前にエージェントが使用するアクションスペースの種類を決定し、それに応じてこれらの値を設定します。
アクション空間形状 - これにより、エージェントが利用できるアクションの下限と上限を定義します。離散アクションスペースを使用している場合、これは単にエージェントが利用できるアクションの総数です。たとえば、2または8です。連続アクションスペースを使用している場合、物事は複雑であり、アクション空間の低境界と高境界を別々に定義する必要があります。これを行うための形式は次のとおりです。低=低境界、高= highboundary、shape =(1、)この場合、低境界は-100.4などの値であり、高境界は298.46などの値です。これらの境界間のすべての小数値は、エージェントが利用できるアクションを表します。そのようなアクションの配列がある場合は、形状部分を変更してこれを反映することができます。
観測スペースの形状 - 適切に言えば、この入力はオープンAIカスタム環境クラスのPython派生物であり、アクションをとった後にエージェントが利用できる観測の下部と上限を定義します。そうするための形式は次のとおりです。Low= np.Array([lowboundary])、high = np.array([highboundary])、dtype = np.float32。報酬を受け取るために3つの特定のアクションを実行する必要があるエージェントを想像してください。その観測スペースは、これらの3つのアクションへのアクセスを含める必要があります。したがって、観測の配列には、それぞれが独自の境界を持つ3つの異なる値を含める必要があります。たとえば、そのようなアクション空間は次のように定義される場合があります:low = np.array([0,0,0])、high = np.array([100,100,100])、dtype = np.float32観測スペースには、その値への参照を含める必要があります。エージェントが報われるために5つの条件を満たす必要がある場合、これらの5つの条件のそれぞれがエージェントの観測スペースの一部でなければなりません。
訓練された事前のモデルをロード - これは、エージェントに以前に保存されていた事前に訓練された動作をロードするかどうかを決定するブール値です。これをtrueに設定する場合は、保存 /ロードモデル名の入力ボックスにファイルの名前を指定する必要があります。すべてのモデルは、デフォルトでコンピューターのアプリデータローミングディレクトリに保存されます。
トレーニング後にモデルを保存します - これは、トレーニング後に学んだ動作を保存するためにエージェントに必要かどうかを決定するブール値です。これをtrueに設定する場合は、保存/ロードモデル名の入力ボックスにファイルの名前を指定する必要があります。すべてのモデルは、デフォルトでコンピューターのアプリデータローミングディレクトリに保存されます。
モデル名を保存/ロード - これは、保存またはロードするモデルの名前を表す文字列です。ファイルは、コンピューターのアプリデータローミングディレクトリに保存されます。
カスタムパラメーションを使用します - これは、選択したアルゴリズムのストックバージョンを使用するか、そのパラメーターを変更するかどうかを決定するブール値です。カスタムパラメーターを使用する場合、これらはカスタムパラメーター構造変数を介してアクセスできます。それらをクリックすると、たとえばA2cparamsなど、これらの構造内で設定できるすべての値が表示されます。各アルゴリズムのパラメーターの詳細な内訳は、https://stable-baselines.readthedocs.io/en/master/にあります。
プロジェクトのサンプルプロジェクトの機能のサンプルリストを以下に示します。マインドメーカーとUnrealエンジンの間で情報がどのように渡されるかを理解してください。おもちゃの問題に関連するすべてのUEアセットは、Assets/DeeplearningNPCフォルダーに含まれています。特に重要なのは、ai_character_controle_bp blueprintのai_character_controle_bpと呼ばれる青写真です。すべての環境変数は、マインドメーカースタンドアロンアプリケーションに渡すために構成されています。これらには、次の重要な機能が含まれます
負荷感覚入力関数 - AIが環境環境制御機能のセンシングまたは操作のためにAIがアクセスできるオブジェクトをインポートします。
アクション空間関数を定義 - すべての可能なエージェントアクションを、RLアルゴリズムによる評価のためにスタンドアロンアプリケーションに渡すことができる単一の数値にエンコードします
LaunchMindmaker関数 - これにより、Playの開始時にスタンドアロンアプリケーションを呼び出して、UE環境から評価データを開始できます。これが開始された後、RLアプリケーションは、暗闇の中で暗闇の中で検索しているように、それ自体が生成するランダムなアクションで環境の調査を開始します。ライトは報酬であり、UE関数チェック報酬機能で指定されています。 LaunchElarningEngineは、エージェントが取ることができるアクションの数、トレーニングするエピソードの総数、トレーニング後にエージェントが取得した戦略を表示するエピソードの数など、いくつかの基本的なUE環境情報をスタンドアロンアプリケーションに渡します。すべてのエージェントのランダムトレーニングを表示するには、時間がかかりすぎます。
受信機能 - 発射学習エンジン機能が始まった後、次の発射機能は再eveActionです。これにより、スタンドアロンアプリケーションによって選択されたアクションが受信され、環境内のエージェントの場所を更新する、新しいアクションが報酬条件を満たすかどうかを確認するなど、多くのフォローアップ手順を実行します。トレーニングでエージェントアクションを表示し、次のエピソードでスタンドアリューションに戻ることができるようにエージェントの観察を更新します。
観察機能を作成する - これの目的は、今後のアクションに続いて、その環境に関するエージェントの観察を更新することです。これらには、たとえば、環境を備えたエージェントの場所や、最後にアクションを取ってから変更されたその他の環境データが含まれます。これらはカスタム構造変数に保存されます。
CheckReward - これは、環境内のエージェントの報酬条件を指定します。エージェントがアクションを実行した後にこの報酬条件が満たされた場合、この情報は、続く送信観測関数のスタンドアロンアプリケーションに渡されます。 [観測関数を送信] - エージェントが行った新しい観察結果と報酬情報を取り、それらをスタンドアロンアプリケーションに渡します。これは、RLアルゴリズムが採用したアクションが良いものであるかどうかを評価し、それに応じて戦略を更新する方法です。この関数が発射された後、ゲームの1つの反復またはエピソードが完了し、プロセスがAD Infinitumを繰り返します。
特定のタスクには、エージェントの動きを視覚化することが法外に時間がかかることが証明される場合、長時間のトレーニングが必要になる場合があります。そのため、特定の例では、エージェントの動きを視覚化することは無効になっていますが、例が実行されて完了すると、トレーニングがバックグラウンドで行われ、エージェントは獲得した戦略を実証します。
この場合、ランダムには、エージェントが乱数ジェネレーターを使用して、トレーニング中に利用可能なアクションを選択していることを意味します。 RLアルゴリズムは、これらのランダムアクションの結果と受け取った報酬の結果を観察し、この情報を使用して「搾取」フェーズでより良いアクションを選択します。これが学習された戦略の開発方法です。
学習中に収集する情報は、エージェントの各ランダムアクションの後に生成される一連の観測の形をとります。 Mindmakerプラグインを使用している場合、配列の正確な形状は、Mindmaker Blueprint関数の起動の観察サイズプロパティで定義され、エージェントがその特定のゲームまたは学習タスクで観察するために必要な変数に依存します。学習タスクまたはゲームに応じて変更されます。
エージェントは、ゲームデザイナーによって彼らにさらされている環境の部分のみを認識します。マインドメーカープラグインを使用する場合、これらの観察結果は、Unreal Engine内のMake Observations Blueprint Function Callに入力されます。これにより、発売マインドメーカーの青写真関数の観測サイズのプロパティによって定義された形状の数字の配列が生成されます。観測は、エージェントが学習するために必要なデータのみを構成するように選択する必要があります。そうしないと、トレーニングは法外に時間がかかる可能性があります。
バニラQ学習では、ニューラルネットワークは必要ありません。学習は表形式で保存されます。 Mindmaker Deep Renection Learningを使用する場合、RNN、CNNなどを含むさまざまなニューラルネットワークアーキテクチャから選択できます。各アルゴリズムのカスタムプロパティで、Mindmaker Blueprint Function Callの各アルゴリズムのカスタムプロパティ内にこれらを設定できます。
カスタムディープ強化学習環境の作成
イントロ。ビデオゲームAIの学習を強化する
強化学習 - それは約束と危険です
安定したベースラインドキュメント