机器学习中常见优化算法之牛顿法

常见优化问题:

  • 线性规划
  • 二次规划
  • 二次约束的二次规划
  • 半正定规划

常见优化方法:

  • 梯度上升(下降)法
  • 牛顿法 / 拟牛顿法
  • 坐标下降法

牛顿法(拟牛顿法):

牛顿法是一种数值逼近方法。
例如:

f ( x ) = 6 x 5 5 x 4 4 x 3 + 3 x 2

该多项式的曲线如下图所示,可以看出,该多项式有三个根,分别在 x 等于 0、1,以及 0 到 1 之间的位置。那么我们怎样才能得到这些根呢?
9c26366f68e4a1cea20788a19e0b3085.png-46.4kB

在牛顿迭代法中,先任选一点 x0 作为根的近似估值,过点 (x0, f(x0)) 做曲线的切线,那么切线的斜率即为 f’(x0)。然后取切线与 x 轴的交点 x1 作为新的估值点,重复上一步骤可以计算得到 f’(x1)、x2。以此类推,我们可以找到一点 xn,使得 |f(xn)| 趋于0,也就是说如果我们将上述操作进行下去的话,那么我们离多项式的根就越来越近了。因此,我们只要得到了 xn 点处曲线的切线斜率 f’(xn),再由此切线与 x 轴的交点便可以导出 x n+1 的计算公式:

x n + 1 = x n f ( x n ) f ( x n )

综上所述,我们很容易写出 f(x) = 0 的近似求根算法,使其满足任意误差 e。很明显,在上例中,选取不同的起始估值点,可能找到不同的根。

牛顿法推导:

1241397-dcc3598a750b0aed.png-11.9kB
1241397-609c36ca759f49c1.png-9.7kB
1241397-2df8b664aabd5882.png-7.6kB
1241397-13c6d9041dd0f41f.png-3.9kB

Hessian范数下的最速下降方法

1241397-d391013a1cce3d5f.png-5.6kB
这从另一个角度揭示了为什么Newton步径是好的搜索方向了。

拟牛顿法

牛顿法需要计算目标函数Hessian矩阵的逆矩阵,运算复杂度太高,计算效率很低,尤其维数很大时。拟牛顿算法的核心思想用一个近似矩阵替代逆Hessian矩阵。

牛顿法为什么比梯度下降法求解需要的迭代次数更少?

牛顿法是二阶收敛,梯度下降是一阶收敛,所以牛顿法就更快。
如果更通俗地说的话,比如你想找一条最短的路径走到一个盆地的最底部,梯度下降法每次只从你当前所处位置选一个坡度最大的方向走一步,牛顿法在选择方向时,不仅会考虑坡度是否够大,还会考虑你走了一步之后,坡度是否会变得更大。所以,可以说牛顿法比梯度下降法看得更远一点,能更快地走到最底部。根据wiki上的解释,从几何上说,牛顿法就是用一个二次曲面去拟合你当前所处位置的局部曲面,而梯度下降法是用一个平面去拟合当前的局部曲面,通常情况下,二次曲面的拟合会比平面更好,所以牛顿法选择的下降路径会更符合真实的最优下降路径。
1241397-cb8790dcaffecd39.png-30.5kB
图2形象地说明了牛顿法和梯度下降法的区别,红色为牛顿方法搜索路径,绿色为梯度下降法搜索路径。

  1. 牛顿法起始点不能离局部极小点太远,否则很可能不会收敛。(考虑到二阶拟合应该很容易想象),所以实际操作中会先使用别的方法,比如梯度下降法,使更新的点离最优点比较近,再开始用牛顿法。
  2. 牛顿法每次需要更新一个二阶矩阵,当维数增加的时候是非常耗内存的,所以实际使用是会用拟牛顿法。
  3. 梯度下降法在非常靠近最优点时会有震荡,就是说明明离的很近了,却很难到达,因为线性的逼近非常容易一个方向过去就过了最优点(因为只能是负梯度方向)。但牛顿法因为是二次收敛就很容易到达了。

猜你喜欢

转载自blog.csdn.net/wlin_zzz/article/details/80168850