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