动量梯度下降算法

栏目: 数据库 · 发布时间: 6年前

内容简介:上篇文章介绍了指数加权平均,这篇文章介绍在此基础上介绍一下动量梯度下降算法。所谓动量梯度下降算法,简言之就计算梯度的指数加权平均,然后使用这个梯度来更新权重,下面我们来详细解释这句话。我们在使用梯度下降算法更新权重时,希望损失函数能减小直到最优值。我们可以在一副等高线图中,画出损失函数随着迭代次数增加而减小的路径,即如下图所示:

上篇文章介绍了指数加权平均,这篇文章介绍在此基础上介绍一下动量梯度下降算法。

所谓动量梯度下降算法,简言之就计算梯度的指数加权平均,然后使用这个梯度来更新权重,下面我们来详细解释这句话。

我们在使用梯度下降算法更新权重时,希望损失函数能减小直到最优值。我们可以在一副等高线图中,画出损失函数随着迭代次数增加而减小的路径,即如下图所示:

动量梯度下降算法

图中红点为最优点,蓝线为损失函数的减小路径,从图中左侧出发,逐渐靠近最优点。不过我们可以发现,这条路径看起来十分曲折,虽然整体趋势是向右的,但在竖直方向有太多波动,这直接造成了两个负面影响:

  1. 增加了梯度下降的次数,增加了训练时间
  2. 无法使用较大的学习率

如果使用了较大的学习率,可能会出现下图中紫线的情况:

动量梯度下降算法

即虽然增大了向右的步伐,同时也增大了上下的步伐,导致损失函数值反而越来越大,因此为了避免振荡过大,我们只能选择较小的学习率。

为了使其步伐能在水平方向更大,而在竖直方向更小,可以使用之前提到的指数滑动平均。

我们说过,运用了指数滑动平均后,\(v_t\) 相当于粗略计算了前 \(\frac{1}{1 - \beta}\) 个数据的平均值,如果我们对导数进行指数滑动平均操作,就会有以下结果:

  • 竖直方向的振动几乎消失
  • 水平方向的步伐逐渐加大

即如下图红线所示

动量梯度下降算法

这正好是我们想看到的结果,为什么会这样呢?下面来分析一下。观察上图中的蓝线,我们发现竖直方向的振动大致可以抵消,即每两次上下方向的振动长度大致相等,因此如果对其去平均值,结果就会很接近 0,这就是“竖直方向的振动几乎消失”的原因,而蓝线水平方向的路径都是向右的,对其取平均值不会使其减小,而是随着已经行进的路径增多而变大,这就是“水平方向的步伐逐渐加大”的原因。综上,得到上图中的红线。

算法描述如下:

第 t 次迭代:
	在当前的 mini-batch 上计算 dW, db
	v_dW = β * v_dW + (1 - β) * dW
	v_db = β * v_db + (1 - β) * db
	W -= α * v_dW, b -= α * v_db

上面的描述中,\(\alpha\) 和 \(\beta\) 都是需要调整的超参数,\(\beta\) 通常会取 0.9 左右。

以上就是对动量梯度下降算法的简单介绍,它几乎总是要优于不适用动量的梯度下降算法,不过除此外,还有一些其他的方法也能加速你的训练速度,接下来几篇文章会谈谈 RMSprop 和 Adam 梯度下降算法以及学习率衰减。


以上所述就是小编给大家介绍的《动量梯度下降算法》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

The Art of Computer Programming, Volumes 1-3 Boxed Set

The Art of Computer Programming, Volumes 1-3 Boxed Set

Donald E. Knuth / Addison-Wesley Professional / 1998-10-15 / USD 199.99

This multivolume work is widely recognized as the definitive description of classical computer science. The first three volumes have for decades been an invaluable resource in programming theory and p......一起来看看 《The Art of Computer Programming, Volumes 1-3 Boxed Set》 这本书的介绍吧!

URL 编码/解码
URL 编码/解码

URL 编码/解码

SHA 加密
SHA 加密

SHA 加密工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换