【MindSpore易点通】深度学习系列:其他优化算法
【MindSpore易点通】深度学习系列:其他优化算法
在前面几期的介绍中,我们已经学习了Mini-batch梯度下降算法、指数加权平均算法,大家是不是觉得不过瘾,别担心,今天小编一口气带来好几个!废话不多说,我们开干吧~
动量梯度下降法
动量梯度下降法(Momentum),运行速度总是会快于标准的梯度下降算法,基本的思想就是计算梯度的指数加权平均数,并利用该梯度更新权重。

在处理优化成本函数时,如上图所示,红点代表最小值的位置,假设从蓝色点开始梯度下降法,无论是batch还是mini-batch下降法,都需要一步一步计算,需要很多计算步骤,浪费很多时间;但是如果使用较大的学习率(紫色箭头),结果可能又会偏离函数范围,为了避免摆动过大,所以需要选用一个较小的学习率。
总体来说,纵向上我们希望学习慢一点;而横向上我们更希望加快学习,快速从左向右移,移向最小值红点。
所以使用动量梯度下降法时,需要在第t次迭代的过程中,计算微分dW,db;
然后重新赋值权重,减缓梯度下降的幅度;最终我们会发现纵向的摆动平均值接近于零,横向的平均值较大,因此具体计算算法为:

两个超参数学习率
和参数
的设置也是需要注意技巧的,控制着指数加权平均数,常用值为0.9,VdW初始值为0,跟W拥有相同的维数,vdb的初始值也是向量零,和b是同一维数。
动量梯度下降法就是这么简单,通常可以用来加快学习算法。
RMSprop
其实RMSprop算法(root mean square prop)也可以加速梯度下降。

假设纵轴代表参数b,横轴代表参数W,可能有W1,W2或者其它参数,这里我们简化一下,暂时使用W表示。
RMSprop算法可以一方面减缓b方向的学习,同时不会减缓横轴方向的学习。
在第t次迭代中,该算法会计算mini-batch的微分dW,db,保留这个指数加权平均数:

更新参数:

由于我们在横轴方向希望学习速度快,而在垂直方向希望减缓纵轴上的摆动,所以这就需要SdW相对较小,Sdb相对较大。

RMSprop算法的更新过程如图中绿色线部分一样,可以用一个的更大学习率加快学习,但其实dW实际是一个高维度的参数向量,实际使用中需要注意这点。
RMSprop均方根算法,将微分先平方,最后使用平方根,同时我们在处理的时候,通常会在分母上加上一个很小的
(10-8)以保证算法不会除以0。
Adam 优化算法
Adam(Adam optimization algorithm)优化算法就很巧妙了,是上述两个算法的结合。
1.初始化:
;
2.在第t次迭代中,用mini-batch梯度下降法计算dW,db;
3.计算Momentum指数加权平均数:
,
;
4.RMSprop更新:
,
;
5.偏差修正:
,
;
6.更新W和b:
。
之前我们已经提过,
作为dW的移动平均数,通常选用0.9,超参数
推荐使用0.999,
设置为10-8,这样我们就可以尝试不同的
,看看哪个效果最好啦。
Adam算法结合了Momentum和RMSprop梯度下降法,是一种极其常用的学习算法,被证明能有效适用于不同神经网络,适用于广泛的结构。
学习率衰减
学习率衰减(Learning rate decay):随时间慢慢减少学习率,我们将之称为学习率衰减。

假设使用mini-batch梯度下降法,mini-batch数量选择64或者128个样本,在迭代过程中会有噪音(蓝色线),所以算法不会会真正收敛,只能在附近摆动。

但要慢慢减少学习率的话,在初期的时候,学习率较大,学习相对较快;但随着学习率变小,移动步伐也会变慢变小,所以曲线(绿色线)会在最小值附近的一小块区域里摆动,而不是大幅度在最小值附近摆动。
学习率衰减一代就要遍历一次数据,拆分不同的mini-batch,第一次遍历训练集叫做第一代,第二次就是第二代,依此类推,将学习率设为
(decay-rate称为衰减率,epoch-num为代数,
为初始学习率)。
当然也可以使用其他公式,比如指数衰减,其中a0是小于1的值,如
,学习率呈指数下降。
好啦,这次的优化算法就全部介绍到这里啦,尤其需要注意的是参数和公式的理解!下次给大家带来超参数调试的讲解,挥手十分钟再见!