ガウス・ニュートン法

目的関数が平方和となる最小化問題

では,問題の特殊構造を使うとよい場合がよくある.剰余関数 とその導関数であるヤコビ行列 を計算することで,時間と努力を節約することができる.ガウス・ニュートン法はこれを行う洗練された方法である.ガウス・ニュートン法は,二次形式として完全な二階のヘッセ行列を使う代りに,ステップ が以下の公式

から計算されるように,式(1)で を使う.ここで 等となる.これは完全なヘッセ行列 の近似であることに注意のこと.の点が最小値となったり, が最小点近くの線形方程式のように変化したりする場合,剰余がゼロというが,この場合ヘッセ行列の近似はきわめてよく,「ニュートン法」の二次収束がよく観察される.

目的関数は平方和であるが,極めて一般的である.実際に,FindFitNormFunctionオプションのデフォルト値で用いられるときは,目的関数の形式をしている.ガウス・ニュートン法は,最小二乗の問題の点から見ることもできる.ガウス・ニュートンステップを解くことは線形最小二乗問題を解くことと同じなので,ガウス・ニュートン法を適用することは,実質的に非線形関数に線形の最小二乗フィットを適用することである.このように見てみると,このメソッドがFindFitが行う非線形フィットのようなものに特に適しているのも理解できる.

いくつかのユーティリティ関数を含むパッケージをロードする.
In[1]:=
Click for copyable input
制約条件のない問題のパッケージを使って,狭い谷を持つ古典的Rosenbrock関数を設定する.
In[2]:=
Click for copyable input
Out[2]=

Mathematica が,Rosenbrockの例のような明示的に平方和である問題,あるいはベクトルとそのべクトル自身の内積であるような関数に出会うと,自動的にガウス・ニュートン法が使われる.

次はRosenbrock関数のガウス・ニュートン法でFindMinimumが取るステップを,ステップ制御に信頼領域法を使って示している.
In[3]:=
Click for copyable input
Out[3]=

同じ例を「ニュートン法」で行ったものと比べると,このガウス・ニュートン法の方がステップ数も評価回数も少ないのが分かる.これは,ガウス ・ニュートン法が問題の特殊構造を利用しているからである.最小値で剰余がゼロとなるので,最小値付近の収束率はニュートン法と同じくらいよい.

Levenberg-Marquardt法は「信頼領域」刻み幅制御を使ったガウス・ニュートン法である(この方法が初めて提唱されたのは,一般的な信頼領域概念が開発される前である).このメソッドはFindMinimumオプションのMethod->"LevenbergMarquardt"あるいはMethod->"GaussNewton"によって使うことができる.

時に関数を明示的に平方和,あるいはベクトルとそのべクトル自身の内積になるように表現するのが厄介なことがある.そのような場合にはメソッドオプションを使って剰余を直接指定することもできる.同様に,剰余の導関数をメソッドオプションで指定することができる.メソッドオプションで剰余を指定した場合は,FindMinimumの第1引数との整合性のチェックは行われない.返された値はオプションで与えられた値に依存する.

剰余の指定を使って,Rosenbrock関数の最小値を求める.
In[4]:=
Click for copyable input
Out[4]=
オプション名
デフォルト値
"Residual"Automatic となるように剰余 を直接指定することを許可する
"EvaluationMonitor"Automatic剰余が評価されるたびに評価される式
"Jacobian"Automatic剰余の(行列)導関数の指定を許可する
"StepControl""TrustRegion"でなければならないが,メソッドオプションを使ってパラメータの制御を変更することを許可する

Method->"LevenbergMarquardt"のメソッドオプション

Mathematica で自然に平方和の問題を設定するための別の方法に,FindFitを使うものがある.

これはモデル関数である.
In[5]:=
Click for copyable input
ランダムな摂動が加わった関数が生成したデータである.
In[6]:=
Click for copyable input
モデル関数の最小二乗フィットを求める.
In[7]:=
Click for copyable input
Out[7]=
データのフィットモデルを示す.
In[8]:=
Click for copyable input
Out[8]=

この例では,FindFitが内部的に剰余関数とヤコビ行列を形成している.これらはガウス・ニュートン法で平方和,あるいは非線形最小二乗フィットを求めるのに使われる.無論,FindFitは他のメソッドで使うこともできるが,速く評価できる剰余関数が構築できるので,通常は他のメソッドを使うよりも速い.

New to Mathematica? Find your learning path »
Have a question? Ask support »