梯度下降法在机器学习中是经常用到的一种方法,很多人也把梯度下降法看作是最速下降法,但是这两种方法好像还有一些细微差别,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.由于我也没有弄明白梯度下降和最速下降的区别,所以本文中将会用最速下降来统一说明。
在讲解梯度下降算法之前,先讲一下梯度下降的解决的问题是什么。梯度下降解决的是无约束最优化问题,与之相对应的是约束最优化问题。无约束最优化问题的一般形式为:
梯度下降法是多元函数求极值最早的方法。梯度下降法简单直观,但是收敛速度慢。之所以收敛速度慢是由于梯度下降会出现锯齿现象,将会慢慢讲解。
基本思想
最速下降法通过迭代的方式求函数 f(x) 的最优解。给定一个初始点,通过迭代找到下一个点,我们希望找到的下一个点能比上一个点有更优的函数值。那么最速下降法最重要的一点就是应该如何迭代,这用到了上一篇博客中的一个小知识:给定点 xk ,点 xk 处的负梯度方向为最速下降方向,至少在点 xk 的临近范围内是这样的。所以我们可以在点 xk 处选择搜索方向
在知道迭代公式之后,我们希望得到步长因子 tk 能够满足
对于任意给定的函数 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+1
,
fk+1
否则,置
k=k+1
,转2。
关于直线搜索和H终止准则我将会在在下一篇博客中做补充说明。直线搜索是为了求解一元函数极小化问题而的迭代方法(在算法描述中使用直线搜索来找最优的 tk ,从而通过公式 xk+1=xk−tk∇f(xk) 找到下一个迭代点 xk+1 ,需要知道的是在这里求解 tk 时,并一定使用迭代法,在一元函数可微或者可导的情况下,也可以直接通过导数方法进行求解),在这里是为了求得每一步的步长因子 tk ;H终止准则是一种终止条件,常见的终止条件如函数值的变化范围小于阈值 ϵ 时终止。
应用于正定二次函数
在介绍了最速下降法的基本逻辑之后,我们可以知道最速下降法关键步骤是求解每一步的步长因子 tk ,而对于正定二次函数
设第 k 个迭代点为
由于最速下降法的连续的两次的搜索方向是垂直的(将在锯齿现象中进行详细讲解),即
锯齿现象
在最速下降法中,迭代点向极小点靠近的过程中,走的是曲折的路线:后一次的搜索方向
pk+1
与前一次的搜索方向
pk
总是互相垂直的,称之为锯齿现象。如下图所示(在下图中一个圈表示等值线)。
在远离极小点的地方,最速下降法每次有较多的下降;但是在接近极小点的地方,由于锯齿现象的存在,使得每次迭代行进的距离缩短,收敛速度降低。
造成锯齿现象的关键原因是 pk+1pk=0 (或是 gk+1gk=0 ),下面来解释一下具体原因。造成这种结果的具体原因是在点 xk 沿 pk 方向搜索的过程中,我们找到了该方向上的极小点,即 xk+1 ,也就是是说在 xk+1 处 pk 方向为该点的切线方向(如果不是切线方向,那么该点就不是极小点,还能找到更小的值),而在 xk+1 处的搜索方向为负梯度方向,故 pk+1pk=0 。