ニューラル ネットワークを使用して関数の最小値 (a) を見つけることはできますか?

StackOverflow https://stackoverflow.com/questions/652283

質問

私は少し前からニューラル ネットワークに興味があり、時間領域 (最速) でさまざまな最小化手法を比較する軽いプロジェクトに Python でニューラル ネットワークを使用することを考えていました。

その後、NN が最小化に適しているかどうかさえわからないことに気づきました。どう思いますか?

役に立ちましたか?

解決

ニューラルネットワークは分類子です。データ要素の2つのクラスを分離します。彼らは事前に分類されたデータ要素によってこの分離を(通常)学習します。したがって、私は言う:いいえ、あなたが破損を超えて大規模なストレッチをしない限り。

他のヒント

これはニューラルネットワークよりも遺伝的アルゴリズムにより適している問題のようです。ニューラルネットでは、既知のデータに対するトレーニングを必要とするなど、制限付きの問題が必要になる傾向があります。一方、遺伝的アルゴリズムは、トレーニングを必要とせずに問題に対するより良い近似解を見つけることで機能します。

バックプロパゲーションは、エラーを最小限に抑えることで機能します。ただし、必要なものを最小限に抑えることができます。したがって、back-propのような更新ルールを使用して、出力を最小化する人工ニューラルネットワークの入力を見つけることができます。

これは大きな質問です。短い答えで申し訳ありません。また、提案されたアプローチは、より確立された方法と比較して非常に非効率的であり、局所的な最小値のみを見つけると付け加えます。

逆伝播ニューラルネットワークのトレーニングプロセスは、最適な結果からの誤差を最小化することにより機能します。しかし、訓練されたニューラルネットワークで最小の未知関数を見つけるのはかなり難しいでしょう。

問題を特定の関数クラスに制限すると、問題が発生する可能性があります。ニューラルネットワークは、パターンがあればそれを見つけるのが得意です。

これらは目的にはかなり悪いです。ニューラルネットワークの大きな問題の1つは、ローカルミニマムで立ち往生することです。代わりに、サポートベクターマシンを調べてください。

実際には、NNを使用して関数の最小値を見つけることができますが、 Erik で言及されている遺伝的アルゴリズムと組み合わせると最適に機能します。 。

基本的に、ローカルの最小または最大関数に対応するソリューションを見つけるためのNNテントですが、そうすることでかなり正確です( Tetha NNは、データ入力が最小であるかどうかを示すために使用できる分類子であると述べる回答)

対照的に、遺伝的アルゴリズムは、可能な入力の全範囲からより普遍的な解決策を見つける傾向がありますが、その後、近似結果を提供します。

解決策は、2つの世界を結合することです

  1. 遺伝的アルゴリズムから近似結果を取得
  2. その結果を使用して、NNを使用してより正確な答えを見つけます

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、SVM、多重線形回帰、K最近傍)で作業していて、回帰関数を最小化(最大化)したい場合、実際にはこれは可能ですが、そのようなアルゴリズムの効率は検索する領域の滑らかさ(ステップサイズ...など)。

このような<!> quot; Machine Learning Regressions <!> quot;を構築するには scikit-learn を使用できます。 MLRのトレーニングと検証が必要ですサポートベクター回帰 。 (<!> quot; fit <!> quot;メソッド)

SVR.fit(Sm_Data_X,Sm_Data_y)

次に、配列<!> quot; x <!> quot;の回帰の予測を返す関数を定義する必要があります。

def fun(x):
    return SVR.predict(x)

scipiy.optimize.minimize 最適化。 doc-linksに続く例を参照してください。

scroll top