机器学习经典算法(三)–指数加权平均

       指数加权平均(Exponentially Weighted Averages)是一些改进梯度下降法重要理论,如上篇博文梯度下降法(2)提到的动量梯度下降法,RMSprop、Adam等都用到了指数加权平均。也叫指数加权移动平均(Exponentially Weighted Moving Averages);那么到底什么是指数加权平均呢?

基础概念
       话说有这么一个例子,如下图,横轴表示天数i i ,纵轴表示某地每天对应的温度θiθi,这是1年的数据,现在我们想计算一下,这一年温度变化的趋势




java 加权平均怎么计算 加权平均计算机_v9


       这个变化趋势也就是局部平均或移动平均,怎么做呢?
       我们用vi v i 表示这个平均值,引入一个β β 参数,且令v0=0 v 0 = 0 ,


vi=β∗vi−1+(1−β)∗θi v i = β ∗ v i − 1 + ( 1 − β ) ∗ θ i


       这样一个式子表达了相当于,当天的温度平均值约等于

前T T 天温度数据加权平均,T≈11−βT≈11−β。

       例如:β=0.9

β = 0.9 时,T=10 T = 10 天,效果如图:


java 加权平均怎么计算 加权平均计算机_梯度下降法_02

β=0.98 β = 0.98 时,T=50 T = 50 天,效果如图:


java 加权平均怎么计算 加权平均计算机_v9_03

β=0.5 β = 0.5 时,T=2 T = 2 天,效果如图:


java 加权平均怎么计算 加权平均计算机_梯度下降法_04

       从上述3种情况对比看,该数据平均前10天较为符合我们期望;前50天曲线太平滑,有点偏离数据;前2天与数据较为贴合,但同时存在噪声。

进一步理解
       我们将上式展开,这里用第100个平均值,β=0.9 β = 0.9 为例:


v100v99v98⋯===0.9∗v99+0.1∗θ1000.9∗v98+0.1∗θ990.9∗v97+0.1∗θ98(19)(20)(21)(22) (19) v 100 = 0.9 ∗ v 99 + 0.1 ∗ θ 100 (20) v 99 = 0.9 ∗ v 98 + 0.1 ∗ θ 99 (21) v 98 = 0.9 ∗ v 97 + 0.1 ∗ θ 98 (22) ⋯


       则:


v100⋯====0.1∗θ100+0.9∗v990.1∗θ100+0.9(0.1∗θ99+0.9∗v98)0.1∗θ100+0.9(0.1∗θ99+0.9(0.1∗θ98+0.9∗v97)0.1∗θ100+0.1∗0.9θ99+0.1∗0.92θ98+0.1∗0.93∗θ97+⋯+0.1∗0.999θ1(23)(24)(25)(26)(27) (23) v 100 = 0.1 ∗ θ 100 + 0.9 ∗ v 99 (24) = 0.1 ∗ θ 100 + 0.9 ( 0.1 ∗ θ 99 + 0.9 ∗ v 98 ) (25) = 0.1 ∗ θ 100 + 0.9 ( 0.1 ∗ θ 99 + 0.9 ( 0.1 ∗ θ 98 + 0.9 ∗ v 97 ) (26) ⋯ (27) = 0.1 ∗ θ 100 + 0.1 ∗ 0.9 θ 99 + 0.1 ∗ 0.9 2 θ 98 + 0.1 ∗ 0.9 3 ∗ θ 97 + ⋯ + 0.1 ∗ 0.9 99 θ 1


       从上式可以看出第100天的平均值是由前100天数据加权平均的,但是看它们的权重系数,是符合一个指数级衰减函数,当T=10 T

= 10 时,0.910≈1/e 0.9 10 ≈ 1 / e ,当小于1/e 1 / e 的权重其影响已经非常小了,所以相当于前10天的数据加权平均;同理当θ=0.98 θ = 0.98 时,0.9850≈1/e 0.98 50 ≈ 1 / e ,所以相当于前50天数据加权平均。

偏差修正(bias correction)
       上面讲述了指数加权平均原理,但还存在一个问题,就是开始时,我们算法的天数不到T T 天时,怎么办呢?如下图

java 加权平均怎么计算 加权平均计算机_梯度下降法_05

β=0.9β=0.9的曲线,绿色是我们上面提到的β=0.98 β = 0.98 的曲线;但是,按照上面公式去计算,呈现的β=0.98 β = 0.98 的曲线应该是紫色曲线,注意到它起步阶段与理想绿色曲线是偏小的。
       这时误差修正就上场了:


vt=vt1−βt v t = v t 1 − β t


       在t t

较小时,将会修正平均值,随着tt曾大,其修正作用减小,因为这时也不需要修正了。

       当然了再机器学习中,很多人不在意起步阶段偏小问题,而愿意熬过这个阶段,所以这个误差修正,也常常被忽略,如动量梯度下降法和RMSprop中就没有加入误差修正,在Adam算法中加入了误差修正。