下图是某城市一年的温度与天数的关系图,红线和绿线是根据加权平均值计算出来的温度趋势曲线:
规定某天温度为Tt,加权平均值为Vt,b为参数。指数加权移动平均值的计算公式:
即每一天的加权平均温度等于b*前一天的加权平均温度+(1-b)*当天温度。Vt+1的含义近似为1/(1-b)天的平均温度,可以这样理解,每天只取(1-b)比例的当天温度,一共取了1/(1-b)天才能把当天温度的比例凑到1。比如b=0.9,则每天只取0.1的温度,因此需要取10天当天温度的比例才能凑到1,此时1/(1-b)的值也是10。当然这只是粗略的理解方式,由于套娃,导致当天温度以前的天的问题比例越来越小,因此忽略掉。一种偏数学的正确理解方式是:将多项式展开得到:
可以得出当展开10项左右,此时当日温度的所占比例已经比较低了,因此不再继续展开,于是推出来大概平均1/(1-b)天。
分别取b=0.9(红线:近10天一平均)、b=0.98(绿线:近50天一平均),得到上述图像,可以发现参数b的值越大,曲线越平滑,同时曲线向右平移,因为平均的天数更多了。而b的值越小,曲线越曲折,噪声更多,因为平均的天数少,方差就更大。
这种方法的意义在于使用一行公式(代码),就可以计算出多代的平均值,节省存储空间和内存。
实际上,当b=0.98时,温度趋势并不是绿色的曲线,而是紫色的。初始情况下V0=0,则V1=0.98*V0+0.02*T1=0.02T1,V2=0.98*V1+0.02*T2=0.0196T1+0.02T2,可以发现预估的前两天温度和实际温度相差很大,因此如果有预估前期的计算值需求,需要偏差修正。偏差修正就是不再使用Vt+1=b*Vt+(1-b)*Tt+1,而是使用:
上式t是天数,随着t的增大,bt趋于0,则分母趋于1,也就是随着天数增大,偏差修正逐渐不起作用。因此该式适用于预估前期。例如:
上式的预估值就比没有偏差修正的预估值准确了许多,用偏差修正后的公式进行计算画图,得到的曲线就是绿色的曲线。
有了上述了解,就有了动量梯度下降法、RMSprop算法和Adam 优化算法的基础了,这几个算法的实现都是利用指数加权移动平均值来加快网络的学习速度。同时在Batch Norm测试集应用技巧也会出现,利用本公式估算单个测试样本的平均值和方差,以便模拟Mini-batch的平均值和方差,从而方便实施归一化。