梯度下降法变种的汇总

  引言

  在各类优化方法中,梯度下降法(Gradient Descent)是最为常见的策略。这里将对一些常见的梯度下降法的变种做一个梳理。方便大家更好地理解梯度下降法的应用域。

  如何理解梯度下降法

  假想一个状态,你在徒步中准备下山,你该怎么走到谷底?这是一个很显然的问题,你会顺着山梯度(弧度)最大的方向向下走,而并不会选择绕弯。

  而梯度下降法其实就是建立在这种十分贪心的企图上,即 通过找到梯度最大的方向 移动一个固定的距离(一般称为 Step Size )。但竟然是贪心,意味着它会有一个问题,如下图所示:如果你正在 Starting pt 处尝试下山,刚才的策略可能就会让你找到一个Local minima了。这个问题是任何梯度下降法的变种都会遇到的问题。

物联网

  图片引自 https://thinkingandcomputing....

  基本的梯度下降法

物联网

  梯度下降法可以描述为

  $$vec{x}_{n+1} = vec{x}_{n} - alpha f'(vec{x}_{n})$$

  其中$f(x)$为所要优化的函数,$alpha$为步长。

  叠函数/不动点理论视角下的梯度下降法

  我们现在来看梯度下降法的适用条件(为了简单起见,在此只讨论一维的情况)。显然,上面的递推公式即可以转化为一个叠函数数问题,即求:

  $$gd(x) = x - alpha f'(x)$$

  反复迭代后,收敛的问题。显然,如果$gd(x)$收敛,则收敛于不动点,即不动点$x_0$满足:

  $$gd(x_0) = x_0 = x_0 - alpha f'(x_0)$$

  化简可得

  $$f'(x_0) = 0$$

  显然,这个迭代的结果就是函数$f(x)$的极值。现在,我们再来研究梯度下降法的条件。满足该收敛于该不动点的条件是该点为吸引子,即满足

  $$|gd'(x)| < 1$$

  化简得

  $$0 < f''(x) < frac{2}{alpha}$$

  显然,$f(x)$必须为凸函数,并在定义域上满足$f''(x) < frac{2}{alpha}$时,梯度下降法才有效。

  梯度下降法的一般难题

  步长的选择

  不是凸函数

  坐标下降法

  坐标下降法( Coordinate descent )的策略相对而言是一种降低计算复杂度的方式,方法是每次只下降一个方向(坐标)的值。

物联网

  图片来自Wikipedia。

  按是否设置步长可以分为两种。

  含步长的坐标下降法

  步骤:

  Choose an initial parameter vector x.

  Until convergence is reached, or for some fixed number of iterations:

  Choose an index i from 1 to n.

  Choose a step size α.

  Update x_i to x_i − α * ∂F/∂x_i(x).

  不含步长的坐标下降法

  此外,坐标下降法的另一个非常好的迭代方法是,在迭代一个x_i时,可以固定其他x的前提下,只计算$f(x_i) = F(x)$。此时,计算复杂度降低,且迭代速度也可以相对加快。

  步骤:

  Choose an initial parameter vector x.

  Until convergence is reached, or for some fixed number of iterations:

  Choose an index i from 1 to n.

  Update x_i to x_min, where (argmin F(x_i|x_n fixed but x_i)) = F(x_min)

  坐标下降法的限制

  坐标下降法在应对非平滑函数时会有很大的局限,如下图:

物联网

  最后会在红线交汇处就停止迭代了。

  随机梯度下降法/批梯度下降法

  在实际 3V 大数据场景时,会遇到一个常见问题,因为样本数N的数量过大,导致每次迭代的计算代价非常大;并且如果做一个实时的训练模型,显然,每次有新数据读入时,样本数都会增加,每次迭代的速度也会越来越慢。

  因此,一个比较好的策略就是随机梯度下降法( Stochastic gradient descent ),即一次迭代只迭代一个样本。这样做的好处是显然的,但是,无法规避的,每次迭代loss function的变异就会很大,如下图:

物联网