梯度下降法与牛顿法的比较
两种方法的详细讲解可以参考:
梯度下降算法(Gradient Descent Optimization)
牛顿法(Newton Methods)、阻尼牛顿法和拟牛顿法
相同点
二者都是求解无约束最优化问题的常用方法
不同点
(1)原理方面
梯度下降法的搜索方向是沿着等高线的法向量方向进行搜索,每次迭代优化方向为梯度方向,即当前点所在等高线的法向。但往往等高线很少是正圆形,这种情况下搜索次数会过多。
牛顿法搜索方向为椭圆中心方向,这个方向也叫做牛顿方向,牛顿法的更新方程 H k − 1 ∇ f ( X k ) H_k^{-1} \nabla f(X_k) Hk−1∇f(Xk) 中包含两个部分: ∇ f ( X k ) \nabla f(X_k) ∇f(Xk) 是负梯度信息, H k − 1 H_k^{-1} Hk−1 包含了该处的曲率(Hession矩阵描述局部曲率)。如下图所示, S N S^N SN 方向为牛顿方向, − S -S −S 为负梯度方向。
(2)收敛方面:梯度下降法是一阶收敛,牛顿法是二阶收敛,所以牛顿法更快
(3)计算量方面:牛顿法需要计算海森矩阵的逆,计算复杂,代价比较大,因此有了拟牛顿法
(4)步长方面:牛顿法中海森矩阵的逆在迭代过程中不断减小,可以起到逐步减小步长的效果;但梯度下降法中的步长是一定的,因此越接近最优值时,步长应该不断减小,否则会在最优值附近来回震荡。
深度学习中往往采用梯度下降法
深度学习中,往往采用梯度下降法作为优化算子,而很少采用牛顿法,主要原因有以下几点:
(1)神经网络通常是非凸的,这种情况下,牛顿法的收敛性难以保证;
(2)即使是凸优化,只有在迭代点离全局最优很近时,牛顿法才会体现出收敛快的优势;
(3)牛顿法需要用到梯度和Hessian矩阵,这两个都难以求解,得到Hessian矩阵的复杂度过高;
(4)在高维非凸优化问题中,鞍点相对于局部最小值的数量非常多,而且鞍点处的损失值相对于局部最小值处也比较大。牛顿法的步长是通过导数计算而来的。所以当临近鞍点的时候,步长会变得越来越小,这样牛顿法就很容易陷入鞍点之中。而梯度下降法的步长是预设的固定值,相对容易跨过一些鞍点。