遺伝的アルゴリズムは、隠れノードの数と人工ニューラル ネットワークで実行されるトレーニングの量を最適化する最も効率的な方法ですか?
Matlab の NNToolbox を使用してニューラル ネットワークをコーディングしています。私は最適化手法の他の提案を受け入れますが、GA に最も精通しています。
遺伝的アルゴリズムは、隠れノードの数と人工ニューラル ネットワークで実行されるトレーニングの量を最適化する最も効率的な方法ですか?
Matlab の NNToolbox を使用してニューラル ネットワークをコーディングしています。私は最適化手法の他の提案を受け入れますが、GA に最も精通しています。
実際、NN に関して GA を使用して最適化できることは複数あります。構造を最適化できます(ノード数、レイヤー、アクティベーション関数など)。GA を使用してトレーニングすることもできます。つまり、重みを設定します。
遺伝的アルゴリズムは決して最も効率的ではありませんが、通常、どの数値を使用するかについてほとんど手がかりがない場合に使用されます。
トレーニングには、バックプロパゲーション、ネルダー ミードなどを含む他のアルゴリズムを使用できます。
隠しノードの数を最適化したいとおっしゃいましたが、このためには、「最適」とはほど遠いものの、遺伝的アルゴリズムで十分かもしれません。検索しているスペースはおそらく小さすぎて遺伝的アルゴリズムを使用できませんが、それでも動作し、afaik は既に matlab に実装されているため、大したことはありません。
トレーニング量を最適化するとはどういう意味ですか? エポックの数を意味する場合は、それで問題ありません。トレーニングは開始時の重みに何らかの形で依存しており、通常はランダムであるため、GA に使用されるフィットネス関数は実際には関数ではないことを覚えておいてください。
ニューラル ネットワークと遺伝的プログラミングの良い例は、NEAT アーキテクチャ (Neuro-Evolution of Augmenting Topologies) です。これは、最適なトポロジーを見つける遺伝的アルゴリズムです。また、隠しノードの数を抑えるのに優れていることも知られています。
彼らはまた、ネロと呼ばれるこれを使用してゲームを作成しました. 非常にユニークで非常に驚くべき具体的な結果です。
スタンリー博士のホームページ:
http://www.cs.ucf.edu/~kstanley/
ここでは、彼が発明者であるため、NEAT に関連するほぼすべてのものを見つけることができます。
遺伝的アルゴリズムは、ニューラル ネットワークの最適化に有効に適用できますが、何をしたいかについて少し考える必要があります。
Back-Propagation などのほとんどの「古典的な」NN トレーニング アルゴリズムは、ニューロンの重みのみを最適化します。遺伝的アルゴリズムは重みを最適化できますが、これは通常非効率的です。ただし、あなたが求めていたように、ネットワークのトポロジとトレーニング アルゴリズムのパラメーターを最適化できます。ただし、「過度に訓練された」ネットワークの作成には特に注意する必要があります。
修正された遺伝的アルゴリズムを使用したもう 1 つの手法は、逆伝播の問題を解決するのに役立ちます。バックプロパゲーションは通常、極小値を見つけますが、正確かつ迅速に見つけます。ラマルク GA などで遺伝的アルゴリズムを逆伝播と組み合わせると、両方の利点が得られます。この手法については、GAUL チュートリアルで簡単に説明します。
目的関数が連続的でない場合、遺伝的アルゴリズムを使用してニューラル ネットワークをトレーニングすると便利な場合があります。
これに遺伝的アルゴリズムを使うべきかどうかはわかりません。
遺伝的アルゴリズムの初期ソリューション母集団は、ニューラルネットワークのトレーニングセットで構成されていると思います(特定のトレーニング方法が与えられた場合)。通常、初期ソリューションの母集団は、問題に対するランダムなソリューションで構成されます。ただし、ランダムトレーニングセットは実際にはニューラルネットワークをトレーニングしません。
遺伝的アルゴリズムの評価アルゴリズムは、必要なトレーニングの量、特定の問題を解決するためのニューラルネットワークの品質、および隠れノードの数の重み付けされた平均になります。
したがって、これを実行すると、ニューラルネットワークの品質(=トレーニング時間、隠れノードの数、ネットワークの問題解決機能)の点で最高の結果をもたらすトレーニングセットが得られます。
それとも、まったく異なるアプローチを検討していますか?
あなたが取り組んでいる問題の種類は完全にはわかりませんが、GA はここでは少しやり過ぎのように聞こえます。使用しているパラメーターの範囲によっては、網羅的な (またはインテリジェントでない) 検索が機能する場合があります。最初のいくつかの値について、隠しノードの数に関して NN のパフォーマンスをプロットしてみてください。私の経験では、多くの NN のパフォーマンスは驚くほど早く頭打ちになります。隠しノード番号のどの範囲が最も理にかなっているのかをよく理解できるかもしれません。
多くの場合、NN のトレーニング反復についても同じことが当てはまります。より多くのトレーニングはネットワークをある程度まで支援しますが、すぐに大きな効果がなくなります。
ほとんどの場合、これらの NN パラメーターは非常に複雑な方法でパフォーマンスに影響を与えることはありません。一般に、それらを増やすとしばらくの間パフォーマンスが向上しますが、その後リターンが減少します。この種の単純な曲線で適切な値を見つけるために GA は実際には必要ありません。隠しノード (またはトレーニングの反復) の数によって実際にパフォーマンスが複雑に変動する場合は、GA などのメタヒューリスティックが適している可能性があります。ただし、そのルートを取る前に、力ずくのアプローチを試してみてください。
最小の解から始めてニューロンの数を増やすことができるので、遺伝的アルゴリズムは良い考えだと私は言いがちです。最適点を見つけたい「品質関数」は滑らかで、凹凸が少ない可能性が非常に高いです。
この最適なNNを頻繁に見つける必要がある場合は、最適化アルゴリズムを使用することをお勧めします。あなたのケースでは、関数の評価に費用がかかる問題に最適な数値レシピで説明されている準ニュートンを使用することをお勧めします。