首先我们来看一下什么是指数加权平均(Exponentially Weighted Averages)。

指数加权平均

如果你炒股,你可能知道股票的均线,有5日均线、10日均线、20日均线、30日均线、60日均线。描述股票在过去n天内的平均值的一条线。(我预感中国将要迎来一波长期慢牛市。)

你会发现平均的天数越多,画出的曲线越平滑。
以5日均线为例,每一天的值都是过去5天股票成交价格的平均。随着时间的推移,这个计算平均值的区间也在移动。

股票均线的例子里用来计算平均值的每一天权重都是相等的。都是n分之一。这个好像可以改进,因为昨天的成交价应该比20天前的成交价对当前股票价格更有意义。所以我们想到可以给n个值每个值赋予不同的权重,一般距离近的值权重高一些,距离远的权重低一些。权重值按照指数递减。这样就构成了指数加权平均。

我们给出更规范的公式化的定义:
比如我们一组原始值 a_{1},a_{2},a_{3}...a_{n}
定义一个权重值 \beta,大于0,小于1.
然后我们计算指数加权平均值 v_{0},v_{1},v_{2},v_{3}...v_{n}
我们定义如下:
v_{0}=0
v_{1}=(1-\beta)a_{1}+\beta v_{0}
v_{2}=(1-\beta)a_{2}+\beta v_{1}
...
v_{n}=(1-\beta)a_{n}+\beta v_{n-1}

如果你带入运算,你会发现:
v_{n}=(1-\beta)a_{n}+(1-\beta)\beta a_{n-1}+(1-\beta){\beta}^2 a_{n-2}+(1-\beta){\beta}^3 a_{n-3}+...
因为0 < \beta < 1,所以距v_{n}a_{n}指数越高,对v_{n}影响越小。

动量梯度下降

之前我们用的梯度下降算法有一个问题就是,一般情况梯度在不同的w维度上并不能保证一直是下降的。会出现曲线摆动下降的情况。这时我们就不能使用较大的学习率,否则在摆动的dw上就不能获得最终的优化,因为步长太大,它总是跳过最小值。这时我们在每次计算梯度的时候可以用指数加权平均的方法来计算梯度。这样因为做了平均,正负抵消,摆动的情况就会被克服。绝对值会变小。这时我们就可以使用较大的学习率从而加快模型训练的速度。

动量梯度下降的实现

以w为例,我们每次迭代都是更新w=w-dw。
现在我们在开始迭代前,定义V_{dw}=0
每一次迭代时有:
Vd_{w}=\beta*V_{dw}+(1-\beta)*dw
W=W-a*V_{dw} (其中a为学习率)
根据经验,一般情况下\beta 取0.9左右。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

%d 博主赞过: