EMA:指数滑动平均

作用:把噪声序列平滑成稳定趋势——权重随时间指数衰减。

原理:给定序列 x1, x2, …,其指数滑动平均 st 递推定义为:s_t = α·s_{t−1} + (1−α)·x_t。新值 = 老平均和新观测的加权混合,1−α 是"对新观测的开放程度"。等价改写 s_t = s_{t−1} + (1−α)(x_t − s_{t−1}) —— 当前状态朝新观测方向走一小步,就是一个一阶 IIR 低通滤波器,滤掉高频噪声、保留慢趋势。展开看,反复代入得s_t = (1−α)(x_t + α·x_{t−1} + α²·x_{t−2} + … ) + α^t·s_0历史值的权重 (1−α)·α^(t−i) 是一条指数衰减的等比数列 —— 越久远的样本贡献越小,这就是"指数滑动"的名字来源。

关键点:

  • 权重和 = 1 − α^t(等比求和):训练初期 < 1,所以 s_t 被 s_0=0 系统性拉低 → 需要偏差修正 ŝ_t = s_t / (1−α^t);t 大后 α^t→0,修正自动失效。Adam 的一阶/二阶矩也是这一招。
  •  有效窗口 ≈ 1/(1−α)(平均延迟):α=0.9→10 步,0.999→1000 步,0.9999→10000 步。
  • 半衰期 t½ = ln0.5/lnα:α=0.999 时约 693 步 —— 一个历史值的权重掉到一半要这么多步。

 提升泛化性经典案例:

半衰期与经典案例:


为什么EMA是成功的:

  1. 有效性:维护一份“平滑后的权重”用于推理,往往比直接用最后一刻的权重更好。

上式可总结出:

  • 抑制最优点附近的震荡:SGD 在平坦最小值附近来回抖动,EMA 相当于对轨迹时间平均,落点更稳、更靠近泛化更好的宽谷。
  •  降噪:单个 minibatch 引入的随机扰动被指数平均抹平。

成本:只多存一份权重副本,每步一次加权平均,不改训练图。

EMA为什么可以修正偏差:

若初始 s0 = 0,早期 EMA 会系统性偏低。修正方法是除以累积权重的和Adam 的一阶矩估计也用同一技巧,t 大时 αt → 0,修正自动失效;只在训练初期有意义,公式如下:

为什么参数 EMA 泛化更好(损失景观视角):
SGD 在最优点附近沿陡峭方向来回震荡,这些震荡点落在 loss 的"窄谷"里;EMA 把整条训练轨迹中心化,落点偏向宽平的盆地(flat minima)。宽盆地的 Hessian 最大特征值更小、对参数扰动更鲁棒 → 泛化更好。口诀:"窄谷训得快、宽谷泛化稳,EMA 让你落在宽谷。"

 EMA 何时反而有害:
数据分布非平稳时(分阶段 fine-tune 不同任务、持续学习逐时刻增量),EMA 会把不同"体制"的权重平均在一起,落在两者中间,可能两边都差。对策:阶段性重置 EMA、或只在每个阶段/任务内部维护 EMA,不要无脑全程跨阶段平均。

更多推荐