1. 概述
- 高斯牛顿是基于牛顿法发展来的
- 回想牛顿法求解非线性优化问题需要求解海塞矩阵,有时该矩阵是很难求解的或者当维度较大时占用较大内存也会导致求解失败
- 高丝牛顿法舍弃了海塞矩阵的求解,采用如下公式代替
$H_{jk} = 2\sum_{i=1}^m J_{ij}J_{ik}$.
2. 算法原理
对于一个非线性最小二乘问题:
$x = \arg \min_x \frac{1}{2}||f(x)||^2$.
高斯牛顿的思想是把$f(x)$利用泰勒展开,取一阶线性项近似,即
$f(x + \Delta x) = f(x) + f’(x)\Delta x = f(x) + J(x)\Delta x$.
再将上述公式代入非线性最小二乘公式,得:
$\frac{1}{2}||f(x + \Delta x)||^2 = \frac{1}{2}[f(x)^Tf(x) + 2f(x)^TJ(x)\Delta x + \Delta x^TJ(x)^TJ(x)\Delta x]$.
上式对$\Delta x$求导,令导数为0,得:
$J(x)^TJ(x)\Delta x = -J(x)^Tf(x)$.
另$H = J^TJ$,$B = -J^Tf$,那么,得到:
$H\Delta x = B$.
通过求解上述公式即可解出增量$\Delta x$,要求H正定,但实际情况并不一定满足这个条件,因此可能发散,另外步长$\Delta x$可能太大,也会导致发散。
综上所述,高斯牛顿法的计算步骤如下:
- 给定初值$x_0$
- 对于第k次迭代,计算雅克比矩阵J,矩阵H和矩阵B
- 求解增量$\Delta x$
- 如果$\Delta x$足够小,停止迭代;否则,更新$x_{k+1} = x_k + \Delta x$
- 如果迭代次数达到最大次数,也停止迭代
3. 实例
求解非线性方程$y = e^{ax^2 + bx + c}$,给定n组观测数据$(x, y)$,求解系数$X = [a, b, c]^T$。
解:由题可得:
令$f(X) = y - e^{ax^2 + bx + c}$,N组数据可以组成一个大的非线性方程组,通过构建最小二乘问题来进行系数求解,即
$x = \arg\min_x \frac{1}{2}||f(X)||^2$.
要求解这个问题,根据推导部分可知,需要求解雅克比,
实现代码如下:
1 |
|
(以上代码参考:https://zhuanlan.zhihu.com/p/42383070)