【深度学习基础】指数加权平均

Refs:

  1. https://zhuanlan.zhihu.com/p/29895933
  2. https://www.cnblogs.com/guoyaohua/p/8544835.html
  3. https://terrifyzhao.github.io/2018/02/16/%E5%8A%A8%E9%87%8F%E6%A2%AF%E5%BA%A6%E4%B8%8B%E9%99%8D%E6%B3%95Momentum.html
  4. 维基百科,有数学推导
  5. 模型参数更新

1. 引言

在深度学习的各种优化算法中,例如 M o m e n t u m Momentum Momentum R M S p r o p RMSprop RMSprop A d a m Adam Adam等,都提到了指数加权移动平均(Exponential Moving Average,EMA 或 Exponentially Weighted Moving Average,EWMA)是以指数式递减加权的移动平均。 各数值的加权影响力随时间而指数式递减,越近期的数据加权影响力越重,但较旧的数据也保留了一定的加权值,如下所示就是指数衰减的权重,
请添加图片描述

2. 举例说明

已知,有 n 天的温度值分别为 $\theta_1,\theta_2,\theta_3\dots,\theta_n $,在计算指数加权平均时,要引入了一个权重 β \beta β,则第 t 天的平均温度计算的递推公式如下所示,

v t = β v t − 1 + ( 1 − β ) θ t v_{t}=\beta v_{t-1}+(1-\beta) \theta_{t} vt=βvt1+(1β)θt

可以发现,当前的平均温度依赖于之前计算好的平均温度以及当前的实际温度,因此可以依次计算每个点的指数加权平均,

v 0 = 0 v_{0}=0 v0=0

v 1 = β v 0 + ( 1 − β ) θ 1 v_{1}=\beta v_{0}+(1-\beta) \theta_{1} v1=βv0+(1β)θ1

$\vdots $

v t − 1 = β v t − 2 + ( 1 − β ) θ t − 1 v_{t-1}=\beta v_{t-2}+(1-\beta) \theta_{t-1} vt1=βvt2+(1β)θt1

依次带入就可以得到, v t v_t vt 的计算公式,

v t = β v t − 1 + ( 1 − β ) θ t = β n v 0 + ( 1 − β ) ( θ t + β θ t − 1 + β 2 θ t − 2 + ⋯ + β t − 1 θ 1 ) v_{t}=\beta v_{t-1}+(1-\beta) \theta_{t}=\beta^nv_0+(1-\beta)(\theta_t+\beta\theta_{t-1}+\beta^2\theta_{t-2}+\dots+\beta^{t-1}\theta_{1}) vt=βvt1+(1β)θt=βnv0+(1β)(θt+βθt1+β2θt2++βt1θ1)

可以发现,

  • 指数加权平均是给每个实际值都赋了一个权重系数,距离 t 越近,权重越大,反之就越小。
  • 因为越是前面的值,权重越小,几乎可以忽略不计,相当于计算了一个小窗口里的平均值。权重 β \beta β 越大,这个窗口也就越大,反之越小。

这里假设了初始值为 0,由于没有先前时刻的数据,这会导致刚开始的平均值非常小,因此需要加入一个偏差修正,如下所示,(也可以在 Adam 优化器中看到这个修正)

$\hat{v}{t}=\frac{v{t}}{1-\beta^{t}} $

一开始修正项 1 1 − β t \frac{1}{1-\beta^t} 1βt1 比较大,随着 t 增加,就会逐渐趋近于 1。

3. 模型训练

除了在优化器中会使用到 EMA 外,为了提高模型鲁棒性,会同时实例化两个相同的模型 n e t net net n e t e m a net_{ema} netema,并初始化为同样的参数 θ 1 \theta_1 θ1,前者是要参与训练的,而后者不参与训练,只是采用ema来更新参数,测试阶段就会用到 n e t e m a net_{ema} netema

如下式,是第n时刻模型 n e t net net 的权重 θ n \theta_n θn,每次更新的梯度为 g i , i = 1 , 2 , 3 … n g_i,i=1,2,3\dots n gi,i=1,2,3n

θ n = θ 1 − ∑ i = 1 n − 1 g i \theta_n=\theta_{1}-\sum_{i=1}^{n-1} g_{i} θn=θ1i=1n1gi

如果采用 EMA,则 n e t e m a net_{ema} netema 的权重为 v n v_n vn

v n = β v n − 1 + ( 1 − β ) θ n = β n v 0 + ( 1 − β ) ( θ n + β θ n − 1 + β 2 θ n − 2 + ⋯ + β n − 1 θ 1 ) v_{n}=\beta v_{n-1}+(1-\beta) \theta_{n}=\beta^nv_0+(1-\beta)(\theta_n+\beta\theta_{n-1}+\beta^2\theta_{n-2}+\dots+\beta^{n-1}\theta_{1}) vn=βvn1+(1β)θn=βnv0+(1β)(θn+βθn1+β2θn2++βn1θ1)

θ \theta θ 代入,可以得到,

v n = θ 1 − ∑ i = 1 n − 1 ( 1 − β n − i ) g i v_n=\theta_{1}-\sum_{i=1}^{n-1}\left(1-\beta^{n-i}\right) g_{i} vn=θ1i=1n1(1βni)gi

可以发现两个模型值差了一个权重系数,相当于是一个学习率的衰减。但是和优化器中的学习率衰减有所不同,前者不影响更新多少梯度的计算,但后者会直接衰减更新速率,也就是每次梯度更新的量会受到影响。

4. 总结

指数加权平均的求解过程实际上是一个递推的过程,那么这样就会有一个非常大的好处,每当要求从0到某一时刻的平均值时,并不需要像普通求解平均值那样,保留所有的时刻值求平均。而是只需要保留之前时刻的平均值和现时刻值即可。也就是每次只需要保留常数值,然后进行运算即可,这对于深度学习中的海量数据来说,是一个很好的减少内存和空间的做法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值