背景:在深度学习优化算法,如:Momentum、RMSprop、Adam中都涉及到指数加权平均这个概念。为了系统的理解上面提到的三种深度学习优化算法,先着重理解一下指数加权平均(exponentially weighted averages)
定义
指数移动平均(EMA)也称为指数加权移动平均(EWMA),是一种求平均数的方法,应用指数级降低的加权因子。 每个较旧数据的权重都呈指数下降,从未达到零。
m个数据的数据集 [θ1,θ2,...,θm] [ θ 1 , θ 2 , . . . , θ m ] ;
- 平均数的一般求解方法: vaver=θ1+θ2+...+θmm v a v e r = θ 1 + θ 2 + . . . + θ m m ;
- 指数加权平均的求解方法:
- 参数 β β , v0=0 v 0 = 0 ;
- vt=βvt−1+(1−β)θt v t = β v t − 1 + ( 1 − β ) θ t :前t个样本的平均数由前(t-1)个样本的平均数和第t个样本决定。
符号 | 含义 |
---|---|
β β | 参数 |
v0 v 0 | 初始平均值 |
vt v t | 前t条记录的平均值 |
θt θ t | 第t条记录值 |
举例
有100天伦敦温度记录 [θ1,θ2,...,θ100] [ θ 1 , θ 2 , . . . , θ 100 ] ,计算伦敦100天温度平均值。如果 β=0.9 β = 0.9 ;
计算公式:
展开公式:
即: v100=0.1θ100+0.1∗0.9θ99+0.1∗(0.9)2θ98+...+0.1∗0.999θ1 v 100 = 0.1 θ 100 + 0.1 ∗ 0.9 θ 99 + 0.1 ∗ ( 0.9 ) 2 θ 98 + . . . + 0.1 ∗ 0.9 99 θ 1
可以看出:各个记录前的权重系数是以指数级下降的,但不为0。所以这种平均值的求解方法称为指数加权平均 。
温度平均值变化图:
应用
主要用在深度学习优化算法中,用来修改梯度下降算法中参数的更新方法。
在优化算法中, 11−β 1 1 − β 可以粗略表示指数加权平均考虑的样本数[由于随着样本容量t的逐渐增多,其系数指数下降,对平均值的贡献程度逐渐降低;影响平均值计算的几个关键样本就是最近几天的样本值,而这个样本量可以通过 11−β 1 1 − β 来进行大致估算]。
Momentum
初始化: vdW=np.zeros(dW.shape) v d W = n p . z e r o s ( d W . s h a p e ) ; vdb=np.zeros(db.shape) v d b = n p . z e r o s ( d b . s h a p e ) —-初始为0;分别与dW、db shape相同;
- vdW v d W 、 vdb v d b 用来计算关于 W W 、 梯度的平均值;
在第t次迭代中On iteration t t :
- Compute ,
db
d
b
on the current mini-batch; 现在当前batch中计算
dW
d
W
、
db
d
b
;
- vdW=βvdW+(1−β)dW v d W = β v d W + ( 1 − β ) d W 【计算关于 dW d W 的平均。解释:dW看做是加速度, vdW v d W 下山速度, β β 摩擦系数; momentum动量】
- vdb=βvdb+(1−β)db v d b = β v d b + ( 1 − β ) d b 【计算关于 db d b 的平均】
- W=W−αvdW,b=b−αvdb W = W − α v d W , b = b − α v d b 【参数更新:用关于 W W 、 梯度的平均值来替换原来的 dW d W 、 db d b 】
超参数: α,β α , β , — β β usually be 0.9. (a very robust number)
RMSprop
初始化: SdW=np.zeros(dW.shape) S d W = n p . z e r o s ( d W . s h a p e ) ; Sdb=np.zeros(db.shape) S d b = n p . z e r o s ( d b . s h a p e ) —-初始为0;分别与dW、db shape相同;
在t次迭代中On iteration t t :
- Compute , db d b on current mini-batch
- vdW=βvdW+(1−β)(dW)2 v d W = β v d W + ( 1 − β ) ( d W ) 2 ; vdb=βvdb+(1−β)(db)2 v d b = β v d b + ( 1 − β ) ( d b ) 2 【计算梯度平方的平均值】
- W=W−αdWvdW+ϵ√ W = W − α d W v d W + ϵ ; b=b−αdbvdb+ϵ√ b = b − α d b v d b + ϵ 【参数更新:除以平方根;加上 ϵ ϵ 防止开平方根过小】
Adam = Momentum + RMSprop
初始化: vdW=np.zeros(dW.shape) v d W = n p . z e r o s ( d W . s h a p e ) ; SdW=np.zeros(dW.shape) S d W = n p . z e r o s ( d W . s h a p e ) ; vdb=np.zeros(db.shape) v d b = n p . z e r o s ( d b . s h a p e ) Sdb=np.zeros(db.shape) S d b = n p . z e r o s ( d b . s h a p e ) ; —-初始为0;分别与dW、db shape相同;【 vdW v d W 、 vdb v d b 是Momentum算法; SdW S d W 、 Sdb S d b 是RMSprop优化算法】
t次迭代过程On iteration t t :
- Compute on current mini-batch;
- vdW=β1vdW+(1−β1)dW v d W = β 1 v d W + ( 1 − β 1 ) d W , vdb=β1vdb+(1−β1)db v d b = β 1 v d b + ( 1 − β 1 ) d b ———–“Momentum” 超参数: β1 β 1
- SdW=β2SdW+(1−β2)(dW)2 S d W = β 2 S d W + ( 1 − β 2 ) ( d W ) 2 , Sdb=β2Sdb+(1−β2)(db)2 S d b = β 2 S d b + ( 1 − β 2 ) ( d b ) 2 ————“RMSprop” 超参数: β2 β 2
- biases correction 偏差修正:
- vcorrectdW=vdW(1−βt1) v d W c o r r e c t = v d W ( 1 − β 1 t ) , vcorrectdb=vdb(1−βt1) v d b c o r r e c t = v d b ( 1 − β 1 t ) ;
- ScorrectdW=SdW(1−βt2) S d W c o r r e c t = S d W ( 1 − β 2 t ) , Scorrectdb=Sdb(1−βt2) S d b c o r r e c t = S d b ( 1 − β 2 t ) ;
- W=W−αvcorrectdWScorrectdW+ϵ√ W = W − α v d W c o r r e c t S d W c o r r e c t + ϵ , b=b−αvcorrectdbScorrectdb+ϵ√ b = b − α v d b c o r r e c t S d b c o r r e c t + ϵ 【更新方法:结合Momentum和RMSprop优化算法】
问题及改正
存在问题
指数加权平均早期估算过程中存在:偏差 。
由于指数加权平均初始值 v0=0 v 0 = 0 , β=0.9 β = 0.9 则:
- v1=0.9∗v0+0.1∗θ1=0.1θ1 v 1 = 0.9 ∗ v 0 + 0.1 ∗ θ 1 = 0.1 θ 1
- v2=0.9∗v1+0.1∗θ2=0.09θ1+0.1θ2 v 2 = 0.9 ∗ v 1 + 0.1 ∗ θ 2 = 0.09 θ 1 + 0.1 θ 2
就是说在平均值求解的刚开始几次计算过程中,计算的平均值过小,偏差过大。表现在下面的图里,绿线 是理想情况;紫线 是指数加权平均线。可以看出前几次平均值紫线比绿线要高一些! 紫线早期过下,偏差过大。
改正方法
进行偏差纠正。
将计算的平均值结果除以 1−βt 1 − β t ,即 vt=vt1−βt=βvt−1+(1−β)θt1−βt v t = v t 1 − β t = β v t − 1 + ( 1 − β ) θ t 1 − β t ;
从计算公式可以看出 vt v t 随着计算样本t的增大,不断接近于没有进行偏差纠正的指数加权平均值。在图中表现就是随着样本的增大,紫线和绿线逐渐重合。