指数加权平均

背景:在深度学习优化算法,如:Momentum、RMSprop、Adam中都涉及到指数加权平均这个概念。为了系统的理解上面提到的三种深度学习优化算法,先着重理解一下指数加权平均(exponentially weighted averages)

定义

指数移动平均(EMA)也称为指数加权移动平均(EWMA),是一种求平均数的方法,应用指数级降低的加权因子。 每个较旧数据的权重都呈指数下降,从未达到零。

m个数据的数据集${[\theta_1,\theta_2,…,\theta_m]}$ ;

  • 平均数的一般求解方法:$v_{aver} = \frac{\theta1+\theta2+…+\theta_m}{m}$ ;
  • 指数加权平均的求解方法:
    • 参数 $\beta$, $v_0 = 0$;
    • $v_t = \beta v_{t-1} + (1-\beta)\theta_t$ :前t个样本的平均数由前(t-1)个样本的平均数和第t个样本决定
符号 含义
$\beta$ 参数
$v_0$ 初始平均值
$v_t$ 前t条记录的平均值
$\theta_t$ 第t条记录值

举例

有100天伦敦温度记录${[\theta_1,\theta_2,…,\theta_{100}]}$,计算伦敦100天温度平均值。如果$\beta =0.9$;

计算公式:

展开公式:

即:$v_{100} = 0.1\theta_{100} + 0.10.9 \theta_{99} + 0.1(0.9)^2 \theta_{98} + … + 0.1*0.9^{99}\theta_1$

可以看出:各个记录前的权重系数是以指数级下降的,但不为0。所以这种平均值的求解方法称为指数加权平均

温度平均值变化图:

平均值

应用

主要用在深度学习优化算法中,用来修改梯度下降算法中参数的更新方法

在优化算法中,$\frac{1}{1-\beta}$ 可以粗略表示指数加权平均考虑的样本数[由于随着样本容量t的逐渐增多,其系数指数下降,对平均值的贡献程度逐渐降低;影响平均值计算的几个关键样本就是最近几天的样本值,而这个样本量可以通过$\frac{1}{1-\beta}$ 来进行大致估算]。

Momentum

初始化:$v_{dW} = np.zeros(dW.shape)$ ; $v_{db} = np.zeros(db.shape)$ —-初始为0;分别与dW、db shape相同;

  • $v_{dW}$、 $v_{db}$ 用来计算关于$W$、$b$ 梯度的平均值;

在第t次迭代中On iteration $t$:

  • Compute $dW$, $db$ on the current mini-batch; 现在当前batch中计算$dW$、$db$ ;
  • $v_{dW} = \beta v_{dW} + (1-\beta)dW$ 【计算关于$dW$的平均。解释:dW看做是加速度,$v_{dW}$ 下山速度, $\beta$ 摩擦系数; momentum动量】
  • $v_{db} = \beta v_{db} + (1-\beta)db$ 【计算关于$db$的平均】
  • $W = W - \alpha v_{dW}, b=b-\alpha v_{db} $ 【参数更新:用关于$W$、$b$ 梯度的平均值来替换原来的$dW$、$db$】

超参数: $\alpha, \beta$, —$\beta$ usually be 0.9. (a very robust number)

RMSprop

初始化:$S_{dW} = np.zeros(dW.shape)$ ; $S_{db} = np.zeros(db.shape)$ —-初始为0;分别与dW、db shape相同;

在t次迭代中On iteration $t$:

  • Compute $dW$,$db$ on current mini-batch
  • $v_{dW} = \beta v_{dW} + (1-\beta)(dW)^2$ ; $v_{db} = \beta v_{db} + (1-\beta) (db)^2$ 【计算梯度平方的平均值】
  • $W = W - \alpha \frac{dW} {\sqrt{v_{dW} + \epsilon}}$ ; $b = b - \alpha \frac{db}{\sqrt{v_{db}+\epsilon}}$ 【参数更新:除以平方根;加上$\epsilon$防止开平方根过小】

Adam = Momentum + RMSprop

初始化:$v_{dW} = np.zeros(dW.shape)$ ; $S_{dW} = np.zeros(dW.shape)$ ; $v_{db} = np.zeros(db.shape)$ $S_{db} = np.zeros(db.shape)$ ; —-初始为0;分别与dW、db shape相同;【$v_{dW}$、$v_{db}$ 是Momentum算法;$S_{dW}$、$S_{db}$ 是RMSprop优化算法】

t次迭代过程On iteration $t$:

  • Compute $dW, db$ on current mini-batch;
  • $v_{dW} = \beta_1v_{dW} + (1-\beta_1) dW$ , $v_{db} = \beta_1 v_{db} + (1-\beta_1) db$ ———–”Momentum” 超参数:$\beta_1$
  • $S_{dW} = \beta_2 S_{dW} + (1-\beta_2) (dW)^2$, $S_{db} = \beta_2 S_{db} + (1-\beta_2) (db)^2$ ————“RMSprop” 超参数:$\beta_2$
  • biases correction 偏差修正:
    • $v_{dW}^{correct} = \frac {v_{dW}}{(1-\beta_1^t)}$ , $v_{db}^{correct} = \frac {v_{db}}{(1-\beta_1^t)}$ ;
    • $S_{dW}^{correct} = \frac {S_{dW}}{(1-\beta_2^t)}$ , $S_{db}^{correct} = \frac {S_{db}}{(1-\beta_2^t)}$ ;
  • $W = W - \alpha \frac{v_{dW}^{correct}}{\sqrt{S_{dW}^{correct}+ \epsilon} }$ , $b = b - \alpha \frac{v_{db}^{correct}}{\sqrt{S_{db}^{correct} + \epsilon } }$ 【更新方法:结合Momentum和RMSprop优化算法】

问题及改正

存在问题

指数加权平均早期估算过程中存在:偏差

由于指数加权平均初始值$v_0 = 0$,$\beta = 0.9$则:

  • $v_1 = 0.9 v_0 + 0.1\theta_1 = 0.1\theta_1$
  • $v_2 = 0.9 v_1 + 0.1 \theta_2 = 0.09\theta_1 + 0.1\theta_2$

就是说在平均值求解的刚开始几次计算过程中,计算的平均值过小,偏差过大。表现在下面的图里,绿线 是理想情况;紫线 是指数加权平均线。可以看出前几次平均值紫线比绿线要高一些! 紫线早期过下,偏差过大。

改正方法

进行偏差纠正。

将计算的平均值结果除以$1-\beta^t$,即$v_t = \frac{v_t}{1-\beta^t}=\frac{\beta v_{t-1} + (1-\beta)\theta_t}{1-\beta^t}$ ;

从计算公式可以看出$v_t$ 随着计算样本t的增大,不断接近于没有进行偏差纠正的指数加权平均值。在图中表现就是随着样本的增大,紫线和绿线逐渐重合

您的支持就是我更新的最大动力!谢谢!