Levenberg-Marquardt アルゴリズムはどのように詳細かつわかりやすい方法で機能するのでしょうか?

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

質問

私はプログラマーで、レーベンバーグ・マルカート曲線近似アルゴリズムがどのように機能するかを学び、自分で実装できるようにしたいと考えています。読者が数学者ではなくプログラマーである場合に、それがどのように機能するかを詳細に説明できる優れたチュートリアルはありますか。

私の目標は、このアルゴリズムを opencl に実装して、ハードウェア アクセラレーションで実行できるようにすることです。

役に立ちましたか?

解決

他のヒント

関数を最小化する表面上の最低点を見つけようとのようなものです。丘陵地表面の上を歩くと、あなたは最低のポイントを取得しようとしていることを自分のことを考えてみてください。あなたは下り坂行く方向を見つけると、それはもう下り坂行かないまで歩きます。そして、あなたは下り坂になり、それがそうでもう下り坂に行く、としなくなるまで、その方向に歩く新しい方向を選んだだろう。最終的には(たぶん)あなたは何の方向はもう下り坂行かない点に到達するでしょう。その後、(ローカル)最低でもなります。

LMアルゴリズム、および他の多くの最小化アルゴリズムは、この方式を使用します。

最小化される関数はFであり、我々は我々の反復で点x(N)であると仮定する。我々は、F(X(N + 1))

まず、点x(N)でFに線形近似を計算します。一次関数の下り坂方向を見つけることは簡単ですので、我々は下り坂の方向を決定するために、線形近似関数を使用します。 次に、我々は、この選択した方向に行くことができるどこまで知っている必要があります。私たちの近似線形関数は、x(n)の周りに大きな面積のためにFのために良い近似であるならば、我々はかなり大きな一歩を踏み出すことができます。それはX(N)にごく近い良い近似だ場合、我々は非常に小さなステップを取ることができます。

これはLMが何される - このように下り方向を与え、(N)xでFに線形近似を算出し、それがどのように大きな線形関数は、(N xでFを近似どれだけに基づいて取るべきステップ割り出し)。 LMは、近似関数は、基本的にFへの線形近似がFが減少どのくらいの実際の機能に減少どのくらいこうして決定された方向のステップを取ると比較することにより、どのように良好な割り出し。彼らは接近している場合は、近似関数は良好であり、私たちは少し大きく一歩を踏み出すことができます。彼らは近くない場合は、近似関数は良くありません、我々は後退し、小さなステップを取る必要があります。

LM アルゴリズムの基本的な考え方は数ページで説明できますが、高速かつ堅牢な実稼働グレードの実装には、多くの微妙な最適化が必要です。最先端のものは、Moré らによる Minpack 実装であり、Moré 1978 (Moré 1978) によって詳細に文書化されています。http://link.springer.com/content/pdf/10.1007/BFb0067700.pdf) および Minpack ユーザー ガイド (http://www.mcs.anl.gov/~more/ANL8074b.pdf)。コードを勉強するために、私の C 翻訳 (https://jugit.fz-juelich.de/mlz/lmfit) おそらく、元の Fortran コードよりもアクセスしやすくなります。

(レーベンバーグ・マルカートは、セクション15.5である)数値レシピしてみてください。これは、オンラインで利用可能だし、私は彼らが、詳細な方法だ(彼らは...どのくらいのより詳細なあなたが得ることができ、完全なソースコードを持っている)にはまだアクセスます。

のアルゴリズムを説明することを見つけます
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top