指数加权移动平均

加权移动平均法:是对观察值分别给予不同的权数,按不同权数求得移动平均值,并以最后的移动平均值为基础,确定预测值的方法。

采用加权移动平均法,是因为观察期的近期观察值对预测值有较大影响,它更能反映近期变化的趋势。

指数移动加权平均法:是指各数值的加权系数随时间呈指数式递减,越靠近当前时刻的数值加权系数就越大。

下面是一年 $365$ 天的温度散点图,以天数为横坐标,温度为纵坐标,可以看到各个小点分布在图上,有一定的曲线趋势,但是并不明显。

   

指数加权平均的表达式如下:

$$v_{t} = eta v_{t - 1} + (1 - eta) heta_{t}$$

其中,$ heta_{t}$ 代表第 $t$ 天的温度值,$eta$ 表示加权下降的速率,其值越小下降的越快,$v_{t}$ 为第 $t$ 天的移动加权平均值。

令 $v_{0} = 0$,将这个式子展开得:

$$v_{t} = eta v_{t - 1} + (1 - eta) heta_{t} \
= etaigg [ eta v_{t - 2} + (1 - eta) heta_{t-1} igg ] + (1 - eta) heta_{t} \
= eta^{2}v_{t - 2} + eta(1 - eta) heta_{t-1} + (1 - eta) heta_{t}\
= eta^{2}igg [ eta v_{t - 3} + (1 - eta) heta_{t-2} igg ] + eta(1 - eta) heta_{t-1} + (1 - eta) heta_{t} \
= eta^{3} v_{t - 3} + eta^{2}(1 - eta) heta_{t-2} + eta(1 - eta) heta_{t-1} + (1 - eta) heta_{t} \
cdots \
= eta^{t}v_{0} + eta^{t-1}(1 - eta) heta_{1} + eta^{t-2}(1 - eta) heta_{2} + cdots + (1 - eta) heta_{t} \
= (1 - eta) sum_{i=1}^{t}eta^{t-i} heta_{i}$$

可以看到,计算第 $t$ 天的移动加权平均值 $v_{t}$ 其实就是第 $1$ 天到第 $t$ 天每天温度的加权和,每一天温度的权重系数为

$$(1 - eta)eta^{t-i}$$

$(1-eta)$ 是一个常数,由 $(1-eta)^{t-i}$ 可知:天数越靠近 $t$,$t - i$ 越小,$(1-eta)^{t-i}$ 越大,即那一天温度对应的权值越大。

$eta$ 越大,后项收到前项的影响越大,越平滑,但是适应新变化更加困难。

重要性质:一般而言,$v_{t}$ 是前 $frac{1}{1-eta}$ 天温度的指数加权平均值。易知极限:

$$lim_{varepsilon ightarrow 0}left ( 1 - varepsilon ight )^{frac{1}{varepsilon}} = frac{1}{e}$$

$$1 - eta = varepsilon$$

因为 $eta$ 是在 $0-1$ 之间,所以 $1-eta$ 可以认为趋于 $0$,于是有

$$eta^{frac{1}{1 - eta}} approx frac{1}{e}$$

也就是说第 $t - frac{1}{1 - eta}$ 天的温度对 $v_{t}$ 的影响已经不足 $frac{1}{e}$ 了,在这之前的温度影响都可以忽略了。

回到最初的那幅图,如果我们要看出这个温度的变化趋势,很明显需要做一点处理,我们用指数加权移动平均来平滑,取 $eta = 0.9$,

然后计算出每个 $v_{t}$ 来代替 $ heta_{t}$,把所有的 $v$ 计算完之后画图,红线就是 $v$ 的曲线:

    

红色曲线第 $t$ 天的温度就约等于前 $10$ 天温度(蓝色散点图所记录)的平均值。现在增大 $eta$,将其值改为 $0.98$,那么 $frac{1}{1-eta}$ = 50,

按照加权平均的性质,新的 $v_{t}$ 就代表前 $50$ 天的平均温度,求出所有 $v$ 值画出曲线,如图绿线所示:

    

可以明显看到绿线比红线的变化更迟,红线达到某一温度,绿线要过一阵子才能达到相同温度。因为绿线是前 $50$ 天的平均温度,变化就会

更加缓慢,而红线最近 $10$ 天的平均温度,只要最近 $10$ 天的温度都是上升,红线很快就能跟着变化。

再看看另一个极端情况:$eta$ 等于 $0.5$,意味着 $v_{t}$ 约为最近两天的平均温度,曲线为如下黄线:

    

可以看出黄色曲线和原本的温度很相似,但曲线的波动幅度也相当大!

滑动平均模型和深度学习有什么关系:

通常来说,我们的数据也会像上面的温度一样,具有不同的值,如果使用滑动平均模型,就可以使得整体数据变得更加平滑——这意味着数据的噪音会更少,

而且不会出现异常值。但是同时 $eta$ 太大也会使得数据的曲线右移,和数据不拟合。需要不断尝试出一个 $eta$ 值,既可以拟合数据集,又可以减少噪音。

滑动平均模型在深度学习中还有另一个优点:它只占用极少的内存。当你在模型中计算最近十天(有些情况下远大于十天)的平均值的时候,你需要在内存

中加载这十天的数据然后进行计算,但是指数加权平均值约等于最近十天的平均值,而且根据递推公式,你只需要提供 $ heta_{t}$ 这一天的数据,再加上 $v_{t-1}$

值和 $eta$ 值,相比起十天的数据这是相当小的数据量,同时占用更少的内存。

偏差修正:当 $eta$ 等于 $0.98$ 的时候,还是用回上面的温度例子,曲线实际上不是像绿线一样,而是像紫线:

    

注意到在紫线刚刚开始的时候,曲线的值相当的低,这是因为在一开始的时候并没有前 $50$ 天的数据,而是只有寥寥几天的数据,相当于少加了几十天

的数据,所以 $v_{t}$ 的值很小,这和实际情况的差距是很大的,也就是出现的偏差。修正方法是:

$$v_{t} = frac{eta v_{t - 1} + (1 - eta) heta_{t}}{1 - eta^{t}}$$

随着 $t$ 增加,$eta^t$ 接近于 $0$,所以当 $t$ 很大的时候,偏差修正几乎没有作用,因此当 $t$ 较大的时候,紫线和绿线重合了。不过在开始学习

阶段,偏差修正可以更好地预测温度。

原文地址:https://www.cnblogs.com/yanghh/p/14061856.html