一些术语

元组(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.