如何理解梯度下降
Contents
一些术语
元组(Tuple),本文会与向量(Vector) 进行互换,虽存在细节差异,但是在本文上下文差别甚微,具体差别请参阅 Set, n-Tuple, Vector and Matrix — links and differences - Stack Exchange。
一些数学
$\nabla$ 算子
对于公式 $f(\mathbf{x})$ 求 $\nabla f(\mathbf{x})$,其中自变量(independent variable) $\mathbf{x}$ 为 n 元元组(n-tuple) 。
$$
\nabla f(\mathbf{x}) =
\begin{bmatrix}
\begin{array}{c}
\cfrac{\partial f(\mathbf{x})}{\partial x_1}\\
\cfrac{\partial f(\mathbf{x})}{\partial x_2}\\
\cfrac{\partial f(\mathbf{x})}{\partial x_3}\\
\vdots\\
\cfrac{\partial f(\mathbf{x})}{\partial x_n}\\
\end{array}
\end{bmatrix}
\ ,
x_m\in \mathbf{x}, n=\mid \mathbf{x}\mid
$$
换句话说就是对函数 $f(\mathbf{x})$ 的所有参数(parameter)分别求偏导(partial derivative)。
近似公式
对于函数 $f(x)$,我们知道其导数 $f’(x)$ 的定义为
$$ f’(x) = \lim_{\Delta x\to 0}{\cfrac{f(x+\Delta x)-f(x)}{\Delta x}} $$
如果我们不再定义其中 $\Delta x$ 为“无限小的值”而为“微小值”则可获得函数 $f(x)$ 的近似公式 $$ f’(x)\cong\cfrac{f(x+\Delta x)-f(x)}{\Delta x} $$ 可以推导出 $$ f(x+\Delta x) \cong f(x)+f’(x)\Delta x $$ 而对于多变量的近似公式,则为 $$ \begin{aligned} &f(x_1 + \Delta x_1, x_2 + \Delta x_2, \cdots, x_n + \Delta x_n)\\ \cong& f(\mathbf{x})+\sum_n{\cfrac{\partial f(\mathbf{x})}{\partial x_n}\Delta x_n}\\ \cong& f(\mathbf{x})+\nabla f(\mathbf{x})\Delta\mathbf{x} \end{aligned} $$
一点点柯西不等式
对于向量 $\vec{u}$, $\vec{v}$: $$ \begin{aligned} \because\ & \vec{u}\cdot\vec{v}=\Vert\vec{u}\Vert\Vert\vec{v}\Vert\cos\theta\\ &\cos \theta \in [-1, 1]\\ \therefore\ & \vec{u}\cdot\vec{v} \in [- \Vert\vec{u}\Vert\Vert\vec{v}\Vert, \Vert\vec{u}\Vert\Vert\vec{v}\Vert]\\ & - \Vert\vec{u}\Vert\Vert\vec{v}\Vert\leq\vec{u}\cdot\vec{v}\leq\Vert\vec{u}\Vert\Vert\vec{v}\Vert \end{aligned} $$
同时可以看见,当其夹角 $\theta$ 取 $\pi$ 及 180° 时,$\vec{u} \cdot\vec{v}$ 取最小。
一些梯度下降
梯度下降的数学思路
对于正常的单变量函数 $f(x)$,为求其最小值,我们通常会对函数求导,并寻找当其导数为 $0$ 时的值
$x$ | $(-\infty, 2)$ | $2$ | $(2, 4)$ | $4$ | $(4, 8)$ | $8$ | $(8, \infty)$ |
---|---|---|---|---|---|---|---|
$f’(x)$ | - | 0 | + | 0 | - | 0 | + |
$f(x)$ | $\searrow$ | 12 | $\nearrow$ | 37 | $\searrow$ | 9 | $\nearrow$ |
备注 | 极小值 | 极大值 | 最小值 |
梯度下降的原理也正如此,我们仅需要寻找类似于 $f’(x)$ 最小值的位置即可到达函数的最小值。
我们继续假设我们面对的函数为单变量函数 $f(\mathbf{v})$,为了找到其中的最小值,我们可以先随机一个位置 $\mathbf{v}=\mathbf{x}$,使用 $f(\mathbf{x}+\Delta \mathbf{x})$ 进行趋近其极小值。根据上文,我们可以知晓: $$ f(\mathbf{x}+\Delta \mathbf{x})\cong f(\mathbf{x})+\nabla f(\mathbf{x})\Delta \mathbf{x} $$ 为了使 $f(\mathbf{x}+\Delta \mathbf{x})$ 下降的最快,我们必然需要使 $\nabla f(\mathbf{x})\Delta \mathbf{x}$ 区最小值。我们将 $\nabla f(\mathbf{x})$ 与 $\Delta \mathbf{x}$ 看作向量,通过可惜不等式,我们知道当且仅当 $\nabla f(\mathbf{x})$ 与 $\Delta \mathbf{x}$ 方向相反时下降最快,即: $$ \Delta \mathbf{x}=-\eta\nabla f(\mathbf{x}) $$
关于常数 $\eta$
对于其中常数 $\eta$,在不同教材中会采用不同希腊字母,在 伯明翰大学(University of Birmingham) 的 Module 06-34238 (2021) Artificial Intelligence 1中则采用 $\alpha$ 以进行表示。
与此同时,其中的 $\eta$ 还表示了学习率(learning rate)。其取值意味着每次下降所进行的长度。如果过大可能会导致错过极小值点,而过小可能会导致滞留在极小值点以及需要过长时间进行学习。
关于梯度下降是否总是到达最优点,可以参阅 Does gradient descent always converge to an optimum? - Stack Exchange。简单来说,答案是否定的。
一个例子:线性回归
梯度下降是非常实用的下降逻辑,在其最佳实践就包含了线性回归(Linear Regression)。
线性回归包含了一个损失函数(Cost function) $g(\mathbf{w})$ 。为了让损失函数最小化,我们必须使 $\mathbf{w}$ 达到平衡点。为此我们使用梯度下降: $$ \mathbf{w}=\mathbf{w}-\eta\nabla g(\mathbf{w}) $$ 直到 $\mathbf{w}$ 达到了相对平稳的状态,即完成了梯度下降。
最后的最后
对于梯度下降来说,其并不是总能到达最低点的(因为有时候会在极低点停止)。学习率 $\eta$ 是很复杂的参数需要反复调试。而正常来说其需要多次运行才能达到最优点。
如果你还是没看懂,推荐看看涌井良幸与涌井贞美合著的《深度学习的数学》(ISBN 9787115509345),本文深受其启发。
参考文献
- Yongjing, L. and Yongjing, Z. (2019). 深度学习的数学. Beijing: 人民邮电出版社, pp.83-90.
Author KevinZonda
LastMod 2022-04-01 (6e0dac0)