1. 定义
滑动平均(exponential moving average),或者叫做指数加权平均(exponentially weighted moving average),可以用来估计变量的局部均值,使得变量的更新与一段时间内的历史取值有关。
2. 通俗解释
变量 在 𝑡 时刻记, 为变量 𝑣在 𝑡 时刻的取值,即在不使用滑动平均模型时 ,在使用滑动平均模型后,的更新公式如下:
上式中,𝛽∈[0,1)β∈[0,1)。若β=0 相当于没有使用滑动平均。
3. 代码实现
class EMA():
def __init__(self, decay):
self.decay = decay
self.shadow = {}
def register(self, name, val):
self.shadow[name] = val
def get(self, name):
return self.shadow[name]
def update(self, name, x):
assert name in self.shadow
new_average = (1.0 - self.decay) * x + self.decay * self.shadow[name]
print(new_average)
self.shadow[name] = new_average
# 假如a是第一个epoch后的参数
a = {"a":0.1,"b":0.2,'c':0.3,'d':1}
ema = EMA(0.5)
for name in a:
ema.register(name, a[name])
# 假如a是第二个epoch后的参数
a = {"a":0.2,"b":0.3,'c':0.4,'d':2}
for name in a:
ema.update(name, a[name])
输出结果如下:
0.15000000000000002 0.25 0.35 1.5
4. 参考
理解滑动平均(exponential moving average) - wuliytTaotao - 博客园
机器学习模型性能提升技巧:指数加权平均(EMA)_mikelkl的博客-CSDN博客_模型ema
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)