梯度下降法和牛顿下降法

泰勒公式可以表示为:

\[f(\boldsymbol{x}+\boldsymbol{\delta})=f(\boldsymbol{x})+\boldsymbol{g}^{\rm T}\boldsymbol{\delta}+\frac{1}{2}\boldsymbol{\delta}^{\rm T}\boldsymbol{h}\boldsymbol{\delta}+O(\boldsymbol{\delta^3}) \tag{1} \]

在(2)中

\[\boldsymbol{x}=[x_1,...,x_n]^{\rm T} \\ \boldsymbol{\delta}=[\delta_1,...,\delta_n]^{\rm T}\\ \boldsymbol{g}=[\frac{\partial f}{\partial x_1},...,\frac{\partial f}{\partial x_n}]^{\rm T}\\ \boldsymbol{h}= \begin{bmatrix} \frac{\partial^2 f}{\partial x_1^2} & \frac{\partial^2 f}{\partial x_1 \partial x_2} & \cdots & \frac{\partial^2 f}{\partial x_1 \partial x_n}\\ \frac{\partial^2 f}{\partial x_2 \partial x_1} & \frac{\partial^2 f}{\partial x_2^2} & \cdots & \frac{\partial^2 f}{\partial x_2 \partial x_n}\\ \vdots & \vdots & \ddots & \vdots\\ \frac{\partial^2 f}{\partial x_n \partial x_1} & \frac{\partial^2 f}{\partial x_n \partial x_2} & \cdots & \frac{\partial^2 f}{\partial x_n^2} \end{bmatrix} \]

在上面的表达式中\(\boldsymbol{x}\)表示函数自变量,\(\boldsymbol{\delta}\)中每个元素分别对应自变量的扰动,\(\boldsymbol{g}\)表示梯度矩阵,\(\boldsymbol{h}\)表示海参矩阵,它是一个实对称矩阵。以下推导梯度下降法和牛顿下降法。


(1)梯度下降法

当每个自变量的扰动量足够小时,可以忽略二阶及二阶以上的泰勒展开项,此时(2)可以表示为:

\[f(\boldsymbol{x}+\boldsymbol{\delta}) \approx f(\boldsymbol{x})+\boldsymbol{g}^{\rm T}\boldsymbol{\delta} \tag{2} \]

我们希望每次运动后的函数值都小于运动前的函数值,即\(f(\boldsymbol{x}+\boldsymbol{\delta})< f(\boldsymbol{x})\),所以显然此时需要满足\(\boldsymbol{g}^{\rm T}\boldsymbol{\delta}=||\boldsymbol{g}||||\boldsymbol{\delta}||{\rm cos}(<\boldsymbol{g},\boldsymbol{\delta}>)< 0\),需要注意的函数在已知点处的梯度是确定的,也就是说在某点上\(\boldsymbol{g}\)是一个常向量,所以\(\boldsymbol{g}^{\rm T}\boldsymbol{\delta}\)中能改变的只有\(\boldsymbol{\delta}\),显然,当\({\rm cos}(<\boldsymbol{g},\boldsymbol{\delta}>)< 0\),即向量\(\boldsymbol{g}\)\(\boldsymbol{\delta}\)之间的夹角为钝角时,该扰动量能够使函数值下降,且当\({\rm cos}(<\boldsymbol{g},\boldsymbol{\delta}>)=-1\),即该扰动向量的方向和该点处的梯度向量反向时,函数值下降最快。梯度下降法就是在每个点上均朝着该点梯度反方向运动,经过不断迭代使函数值取得最小值的方法。
函数\(f(\boldsymbol{x})\)是一个超曲面(如图1所示),令\(f(\boldsymbol{x})=C\),其中\(C\)为常数,即用一个超平面去切\(f(\boldsymbol{x})\)对应的超曲面,则当\(C\)取不同值时,可以得到如图1所示的等值线图,函数\(f(\boldsymbol{x})\)上某一点的梯度方向与该点切线方向垂直,且指向等值线增大的方向,因此,梯度下降法的运动路线即如图1所示,始终沿着函数梯度反方向运动。

图1 梯度下降示意图

梯度下降法的具体操作步骤如下:
a) 设第\(k\)次迭代的对应的点为\((\boldsymbol{x}_k,f(\boldsymbol{x}_k))\),计算该点的梯度向量\(\boldsymbol{g}_k\);
b) 根据梯度下降法可得迭代公式\(\boldsymbol{x}_{k+1}=\boldsymbol{x}_k-\alpha \boldsymbol{g}_k\),其中\(\alpha\)表示学习率;
c) 不断重复上面的迭代过程,直到满足一定的停止准则。
以一个例子进行说明,设函数\(f(\boldsymbol{x})=f(x_1,x_2)=x_1^2+x_2^2\),显然(0,0)即为该函数的最小值点,梯度向量为\(\boldsymbol{g}=[2x_1,2x_2]^{\rm T}\),设初始时刻\(\boldsymbol{x}_0=(1,3)\),学习率\(\alpha=0.1\),则迭代过程如下:

\[ \boldsymbol{x}_0=(1,3)\\ \boldsymbol{x}_1=\boldsymbol{x}_0-\alpha \boldsymbol{g}_0=(1,3)-0.1(2,6)=(0.8,2.4)\\ \boldsymbol{x}_2=\boldsymbol{x}_1-\alpha \boldsymbol{g}_1=(0.8,2.4)-0.1(1.6,4.8)=(0.64,1.92)\\ \boldsymbol{x}_3=(0.512,1.536)\\ \vdots\\ \boldsymbol{x}_{10} \approx (0.107374,0.322122)\\ \vdots\\ \boldsymbol{x}_{100} \approx (1.6296e^{-10},4.8888e^{-10})\\ \]

显然,经过多次迭代后,已逐渐靠近最优点。


(2)牛顿下降法

梯度下降法只利用到泰勒展开式的一次项,将泰勒展开至二次项可得到:

\[f(\boldsymbol{x}+\boldsymbol{\delta}) \approx f(\boldsymbol{x})+\boldsymbol{g}^{\rm T}\boldsymbol{\delta}+\frac{1}{2}\boldsymbol{\delta}^{\rm T}\boldsymbol{h}\boldsymbol{\delta} \tag{3} \]

可以看出,此时在很小的一个区域内函数\(f(\boldsymbol{x}+\boldsymbol{\delta})\)可以看成一个关于\(\boldsymbol{\delta}\)的二阶曲面,并可通过对\(\boldsymbol{\delta}\)求导得到该二阶曲面的最小值,将(3)对\(\boldsymbol{\delta}\)求导可得

\[\frac{\partial f(\boldsymbol{x}+\boldsymbol{\delta})}{\partial \boldsymbol{\delta}}=\boldsymbol{g}+\boldsymbol{h}\boldsymbol{\delta}=\boldsymbol{0} \rightarrow \boldsymbol{\delta}=-\boldsymbol{h}^{-1}\boldsymbol{g} \tag{4} \]

(4)中得到的\(\boldsymbol{\delta}\)即为牛顿下降法对应的运动向量。牛顿下降法属于二阶收敛,因此收敛速度很快,但是它每次迭代都要计算海森矩阵的逆矩阵,计算量比较大。此外,牛顿下降法还存在一些问题,以下进行分析:
从第(1)节中梯度下降法的分析我们知道,一个运动向量,如果满足\(\boldsymbol{g}^{\rm T}\boldsymbol{\delta}< 0\),即该向量与梯度向量的夹角为钝角时,那么该运动方向就是有效的运动方向。所以对于(4)中\(\boldsymbol{\delta}\),当\(\boldsymbol{g}^{\rm T}\boldsymbol{\delta}=-\boldsymbol{g}^{\rm T}(\boldsymbol{h}^{-1}\boldsymbol{g})< 0 \rightarrow \boldsymbol{g}^{\rm T}\boldsymbol{h}^{-1}\boldsymbol{g}>0\)时,才能保证牛顿下降法给出的方向是有效的方向,即必须要保证\(\boldsymbol{h}^{-1} \succ 0\),由于\(\boldsymbol{h}\)为实对称矩阵,即\(\boldsymbol{h}=\boldsymbol{h}^{\rm T}\),所以\(\boldsymbol{h}^{-1}=(\boldsymbol{h}^{\rm T})^{(-1)}=(\boldsymbol{h}^{-1})^{\rm T}\),所以\(\boldsymbol{h}^{-1}\)也是实对称矩阵,所以它可以进行正交对角化且其特征值全为实数,\(\boldsymbol{h}^{-1}=\boldsymbol{U}\boldsymbol{\Sigma}\boldsymbol{U}^{\rm T}\),其中\(\boldsymbol{\Sigma}={\rm diag}(\lambda_1,...,\lambda_n)\),当\({\rm min}(\lambda_1,...,\lambda_n)>0\)时,矩阵\(\boldsymbol{h}^{-1}\)满足正定性要求,此时牛顿下降法给出的方向是有效的方向。
当海森矩阵的逆矩阵不满足正定性要求时,可对牛顿下降方向进行适当修正,具体做法如下:
\({\rm min}(\lambda_1,...,\lambda_n)=\lambda_n< 0\),则可以令\(\hat{\boldsymbol{h}}=\boldsymbol{h}^{-1}+\sigma\boldsymbol{I}=\boldsymbol{U}\boldsymbol{\Sigma}\boldsymbol{U}^{\rm T}+\sigma\boldsymbol{U}\boldsymbol{I}\boldsymbol{U}^{\rm T}=\boldsymbol{U}(\boldsymbol{\Sigma}+\sigma\boldsymbol{I})\boldsymbol{U}^{\rm T}=\boldsymbol{U}\hat{\boldsymbol{\Sigma}}\boldsymbol{U}^{\rm T}\),其中\(\sigma=|\lambda_n|+\epsilon\)\(\epsilon\)表示很小的正数,\(\hat{\boldsymbol{\Sigma}}={\rm diag}(\lambda_1+\sigma,...,\lambda_n+\sigma)\),则牛顿下降方向可以修正为\(\boldsymbol{\delta}=-\hat{\boldsymbol{h}}^{-1}\boldsymbol{g}\)


牛顿下降法是二阶收敛,梯度下降是一阶收敛,所以牛顿法的收敛速度更快。形象一点说明就是,如果想找一条最短的路径到盆地的最底部,梯度下降法每次都朝当前位置处坡度最大的方向走,而牛顿法不仅会考虑当前坡度大不大,还会考虑下一步之后,坡度是否会变得更大,因此牛顿法比梯度下降法看得更远,能更快走到最底部。从几何的观点看,牛顿法是用一个二次曲面去拟合当前所在位置的局部曲面,而梯度下降法适用一个平面去拟合当前的局部曲面,通常情况下,二次曲面的拟合效果会比平面更好,因此牛顿法能够选择出更符合真实情况的最优下降路径。

posted @ 2021-06-15 21:34  平和少年  阅读(1350)  评论(0编辑  收藏  举报