最速下降法/梯度下降法

梯度下降法在机器学习中是经常用到的一种方法,很多人也把梯度下降法看作是最速下降法,但是这两种方法好像还有一些细微差别,wikipedia中Gradient descent的描述中有这么一句:Gradient descent is also known as steepest descent. However, gradient descent should not be confused with the method of steepest descent for approximating integrals.由于我也没有弄明白梯度下降和最速下降的区别,所以本文中将会用最速下降来统一说明。
在讲解梯度下降算法之前,先讲一下梯度下降的解决的问题是什么。梯度下降解决的是无约束最优化问题,与之相对应的是约束最优化问题。无约束最优化问题的一般形式为:

minf(x)
其中f:RnR1。这一问题是指在Rn中寻找一点x,使得对于xRn,都与
f(x)f(x)
x就是全局最优解。
梯度下降法是多元函数求极值最早的方法。梯度下降法简单直观,但是收敛速度慢。之所以收敛速度慢是由于梯度下降会出现锯齿现象,将会慢慢讲解。

基本思想

最速下降法通过迭代的方式求函数f(x)的最优解。给定一个初始点,通过迭代找到下一个点,我们希望找到的下一个点能比上一个点有更优的函数值。那么最速下降法最重要的一点就是应该如何迭代,这用到了上一篇博客中的一个小知识:给定点xk,点xk处的负梯度方向为最速下降方向,至少在点xk的临近范围内是这样的。所以我们可以在点xk处选择搜索方向

pk=f(xk)
在选定了搜索方向之后我们就可以沿着搜索方向进行搜索,然后选择点xk+1,其中
xk+1=xktkf(xk)
,其中tk为沿负梯度方向的搜索距离,我们称为步长因子。我们把上式成为最速下降迭代公式,可以简记为
xk+1=1s(xk,f(xk))
,由该公式产生的算法称为最速下降法。
在知道迭代公式之后,我们希望得到步长因子tk能够满足
f(xktkf(xk))=minf(xktf(xk))
,即我们希望xk+1为搜索方向上函数值“最小”的点。
对于任意给定的函数f(x),最速下降法不一定能找到函数的全局最优点(全局极小点),可能会找找到函数的局部极小点。

算法描述

为了书写简单,记gk=g(xk)=f(xk)
最速下降法
已知:目标函数f(x)以及梯度g(x),H终止准则所需要的终止限ϵ1ϵ2ϵ3

1:选择初始点x0;计算f0=f(x0)g0=g(x0);置k=0
2:作直线搜索xk+1=1s(xk,gk);计算fk+1=f(xk+1)gk+1=g(xk+1)
3:判断H终止准则是否满足:若满足,则输出xk+1fk+1否则,置k=k+1,转2。

关于直线搜索和H终止准则我将会在在下一篇博客中做补充说明。直线搜索是为了求解一元函数极小化问题而的迭代方法(在算法描述中使用直线搜索来找最优的tk,从而通过公式xk+1=xktkf(xk)找到下一个迭代点xk+1,需要知道的是在这里求解tk时,并一定使用迭代法,在一元函数可微或者可导的情况下,也可以直接通过导数方法进行求解),在这里是为了求得每一步的步长因子tk;H终止准则是一种终止条件,常见的终止条件如函数值的变化范围小于阈值ϵ时终止。

应用于正定二次函数

在介绍了最速下降法的基本逻辑之后,我们可以知道最速下降法关键步骤是求解每一步的步长因子tk,而对于正定二次函数

f(x)=12xTQx+bTx+c
是可以推出显示迭代公式的。推导过程如下。
设第k个迭代点为xk,求xk+1的表达式。正定二次函数f(x)的一阶偏导数为g(x)=Qx+b,因此gk=g(xk)=Qxk+b。从xk出发做直线搜索便可以得到xk+1,即xk+1=xktkgktk为最优步长因子。
由于最速下降法的连续的两次的搜索方向是垂直的(将在锯齿现象中进行详细讲解),即
gTk+1gk=0
。便可以得到
[Q(xktkgk)]Tgk=0
,可以推出
[gktkQgk]Tgk=0
,可解得
tk=gTkgkgTkQgk
,可以得到
xk+1=xkgTkgkgTkQgkgk
。上式便是最速下降法应用于正定二次函数时的显示迭代公式。

锯齿现象

在最速下降法中,迭代点向极小点靠近的过程中,走的是曲折的路线:后一次的搜索方向pk+1与前一次的搜索方向pk总是互相垂直的,称之为锯齿现象。如下图所示(在下图中一个圈表示等值线)。

最速下降法/梯度下降法

在远离极小点的地方,最速下降法每次有较多的下降;但是在接近极小点的地方,由于锯齿现象的存在,使得每次迭代行进的距离缩短,收敛速度降低。
造成锯齿现象的关键原因是pk+1pk=0(或是gk+1gk=0),下面来解释一下具体原因。造成这种结果的具体原因是在点xk沿pk方向搜索的过程中,我们找到了该方向上的极小点,即xk+1,也就是是说在xk+1pk方向为该点的切线方向(如果不是切线方向,那么该点就不是极小点,还能找到更小的值),而在xk+1处的搜索方向为负梯度方向,故pk+1pk=0