动量梯度下降法Momentum

转载请注明出处,原文地址

前言

动量梯度下降法是对梯度下降法的一种优化算法,该方法学习率可以选择更大的值,函数的收敛速度也更快。梯度下降法就像下面这张图,通过不断的跟新w与b,从而让函数移动到红点,但是要到达最优解,需要我们不断的迭代或者调整学习率来达到最后到达最优解的目的。但是调大学习率会导致每一次迭代的步长过大,也就是摆动过大,误差较大。调小学利率会让迭代次数增加。而增加迭代次数则明显的增加了训练时间。动量梯度下降法不但能使用较大的学习率,其迭代次数也较少。

在这里插入图片描述

指数加权平均数

在理解动量梯度下降法之前,我们首先要了解指数加权平均数,这是动量梯度下降法的核心。那么,什么是指数加权平均数呢,我们这里举例说明。

下面是一个同学的某一科的考试成绩:
平时测验 80, 期中 90, 期末 95
学校规定的科目成绩的计算方式是:
平时测验占 20%;
期中成绩占 30%;
期末成绩占 50%;
这里,每个成绩所占的比重叫做权数或权重。那么,
加权平均值 = 80 * 20% + 90 * 30% + 95 * 50% = 90.5
算数平均值 = (80 + 90 + 95)/3 = 88.3

我们再看一个例子,这是一个城市每天的温度

在这里插入图片描述

普通的温度平均值是

θ = 1 n ∑ i = 1 n θ n \theta = \frac{1}{n} \sum_{i=1}^{n}\theta_n θ=n1i=1nθn

在计算加权平均数时,我们引入了一个变量 β \beta β作为权重,就好比上一个例子的成绩占比,我们先看下公式

v t = β v t − 1 + ( 1 − β ) θ t v_t = \beta v_{t-1} + (1-\beta)\theta_{t} vt=βvt1+(1β)θt

其中 v t v_t vt代表前 t t t天的平均温度, θ t \theta_{t} θt代表第 t t t天的温度,其中 v 0 = 0 v_0=0 v0=0。在坐标轴中绘出其形状,蓝点是每天的具体温度,红线是指数加权平均数。

在这里插入图片描述

接下来我们详细讲解下这个公式,首相,我们把公式展开

在这里插入图片描述

假设 β = 0.9 \beta=0.9 β=0.9,那么,我们得到的公式如下

在这里插入图片描述

我们把 v 99 v_{99} v99 v 98 v_{98} v98带入到 v 100 v_{100} v100

v 100 = 0.1 θ 100 + 0.1 × 0.9 θ 99 + 0.1 × ( 0.9 ) 2 θ 98 + . . . + 0.1 × ( 0.9 ) 99 θ 1 v_{100} = 0.1\theta_{100}+0.1\times0.9\theta_{99}+0.1\times(0.9)^2\theta_{98}+...+0.1\times(0.9)^{99}\theta_{1} v100=0.1θ100+0.1×0.9θ99+0.1×(0.9)2θ98+...+0.1×(0.9)99θ1

可以发现,其实我们最终是给每一个值都赋予了一个权重,这个权重距离 t t t越近,权重越大,反之也越小。但是因为越是后面的值,权重越小,所以算出来的值是可以忽略的,所以选择 β \beta β时是很关键的,这里有一个公式

1 1 − β \frac{1}{1-\beta} 1β1

这个公式得到的值即为迭代范围,例如 β = 0.9 \beta=0.9 β=0.9计算结果为10,那么,计算出来的加权平均数就是对过去10次进行迭代。

那么,我们为什么要使用加权平均数呢,其实,在训练过程中,数据量是很大的,假设训练样本有100w,即使mini_batch取100,其计算平均值消耗的内存和时间需要的代价都很大,而对于加权平均数,如果 β \beta β取值0.9那么只需要计算10个数即可计算其平均值,大大节约了内存,计算效率也极大的提高了。

动量梯度下降法

我们先回顾下普通的梯度下降法在更新参数时

w = w − α d W w = w - \alpha dW w=wαdW

而对于动量梯度下降,首先,我们针对 d W dW dW计算出 v d W v_{dW} vdW
v d W = β v d W + ( 1 − β ) d W v_{dW} = \beta v_{dW} + (1-\beta)dW vdW=βvdW+(1β)dW

在更新参数时,我们不是乘 d W dW dW,而是

w = w − α v d W w = w - \alpha v_{dW} w=wαvdW

这里我们又引入了一个超参数 β \beta β,经过实践,这个超参数建议取0.9效果较好,大家也可以根据实际情况进行调整。

那么,为什么乘加权平均数就可以加快收敛的速度呢,我们再看下这张图

在这里插入图片描述

正常情况下(图中蓝色线段),函数会在纵轴上不停的波动,但实际上纵轴上的这些波动的平均值是接近于0的,我们更希望其波动较小,在横轴上能快速前进。动量梯度就是通过计算其加权平均值,把这些在纵轴上多余的波动去除,从而让函数尽可能快的朝着横轴移动,因此其收敛的速度也会很快。

  • 14
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值