Algoritma Gauss-Newton

**Algoritma Gauss-Newton** adalah penyelesaian yang digunakan untuk memecahkan masalah-masalah kuadrat terkecil. Algoritma ini merupakan sebuah perubahan dari metode Newton untuk mengoptimalkan sebuah fungsi. Tidak seperti metode Newton, algoritma Gauss-Newton hanya bisa digunakan untuk mengoptimumkan jumlah dari nilai fungsi kuadrat. Metode ini adalah hasil penemuannya matematikawan yang bernama Carl Friedrich Gauss.

## Masalah

Diberikan *m* fungsi *f*1, ..., *f**m* of *n* parameters *p*1, ..., *p**n* with *m*≥*n*, kita ingin meminimumkan jumlah
: S(p) = \sum_{i=1}^m (f_i(p))^2.
Di sini, *p* adalah vektor kolom (*p*1, ..., *p**n*)T.

## Algoritma

Algoritma Gauss-Newton merupakan prosedur iterasi. Ini berarti bahwa pengguna harus menetapkan sebuah penduga pertama untuk parameter vektor *p*, yang mana akan kita sebut *p*0.

Berikutnya penduga *p**k* untuk parameter vektor yang kemudian dihasilkan oleh perulangan hubungan
: p^{k+1} = p^k - \Big(J_f(p^k)^\top J_f(p^k)\Big)^{-1} J_f(p^k)^\top f(p^k), 
di mana *f*=(*f*1, ..., *f**m*)T dan *J*f(*p*) menunjukkan Jacobian dari *f* saat *p*.

Matriks invers tidak pernah dihasilakan secara eksplisit dalam praktiknya. Sebagai pengganti, kita gunakan
: p^{k+1} = p^k + \delta^k, \, 
Dan kita hitung perbaikan δ*k* dengan menyelesaikan sistem linear

: J_f(p^k)^\top J_f(p^k) \, \delta^k = -J_f(p^k)^\top f(p^k), .

## Penelusuran garis

Sebuah implementasi yang baik dari algoritma Gauss-Newton juga menggunakan algoritma penelusuran garis: sebagai pengganti dari formula sebelumnya untuk *p**k*+1, kita gunakan
: p^{k+1} = p^k + \alpha^k \, \delta^k, 
Di mana kita berusaha memilih sebuah nilai optimal untuk bilangan α*k*.

## Derivasi dari metode Newton

Hubungan perulangan metode Newton untuk meminimumkan sebuah fungsi *S* adalah
: p^{k+1} = p^k - [H_S(p^k)]^{-1} \nabla S(p^k), \, 
di mana \nabla S dan H_S berarti gradien dan Hessian dari *S* .
Sekarang kita misalkan S memiliki bentuk
:S(p) = \sum_{i=1}^m (f_i(p))^2 = f(p)^\top f(p)
di mana f adalah sebuah nilai fungsi vector yang merupakan komponen f_i.

Dalam kasus ini, gradien diberikan oleh
:\nabla S(p) = 2 J_f(p)^\top f(p)
di mana J_f adalah Jacobian dari f, dan Hessian diberikan oleh
:H_S(p) = 2 J_f(p)^\top J_f(p) +  2 \sum_{i=1}^m f_i(p) \, H_{f_i}(p)
di mana H_{f_i} adalah Hessian dari f_i.

Catatan bahwa syarat kedua dalam ekspresi ini untuk v H_S menuju nol sama S(p) menuju nol. Jadi jika nilai minimum dari S(p) tertutup untuk nol, dan nilai percobaan dari p adalah tertutup untuk minimum, kemudian kita bisa mengira Hessian dengan:

:H_S(p) = 2 J_f(p)^\top J_f(p)

Dengan memasukkan ekspresi ini untuk gradeien dan Hessian kedalam hubungan perulangan sebelumnya kita memiliki
: p^{k+1} = p^k - \left( J_f(p^k)^\top J_f(p^k) \right)^{-1} J_f(p^k)^\top f(p^k).

## Algoritma lainnya

Metode lain untuk menyelesaikan masalah kuadrat terkecil hanya menggunakan derivatif pertama adalah penurunan gradien. Bagaimanapun, metode ini tidak memasukkan nilai maupun perhitungan derivatif kedua dengan perkiraan yang sama. Karenanya, metode ini tidak efisien untuk fungsi-fungsi tertentu, seperti fungsi Rosenbrock.

Pada kasus di mana minimum lebih besar dari nol, pengabaian syarat atau ketentuan pada Hessian bisa jadi signifikan. Pada kasus ini, salah satunya bisa menggunakan algoritma Levenberg-Marquardt, yang merupakan kombinasi dari Gauss-Newton dan penurunan gradien.

## Referensi
* 

*