移动平均方案(指数加权,多项式衰减)。
average的Python项目详细描述
移动平均方案(指数加权,多项式衰减)。只维护运行平均值;不存储值的历史记录。
用法(ewma;指数加权移动平均值)
fromaverageimportEWMA# Create a scalar running average.# beta=0.5 is the smoothing factor.avg=EWMA(beta=0.5)avg.update(1)avg.update(2)print(avg.get())# Prints 1.6666666666666667.
平均数被加权到最近的值。也就是说,它的值是1 * 1/3 + 2 * 2/3。beta的默认值是0.9,这对于许多用途都是合理的。较高的平滑值会增加平均值中最近值的权重。
还可以通过提供shape和dtype(默认为numpy.float64)来创建numpy数组形状的运行平均值。例如:
avg=EWMA((4,4),np.float64)# or, equivalently:avg=EWMA.like(np.eye(4))avg.update(np.eye(4))print(avg.get())# Prints a 4x4 identity matrix.
例如,您可以使用EWMA来保持hxwx3视频帧的运行平均值,前提是这些帧是numpy数组格式或可以转换为它。
用法(pdma;多项式衰减移动平均值)
当多项式衰减参数eta设置为默认值0时,PDMA充当简单平均值(平均值与所有以前的值相等)。不保留价值观的历史。
fromaverageimportPDMAavg=PDMA()avg.update(1)avg.update(2)avg.update(3)print(avg.get())# Prints 2.0.
较高的eta值对应于eta度的多项式衰减窗口,该窗口向后延伸到所有以前的值上。设置的eta越高,对最新值的权重就越大。
avg=PDMA(eta=1)foriinrange(1,5):avg.update(i)print(avg.get())# Prints 3.0.
在我们的示例中,将eta设置为0将打印简单平均值2.5。eta可以设置为任意高的值,但是0、1和3可能是许多用途的合理值。与EWMA类似,PDMA运行平均值的形状可以类似于numpy数组,并具有numpy数据类型(未显示)。
参考文献
kingma和ba在“Adam: A Method for Stochastic Optimization”中给出了带初始偏差修正的指数加权平均的公式。
shamir和zhang在“Stochastic Gradient Descent for Non-smooth Optimization: Convergence Results and Optimal Averaging Schemes”的第4节中给出了多项式衰减平均的公式。