8

私が持っているアニメーション エンジンの動作を作成するために、ニューラル ネットワークを使用することにしました。ニューラル ネットワークは、3 つの vector3 と 1 つのオイラー角を、私が持っているすべての体の部分から取り込みます。最初の vector3 は位置、2 番目は速度、3 番目は角速度です。オイラー角は、ボディ パーツの回転角度です。私には7つの体の部分があります。これらのデータ型にはそれぞれ 3 つの float があります。7*4*3 = 84 なので、ニューラル ネットワークには 84 個の入力があります。出力はキャラクタの筋肉にマッピングされます。それらは各筋肉に適用する強さの量を提供し、それらの15があります.

15 のネットワークを 10 秒間同時に実行し、エネルギー使用量が最も少なく、z と x の動きが最も少なく、体のパーツが残りの部分と比較して正しい y 位置にあるかどうか (hips.y > upperleg.y、upperleg.y > lowerleg.y など)、遺伝的アルゴリズムを実行します。私は、隠れ層ごとに 168 個のニューロンからなるニューラル ネットワークを実行しており、8 つの隠れ層があります。キャラクターがまっすぐに立ち、あまり動き回らないようにしています。これを 3000 世代実行しましたが、近づくことさえできませんでした。

ニューラル ネットワークと遺伝的アルゴリズムは、このチュートリアルの C# バージョンです。クロスオーバーの方法を一点からブレンディングに変更しました。

84 の入力と 15 の出力があります。ニューラル ネットワークのサイズはどれくらいですか?

4

2 に答える 2

5

あなたが解決したい問題は非常にトリッキーなものです。「バニラ」GA(特にネットワークに固定アーキテクチャを使用するもの)が(妥当な時間で)解決するとは思えません。また、隠れ層で「適切な数のニューロン」が見つかるとは思いません。

ただし、少し時間をかけたい場合は、多かれ少なかれ同じ問題を扱っているモジュール式ロボットのロコモーション コントロールの HyperNEAT をご覧ください。彼らは、HyperNEAT と呼ばれる非常に高度な GA 手法を使用し、いくつかの良い結果を報告しています。

HyperNEAT は、NEAT (増強トポロジーの神経進化) の上に構築されています。NEAT は、ANN の重みだけでなく、その構造も進化させることができます。単純なネットワークから始めて、目標に到達する (またはあきらめる) まで、徐々にネットワークを複雑にしていきます。

次に、NEAT を少し変更して、さまざまなアクティベーション機能を使用できるようにします。座標系などの一連の点に適用すると、さまざまな「パターン」を生成できます。パターンには、完全/不完全な対称性や周期的な対称性など、いくつかの興味深い特徴があります。このバリアントは、構成パターン生成ネットワークまたは CPPN と呼ばれます。この技術の見事なアプリケーションは、ネットワークを使用して画像を「描画」するPicBreederです。

HyperNEAT では、CPPN を使用して他の ANN を作成します。新しいネットワークの隠れ層は、層のニューロンが 2D/3D 座標系に配置されているかのように想像できる、いわゆる基板によって表されます。次に、考えられるニューロンの各ペア (すべて入力層からすべての非表示まで、すべての非表示からすべての出力まで) について、CPPN を使用して重みを決定します。したがって、間接エンコーディングがあります。

  • それ自体は小さい
  • 最後に任意の大きなネットワークを作成できます
  • 非常に複雑な動作を示すこともあります
  • 現実/自然に現れるパターン (再び、対称性、周期的な動作) は、比較的簡単に出現する可能性があります。アニメーション/効果的な移動には、どちらも非常に有利であることに注意してください (必須ではない場合)。

全体として、複雑な問題を解決するチャンスを与えてくれます。

ご覧のとおり、この手法にはさまざまなレイヤーがあるため、独自に実装するのはそれほど簡単ではありません。幸いなことに、いくつかの優れた実装があり、他の多くのドキュメント、論文、チュートリアルとともに、NEATホームページで見つけることができます。

于 2010-08-17T08:56:48.560 に答える
0

面白いアプローチ!私はしばらく似たようなことを考えていました。あなたが得た結果を知りたいです。

テストする必要がありますが、隠しレイヤーが多すぎると思います。このアプリケーションは、せいぜい 1 つまたは 2 つだけで動作すると思います。

また、フィットネス関数も確認する必要があります。最初は立ち上がる見込みがないという意味で、学習を提供するのは「難しすぎる」のではないかと思います。したがって、あなたが陥る「ローカル ミニマム」とは、最小限の努力で落ちる方法を学ぶことです。あまり役に立ちません。一般に、GA は極小値にかなり悩まされます。

フィットネス機能を向上させるために、フレームごとに直立からの逸脱にペナルティを課すようなことを試してみます. これにより、部分的なバランスを管理するソリューションにいくらかの功績が認められるため、改善の道筋が必要です。あなたがそれらのバランスをとるまで、私はエネルギーの使用についてまったく気にしません.

于 2010-08-16T19:02:02.457 に答える