この質問はかなり長いので、最下部にある崖のメモを読むことができます。 私は遺伝的アルゴリズムとニューラルネットワーク(遺伝的アルゴリズムを使ってニューラルネットワークを進化させている)を試していますが、いくつかの問題に遭遇しています。特に進化が非常に遅く収束し、結果!しかし、多くの設定(人口の大きさ、突然変異率、交叉率など)があるので、これはコード内のいくつかのバグが原因であるのか、それとも前述のパラメータの貧弱な選択をしたのか分かりません。あるいは、この種のネットワークが非常に遅いのが普通であるときには、結果が早すぎると予想しているかもしれません。今遺伝的アルゴリズムを用いたニューラルネットワークの質問
いくつかの例は: は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を私は最も可能性の高い、誰もがそれを見てするつもりはありませんが、それは
個体の体重はいくつですか?私の専門は、NAsではなく、GAにあります。私はしばらく後にそれを理解しようとしました。それはあなたの突然変異率が適切かどうかの問題に影響します。 –
各被害者は、ネットワーク内の重みの総数に等しい重みの数を持つので、2入力2隠れ、1出力ニューロンでは6重みを持ちます。とにかく私は自分のコードにバグを修正しました。その結果、多くの重複した人がいましたが、問題の多くは解決されましたが、GAのパラメータを選択する方法に関する一般的なガイドラインを検討しています。 –