
The Gauss–Newton algorithm is used to solve non-linear least squares problems, which is equivalent to minimizing a sum of squared function values. It is an extension of Newton's method for finding a minimum of a non-linear function. Since a sum of squares must be nonnegative, the algorithm can be viewed as using Newton's method to iteratively approximate zeroes of the components of the sum, and thus minimizing the sum. In this sense, the algorithm is also an effective method for solving overdetermined systems of equations. It has the advantage that second derivatives, which can be challenging to compute, are not required.[1]
Non-linear least squares problems arise, for instance, in non-linear regression, where parameters in a model are sought such that the model is in good agreement with available observations.
The method is named after the mathematicians Carl Friedrich Gauss and Isaac Newton, and first appeared in Gauss's 1809 work Theoria motus corporum coelestium in sectionibus conicis solem ambientum.[2]
Given functions (often called residuals) of variables with the Gauss–Newton algorithm iteratively finds the value of that minimize the sum of squares[3]
Starting with an initial guess for the minimum, the method proceeds by the iterations
where, if r and β are column vectors, the entries of the Jacobian matrix are
and the symbol denotes the matrix transpose.
At each iteration, the update can be found by rearranging the previous equation in the following two steps:
With substitutions , , and , this turns into the conventional matrix equation of form , which can then be solved in a variety of methods (see Notes).
If m = n, the iteration simplifies to
which is a direct generalization of Newton's method in one dimension.
In data fitting, where the goal is to find the parameters such that a given model function best fits some data points , the functions are the residuals:
すると、ガウス・ニュートン法はヤコビアンを用いて表現できる。関数のとして
ご了承くださいは、の左擬似逆行列です。。
アルゴリズムの説明におけるm ≥ nという仮定は必要である。そうでないと行列がは逆行列を持たないため、正規方程式は(少なくとも一意に)解くことができません。
ガウス・ニュートン法は、関数ベクトルr iを線形近似することで導出できます。テイラーの定理を用いると、各反復において次のように記述できます。
と見つけるというタスク右辺の二乗和を最小化する。つまり、
これは線形最小二乗問題であり、明示的に解くことができ、アルゴリズム内の正規方程式が得られます。
通常の方程式は、未知の増分に関するn個の連立一次方程式である。これらは、コレスキー分解、あるいはより良い方法としてはQR分解を用いて、1ステップで解くことができる。大規模なシステムの場合、共役勾配法などの反復法の方が効率的である可能性があります。J rの列間に線形依存性がある場合、反復は失敗します。 単数形になる。
いつ複雑です :\mathbb {C} ^{n}\to \mathbb {C} } 共役形を使用する必要があります。。

この例では、ガウス・ニュートン法を用いて、データとモデルの予測値との間の誤差の二乗和を最小化することにより、モデルをデータに適合させます。
酵素が媒介する反応における基質濃度[ S ]と反応速度の関係を研究する生物学実験において、以下の表のデータが得られた。
次のような曲線(モデル関数)を見つけることが望ましい。
最小二乗法の意味でデータに最もよく適合するパラメータそして未定。
で表すそして[ S ]とレートの値はそれぞれ、。 させてそして見つけるそして残差の二乗和が
最小化されます。
ヤコビアン残差ベクトルの未知数に関しては行列とエントリを含む行
当初の推定値から始めると、そしてガウス・ニュートン法を5回繰り返した後、最適な値はそして得られた結果から、残差平方和は初期値の1.445から5回目の反復後には0.00784に減少した。右図のグラフは、観測データを用いて最適パラメータに基づいてモデルが決定した曲線を示している。
ガウス・ニュートン法は局所最小点に収束することが保証されている。4つの条件の下で:[ 4 ]関数開凸集合内で2回連続微分可能であるヤコビアンフル列ランクである初期反復近い局所最小値が小さい場合、収束は二次関数的になります。。
[ 5 ]に示すように、増分ΔはSの降下方向であり、アルゴリズムが収束すれば、極限はSの停留点となる。最小値が大きい場合しかし、収束は保証されておらず、ニュートン法のような局所的収束や、通常のウルフ条件の下での収束も保証されていない。[ 6 ]
ガウス・ニュートン法の収束速度は2乗に近づく可能性がある。[ 7 ]初期推定値が最小値または行列から遠い場合、アルゴリズムはゆっくりと収束するか、まったく収束しない可能性がある。条件が悪い。例えば、次の問題を考えてみよう。方程式と変数、以下で与えられる
のために、は局所最適解です。の場合、問題は実際には線形であり、この方法は 1 回の反復で最適解を見つけます。|λ| < 1 の場合、この方法は線形に収束し、誤差は反復ごとに |λ| 倍で漸近的に減少します。ただし、|λ| > 1 の場合、この方法は局所的にも収束しません。[ 8 ]
ガウス・ニュートン反復法 は、以下の形式の過剰決定方程式系 を解くための効果的な方法です。 と そしてどこは、ヤコビ行列のムーア・ペンローズ逆行列(擬似逆行列とも呼ばれる)である。のこれはニュートン法の拡張と見なすことができ、孤立した正則解に向かって同じ局所的な二次収束性を持つ[ 4 ] 。
解が存在しない場合でも、最初の反復がある点に近い平方和がが小さな局所最小値に達すると、ガウス・ニュートン反復は線形収束して要点これはしばしば、過剰決定系の最小二乗解と呼ばれる。
以下では、関数最適化のためのニュートン法から近似法を用いてガウス・ニュートン法を導出します。その結果、ガウス・ニュートン法の収束速度は、特定の正則条件の下では二次関数的になります。一般に(より弱い条件の下では)、収束速度は線形です。[ 9 ]
パラメータ関数Sを最小化するためのニュートン法の漸化式は
ここで、gはSの勾配ベクトルを表し、HはSのヘッセ行列を表す。
以来勾配は次のように与えられる。
ヘッセ行列の要素は、勾配要素を微分することによって計算されます。、 に関して:
ガウス・ニュートン法は、2次導関数項(この式の2番目の項)を無視することによって得られます。つまり、ヘッセ行列は次のように近似されます。
どこはヤコビ行列J rのエントリです。正確なヘッセ行列が正確な近似値の近くで評価されると、ほぼゼロになることに注意してください。したがって、第2項もほぼゼロになり、近似が正当化されます。勾配と近似ヘッセ行列は、行列表記で次のように表すことができます。
これらの式を上記の漸化式に代入すると、演算方程式が得られます。 ;\quad \Delta =-\left(\mathbf {J_{r}} ^{\operatorname {T} }\mathbf {J_{r}} \right)^{-1}\mathbf {J_{r}} ^{\operatorname {T} }\mathbf {r} .}
ガウス・ニュートン法の収束は、すべての場合において保証されるわけではありません。近似
2次導関数項を無視するためには、収束が期待される2つのケースで有効である可能性がある。[ 10 ]
ガウス・ニュートン法では、残差の二乗和Sは反復ごとに減少しない可能性があります。ただし、Δは降下方向であるため、静止点であるならば、十分に小さいすべてのしたがって、発散が発生した場合の解決策の1つは、分数を用いることである。更新式における増分ベクトルΔについて:
言い換えれば、増分ベクトルは長すぎるが、それでも「下り坂」を指しているため、途中まで進むだけで目的関数Sが減少します。線探索アルゴリズムを使用して見つけることができる、つまり、は、通常、区間内で直接探索法を用いて、 Sを最小化する値を見つけることによって決定されます。または、Armijo線探索などのバックトラッキング線探索。通常、は、ウルフ条件またはゴールドスタイン条件を満たすように選択されるべきである。[ 11 ]
シフトベクトルの方向が最適分数 α がゼロに近い場合、発散を処理する代替方法として、信頼領域法であるレーベンバーグ・マルカート法が用いられる。[ 3 ]正規方程式は、増分ベクトルが最急降下の方向に回転するように修正される。
ここで、Dは正の対角行列です。Dが単位行列Iである場合、、 それからしたがって、 Δの方向は負の勾配の方向に近づく。。
いわゆるマルカートパラメータ線探索によって最適化することもできますが、シフトベクトルを毎回再計算する必要があるため、これは非効率的です。が変更されます。より効率的な戦略は次のとおりです。発散が発生した場合は、 Sが減少するまでマルカートパラメータを増加させます。その後、1 つの反復から次の反復に値を保持しますが、可能であればカットオフ値に達するまで減少させ、カットオフ値に達したらマルカートパラメータをゼロに設定します。すると、 Sの最小化は標準的なガウス・ニュートン法による最小化になります。
大規模最適化の場合、ガウス・ニュートン法は特に興味深い。なぜなら、行列が近似ヘッセ行列よりも疎であるこのような場合、ステップ計算自体は、共役勾配法など、大規模で疎な問題に適した近似反復法を用いて行う必要があるのが一般的です。
この種のアプローチを機能させるには、少なくとも積を計算するための効率的な方法が必要である。
あるベクトルpに対して。疎行列ストレージでは、一般的に、行を格納することが実用的です。圧縮形式(例えば、ゼロエントリなし)では、転置のため上記の積を直接計算するのは困難です。ただし、c i を行列のi行目と定義すれば次のような単純な関係が成り立つ。
これにより、各行が積に加算的かつ独立して寄与します。実用的な疎なストレージ構造を尊重するだけでなく、この式は並列計算にも適しています。各行c iは対応する残差r iの勾配であることに注意してください。この点を考慮すると、上記の式は残差が互いに独立して問題に寄与するという事実を強調しています。
デイビドン、フレッチャー、パウエルによる方法やブロイデン・フレッチャー・ゴールドファーブ・シャノ(BFGS法)のような準ニュートン法では、完全なヘッセ行列の推定値1階微分を用いて数値的に構築されるこれは、 n回の改良サイクル後に、この手法が性能面でニュートン法に非常に近いものとなるようにするためである。なお、準ニュートン法は一般的な実数値関数を最小化できるのに対し、ガウス・ニュートン法、レーベンバーグ・マルカート法などは非線形最小二乗問題にしか適用できないことに注意されたい。
最小化問題を解く別の方法として、一次導関数のみを用いる勾配降下法がある。しかし、この方法は二次導関数を近似的にさえ考慮しない。そのため、多くの関数、特にパラメータ間に強い相互作用がある場合には、非常に非効率的である。
Juliaでの以下の実装では、提供されたヤコビアンを使用するメソッドと、自動微分を使用して計算する別のメソッドが提供されます。
""" gaussnewton(r, J, β₀, maxiter, tol)ガウス・ニュートン最適化を実行し、ヤコビ行列 `J` を用いて残差関数 `r` を最小化します。開始値は `β₀` です。アルゴリズムは、ステップのノルムが `tol` 未満になった場合、または `maxiter` 回反復した後に終了します。""" function gaussnewton ( r , J , β₀ , maxiter , tol ) β = copy ( β₀ ) for _ in 1 : maxiter Jβ = J ( β ) ; Δ = - ( Jβ ' * Jβ ) \ ( Jβ ' * r ( β )) β += Δ if sqrt ( sum ( abs2 , Δ )) < tol break end end return β endimport AbstractDifferentiation as AD , Zygote backend = AD . ZygoteBackend () # 他のバックエンドも利用可能です""" gaussnewton(r, β₀, maxiter, tol)ガウス・ニュートン最適化を実行して、初期値 `β₀` から残差関数 `r` を最小化します。関連するヤコビアンは自動微分を使用して計算されます。アルゴリズムは、ステップのノルムが `tol` 未満になったとき、または `maxiter` 回反復した後に終了します。""" function gaussnewton ( r , β₀ , maxiter , tol ) β = copy ( β₀ ) for _ in 1 : maxiter rβ , Jβ = AD . value_and_jacobian ( backend , r , β ) Δ = - ( Jβ [ 1 ] ' * Jβ [ 1 ] ) \ ( Jβ [ 1 ] ' * rβ ) β += Δ if sqrt ( sum ( abs2 , Δ )) < tol break end end return β end{{cite web}}: CS1 maint: タイトルとしてアーカイブされたコピー (リンク){{cite book}}: CS1メンテナンス: パブリッシャーの場所 (リンク)