EMA(指数移动平均)及其深度学习应用

在深度学习中,经常会使用EMA(指数移动平均)这个方法对模型的参数做平均,以提高测试指标并增加模型鲁棒。

1.基于数学的介绍

1.1 公式例子

我们有关于“温度-天数”的数据

\theta_t:在第t天的温度。

v_t:第t天的移动平均数。

\beta:权重参数。

图中红线即是蓝色数据点的指数移动平均。

1.2 \LARGE v_t\LARGE \beta之间的关系

v_t大概表示前1/(1 - \beta)天的平均数据。(以第t天做参考)

如:

\beta = 0.9

1 / (1 - \beta) \approx 10

v_t大概表示前10天的平均数据

红线

\beta = 0.98

1 / (1 - \beta) \approx 50

v_t大概表示前50天的平均数据

绿线

\beta = 0.5

1 / (1 - \beta) \approx 2

v_t大概表示前2天的平均数据

黄线

那么\beta越大,表示考虑的时间长度越长。

1.3 进一步理解\LARGE v_t

\beta =0.9,从v_{100}往回写

  ...

迭代代入v_{99}v_{98} … 得:

由此可知:

1.v_{100}\theta_{100}\ \theta_{99}\ \theta_{98} \ ...的加权求和

2. 𝜃 前的系数相加起来为 1 或者逼近 1

当某项系数小于峰值系数(𝟏−𝜷)𝟏/𝒆时,我们可以忽略它的影响

(0.9)^10 ~= 0.34 ~= 1/e 所以当β=0.9时,相当于前10天的加权平均。

(0.98)^50 ~= 0.36 ~= 1/e 所以当β=0.98时,相当于前50天的加权平均。

(0.5)^2 ~= 0.25 ~= 1/e 所以当β=0.5时,相当于前2天的加权平均。

2.在深度学习模型中的应用

\theta_t:在第t次更新得到的所有参数权重。

v_t:第t次更新的所有参数移动平均数。

\beta:权重参数。

2.1 为啥EMA会有用

对于更新n次时普通的参数权重\theta_n   (g_n为第n次传播得到的梯度):

对于更新n次时使用EMA的参数权重v_n (此式中α为上面提到的参数β):

\theta_n代入v_n表达式,并且令v_0 = \theta_1得:

对比两式:

普通的参数权重相当于一直累积更新整个训练过程的梯度,使用EMA的参数权重相当于使用训练过程梯度的加权平均(刚开始的梯度权值很小)。由于刚开始训练不稳定,得到的梯度给更小的权值更为合理,所以EMA会有效。

3.Pytorch实现EMA类

4.biggan实现的EMA

  • 29
    点赞
  • 104
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值