SGD

为什么局部下降最快的方向就是梯度的负方向?如何理解SGD算法?

在机器学习中,我们常用的优化算法就是SGD,随机梯度下降算法。这里,我就简单记录下我的理解。有很多同学只会用,却一直无法理解其中的原理。我觉得是在对 偏导(导数) 理解出现的失误,还一直停留在,导数=斜率的理解层面上。这里,我们要深刻理解导数是一种线性变换

局部下降最快的方向就是梯度的负方向

二维空间

这里我们以最简单的二维空间进行证明:
$$
f(x) = f(x_0) +(x-x_0)f^{‘}(x_0)
$$
由上式 ,显然得到:
$$
f(x) - f(x_0) = (x-x_0)f^{‘}(x_0)
$$

注:这里 $x$ 是移动的新位置也就是$x=x_0+\Delta x$,$x_0$是原始位置。
由于我们要寻找“哪个方向下降最快”,显然$f(x) \lt f(x_0)$,所以有:
$$
f(x)-f(x_0)\leq0
$$

既:
$$
f(x) - f(x_0) = (x-x_0)f^{‘}(x_0)\leq0 \quad(1)
$$
注:这里我们需要注意$x-x_0$实际是一个向量,是具有方向的,方向为’x’轴(正,反)方向。
同理$f^{‘} (x)$也是向量。实际上在高维空间中$f^{‘} (x) = \frac{\partial f}{\partial x} $ 是$f^{‘}$函数关于’x’轴的偏导。在二维空间中,我们常说的求导(一次导数),实际上是对指定轴的偏导,是具有方向的向量
由于$x-x_0$是一个向量,于是我们设 $\vec{v}$为 $x-x_0$同方向的单位向量,$\eta$为长度标量,既$\eta=\Vert x-x_0\Vert$ 。
所以,由(1)式得:
$$
x-x_0= \eta\vec{v} \f(x) - f(x_0) = \eta\vec{v}f^{‘}(x_0)\leq0 \quad (2)
$$
要使知道哪个方向下降最快,相当于求 $\vec{v}$在哪个方向$f(x)-f(x_0)$的值最小,即求$\eta\vec{v}f^{‘}(x_0)$最小。

由于我们知道
$$
\vec{a}\bullet\vec{b} = \vert a\vert\vert b\vert \cos(\theta)
$$
当且仅当$\theta=\pi$ 时,$\cos(\theta)=-1$为最小,即此时的$\vec{a}\bullet\vec{b}$ 的值最小。也就是说$\vec a$ 与$\vec b$ 方向相反时,$\vec{a}\bullet\vec{b}$最小。

又由于$\vec{v}$是单位向量,所以当$\vec{v} = -\frac{f^{‘}(x_0)}{\Vert{f^{‘}(x_0)}\Vert}$ 时,$\vec{v}f^{‘}(x_0)$为最小,即$f(x) - f(x_0)$最小。

即证得,局部下降最快的方向就是梯度的负方向

高维空间

同理在高维空间中局部下降最快的方向也是梯度的负方向
只不过,梯度由各偏导向量相加求得。
$$
\vec u=(\frac{\partial f}{\partial x},\frac{\partial f}{\partial y},····,\frac{\partial f}{\partial z})
$$
:$\vec u$为梯度

最小二乘法

由上面得到,当$\vec{v} = -\frac{f^{‘}(x_0)}{\Vert{f^{‘}(x_0)}\Vert}$ 时,$\vec{v}f^{‘}(x_0)$为最小,即$f(x) - f(x_0)$最小。

就有:
$$
x-x_0 = \eta\vec{v} = -\eta\frac{f^{‘}(x_0)}{\Vert{f^{‘}(x_0)}\Vert} \由于\Vert{f^{‘}(x_0)}\Vert 是标量,\eta也是标量,将其进行合并。\得: x-x_0 = \eta\vec{v} = -\eta f^{‘}(x_0)\
$$

也就得到了,最小二乘法的关键公式:
$$
x=x_0 + \eta\vec{v} =x_0 -\eta f^{‘}(x_0)
$$