考虑一个求多元函数
f(xxx)求最小值的问题,当我们无法求出精确结果时,需要使用一些算法求出它的数值解,本文主要探讨基于梯度的优化算法中比较常见的三种算法:梯度下降法、牛顿法和拟牛顿法。
1.梯度下降法
在说梯度下降法之前,概念首先说说梯度的概念:梯度是相对一个向量求导的导数,它的定义为
▽xf(xxx)=(∂x1∂f,⋯,∂xn∂f)。事实上,对于任意一个单位向量
uuu,
f(xxx)在
uuu方向上的方向导数为
∂α∂f(x
+αu
)∣α=0=uuuT▽xf(xxx),由柯西不等式可知
uuuT▽xf(xxx)≤∥uuu∥2∥▽xf(xxx)∥2,当
uuu和
▽xf(xxx)同方向时取等号。从以上的分析可以看出梯度的意义:函数在梯度方向上的方向导数最大,换言之即函数沿着梯度方向上升的速度最快。梯度下降法基于这个原理,既然沿着梯度方向上升最快,那么梯度的反方向就是下降最快的方向(
uuuT▽xf(xxx)≥−∥uuu∥2∥▽xf(xxx)∥2,当
uuu和
▽xf(xxx)方向相反时取等号),所以只要沿着负梯度的方向上移动就可以减小
f,具体而言,梯度下降法在每一步的迭代中使用如下算法:
xxxk+1=xxxk−ε▽xf(xxxk)
其中
ε为学习率,是一个确定步长的正标量。确定步长
ε的方法之一就是计算
f(xxx−ε▽xf(xxx))并选择其中能产生最小目标函数值的
ε。梯度下降法的优点是思路简单,计算方便,由普通梯度下降法经过改进的随机梯度下降更是一种针对大样本集的高效学习算法,然而,梯度下降法同样存在一些问题,例如,一个函数如果方向导数在某些方向上增加得很快,而在另一些方向上增加得很慢,由于梯度下降法只考虑了某一点处方向导数的大小而没有考虑他们的变化率,所以它不知道优先探索那些方向导数长期为负的方向,就好比公司招人时只考虑了应聘者的当下水平却没有他们的发展潜力,这样导致的后果是:看似每一步都选择了下降最快的方向,但实际整个下降路径可以一条反反复复的折线,如图

此外梯度下降中关于步长的选择也是一个问题,如果选择太小,受敛速度会很慢,如果太大又容易跳过极小值点,造成反复搜索。
关于步长的计算,可以考虑用函数的二阶泰勒展开近似代替原函数:
f(xxx−εg)=f(xxx)−εgTg+21gTHg,在极小值附近Hessian矩阵是正定的,于是最优步长为
ε∗=gTHggTg 。
2.牛顿法
梯度下降法仅利用了梯度信息,属于一阶优化算法,而牛顿法综合考虑了梯度和梯度的变化率信息,属于二阶优化算法。在第一部分计算步长时,使用了二阶泰勒展开近似代替原函数,那么选择最优步长的计算实际上是求解优化问题:
x
min[f(xxx0)+(xxx−xxx0)T▽xf(xxx0)+21(xxx−xxx0)TH(xxx−xxx0)]subject to xxx−xxx0=εggg
其中
ggg为
f(xxx)在
xxx0处的梯度,那么牛顿算法相当于去掉约束条件,直接求解优化问题:
x
min[f(xxx0)+(xxx−xxx0)T▽xf(xxx0)+21(xxx−xxx0)TH(xxx−xxx0)]
根据计算结果结果自主的选择最小值的搜索方向,通过计算可知,当
xxx−xxx0=−H−1▽xf(xxx)时,上述优化问题取得最小值。所以,牛顿法迭代过程中的更新步骤为:
xxxk+1=xxxk−H−1▽xf(xxxk)
将这个式子带入
f(xxxk+1)=f(xxxk)+(xxxk+1−xxxk)T▽xf(xxxk)+21(xxxk+1−xxxk)TH(xxxk+1−xxxk)可以得到:
f(xxxk+1)=f(xxxk)−21gTH−1g显然要使牛顿法每一步迭代都是下降的,Hessian矩阵
H必须为正定矩阵,这样就要求迭代时距离起始点最近的临界值点为极小值点,这样也可以保证下降过程中不会被吸引到鞍点。
如果
f本身就是一个正定二次函数,牛顿法经过一次迭代就能达到它的最小值,若使用梯度下降法,可能需要迭代多次。通过这个例子可以看出,牛顿法比梯度下降法更快的收敛到极小值。但是牛顿法存在一个严重的问题:对于一个复杂的函数,如果每一步都计算Hessian矩阵的逆矩阵将会造成很大的开销,尤其是对于数据维度比较高的问题。
3.拟牛顿法
既然梯度下降法存在收敛慢的问题,而牛顿法又存在开销大的问题,那么人们就思考能否找到一种收敛速度快开销有相对较小的方法,于是,拟牛顿法就横空出世了。
拟牛顿法的思路是:每一步迭代的更新步骤选择
xxxk+1=xxxk−εGk▽xf(xxxk),其中
Gk▽xf(xxxk)为搜索方向,
ε为学习率,用
f(xxx)的一阶泰勒展开式近似代替原函数并将迭代更新公式带入其中得
f(xxxk+1)=f(xxxk)−ε(▽xf(xxxk))TGk▽xf(xxxk),要使每一步迭代函数值都下降,则
Gk必须是正定矩阵。下面的问题就在于确定每一步的
Gk,即确定每一步的搜索方向。牛顿法中搜索方向的选择考虑了每一步的梯度变化率,基于这个思路,拟牛顿法将每一步的梯度变化率作为
Gk的更新依据,即置
xxxk+1−xxxk=Gk+1[▽xf(xxxk+1)−▽xf(xxxk)],记
vk=▽xf(xxxk+1)−▽xf(xxxk),
wk=xxxk+1−xxxk,则
wk=Gk+1vk,关于
Gk+1的选择有多种方法,以DFP算法为例,它假设每一步迭代中
Gk+1是由
Gk加上两个附加项组成,即
Gk+1=Gk+Pk+Qk,其中
Pk,Qk是待定矩阵,这时:
Gk+1vk=Gkvk+Pkvk+Qkvk
为使
Gk+1满足条件,可使
Pkvk=wk
Qkvk=−Gkvk
例如取
Pk=wkTvkwkwkT
Qk=−vkTGkvkGkvkvkTGk
于是
Gk+1=Gk+wkTvkwkwkT−vkTGkvkGkvkvkTGk
在极小值点附近(Hessian矩阵正定),只要初始矩阵
G0是正定的,则所有的
Gk都是正定的。可以用数学归纳法证明这一点:假设
Gk正定,则存在正定对称矩阵
P使得:
Gk=PTP,将函数二阶泰勒展开可得:
wkTvk=vkTHk−1vk,于是
Gk+1=PT(I+vkTHk−1vkQTwkwkTQ−1−vkTPTPvkPvkvkTPT)P
其中
Q=P−1,要证明
Gk+1正定,只需要证明括号里面的矩阵正定即可。令
M=I−vkTPTPvkPvkvkTPT,
N=vkTHk−1vkQTwkwkTQ,
O=I+vkTHk−1vkQTwkwkTQ−vkTPTPvkPvkvkTPT,则
O=M+N.显然
N是半正定的,通过计算有
M2=M,MT=M,且
tr(M)=n−1。所以,
M是半正定矩阵,其零特征值对应的特征空间是一维的,对应的特征向量为
kPvk,k∈Z.对任意非零向量
yyy,如果
yyy̸=kPvk,则
yyyTOyyy≥yyyTMyyy>0
若
yyy=kPvk,则
yyyTOyyy=yyyTNyyy=k2vkTHk−1vk>0
综上,
O是正定矩阵,所以
Gk+1是正定矩阵,证毕。
通过整个过程可以看出,拟牛顿法实际上是用了一个正定矩阵来代替Hessian矩阵的逆矩阵,这样不仅拥有较快的收敛速度,而且通过一步步迭代更新大大减少了计算开销。拟牛顿算法对于训练集不是很大的机器学习优化问题而言是一种十分高效的算法,学习率
ε的确定方法完全类似于梯度下降法中学习率的确定方法。