梯度下降(Gradient Descent)
本讲我们将介绍最基础,也是最经典的优化方法——梯度下降。在阐述梯度下降之前,我们首先给出两个比凸性更强的性质:
强凸性与光滑性
- 首先定义强凸性:设μ≥0,f:Rn→R为可微函数,若f的定义域Ω为凸集,且对任意x,y∈Ω,有
f(y)≥f(x)+[∇f(x)]⊤(y−x)+2μ∥y−x∥22.
那么称函数f满足μ-强凸性。(相应地,−f也满足μ-强凹性)
- 这在原有一阶凸性条件的基础上增加了一个二次型2μ∥y−x∥22=(y−x)⊤(2μI)(y−x)。
- 从几何角度上看,上述条件可以理解为函数必须位于过其任意一点,二次项系数为2μ的抛物线之上。显然这比切线要求更加严格。
- 与二阶凸性条件的关系:如果f二阶可微,那么上述条件也可表述为对任意x∈Ω,
∇2f(x)−μI⪰0
即∇2f(x)−μI为半正定矩阵。
- 实际上,满足μ-强凸性的函数也满足严格凸性,从而有且仅有一个全局最小值。
- 然后定义光滑性:设L≥0,Ω⊆Rn为一集合,f:Ω→R为一可微函数。那么如果对任意x,y∈Ω,有
f(y)≤f(x)+[∇f(x)]⊤(y−x)+2L∥y−x∥22.
那么称函数f满足L-光滑性。
- 与μ-强凸性类似,这一条件也可以理解为函数必须位于过其任意一点,二次项系数为2L的抛物线之下。
- 实际上,对于凸函数而言,L-光滑性与L-利普希茨连续性是等价的。【证明略】
- 上述两个性质相当于对函数的曲率(Hessian矩阵)做了约束,这对后续的梯度下降会有很大作用。
梯度下降法
- 梯度下降本质是一种迭代方法。具体而言,设f:Rn→R为可微函数,对于最优化问题
x∈Rnminf(x)
梯度下降的想法是先设定一个初值x0∈Rn,再通过迭代产生序列x1,x2,⋯,迭代公式为
xt+1=xt+ηvt
其中:
- vt为搜索方向,一般会指向更优的解;【在梯度下降法中与梯度∇f(x)有关】
- η为步长,表示在搜索方向上的移动量。【一般视作超参数,需要根据具体问题调试】
- 那么如何具体确定搜索方向呢?我们希望迭代后的解比原来的解更优,即f(xt+ηvt)≤f(xt)。
- 特别地,我们希望目标函数下降的速度最快,而目标函数下降的速度由方向导数Df(x)[v]=v⊤∇f(x)决定。由微积分的知识可知,当v方向与梯度方向相反时,函数下降的速度最快,即
−∥∇f(x)∥2∇f(x)∈v∈Rn∥v∥2=1argminDf(x)[v].
- 另一方面,我们也希望利用目标函数的梯度范数信息(一般梯度越大,离最优解就越远)。因此,我们最终选择vt=−∇f(xt)。
- 由此我们便得到著名的梯度下降表达式:
xt+1=xt−η∇f(xt),t=0,1,2,⋯
一般会经过指定迭代次数T后停止。
- 然而,如果步长η固定,还是不能保证迭代后的解一定比原始解更优。实际上,我们只能说对于任意t,存在ηt>0使得
f(xt−ηt∇f(xt))≤f(xt)
这个ηt与f在xt附近的形状(如曲率)有关。当然,在下述讨论中,我们只考虑固定步长以简化推导。
收敛性分析
- 下面我们会说明,对于特定类型的函数f:Rn→R与特定的步长η>0,梯度下降法可以保证迭代收敛到最优解。
- 首先以最小二乘问题作为例子:设A∈Rm×n列满秩,y∈Rm,之前我们已经知道
x∈Rnmin∥Ax−y∥22
存在最优解
x∗=(A⊤A)−1A⊤y
下面我们分析梯度下降法能否收敛到这个解。设初值x0∈Rn,由于函数梯度
∇f(x)=2A⊤(Ax−y)
因此迭代表达式为
xt+1=xt−2ηA⊤(Axt−y)=(I−2ηA⊤A)xt+2ηA⊤y
下面我们证明存在η>0使得∥xt+1−x∗∥≤∥xt−x∗∥且t→∞lim∥xt−x∗∥=0:
xt+1−x∗=(I−2ηA⊤A)xt+2ηA⊤y−x∗=(I−2ηA⊤A)xt+2ηA⊤y−(A⊤A)−1A⊤y=(I−2ηA⊤A)xt+2η(A⊤A)(A⊤A)−1A⊤y−(A⊤A)−1A⊤y=(I−2ηA⊤A)xt−(I−2ηA⊤A)x∗=(I−2ηA⊤A)(xt−x∗).
于是
∥xt+1−x∗∥22=∥(I−2ηA⊤A)(xt−x∗)∥22=∥I−2ηA⊤A∥22⋅∥xt−x∗∥22=σmax{I−2ηA⊤A}⋅∥xt−x∗∥22
因此只要σmax{I−2ηA⊤A}<1,那么上述结论就成立了。
- 接下来我们基于这个例子对满足收敛性的函数类进行推广。这里我们主要考虑同时满足μ-强凸性与L-光滑性的函数。在对它们的收敛性进行推导之前,我们首先给出L-光滑函数的一个性质:
- 设f:Rn→R为一L-光滑函数,那么对任意x∈Rn,有
∥∇f(x)∥22≤2L(f(x)−x′∈Rnminf(x′)).
即当x离最优解最近,那么它对应的梯度就越小。简单证明如下:
- 在上述L-光滑性条件中令y=x−L∇f(x),可得
f(x−L∇f(x))≤f(x)+[∇f(x)]⊤(−L∇f(x))+2L−L∇f(x)22=f(x)−L1∥∇f(x)∥22+2L1∥∇f(x)∥22=f(x)−2L1∥∇f(x)∥22.
因此
x′∈Rnminf(x′)≤f(x−L∇f(x))≤f(x)−2L1∥∇f(x)∥22
经过整理后即得结论。
实际上,上述推导中(x−L∇f(x),f(x)−2L1∥∇f(x)∥22)这一点恰好就是过(x,f(x))的上包络抛物线最低点。
- 现在我们就能正式给出函数梯度下降收敛性的结论了:设μ,L>0,f:Rn→R同时满足μ-强凸性与L-光滑性。若下述优化问题
x∈Rnminf(x)
存在最优解x∗,那么令步长η=L1,下述梯度下降迭代过程
xt+1=xt−η∇f(xt)
对任意初值x0,任意t∈N都有
∥xt+1−x∗∥22≤(1−Lμ)∥xt−x∗∥22.
证明留给读者(利用上述L-光滑性性质和μ-强凸性性质即可)。要证明t→∞lim∥xt−x∗∥=0,只需要0<Lμ≤1即可。这是显然的,因为由光滑性与强凸性条件,
⟹f(x)+[∇f(x)]⊤(y−x)+2μ∥y−x∥22≤f(y)≤f(x)+[∇f(x)]⊤(y−x)+2L∥y−x∥222μ∥y−x∥22≤2L∥y−x∥22⟹μ≤L
- 由上述推导可见,Lμ决定了梯度下降的收敛速度:其值越大,收敛速度就越快。
极端情况下(μ=L,此时f为标准抛物面),从任意位置出发只需要一次迭代即可达到最优解。
- 当然,梯度下降的收敛性并不只局限于强凸光滑函数。对于一般的光滑凸函数,使用合适的步长,经过足够多的迭代次数后也能达到收敛,只是整体速度会更慢一些。
- 从定量角度,如果需要的收敛误差为ϵ,那么梯度下降收敛所需迭代次数级别大致在O(ϵ1)。
随机梯度下降(SGD)
- 在现实情形中,梯度的计算往往会比较复杂。比如下述优化问题
x∈Rnminf(x)=x∈Rnminm1i=1∑mfi(x)
其梯度∇f(x)=m1i=1∑m∇fi(x),当m较大,∇fi(x)较复杂时计算效率较低。
- 对此,随机梯度下降的策略是:在{f1,⋯,fm}中随机抽取一个子函数fi作为替代计算其梯度,得到表达式
xt+1=xt−η∇fi(xt)
当每个子函数的抽取概率都相等时,其得到的梯度期望恰好与原始函数梯度相等
E[fi(xt)]=m1i=1∑mfi(xt)=f(xt).
- 那么如何保证SGD同样能收敛呢?这里我们不能直接套用上面的证明方法(−∇fi(xt)方向甚至可能使目标函数增大)。实际上,对于随机梯度下降,我们取迭代函数序列的均值可以得到
T→∞limf(T1t=1∑Txt)=x∈Rnminf(x)
另一方面,为保证SGD收敛,我们还需要将步长随迭代次数增加逐渐趋向0。
- 对于一般情形的SGD收敛性证明比较复杂,但如果加上一些约束条件,证明的复杂性会降低一些。【具体略,可参见知乎文章】
- 在机器学习中,随机梯度下降一般会自然融入于在线学习(即数据点逐个依次到达),当新数据到达时自动进行优化。【注意每次迭代时都要除以样本数量进行归一化】
而在神经网络中,往往会使用小批量数据(即Mini-batch)计算梯度,相比单样本SGD可以有效降低方差/噪声影响。
带约束的梯度下降
- 在上述梯度下降算法中,我们没有对目标函数施加约束。对于带约束的优化问题,如
x∈Ωminf(x),Ω为凸集
直接套用上述梯度下降算法可能导致最终解不在Ω中。
- 为解决这一问题,我们可以使用下述两种梯度下降的变体:
- 投影梯度下降法(PGD)
PGD的想法很简单:对于Ω之外的解,将其映射到Ω中。具体而言,对任意y∈Rn,定义
projΩ(y)=x∈Ωargmin∥x−y∥22
这里假设Ω为闭凸集,这样能保证projΩ(y)一定存在。然后梯度下降表达式就可以写为
xt+1=projΩ(xt−η∇fi(xt)).
注意PGD中投影函数本身也是一个凸优化问题,只有当这一问题相比原始问题足够简单时PGD算法才可行。
- 条件梯度下降法(CGD)
条件梯度下降法(也称为Frank-Wolfe算法)给出了另一种解决策略:在计算搜索方向vt时加入可行域Ω约束,即
vt=v∈Ωargmin[∇f(xt)]⊤v
同时,为保证迭代后xt+1不会飞到Ω之外,将更新公式改为凸组合
xt+1=(1−δt)xt+δtvt
其中δt∈[0,1]且t→∞limδt=0。【一个保守的取值是δt=t1】
当然,这里vt的计算同样也是Ω内的凸优化问题,因此要求同上。
上述两种方法对于解决一般的带约束优化问题仍然比较麻烦,下一讲我们将进一步阐述如何处理带约束的优化问题。