【机器学习】指数移动平均(EMA,Exponential Moving Average)
指数移动平均(EMA)是一种加权平均技术,常用于平滑数据序列,特别是在深度学习中跟踪模型参数的平滑版本。EMA通过赋予最近更新较大的权重,历史更新权重逐渐减小,使得它能快速响应新变化,保留平滑效果。相比于简单移动平均(SMA),EMA更加重视最新数据。例如,训练模型时,EMA能生成一个比最新模型参数更稳定的版本,提升泛化能力,抑制过拟合和训练过程中的波动,从而改善模型性能。
指数移动平均(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(t−1)
- θ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(t−1) 是前一次的 EMA 参数。
相比于简单移动平均(SMA),EMA 更加重视最近的参数更新,这使得它能更快速地响应最新的变化,同时依然保留历史信息的平滑效果。
举个例子:
假设我们有一个模型参数的序列,每次训练后更新为以下值:
- 第1次更新:原始参数 = 10
- 第2次更新:原始参数 = 20
- 第3次更新:原始参数 = 15
- 第4次更新:原始参数 = 30
如果我们设定平滑因子 α=0.5\alpha = 0.5α=0.5,那么指数移动平均参数的变化如下:
-
初始化:第 1 次更新时,θEMA(1)=10\theta_{EMA}^{(1)} = 10θEMA(1)=10 (因为第一次没有历史参数,EMA 就等于初始参数)。
-
第 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+(1−0.5)×10=10+5=15
这意味着 EMA 对最新参数 202020 给予了一半的权重,但也保持了历史信息 101010 的影响。 -
第 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+(1−0.5)×15=15
由于这次的更新和历史 EMA 参数相同,EMA 不发生变化。 -
第 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+(1−0.5)×15=15+7.5=22.5
EMA 迅速跟随最新的更新,但不会完全达到新参数 303030 的值,而是趋于平滑变化。
更加复杂的情况:

这张图展示了更多数据点情况下,原始参数(蓝色虚线)和指数移动平均EMA(绿色实线)的变化情况。可以明显看到,原始参数的波动较大,而EMA曲线表现出更平滑的趋势,随着时间逐渐跟随原始参数变化但不会完全达到其波动幅度。这样,通过EMA,可以更好地抑制参数中的噪声,实现更加稳定的更新过程。
在深度学习中的应用:
在训练神经网络时,由于参数不断更新,有时模型的最新状态并不是最好的。这时,EMA 可以帮助生成一个平滑的模型版本,它比最新的模型参数更加稳定、泛化能力更强。
使用场景:
- 稳定模型:在训练过程中,模型参数可能波动较大,EMA 可以生成一个更稳定的模型。
- 提升泛化能力:EMA 模型在验证集或测试集上通常表现得更好,因为它对过拟合的抑制效果较好。
EMA 的这种平滑效果能够有效缓解训练过程中的抖动,并且能够在训练结束时提供更优的模型版本。
更多推荐

所有评论(0)