質問

遺伝的アルゴリズムは、隠れノードの数と人工ニューラルネットワークで行われるトレーニングの量を最適化する最も効率的な方法ですか?

MatlabのNNToolboxを使用してニューラルネットワークをコーディングしています。最適化手法に関する他の提案は受け付けていますが、GAには最も精通しています。

役に立ちましたか?

解決

実際には、NNに関してGAを使用して最適化できるものが複数あります。 構造を最適化できます(ノード、レイヤー、アクティベーション関数などの数)。 GAを使用してトレーニングすることもできます。つまり、重みを設定します。

遺伝的アルゴリズムは決して最も効率的ではありませんが、通常、使用する数字についてほとんど手掛かりがない場合に使用されます。

トレーニングには、バックプロパゲーション、 nelder-mead など、他のアルゴリズムを使用できます。 。

隠されたノードの数を最適化したいと言ったので、「最適」にはほど遠いですが、遺伝的アルゴリズムで十分かもしれません。あなたが検索しているスペースはおそらく遺伝的アルゴリズムを使用するには小さすぎますが、それらはまだ機能しますが、MATLABですでに実装されているので、大したことはありません。

トレーニングの量を最適化するとはどういう意味ですか?エポックの数を意味する場合、それは問題ありません。トレーニングは開始ウェイトに何らかの形で依存しており、通常はランダムであるため、GAに使用されるフィットネス関数は実際には関数ではないことに注意してください。

他のヒント

ニューラルネットワークと遺伝的プログラミングの良い例は、NEATアーキテクチャ(拡張トポロジのニューロエボリューション)です。これは、最適なトポロジを見つける遺伝的アルゴリズムです。また、非表示ノードの数を抑えるのに優れていることも知られています。

彼らはこれを使ってNeroと呼ばれるゲームも作りました。非常にユニークで非常に驚くべき具体的な結果。

博士スタンリーのホームページ:

http://www.cs.ucf.edu/~kstanley/

ここでは、NEATが発明した人物であるため、NEATに関連するすべてのものを見つけることができます。

遺伝的アルゴリズムはニューラルネットワークの最適化に便利に適用できますが、何をしたいかについて少し考える必要があります。

ほとんどの" classic" Back-PropagationなどのNNトレーニングアルゴリズムは、ニューロンの重みのみを最適化します。遺伝的アルゴリズムは重みを最適化できますが、これは通常非効率的です。しかし、あなたが尋ねていたように、彼らはネットワークのトポロジーとトレーニングアルゴリズムのパラメーターを最適化することができます。 「過剰な訓練を受けた」ネットワークの作成には特に注意する必要があります。しかし。

修正された遺伝的アルゴリズムを使用したもう1つの手法は、Back-Propagationの問題を克服するのに役立ちます。バックプロパゲーションは通常、極小値を見つけますが、正確かつ迅速に見つけます。遺伝的アルゴリズムと逆伝播を組み合わせることで、例えば、ラマルクGAで、両方の利点が得られます。このテクニックは、 GAULチュートリアル

で簡単に説明されています。

目的関数が連続的でない場合、遺伝的アルゴリズムを使用してニューラルネットワークをトレーニングすると便利な場合があります。

これに遺伝的アルゴリズムを使用すべきかどうかはわかりません。

私は、遺伝的アルゴリズムの初期解の母集団が、ニューラルネットワークのトレーニングセットで構成されていると仮定します(特定のトレーニング方法が与えられた場合)。通常、初期解の母集団は、問題に対するランダムな解で構成されます。ただし、ランダムトレーニングセットは実際にはニューラルネットワークをトレーニングしません。

遺伝的アルゴリズムの評価アルゴリズムは、必要なトレーニング量の加重平均、特定の問題を解決する際のニューラルネットワークの品質、および隠れノードの数になります。

したがって、これを実行すると、ニューラルネットワークの品質(=トレーニング時間、隠れノードの数、ネットワークの問題解決機能)の点で最良の結果をもたらしたトレーニングセットが得られます。

または、まったく異なるアプローチを検討していますか?

どのような問題に取り組んでいるのか完全にはわかりませんが、ここではGAがちょっとやり過ぎのように聞こえます。使用しているパラメーターの範囲によっては、徹底的な(または他の方法ではインテリジェントでない)検索が機能する場合があります。最初のいくつかの値について、隠れノードの数に関するNNのパフォーマンスをプロットしてみてください。小さい値から始めて、より大きな増分でジャンプします。私の経験では、多くのNNのパフォーマンスは驚くほど早く安定しています。隠されたノード番号の範囲が最も意味のあるものを適切に把握できる場合があります。

NNのトレーニングの繰り返しでも同じことがよくあります。より多くのトレーニングは、ネットワークをある程度まで支援しますが、すぐに多くの効果がなくなります。

ほとんどの場合、これらのNNパラメーターは非常に複雑な方法でパフォーマンスに影響しません。一般に、それらを増やすとしばらくの間パフォーマンスが向上しますが、その後、リターンが減少します。GAは、この種の単純な曲線で適切な値を見つけるために実際には必要ありません。隠れノードの数(またはトレーニングの繰り返し)によって実際にパフォーマンスが複雑に変動する場合、GAのようなメタヒューリスティックが適切な場合があります。しかし、そのルートをとる前にブルートフォースアプローチを試してみてください。

最小の解決策から始めてニューロンの数を増やすことができるので、遺伝的アルゴリズムは良いアイデアだと言いがちです。 「品質関数」は、最適なポイントを見つけたい場合は、滑らかでバンプがほとんどありません。

この最適なNNを頻繁に見つける必要がある場合、関数の評価に費用がかかる問題に最適な数値レシピで説明されているように、最適化アルゴリズムを使用し、場合によっては準ニュートンを使用することをお勧めします。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top