牛顿法和拟牛顿法

牛顿法

牛顿法主要用于求零点,当函数$y=f(x)$处于$x_t$时,此时位于$(x_t,y_t)$,将$f(x)$在$x_t$处泰勒展开保留到一阶项,得到:

对上面的式子求零点,得到:

牛顿法认为$x_t+\Delta x$比$x_t$更靠近零点,所以有以下更新式子:

一般而言,我们使用目标函数对模型参数求梯度,希望梯度等于零,假设目标函数为$g(\theta)$,则我们希望:

所以问题就变成求$g’(\theta)$的零点,运用牛顿法,则是迭代下式直到收敛:

可以看到牛顿法需要用到目标函数的二阶导,当参数是多维时,即需要用到海森矩阵:

梯度下降法只用到目标函数的一阶梯度,每次往一阶梯度方向移动一小步使得目标函数值更小。而牛顿法用到了目标函数的二阶梯度,每次往一阶梯度变成零的方向移动,每次移动都希望一阶梯度变小,相比梯度下降,不仅要求目标函数变小,还要求一阶梯度也变小,所以收敛速度会更快。但是牛顿法非常依赖初值的选取,要求目标函数存在二阶导数,而且在一些情况会出现问题。

拟牛顿法

在使用牛顿法求解时,需要求出目标函数的海森矩阵的逆,这种开销是很大的。拟牛顿法旨在使用一些快速的方法近似得到海森矩阵的逆,从而提升牛顿法的优化效率。令$y_k$表示目标函数的值,$x_k$表示参数,$g_k$是目标函数对梯度的一阶导数,$H_k$是海森矩阵,则有:

这个式子可以看作是一阶导数在邻域内的近似。这样我们得到:

这个是拟牛顿条件。我们使用$G_k$近似$H_k^{-1}$,即要求$G_k$符合拟牛顿条件:

可以从$x_k$的邻域中取若干个点作为$x_{k+1}$的候选值,这样$x_{k+1}$和$g_{k+1}$都是已知的。现在我们需要求解$G_k$,使得$G_k$在这些$x_{k+1}$和$g_{k+1}$的候选值中满足拟牛顿条件。求解这个问题可以使用一些迭代的方法对矩阵$G_k$进行迭代求解,这样求出来的$G_k$就是$H_k^{-1}$的近似了。