指数移动平均(EMA,Exponential Moving Average) 是一种加权平均的技术,常用于平滑数据序列,特别是在深度学习中,用来跟踪模型参数的平滑版本。它在每次更新模型参数时,赋予最近的更新较大的权重,历史更新的权重则逐渐减小。

EMA 的更新公式如下:

θEMA(t)=α⋅θ(t)+(1−α)⋅θEMA(t−1) \theta_{EMA}^{(t)} = \alpha \cdot \theta^{(t)} + (1 - \alpha) \cdot \theta_{EMA}^{(t-1)} θEMA(t)=αθ(t)+(1α)θEMA(t1)

  • θEMA(t)\theta_{EMA}^{(t)}θEMA(t) 是第 ttt 次更新后的 EMA 参数。
  • θ(t)\theta^{(t)}θ(t) 是第 ttt 次更新后的模型原始参数。
  • α\alphaα 是平滑因子(通常取一个较小的值,如 0.001),表示新参数更新的权重。
  • θEMA(t−1)\theta_{EMA}^{(t-1)}θEMA(t1) 是前一次的 EMA 参数。

相比于简单移动平均(SMA),EMA 更加重视最近的参数更新,这使得它能更快速地响应最新的变化,同时依然保留历史信息的平滑效果。

举个例子:

假设我们有一个模型参数的序列,每次训练后更新为以下值:

  • 第1次更新:原始参数 = 10
  • 第2次更新:原始参数 = 20
  • 第3次更新:原始参数 = 15
  • 第4次更新:原始参数 = 30

如果我们设定平滑因子 α=0.5\alpha = 0.5α=0.5,那么指数移动平均参数的变化如下:

  1. 初始化:第 1 次更新时,θEMA(1)=10\theta_{EMA}^{(1)} = 10θEMA(1)=10 (因为第一次没有历史参数,EMA 就等于初始参数)。

  2. 第 2 次更新
    θEMA(2)=0.5×20+(1−0.5)×10=10+5=15 \theta_{EMA}^{(2)} = 0.5 \times 20 + (1 - 0.5) \times 10 = 10 + 5 = 15 θEMA(2)=0.5×20+(10.5)×10=10+5=15
    这意味着 EMA 对最新参数 202020 给予了一半的权重,但也保持了历史信息 101010 的影响。

  3. 第 3 次更新
    θEMA(3)=0.5×15+(1−0.5)×15=15 \theta_{EMA}^{(3)} = 0.5 \times 15 + (1 - 0.5) \times 15 = 15 θEMA(3)=0.5×15+(10.5)×15=15
    由于这次的更新和历史 EMA 参数相同,EMA 不发生变化。

  4. 第 4 次更新
    θEMA(4)=0.5×30+(1−0.5)×15=15+7.5=22.5 \theta_{EMA}^{(4)} = 0.5 \times 30 + (1 - 0.5) \times 15 = 15 + 7.5 = 22.5 θEMA(4)=0.5×30+(10.5)×15=15+7.5=22.5
    EMA 迅速跟随最新的更新,但不会完全达到新参数 303030 的值,而是趋于平滑变化。

更加复杂的情况:

请添加图片描述
这张图展示了更多数据点情况下,原始参数(蓝色虚线)和指数移动平均EMA(绿色实线)的变化情况。可以明显看到,原始参数的波动较大,而EMA曲线表现出更平滑的趋势,随着时间逐渐跟随原始参数变化但不会完全达到其波动幅度。这样,通过EMA,可以更好地抑制参数中的噪声,实现更加稳定的更新过程。

在深度学习中的应用:

在训练神经网络时,由于参数不断更新,有时模型的最新状态并不是最好的。这时,EMA 可以帮助生成一个平滑的模型版本,它比最新的模型参数更加稳定、泛化能力更强。

使用场景:
  1. 稳定模型:在训练过程中,模型参数可能波动较大,EMA 可以生成一个更稳定的模型。
  2. 提升泛化能力:EMA 模型在验证集或测试集上通常表现得更好,因为它对过拟合的抑制效果较好。

EMA 的这种平滑效果能够有效缓解训练过程中的抖动,并且能够在训练结束时提供更优的模型版本。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐