2011-09-10 12 views
0

この質問はかなり長いので、最下部にある崖のメモを読むことができます。 私は遺伝的アルゴリズムとニューラルネットワーク(遺伝的アルゴリズムを使ってニューラルネットワークを進化させている)を試していますが、いくつかの問題に遭遇しています。特に進化が非常に遅く収束し、結果!しかし、多くの設定(人口の大きさ、突然変異率、交叉率など)があるので、これはコード内のいくつかのバグが原因であるのか、それとも前述のパラメータの貧弱な選択をしたのか分かりません。あるいは、この種のネットワークが非常に遅いのが普通であるときには、結果が早すぎると予想しているかもしれません。今遺伝的アルゴリズムを用いたニューラルネットワークの質問

いくつかの例は: は20例でトレーニングセットし、以下の設定で、遺伝的アルゴリズムを提供する、2つの数の合計を作るためにネットをトレーニング:NUM_TOURは個体数がある

#define MUTATION_RATE  0.5 
#define MAX_PERTURBATION 1 
#define POP_SIZE   500 
#define CROSSOVER_RATE  0.7 
#define NUM_TOUR   35 
#define ELITISM    4 

トーナメントを実行するために選択され、ELITISMは、現在の世代の最良の個体を次の世代に伝播させるコピーの数です。 これらの設定とちょうど2入力1出力ニューロンのネットワークでは、2500世代後に2つの数字の合計をかなり正確に与えるように訓練することができます。以下のような:同じ設定を使用して

2 + 2 = 4.01 

または

1 + 5 = 5.98 

、および2入力、1つの出力及び2個のニューロンの1つの隠れ層とのネットワーク、私はそれが2つの数値を乗算する方法を学ぶようにしよう:2500世代後、私は良い結果の近くにはいません(0 * 10 = 3.7など)。

私は、自分のコードや設定に何か問題があるかどうかを知るネットワークを思いつくことができないと思いますので、私は他の操作を試しませんでした。私がトーナメント選択を使用していると言ったように、クロスオーバは、2つの親のうちの1つから等しい確率で各遺伝子を選択し、0からMAX_PERTURBATIONまでの値を現在の値に加算または減算することによって行われる。

私は明らかに間違っていますか?あなたは、どのようなチュートリアルでどのようにニューラルネットワーク(どのような種類のクロスオーバーが最適か、どのような人口のサイズが良いか、また変異率など)を与えることができる遺伝的アルゴリズムの使用を最適化する方法について議論することができますか?私は任意のヒント?

クリフでもbeignない、2つの数値を乗算する方法を学ぶことができ 私は遺伝的アルゴリズムを用いて訓練ますニューラルネットワークを作成していますが、それは非常に悪い行動だと指摘しています。いくつかの例が完全なテキストで示されています:私はこれを最適化するのに役立つものを探しています。あるいは私のコードに何か間違いがあるかもしれません。

私はここに私のコード(C++)をアップロード:http://www.megaupload.com/?d=NW8FPZ6Mを私は最も可能性の高い、誰もがそれを見てするつもりはありませんが、それは

+0

個体の体重はいくつですか?私の専門は、NAsではなく、GAにあります。私はしばらく後にそれを理解しようとしました。それはあなたの突然変異率が適切かどうかの問題に影響します。 –

+0

各被害者は、ネットワーク内の重みの総数に等しい重みの数を持つので、2入力2隠れ、1出力ニューロンでは6重みを持ちます。とにかく私は自分のコードにバグを修正しました。その結果、多くの重複した人がいましたが、問題の多くは解決されましたが、GAのパラメータを選択する方法に関する一般的なガイドラインを検討しています。 –

答えて

1

ないニューラルネットワークの専門家が、私の中を試みる価値があることを知っていますニューロンの挙動は線形であり、出力は係数の乗算された入力の和である。遺伝的アルゴリズムが求めているのは、これらの係数です。ニューロンの出力をニューロン係数に接続しない限り、入力オペランドは計算中に決して乗算されないため、2つのニューロンしか与えられないので、乗算を計算することはできません。

私の直感は、仮想脳が複数の線形操作で乗算を近似するためには、より多くのニューロンが必要であると私に伝えます。出力値のクランプなど、バーチャルニューロンで非線形操作を導入する必要があるかもしれません。

+0

非線形応答ニューロンもあります。シグモイドはかなり普通です。もし乗法的なニューロンを使う場所があれば、これは実際には楽になるでしょう... – nulvinge

0

あなたのトーナメントのサイズは、35で、非常にです。 500人の人口で、トーナメントのサイズが大きくなると、実際には毎世代の多様性が払拭されます。 7は一般的なトーナメントのサイズで、典型的な3-11の範囲です。

+0

私はそれを知らなかったのです。とにかく私のコードにバグがありましたが、私はただ修正しましたが、これは問題をほぼ解決しましたが、私はまだこのようなパラメータを選択する方法に関する一般的なガイドラインを検討しています。 –

3

私はニューラルネットワークの進化的設計について多くの研究を行いましたが、いくつかのヒントを挙げたいと思います。

ランダムな検索から始める、シミュレートされたアニーリング、クロスオーバーが破壊的な効果につながる場合は通常GAの方がずっと優れている進化戦略など、多くのパラメータを持つGAで始めるのではなく、 NNデザインでは、クロスオーバーは学習パターンを「破壊する」傾向があるため、必ずしも効果的ではありません。数行のコードでESを実装することができ、Simulated Annealingは既にMATLABに実装されています。 MATLABで既に実装されているため、GAを使用しないでください。少なくともそれを単純にしておき、クロスオーバーとエリート主義と珍しい選択メカニズムを取り除く。

また、あなたのアルゴリズムを常に良いニューラルネットワークトレーニングアルゴリズムと比較する必要があります。この方法では、問題が特定のニューラルネットワークにとって難しい(またはほとんど不可能である)ときを知ることができます。

0

神経回路網が小さすぎると思います。隠れたレイヤーにさらにニューロンを追加して、さらにレイヤーを1つ追加してみてください。

関連する問題