Skip to main content

梯度下降

· 3 min read
PuQing
AI, CVer, Pythoner, Half-stack Developer

假设我们想搜索光滑函数 f(x)f(x) 的最小值,常见的方案是梯度下降(Gradient Descent),即按照如下格式进行迭代:

xt+1=xtαxtf(xt)\begin{equation} \boldsymbol{x}_{t+1} = \boldsymbol{x}_{t}-\alpha \nabla_{\boldsymbol{x}_{t}} f\left(\boldsymbol{x}_{t}\right) \end{equation}

如果 f(x)f(x) 关于 xx 的凸的,那么梯度下降通常能够找到最小值点;相反,则通常只能收敛到一个 “ 驻点 “——即梯度为 0 的点,比较理想的情况下能收敛到一个极小值(局部最小值)点。这里没有对极小值和最小值做严格区分,因为在深度学习中,即便是收敛到一个极小值点也是很难得的了。

Why?

如果将 α\alpha 记为 Δt\Delta t,将 xt+1x_{t+1} 记为 xt+Δtx_{t+\Delta t},那么考虑 Δt0\Delta t \to 0 的极限,那么式 (1) 将变为一个 ODE(This page is not published)

dxtdt=xtf(xt)\begin{equation} \frac{d \boldsymbol{x}_{t}}{d t}=-\nabla_{\boldsymbol{x}_{t}} f\left(\boldsymbol{x}_{t}\right) \end{equation}
推导过程
xt+1xt=αxtf(xt)xt+1xt=Δtxtf(xt)limΔt0xt+1xtΔt=dxtdt=xtf(xt)\begin{align} x_{t+1}-x_{t} &= -\alpha \nabla_{x_{t}}f(x_{t}) \\ \Rightarrow x_{t+1}-x_{t} &= -\Delta t\nabla_{x_{t}}f(x_{t}) \\ \Rightarrow \lim_{\Delta t \to 0} \frac{x_{t+1}-x_{t}}{\Delta t} &= \frac{d \boldsymbol{x}_{t}}{d t} = - \nabla_{x_{t}}f(x_{t})\\ \end{align}

求解这个 ODE 所得到的轨迹 xtx_t,我们就称为 ” 梯度流(Gradient Flow)“,也就是说,梯度流是梯度下降在寻找最小值过程中的轨迹。在式 (2) 成立前提下,我们还有:

df(xt)dt=xtf(xt),dxtdt=xtf(xt)20\begin{equation} \frac{d f\left(\boldsymbol{x}_{t}\right)}{d t} = \left\langle\nabla_{\boldsymbol{x}_{t}} f\left(\boldsymbol{x}_{t}\right), \frac{d \boldsymbol{x}_{t}}{d t}\right\rangle = -\left\|\nabla_{\boldsymbol{x}_{t}} f\left(\boldsymbol{x}_{t}\right)\right\|^{2} \leq 0 \end{equation}
df(xt)dt=df(xt)dxtdxtdt链式法则df(xt)dt=xtf(xt),dxtdt\begin{align} \frac{\mathrm{d} f(x_t)}{\mathrm{d} t} & = \frac{\mathrm{d} f(x_t)}{\mathrm{d} x_t} \frac{\mathrm{d} x_t}{\mathrm{d} t}\quad \text{链式法则}\\ \Rightarrow \frac{\mathrm{d} f(x_t)}{\mathrm{d} t}&=\left \langle \nabla_{x_t}f(x_t),\frac{\mathrm{d} x_t}{\mathrm{d} t}\right \rangle \\ \end{align}

其中的 dxtdt\displaystyle \frac{\mathrm{d} x_t}{\mathrm{d} t} 又可以被 ODE 代换掉,所以继续得到:

df(xt)dt=xtf(xt)2\frac{\mathrm{d} f(x_t)}{\mathrm{d} t}=-\left \| \nabla_{x_t}f(x_t) \right \|^2

Q.E.DQ.E.D

所以只要 xtf(xt)0\displaystyle\nabla_{x_t}f(x_t) \ne 0,梯度下降总是能让 f(x)f(x) 变小的方向前进。

相关资料