知识库 › 定位仓库学习 › 核心算法 › 最小二乘问题 › 牛顿法
牛顿法的本质是通过函数的一阶展开拟合函数的变化趋势,然后去逼近零点位置。最常用的地方其实是函数零点的求解,或者说是一种快速求解方程的方法。
在求解最值问题方面,我们把中心放在求解一阶导数的零点问题即可:
对于一元函数 $f(x)$来说,在 $x=x_0$处进行二阶展开:
$$f(x) = f(x_0) + f'(x_0)(x - x_0) + \frac{f''(x_0)}{2}(x - x_0)^2 + o(x - x_0)^2$$
对于高阶项我们省去考虑,取:
$$g(x) = f(x_0) + f'(x_0)(x - x_0) + \frac{f''(x_0)}{2}(x - x_0)^2$$
这个式子就是一个标准的一元二次函数,我们需要的最值点位置就在函数一阶导数为0的地方
微分得:
$$g'(x) = f'(x_0) + f''(x_0)(x - x_0)$$
令$g'(x_1) = 0$能解得$x_1$取值即为极值点
故 $f'(x_0) + f''(x_0)(x_1 - x_0) = 0$
进而得到: $x_1 = x_0 - \frac{f'(x_0)}{f''(x_0)}$
逐步迭代即可得到极值点取值。
也就是说,我们只需要导数和二阶导就能得到一个步进的指示参数,这个在后面的高斯牛顿法中也有体现。
对于多元函数,要分清两个不同的概念:雅可比矩阵是向量函数(残差 $r\in\mathbb{R}^m$)对自变量的导数,形状 $m\times n$;而梯度是标量函数(代价 $F$)对自变量的导数,形状 $n\times 1$。两者不是一回事,满足 $g=J^\top r$。至于二阶导矩阵,被称为海森矩阵。
如果是收敛的话,$\Delta x = x_{n+1} - x_n \approx 0$,则式子可以转化为:
$$\Delta x = -\frac{f'(x_n)}{f''(x_n)} = -\frac{g}{H}$$
也就是说
$$H\,\Delta x = -g,\qquad g=\nabla F=J^\top r$$
可以这么进行理解:曲率乘以需要移动的步长应该得到刚好抵消梯度的矩阵。对这个方程进行求解即可,表述成乘法的原因是矩阵无法进行除法,转换成矩阵乘法就好表示了。
这个方法面临着如下问题:
- 需要原函数二阶可导
- 非凸函数的海森矩阵不一定有逆
- 海森矩阵计算量大
这些问题也为我们后续方法的优化留好了空间。
