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

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

1.基于数学的介绍

1.1 公式例子

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

\theta_t:在第t天的温度。

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

\beta:权重参数。

EMA(指数移动平均)及其深度学习应用_第1张图片

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

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天的平均数据

黄线

EMA(指数移动平均)及其深度学习应用_第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次传播得到的梯度):

EMA(指数移动平均)及其深度学习应用_第3张图片

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

EMA(指数移动平均)及其深度学习应用_第4张图片

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

EMA(指数移动平均)及其深度学习应用_第5张图片

对比两式:

EMA(指数移动平均)及其深度学习应用_第6张图片

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

3.Pytorch实现EMA类

EMA(指数移动平均)及其深度学习应用_第7张图片

EMA(指数移动平均)及其深度学习应用_第8张图片

4.biggan实现的EMA

EMA(指数移动平均)及其深度学习应用_第9张图片

你可能感兴趣的:(深度学习,线性代数,深度学习)