梯度下降

本文内容包括:梯度下降算法算法内容和收敛性分析,算法步长选择,梯度提升与随机梯度下降。

梯度下降算法

梯度下降算法是在机器学习和深度学习中应用得十分广泛的算法,了解方向导数,方向余弦,偏导数等数学概念可能会有利于学习这个算法。

是凸函数且在上是可微的。将最优的目标函数表示为,解表示为,考虑一个无约束的光滑凸函数优化问题:

梯度下降(Gradient descent):选择初始点,重复: 直至在某个点停止。

如何理解梯度下降算法

简单的说,可以将梯度下降算法看做是持续重复地下山,负梯度的方向是降低优化目标函数的方向,那么x沿着负梯度的方向移动一定距离,那么相应的目标函数值就会减少一些,对于凸优化问题来说,不论我们的出发点在哪里,我们总会在最优解附近的某一个点停下来;而对于非凸优化问题,对于不同的出发点,我们可能到达不同的局部最优解。

更进一步地,我们可以将梯度下降算法解释为一个二次近似(Quadratic approximation)。假设我们在点x,对f(y)做二次泰勒展开:

将Hessian替换为,那么为f的线性逼近,而,权重为的一个惩罚项,当t越小时,惩罚项却会越大,我们就离开当前x,需要花掉更大的代价(所以在选取步长t时,需要一定的技巧)。这两项,共同构成了f(y)的二次逼近。

梯度下降实际上是在每一步最小化这个二次逼近。 为了最小化这个二次逼近,选取

quadratic approximation

步长选择

固定步长

最简单的方法是找到一个步长,在所有的迭代过程中,固定步长。但是这样做,是需要一定的技巧与经验的,因为太小的步长会导致迭代过慢,相反,太大的步长可能会导致算法无法收敛。

step size selection

通过动态的选择步长是可以的,Backtracking line search就是其中的一种方法,其过程如下:

  • 首先固定参数:
  • 在迭代的每一步,以开始,当: 时,缩小。否则,进行梯度下降更新:

这样做不仅简单,而且在实际应用中表现得很好,进一步简化可以使

也可以选择能够沿着扶梯度方向降低的最优步长,被称为exact line search: 这样做几乎不可能选出合适的步长,因为它消耗的资源比前一种方法更多,并不值得。

收敛性分析

Lipschitz continuous:假设f是可微的凸函数,在,对于任意x,y: 是Lipschitz连续的,。(在证明凸优化算法的收敛性时,这是一个很有用的定理)

假设下面的所有的f都满足上述性质。

定理:对于梯度下降,固定的步长满足: 我们称梯度下降的收敛率为,即为了使,需要次迭代。

/TODO:具体证明,以后来填坑/

特殊情况下的收敛性

backtracking

定理:对于步长通过backtracking line search获得的,梯度下降满足:

强凸函数的收敛性

具有强凸性质的函数,在满足Lipschitz连续假设的情况下: 定理:对于梯度下降,固定的步长,或者通过backtracking line search获得步长,满足: 即强凸函数的收敛率为,为指数级的,即为了使,需要次迭代。

实践技巧

停机准则:当足够小时停止迭代。

  • 在最优解
  • 如果f是强凸函数,参数为m,有:

优点:

  • 简单,每次迭代代价相对较小
  • 对于有良好条件的强凸问题速度很快

缺点:

  • 一般情况下收敛速度并不快
  • 不能解决不可微的函数

扩展

梯度提升(Gradient Boosting)

梯度提升是梯度下降与树相结合的一种方法。假设观测值, 预测器。我们想基于我们的预测器构建一个非线性的模型。

我们定义树的加权和如下:

每一个树将一个预测器作为输出并输出一个预测值。在这种设定下,选择一个损失函数L,例如在y连续时,我们可以选择,于是,问题转变为:

将这个优化问题想象成,这个算法的执行情况如下:

从一个初始的模型(一个简单的树)开始,重复:

  1. 计算上一次预测的负梯度d,
  2. 寻找一个树接近d,也就是说:

  3. 计算步长,更新我们的预测值:

随机梯度下降(Stochastic Gradient Descent)

考虑最小化函数的加和:

梯度下降迭代计算:

随机梯度下降(SGD)迭代计算:

其中是在第k次迭代的时候选择的指数。

有两种规则可以选择:

  • 循环的方法:选择

  • 随机的选择:通过随机的方式选择,在实际应用中选择这种方式更多。

可以证明SGD算法在不随x剧烈变化时是收敛的。

results matching ""

    No results matching ""