指数移动平均(exponential moving average),也叫做权重移动平均(weighted moving average),可以用来估计变量的局部均值,使得变量的更新与一段时间内的历史取值有关。在采用 SGD 或者其他的一些优化算法 (Adam, Momentum) 训练神经网络时,通常会使用EMA的方法。 它的意义在于利用滑动平均的参数来提高模型在测试数据上的健壮性。(在SGD优化算法中,也会通过使用动量或者改变学习率的方式加快收敛速度)。
简单来讲就是,通过在模型学习过程中融合更多的历史状态,从而达到更好的优化效果
公式:(其中,avg_model_param是影子权重,model_param是模型权重,decay是衰减率。该定义和EMA公式是一模一样的。)
decay * avg_model_param + (1 - decay) * model_param
链接:【代码解读】在pytorch中使用EMA - 知乎 (zhihu.com)https://zhuanlan.zhihu.com/p/479898259
【炼丹技巧】指数移动平均(EMA)的原理及PyTorch实现 - 知乎 (zhihu.com)https://zhuanlan.zhihu.com/p/68748778