私はニューラル ネットワークに少し興味があり、時間領域でさまざまな最小化手法を比較する軽いプロジェクト (最速) に Python でニューラル ネットワークを使用することを考えていました。
その後、NN が最小化に適しているかどうかさえわからないことに気付きました。どう思いますか?
私はニューラル ネットワークに少し興味があり、時間領域でさまざまな最小化手法を比較する軽いプロジェクト (最速) に Python でニューラル ネットワークを使用することを考えていました。
その後、NN が最小化に適しているかどうかさえわからないことに気付きました。どう思いますか?
これはニューラルネットワークよりも遺伝的アルゴリズムに適した問題のように思えます。ニューラルネットは、解決するために限定された問題を必要とする傾向があり、既知のデータに対するトレーニングが必要です。一方、遺伝的アルゴリズムは、トレーニングを必要とせずに、問題に対するより良い近似解を見つけることによって機能します。
バックプロパゲーションは、エラーを最小限に抑えることで機能します。ただし、必要なものは何でも最小限に抑えることができます。したがって、back-prop のような更新規則を使用して、出力を最小化する人工ニューラル ネットワークの入力を見つけることができます。
これは大きな質問です。短い答えで申し訳ありません。また、私が提案したアプローチは、より確立された方法と比較してかなり非効率的であり、局所的な最小値しか見つからないことも付け加えておく必要があります。
バックプロパゲーション ニューラル ネットワークのトレーニング プロセスは、最適な結果からのエラーを最小限に抑えることによって機能します。しかし、訓練されたニューラル ネットワークで未知の関数の最小値を見つけるのは非常に困難です。
問題を特定の関数クラスに制限すると、うまくいく可能性があり、非常に迅速でもあります。ニューラル ネットワークは、パターンがあればそれを見つけるのが得意です。
それらは目的にとってかなり悪いです。ニューラルネットワークの大きな問題の1つは、それらが極小値でスタックすることです。代わりに、サポートベクターマシンを調べることをお勧めします。
関数を近似するように NN を教えることができます。関数が微分可能であるか、NN に複数の隠れ層がある場合、関数の導関数を与えるように教えることができます。
例:
You can train a 1 input 1 output NN to give output=sin(input)
You can train it also give output=cos(input) which is derivative of sin()
You get a minima/maxima of sin when you equate cos to zero.
Scan for zero output while giving many values from input. 0=cos() -> minima of sin
出力がゼロになると、入力値が関数の最小値であることがわかります。
トレーニングにかかる時間は短く、ゼロのスイープには時間がかかります。
実際には、NN を使用して関数の最小値を見つけることができますが、Erikが言及した遺伝的アルゴリズムと組み合わせると最適に機能します。
基本的に、関数の局所的な最小値または最大値に対応するソリューションを見つけるための NN テントですが、そうすることでかなり正確になります (データ入力が最小であるかどうかを言う場合に使用できる分類器であると述べているTethaの回答にコメントするには)
対照的に、遺伝的アルゴリズムは、可能な入力の全範囲からより普遍的な解を見つける傾向がありますが、近似結果が得られます。
解決策は、2 つの世界を結合することです。
ニューラル ネットワークは分類子です。これらは、データ要素の 2 つのクラスを分離します。彼らは、事前に分類されたデータ要素によってこの分離を (通常は) 学習します。したがって、私は次のように言います。