梯度下降法和(拟)牛顿法区别及介绍

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/pupilxmk/article/details/80735599

梯度下降法和牛顿法介绍

梯度下降法和牛顿法都是求解无约束最优化问题的常用方法。
假设f(x)Rn上具有一阶连续偏导数的函数,要求解的无约束最优化问题为

minxRn f(x)

x表示目标函数的极小点。下面分别介绍梯度下降法和牛顿法。


梯度下降法

梯度下降法是一种迭代算法。选取适当的初值x(0),不断迭代,更新x的值,进行目标函数的极小化,直到收敛。因为负梯度方向是使函数值下降最快的方向,在迭代的每一步,以扶梯度方向更新x的值,从而达到减少函数值的目的。

由于f(x)具有一阶连续偏导数,若第k次迭代值为x(k),则可将f(x)x(k)附近进行一阶泰勒展开:

(1.1)f(x)=f(x(k))+gkT(xx(k))

这里,gk=g(x(k))=f(x(k))f(x)x(k)处的梯度。

求出第k+1次迭代值x(k+1):

(1.2)x(k+1)x(k)+λkpk

其中,pk是搜索方向,取负梯度方向pk=f(x(k)), λk是步长,由一维搜索确定,即λk使得
(1.3)f(x(k)+λkpk)=minλ0f(x(k)+λpk)


牛顿法

牛顿法收敛速度快,每一步需要求解目标函数的海赛矩阵的逆矩阵,计算比较复杂,可通过拟牛顿法简化计算过程。

假设f(x)具有二阶连续偏导数,若第k次迭代值为x(k),则可在x(k)附近进行二阶泰勒展开:

(2.1)f(x)=f(x(k))+gkT(xx(k))+12(xx(k))TH(x(k))(xx(k))

这里,gk=g(x(k))=f(x(k))f(x)x(k)处的梯度,H(x(k))f(x)的海塞矩阵(Hesse matrix)
(2.2)H(x)=[2fxixj]n×n

在点x(k)的值。函数f(x)有极值的必要条件是在极值点处一阶导数为0,即梯度向量为0。特别是当H(x(k))为正定矩阵时,函数f(x)的极值为极小值。

牛顿法利用极小点的必要条件

(2.3)f(x)=0

每次迭代从点x(k)开始,求目标函数的极小点,作为第k+1次迭代值x(k+1)。具体地,假设x(k+1)满足:
(2.4)f(x(k+1))=0


(2.5)f(x)=gk+Hk(xx(k))

其中Hk=H(x(k))。这样
(2.6)gk+Hk(x(k+1)x(k))=0

因此,
(2.7)x(k+1)x(k)Hk1gk

牛顿法只适用于Hessian矩阵时正定的情况。在深度学习中,目标函数的表面通常非凸,如鞍点。如果Hessian矩阵的特征值并不都是正的,牛顿法实际上回导致更新朝错误方向移动。这种情况可以通过正则化Hessian矩阵来避免。常用的正则化策略包括在Hessian矩阵对角线上增加常数α,即H=H+αI.但是当曲率方向极端的情况下,α的值必须足够大以抵消负特征值,这会导致Hessian矩阵由对角矩阵αI主导,牛顿法选择的方向会收敛到普通梯度除以α,梯度下降也比合适学习率的步长更小。


梯度下降法和牛顿法的区别与对比

  • 梯度下降法是一阶优化算法,牛顿法是二阶优化算法
  • 牛顿法的收敛速度相比梯度下降法常常较快
  • 牛顿法每次需要更新一个二维矩阵,计算代价很大,实际使用中常使用拟牛顿法
  • 牛顿法对初始值有一定要求,在非凸优化问题中(如神经网络训练),牛顿法很容易陷入鞍点(牛顿法步长会越来越小),而梯度下降法则很容易逃离鞍点(因此在神经网络训练中一般使用梯度下降法,高维空间的神经网络中存在大量鞍点)
  • 梯度下降法在靠近最优点时会震荡,因此步长调整在梯度下降法中是必要的,具体有adagrad, adadelta, rmsprop, adam等一系列自适应学习率的方法

拟牛顿法介绍

在牛顿法的迭代中,需要计算海塞矩阵的逆矩阵,矩阵中元素的数目是参数数量的平方,这一计算比较复杂(在神经网络中,很小的网络参数可能也是百万数量级的),对于参数数目为k的网络,需要计算k×k矩阵的逆,计算复杂度为O(k3)。考虑用一个n阶矩阵Gk=G(x(k))来近似代替Hk1=H1(x(k)).

先看牛顿法中海塞矩阵满足的条件。首先Hk满足以下关系。在式(2.5)中取x=x(k+1),即得

(3.1.1)gk+1gk=Hk(x(k+1)x(k))

yk=gk+1gk,δk=x(k+1)x(k),则
(3.1.2)yk=Hkδk

称为拟牛顿条件。

如果Hk是正定的,可以保证牛顿法搜索方向pk是下降方向,这是因为搜索方向是pk=λgk,由式(2.7)可得

(3.1.3)x=x(k)+λpk=x(k)λHk1gk

所以f(x)x(k)的泰勒展开式(2.1)可以近似写成:
(3.1.4)f(x)=f(x(k))λgkTHk1gk

Hk1正定,当λ为一个充分小的正数时,总有f(x)<f(x(k)),也就是说pk是下降方向。

拟牛顿法将Gk作为Hk1的近似,要求矩阵Gk满足同样的条件。首先,矩阵Gk是正定的,同时满足拟牛顿条件:

(3.1.5)Gk+1yk=δk

按照拟牛顿条件,每次迭代中可以选择更新矩阵Gk+1
(3.1.6)Gk+1=Gk+ΔGk

下面介绍Broyden类拟牛顿法。

DFP(Davidon-Fletcher-Powell)算法

DFP算法选择Gk+1的方法是,假设每一步迭代中Gk+1是由Gk加上两个附加项构成的:

(3.2.1)Gk+1=Gk+Pk+Qk

其中Pk,Qk是待定矩阵。

为使Gk+1满足拟牛顿条件,可使Pk,Qk满足:

(3.2.2)Pkyk=δkQkyk=Gkyk

可取
(3.2.3)Pk=δkδkTδkTykQk=GkykykTGkykTGkyk

那么可得迭代公式:
(3.2.4)Gk+1=Gk+δkδkTδkTykGkykykTGkykTGkyk

BFGS(Broyden-Fletcher-Goldfarb-Shanno)算法

BFGS算法是最流行的拟牛顿法
考虑用Bk逼近海塞矩阵H
相应的拟牛顿条件为

(3.3.1)Bk+1δk=yk


(3.3.2)Bk+1=Bk+Pk+Qk

考虑使Pk,Qk满足:
(3.3.3)Pkδk=ykQkδk=Bkδk

找出适合条件的Pk,Qk,得到迭代公式:
(3.3.4)Bk+1=Bk+ykykTykTδkBkδkδkTBkδkTBkδk

事实上,若记Gk=Bk1,Gk+1=Bk+11,那么对式(3.3.4)应用两次Sherman-Moriison公式可得:

(3.3.5)Gk+1=(IδkykTδkTyk)Gk(IδkykTδkTyk)+δkδkTδkTyK

称为BFGS算法关于Gk的迭代公式

L-BFGS算法

在上述的BFGS算法的计算过程中,Gk逐渐的变得稠密,因此计算量逐渐正大。为了避免这个问题,L-BFGS算法做了以下的改进:

  • 在每一步估算海塞矩阵的近似的时候,给出一个当前的初始估计G0
  • 利用过去的m-1次的曲率信息修正G0直到得到最终的海塞矩阵。


    (3.4.1)ρk=1δkTykVk=(IρkykδkT)

    则式(3.3.5)变为
    (1)Gk+1=VkTGkVk+ρkδkδkT(2)=(VkTVkmT)Gk(0)(VkmVk)(3.4.2)+Σj=0mρkm+1(Πl=0mj1VklT)δkm+jδkm+jT(Πl=0mj1Vkl)

    初始值由下式给出:
    (3.4.3)Gk(0)=δkTyk||yk||2I

L-BFGS算法的优点是,它不需要记忆G或者B这两个近似矩阵,而只需要存储{δiyi}的一个序列,这样就大大节省了存储空间。

展开阅读全文

没有更多推荐了,返回首页