-
指数加权(移动)平均

Vt=βVt−1+(1−β)θt
这里β=0.9,Vt相当于计算平均1−β1即10天内的平均温度。
β是给过去的权重,(1−β)是给当前的权重。
将上述公式展开,可看到其指数加权平均的过程。
Vt=0.1∗θ100+0.1∗0.9∗θ99+0.1∗0.92θ98+0.1∗0.93θ97+0.1∗0.94θ96+…
-
偏差修正(Bias correction in exponentially weighted average)
为减小初始偏差(详见吴恩达老师课程),可使用1−βtVt来进行预估。
随着t的增大,1−βtVt会慢慢变回Vt

图中紫线为β=0.98,未使用偏差估计;
图中绿线为β=0.98,使用偏差估计;
图中红线为β=0.9,使用偏差估计。
-
动量梯度下降法(Gradient descent with momentum)
相较于普通的梯度下降法,动量梯度下降法速度更快。
其基本思想是,计算梯度的指数加权平均。

图中紫线,使用了过大的学习率,偏离了函数范围,可能导致无法收敛;
图中蓝线,学习率适中,但上下的摆动还是会减慢梯度下降的速度。
我们希望,纵轴上学习慢一点(不想要这些摆动),横轴学习快一点。为此我们使用动量梯度下降法。
-
在第t次迭代,计算梯度dw,db
-
计算Vdw=βVdw+(1−β)dw,Vdb=βVdb+(1−β)db。
(类似上面的指数加权(移动)平均;β一般取值0.9;一般忽略偏差修正)
-
最后在更新参数的时候,使用Vdw和Vdb,而不是dw和db。(α为lr学习率)
- w=w−αVdw
- b=b−αVdb
这样操作,纵轴方向,平均过程中正负数相互抵消,因此摆动平均值接近于零。横轴方向,所有微分都指向横轴同方向,因此学习的速度会更快。
图中红线为理想的动量梯度下降法的效果。
-
lr自动调整
不同参数,使用不同lr

该图中,横轴方向坡度小,需要较大lr;纵轴方向坡度大,需要较小lr。
θit+1:t+1时刻第i个参数的值
git:梯度
η:初始学习率
σitη:每个参数实际的lr
-
Root Mean Square方法(used in Adagrad)

通过这样处理,坡度g越大,σ就越大,ση就越小,即lr越小;坡度g越小,σ就越小,ση就越大,即lr越大。
-
RMSProp方法
支持手动调整当前梯度的影响大小。

-
lr Scheduling(lr decay)
使lr随时间(训练过程)不断变化。即η变为ηt
θit+1←θit−σitηtgit
原理与代码实现,详见另一篇总结:lr_scheduler
-
Adam优化算法
原理:RMSProp + Momentum
β1参数,用于Momentum,一般取0.9
β2参数,用于RMSProp ,一般取0.999
(Adam算法也需要lr decay,即lr应随着训练过程不断变化)
概念介绍与代码实现
