指数加权移动平均(Exponentially Weighted Moving Average),他是一种常用的序列处理方式。在\(t\)时刻,移动平均值公式是
\[v_t = \beta v_{t-1} + (1 - \beta) \theta_t \]
其中\(v_t\)是\(t\)时刻的指数加权移动平均值,\(\theta_t\)是\(t\)时刻的真实值,\(\beta\)是权重,是一个超参数。系数 \(\beta\) 越小就说明对过去测量值的权重越低,也就是对当前抽样值的权重越高。这个时候移动平均估计值的时效性就越强(其实也就是更加拟合点分布的趋势)。反之,则会越弱。指数移动加权平均还有另一个特点就是能吸收瞬时突发的能力也就是平稳性(使得得到的曲线趋势能够更加平缓),如果对过去估计值的权重越低也就是 \(\beta\) 越小,那么他的平稳性就差一点,反之平稳性会增强。
我们使用 \(\beta=0.9\) 来看看指数移动加权平均的原理是什么?
\[\begin{split} v_{100}&=0.9v_{99}+0.1\theta_{100} \\ v_{99}&=0.9v_{98}+0.1\theta_{99}\\ v_{98}&=0.9v_{97}+0.1\theta_{98}\\ \cdots &= \cdots \end{split} \]
我们将式子一步一步的带入得到最终式子:
\[\begin{split} v_100 &= 0.1\times 0.9 ^0 \times \theta_{100}\\ &+ 0.1\times 0.9^1\times \theta_{99}\\ & + 0.1 \times 0.9^2 \theta_{98} \\ &+ \cdots\\ & + 0.1 \times 0.9^{99}\times \theta_{1} \end{split} \]
我们认为,上述操作,实际上是10天的平均结果,因为\(0.9^9\times 0.1\)非常小了,后续的可以近似为0。当\(\beta\)为其他值时,平均的天数可以通过以下公式进行计算
\[n_{average} = \dfrac{1}{1 - \beta} \]
计算指数加权平均数只占单行数字的存储和内存。他的效率和资源的占有率会大大的减小。 所以在机器学习中大部分采用指数加权平均的方法计算平均值。
指数加权移动平均的偏差修正
如同推荐系统,指数加权移动平均也存在着冷启动的问题,举个例子:当\(\beta = 0.98\) 的时候,我们假设\(v_0 = 0, \theta_1 = 40\), 那么通过指数移动加权平均的公式可以得到\(v_1 = 0.98\times v_0 + 0.02 \times 40 = 8\),这很明显不符合真实的结果,偏离真实值太远,因此需要进行修正。下面是带有偏差修正的指数加权移动平均
\[v_t = \dfrac{\beta v_{t-1} + ( 1- \beta)\times \theta_t}{1 - \beta^t} \]
我们假设\(v_0 = 0, \theta_1 = 40\), 那么通过指数移动加权平均的公式可以得到\(v_1 = (0.98\times v_0 + 0.02 \times 40)/0.02^1 = 40\),很明显经过修正后的结果比没有修正的结果好得多。当\(t\)足够大的时候,也就是说已经度过了冷启动阶段,\(\beta^t\)的结果趋于0,分母趋于1,不再进行修正。
夜空中最亮的星,照亮我前行