梯度下降(Gradient Descent)

本讲我们将介绍最基础,也是最经典的优化方法——梯度下降。在阐述梯度下降之前,我们首先给出两个比凸性更强的性质:

强凸性与光滑性

  • 首先定义强凸性:设μ0\mu\geq 0f:RnRf:\R^n\to\R为可微函数,若ff的定义域Ω\Omega为凸集,且对任意x,yΩ\vec{x},\vec{y}\in\Omega,有 f(y)f(x)+[f(x)](yx)+μ2yx22.f(\vec{y}) \geq f(\vec{x}) + [\nabla f(\vec{x})]^\top (\vec{y} - \vec{x}) + \frac{\mu}{2} \|\vec{y} - \vec{x}\|_2^2. 那么称函数ff满足μ\mu-强凸性。(相应地,f-f也满足μ\mu-强凹性)
    • 这在原有一阶凸性条件的基础上增加了一个二次型μ2yx22=(yx)(μ2I)(yx)\dfrac{\mu}{2} \|\vec{y} - \vec{x}\|_2^2=(\vec{y} - \vec{x})^\top\left(\dfrac{\mu}{2}I\right)(\vec{y} - \vec{x})
    • 从几何角度上看,上述条件可以理解为函数必须位于过其任意一点,二次项系数为μ2\dfrac{\mu}{2}的抛物线之上。显然这比切线要求更加严格。
    • 与二阶凸性条件的关系:如果ff二阶可微,那么上述条件也可表述为对任意xΩ\vec{x}\in\Omega2f(x)μI0\nabla^2 f(\vec{x})-\mu I\succeq 02f(x)μI\nabla^2 f(\vec{x})-\mu I为半正定矩阵。
    • 实际上,满足μ\mu-强凸性的函数也满足严格凸性,从而有且仅有一个全局最小值。
  • 然后定义光滑性:设L0L\geq 0ΩRn\Omega\subseteq\R^n为一集合,f:ΩRf:\Omega\to\R为一可微函数。那么如果对任意x,yΩ\vec{x},\vec{y}\in\Omega,有 f(y)f(x)+[f(x)](yx)+L2yx22.f(\vec{y}) \leq f(\vec{x}) + [\nabla f(\vec{x})]^\top (\vec{y} - \vec{x}) + \frac{L}{2} \|\vec{y} - \vec{x}\|_2^2. 那么称函数ff满足LL-光滑性。
    • μ\mu-强凸性类似,这一条件也可以理解为函数必须位于过其任意一点,二次项系数为L2\dfrac{L}{2}的抛物线之下。
    • 实际上,对于凸函数而言,LL-光滑性与LL-利普希茨连续性是等价的。【证明略】
  • 上述两个性质相当于对函数的曲率(Hessian矩阵)做了约束,这对后续的梯度下降会有很大作用。

梯度下降法

  • 梯度下降本质是一种迭代方法。具体而言,设f:RnRf:\R^n\to\R为可微函数,对于最优化问题 minxRnf(x)\min_{\vec{x}\in\R^n}f(\vec{x}) 梯度下降的想法是先设定一个初值x0Rn\vec{x}_0\in\R^n,再通过迭代产生序列x1,x2,\vec{x}_1,\vec{x}_2,\cdots,迭代公式为 xt+1=xt+ηvt\vec{x}_{t+1}=\vec{x}_t+\eta\vec{v}_t 其中:
    • vt\vec{v}_t为搜索方向,一般会指向更优的解;【在梯度下降法中与梯度f(x)\nabla f(\vec{x})有关】
    • η\eta为步长,表示在搜索方向上的移动量。【一般视作超参数,需要根据具体问题调试】
  • 那么如何具体确定搜索方向呢?我们希望迭代后的解比原来的解更优,即f(xt+ηvt)f(xt)f(\vec{x}_t+\eta\vec{v}_t)\leq f(\vec{x}_t)
    • 特别地,我们希望目标函数下降的速度最快,而目标函数下降的速度由方向导数Df(x)[v]=vf(x)Df(\vec{x})[\vec{v}]=\vec{v}^\top\nabla f(\vec{x})决定。由微积分的知识可知,当v\vec{v}方向与梯度方向相反时,函数下降的速度最快,即 f(x)f(x)2arg minvRnv2=1Df(x)[v].-\frac{\nabla f(\vec{x})}{\|\nabla f(\vec{x})\|_2} \in \argmin_{\substack{\vec{v} \in \mathbb{R}^n\\\|\vec{v}\|_2=1}} Df(\vec{x})[\vec{v}].
    • 另一方面,我们也希望利用目标函数的梯度范数信息(一般梯度越大,离最优解就越远)。因此,我们最终选择vt=f(xt)\vec{v}_t=-\nabla f(\vec{x}_t)
  • 由此我们便得到著名的梯度下降表达式: xt+1=xtηf(xt),t=0,1,2,\vec{x}_{t+1}=\vec{x}_t-\eta\nabla f(\vec{x}_t),\quad t=0,1,2,\cdots 一般会经过指定迭代次数TT后停止。
  • 然而,如果步长η\eta固定,还是不能保证迭代后的解一定比原始解更优。实际上,我们只能说对于任意tt,存在ηt>0\eta_t>0使得 f(xtηtf(xt))f(xt)f(\vec{x}_t-\eta_t\nabla f(\vec{x}_t))\leq f(\vec{x}_t) 这个ηt\eta_tffxt\vec{x}_t附近的形状(如曲率)有关。当然,在下述讨论中,我们只考虑固定步长以简化推导。

收敛性分析

  • 下面我们会说明,对于特定类型的函数f:RnRf:\R^n\to\R与特定的步长η>0\eta>0,梯度下降法可以保证迭代收敛到最优解。
  • 首先以最小二乘问题作为例子:设ARm×nA\in\R^{m\times n}列满秩,yRm\vec{y}\in\R^m,之前我们已经知道 minxRnAxy22\min_{\vec{x}\in\R^n}\|A\vec{x}-\vec{y}\|_2^2 存在最优解 x=(AA)1Ay\vec{x}^*=(A^\top A)^{-1}A^\top\vec{y} 下面我们分析梯度下降法能否收敛到这个解。设初值x0Rn\vec{x}_0\in\R^n,由于函数梯度 f(x)=2A(Axy)\nabla f(\vec{x})=2A^\top(A\vec{x}-\vec{y}) 因此迭代表达式为 xt+1=xt2ηA(Axty)=(I2ηAA)xt+2ηAy\vec{x}_{t+1}=\vec{x}_t-2\eta A^\top(A\vec{x}_t-\vec{y})=(I-2\eta A^\top A)\vec{x}_t+2\eta A^\top\vec{y} 下面我们证明存在η>0\eta>0使得xt+1xxtx\|\vec{x}_{t+1}-\vec{x}^*\|\leq\|\vec{x}_{t}-\vec{x}^*\|limtxtx=0\displaystyle\lim_{t\to\infty}\|\vec{x}_{t}-\vec{x}^*\|=0xt+1x=(I2ηAA)xt+2ηAyx=(I2ηAA)xt+2ηAy(AA)1Ay=(I2ηAA)xt+2η(AA)(AA)1Ay(AA)1Ay=(I2ηAA)xt(I2ηAA)x=(I2ηAA)(xtx).\begin{align*} \vec{x}_{t+1} - \vec{x}^* &= (I - 2\eta A^\top A)\vec{x}_t + 2\eta A^\top \vec{y} - \vec{x}^* \\ &= (I - 2\eta A^\top A)\vec{x}_t + 2\eta A^\top \vec{y} - (A^\top A)^{-1} A^\top \vec{y} \\ &= (I - 2\eta A^\top A)\vec{x}_t + 2\eta (A^\top A)(A^\top A)^{-1} A^\top \vec{y} - (A^\top A)^{-1} A^\top \vec{y} \\ &= (I - 2\eta A^\top A)\vec{x}_t - (I - 2\eta A^\top A)\vec{x}^* \\ &= (I - 2\eta A^\top A)(\vec{x}_t - \vec{x}^*). \end{align*} 于是 xt+1x22=(I2ηAA)(xtx)22=I2ηAA22xtx22=σmax{I2ηAA}xtx22\begin{aligned} \|\vec{x}_{t+1} - \vec{x}^*\|_2^2&=\|(I - 2\eta A^\top A)(\vec{x}_t - \vec{x}^*)\|_2^2\\ &=\|I - 2\eta A^\top A\|_2^2\cdot\|\vec{x}_t - \vec{x}^*\|_2^2\\ &=\sigma_{\max}\{I - 2\eta A^\top A\}\cdot\|\vec{x}_t - \vec{x}^*\|_2^2 \end{aligned} 因此只要σmax{I2ηAA}<1\sigma_{\max}\{I - 2\eta A^\top A\}< 1,那么上述结论就成立了。
  • 接下来我们基于这个例子对满足收敛性的函数类进行推广。这里我们主要考虑同时满足μ\mu-强凸性与LL-光滑性的函数。在对它们的收敛性进行推导之前,我们首先给出LL-光滑函数的一个性质:
    • f:RnRf:\R^n\to\R为一LL-光滑函数,那么对任意xRn\vec{x}\in\R^n,有 f(x)222L(f(x)minxRnf(x)).\|\nabla f(\vec{x})\|_2^2 \leq 2L \left( f(\vec{x}) - \min_{\vec{x}' \in \mathbb{R}^n} f(\vec{x}') \right). 即当x\vec{x}离最优解最近,那么它对应的梯度就越小。简单证明如下:
      • 在上述LL-光滑性条件中令y=xf(x)L\vec{y}=\vec{x}-\dfrac{\nabla f(\vec{x})}{L},可得 f(xf(x)L)f(x)+[f(x)](f(x)L)+L2f(x)L22=f(x)1Lf(x)22+12Lf(x)22=f(x)12Lf(x)22.\begin{aligned} f\left(\vec{x} - \frac{\nabla f(\vec{x})}{L}\right) &\leq f(\vec{x}) + [\nabla f(\vec{x})]^\top \left( -\frac{\nabla f(\vec{x})}{L} \right) + \frac{L}{2} \left\| -\frac{\nabla f(\vec{x})}{L} \right\|_2^2 \\ &= f(\vec{x}) - \frac{1}{L} \|\nabla f(\vec{x})\|_2^2 + \frac{1}{2L} \|\nabla f(\vec{x})\|_2^2 \\ &= f(\vec{x}) - \frac{1}{2L} \|\nabla f(\vec{x})\|_2^2. \end{aligned} 因此 minxRnf(x)f(xf(x)L)f(x)12Lf(x)22\min_{\vec{x}' \in \mathbb{R}^n} f(\vec{x}')\leq f\left(\vec{x} - \frac{\nabla f(\vec{x})}{L}\right)\leq f(\vec{x}) - \frac{1}{2L} \|\nabla f(\vec{x})\|_2^2 经过整理后即得结论。

      实际上,上述推导中(xf(x)L,f(x)12Lf(x)22)\left(\vec{x}-\dfrac{\nabla f(\vec{x})}{L},f(\vec{x}) - \dfrac{1}{2L} \|\nabla f(\vec{x})\|_2^2\right)这一点恰好就是过(x,f(x))(\vec{x},f(\vec{x}))的上包络抛物线最低点。

  • 现在我们就能正式给出函数梯度下降收敛性的结论了:设μ,L>0\mu,L>0f:RnRf:\R^n\to\R同时满足μ\mu-强凸性与LL-光滑性。若下述优化问题 minxRnf(x)\min_{\vec{x}\in\R^n}f(\vec{x}) 存在最优解x\vec{x}^*,那么令步长η=1L\eta=\dfrac{1}{L},下述梯度下降迭代过程 xt+1=xtηf(xt)\vec{x}_{t+1}=\vec{x}_t-\eta\nabla f(\vec{x}_t) 对任意初值x0\vec{x}_0,任意tNt\in\N都有 xt+1x22(1μL)xtx22.\|\vec{x}_{t+1} - \vec{x}^*\|_2^2 \leq \left(1 - \frac{\mu}{L}\right)\|\vec{x}_t - \vec{x}^*\|_2^2. 证明留给读者(利用上述LL-光滑性性质和μ\mu-强凸性性质即可)。要证明limtxtx=0\displaystyle\lim_{t\to\infty}\|\vec{x}_{t}-\vec{x}^*\|=0,只需要0<μL10< \dfrac{\mu}{L}\leq 1即可。这是显然的,因为由光滑性与强凸性条件, f(x)+[f(x)](yx)+μ2yx22f(y)f(x)+[f(x)](yx)+L2yx22μ2yx22L2yx22μL\begin{aligned} &f(\vec{x}) + [\nabla f(\vec{x})]^\top (\vec{y} - \vec{x}) + \frac{\mu}{2} \|\vec{y} - \vec{x}\|_2^2\leq f(\vec{y})\leq f(\vec{x}) + [\nabla f(\vec{x})]^\top (\vec{y} - \vec{x}) + \frac{L}{2} \|\vec{y} - \vec{x}\|_2^2\\ \Longrightarrow & \frac{\mu}{2} \|\vec{y} - \vec{x}\|_2^2\leq\frac{L}{2}\|\vec{y} - \vec{x}\|_2^2\Longrightarrow \mu\leq L \end{aligned}
    • 由上述推导可见,μL\dfrac{\mu}{L}决定了梯度下降的收敛速度:其值越大,收敛速度就越快。

      极端情况下(μ=L\mu=L,此时ff为标准抛物面),从任意位置出发只需要一次迭代即可达到最优解。

  • 当然,梯度下降的收敛性并不只局限于强凸光滑函数。对于一般的光滑凸函数,使用合适的步长,经过足够多的迭代次数后也能达到收敛,只是整体速度会更慢一些。
    • 从定量角度,如果需要的收敛误差为ϵ\epsilon,那么梯度下降收敛所需迭代次数级别大致在O(1ϵ)O\left(\dfrac{1}{\epsilon}\right)

随机梯度下降(SGD)

  • 在现实情形中,梯度的计算往往会比较复杂。比如下述优化问题 minxRnf(x)=minxRn1mi=1mfi(x)\min_{\vec{x}\in\R^n}f(\vec{x})=\min_{\vec{x}\in\R^n}\frac{1}{m}\sum_{i=1}^mf_i(\vec{x}) 其梯度f(x)=1mi=1mfi(x)\displaystyle\nabla f(\vec{x})=\frac{1}{m}\sum_{i=1}^m\nabla f_i(\vec{x}),当mm较大,fi(x)\nabla f_i(\vec{x})较复杂时计算效率较低。
  • 对此,随机梯度下降的策略是:在{f1,,fm}\{f_1,\cdots,f_m\}中随机抽取一个子函数fif_i作为替代计算其梯度,得到表达式 xt+1=xtηfi(xt)\vec{x}_{t+1}=\vec{x}_t-\eta\nabla f_i(\vec{x}_t) 当每个子函数的抽取概率都相等时,其得到的梯度期望恰好与原始函数梯度相等 E[fi(xt)]=1mi=1mfi(xt)=f(xt).\mathbb{E}[f_i(\vec{x}_t)]=\frac{1}{m}\sum_{i=1}^mf_i(\vec{x}_t)=f(\vec{x}_t).
  • 那么如何保证SGD同样能收敛呢?这里我们不能直接套用上面的证明方法(fi(xt)-\nabla f_i(\vec{x}_t)方向甚至可能使目标函数增大)。实际上,对于随机梯度下降,我们取迭代函数序列的均值可以得到 limTf(1Tt=1Txt)=minxRnf(x)\lim_{T \to \infty} f\left(\frac{1}{T} \sum_{t=1}^{T} \vec{x}_t\right) = \min_{\vec{x} \in \mathbb{R}^n} f(\vec{x}) 另一方面,为保证SGD收敛,我们还需要将步长随迭代次数增加逐渐趋向00
  • 对于一般情形的SGD收敛性证明比较复杂,但如果加上一些约束条件,证明的复杂性会降低一些。【具体略,可参见知乎文章
  • 在机器学习中,随机梯度下降一般会自然融入于在线学习(即数据点逐个依次到达),当新数据到达时自动进行优化。【注意每次迭代时都要除以样本数量进行归一化】

    而在神经网络中,往往会使用小批量数据(即Mini-batch)计算梯度,相比单样本SGD可以有效降低方差/噪声影响。

带约束的梯度下降

  • 在上述梯度下降算法中,我们没有对目标函数施加约束。对于带约束的优化问题,如 minxΩf(x),Ω为凸集\min_{\vec{x}\in\Omega}f(\vec{x}),\quad \Omega\text{为凸集} 直接套用上述梯度下降算法可能导致最终解不在Ω\Omega中。
  • 为解决这一问题,我们可以使用下述两种梯度下降的变体:
    1. 投影梯度下降法(PGD)
      PGD的想法很简单:对于Ω\Omega之外的解,将其映射到Ω\Omega中。具体而言,对任意yRn\vec{y}\in\R^n,定义 projΩ(y)=arg minxΩxy22\text{proj}_{\Omega}(\vec{y})=\argmin_{\vec{x}\in\Omega}\|\vec{x}-\vec{y}\|_2^2 这里假设Ω\Omega为闭凸集,这样能保证projΩ(y)\text{proj}_{\Omega}(\vec{y})一定存在。然后梯度下降表达式就可以写为 xt+1=projΩ(xtηfi(xt)).\vec{x}_{t+1}=\text{proj}_{\Omega}(\vec{x}_t-\eta\nabla f_i(\vec{x}_t)). 注意PGD中投影函数本身也是一个凸优化问题,只有当这一问题相比原始问题足够简单时PGD算法才可行。
    2. 条件梯度下降法(CGD)
      条件梯度下降法(也称为Frank-Wolfe算法)给出了另一种解决策略:在计算搜索方向vt\vec{v}_t时加入可行域Ω\Omega约束,即 vt=arg minvΩ[f(xt)]v\vec{v}_t=\argmin_{\vec{v}\in\Omega}[\nabla f(\vec{x}_t)]^\top\vec{v} 同时,为保证迭代后xt+1\vec{x}_{t+1}不会飞到Ω\Omega之外,将更新公式改为凸组合 xt+1=(1δt)xt+δtvt\vec{x}_{t+1}=(1-\delta_t)\vec{x}_t+\delta_t\vec{v}_t 其中δt[0,1]\delta_t\in[0,1]limtδt=0\displaystyle\lim_{t\to\infty}\delta_t=0。【一个保守的取值是δt=1t\delta_t=\dfrac{1}{t}
      当然,这里vt\vec{v}_t的计算同样也是Ω\Omega内的凸优化问题,因此要求同上。

    上述两种方法对于解决一般的带约束优化问题仍然比较麻烦,下一讲我们将进一步阐述如何处理带约束的优化问题。