牛顿法 梯度下降法

非线性最小二乘

非线性优化问题就是针对一个非线性函数求最值的问题,但很难通过求导数的方式求解。
非线性最小二乘问题的形式如下:

自变量 ,f 是任意的非线性函数,我们可以假设它有m维:

我们一般用李代数表示机器人的平移和旋转,常常无法对f进行直接求导,所以使用迭代的方式求解,非线性优化的几个解法都是使用迭代

  1. 给定某个初始值
  2. 对于第k次迭代,寻找一个增量, 使得 达到极小值
  3. 足够小,则停止
  4. 否则,令 , 返回第2步

非线性最小二乘问题就转为寻找 的问题,直到满足迭代次数或者目标函数变化非常小为止。此时认为算法收敛,目标函数达到极小值。

非线性优化中的牛顿法

普通的函数求极值就是对f’(x)=0进行求解,但是有时导数难以获得,所以把f(x)进行二阶泰勒展开

右侧对 求导并令其为0,可以获得

也就是

现在放到高维情况下,把最开始的式子在x附近二阶泰勒展开:

变量的增量就可以获得:

J是关于x的一阶导数,雅克比矩阵;H是二阶导数,海森矩阵。

牛顿法的思路是将函数 f 在 x 处展开为多元二次函数,再通过求解二次函数最小值的方法得到本次迭代的下降方向。那么问题来了,多元二次函数在梯度为0的地方一定存在最小值么?直觉告诉我们是不一定的。以一元二次函数 g(x)=ax2+bx+c为例,我们知道当a>0时,g(x)可以取得最小值,否则g(x)不存在最小值。

推广到多元的情况,可以得出二次项矩阵(Hessian矩阵)必须是正定的,函数f(x)的最小值才存在。因此, 牛顿法首先需要计算海森矩阵并且判断其正定性,这在问题规模很大时非常困难,我们希望避免计算海森矩阵。



牛顿法的特点

  • 在极小值点附近,牛顿法的收敛速度比梯度下降法 快很多
  • 需要计算海森矩阵,但问题规模大时,计算难度很大
  • 牛顿法经常会因为海森矩阵不正定而发散,因此牛顿法并不是非常的稳定

梯度下降法

对上面公式(1)进行展开时,如果只保留一阶项,对应一阶梯度法,

我们希望迭代过程中的函数值逐步减小,也就是。 可以让 由于,所以实现了函数值下降

也就是沿着反向梯度的方向,还要取一个步长,这就是最速下降法。 特点: 最速下降法过于贪心,越靠近极小值速度越慢,容易走出锯齿路线,反而增加迭代次数。

牛顿法是二阶收敛,梯度下降是一阶收敛,所以牛顿法就更快。如果更通俗地说的话,比如你想找一条最短的路径走到一个盆地的最底部,梯度下降法每次只从你当前所处位置选一个坡度最大的方向走一步,牛顿法在选择方向时,不仅会考虑坡度是否够大,还会考虑你走了一步之后,坡度是否会变得更大。可以说牛顿法比梯度下降法看得更远一点,能更快地走到最底部。(牛顿法目光更加长远,所以少走弯路;相对而言,梯度下降法只考虑了局部的最优 ,没有全局思想。)

从几何上说,牛顿法就是用一个二次曲面去拟合你当前所处位置的局部曲面,而梯度下降法是用一个平面去拟合当前的局部曲面。通常情况下,二次曲面的拟合会比平面更好,所以牛顿法选择的下降路径会更符合真实的最优下降路径。

数值分析中的牛顿法

牛顿迭代法最常见的一个应用就是求方根

牛顿法是一种在实数域和复数域上近似求解方程的方法。方法使用函数f(x)的泰勒级数的前面几项来寻找方程f(x) = 0的根。牛顿法最大的特点就在于它的收敛速度很快。

首先,选择一个接近函数f(x)零点的 x0,计算相应的f(x0) 和切线斜率f’(x0)。然后我们计算穿过点(x0, f(x0) )并且斜率为f’(x0)的直线和 x 轴的交点的x坐标,也就是求如下方程的解:
f’(x0)(x-x0) + f(x0) = 0

这样将新求得的点的x坐标命名为x1,通常x1会比x0更接近方程f(x) = 0的解。因此可以利用x1开始下一轮迭代,迭代公式如下所示:

也就是知道曲线在某个点x0的切线l,用l和x轴的交点作为下一个迭代点x1,如此迭代来逼近曲线和x轴的交点。

已经证明,如果f'是连续的,并且待求的零点x是孤立的,那么在零点x周围存在一个区域,只要初始值x0位于这个邻近区域内,那么牛顿法必定收敛。下图为一个牛顿法执行过程的例子

参考:
牛顿法 高斯牛顿法
梯度下降法(gradient descent)与牛顿法