代码
【MindSpore易点通】深度学习系列:其他优化算法

【MindSpore易点通】深度学习系列:其他优化算法

【MindSpore易点通】深度学习系列:其他优化算法

在前面几期的介绍中,我们已经学习了Mini-batch梯度下降算法、指数加权平均算法,大家是不是觉得不过瘾,别担心,今天小编一口气带来好几个!废话不多说,我们开干吧~

动量梯度下降法

动量梯度下降法(Momentum),运行速度总是会快于标准的梯度下降算法,基本的思想就是计算梯度的指数加权平均数,并利用该梯度更新权重。

cke_327296.png

在处理优化成本函数时,如上图所示,红点代表最小值的位置,假设从蓝色点开始梯度下降法,无论是batch还是mini-batch下降法,都需要一步一步计算,需要很多计算步骤,浪费很多时间;但是如果使用较大的学习率(紫色箭头),结果可能又会偏离函数范围,为了避免摆动过大,所以需要选用一个较小的学习率。

总体来说,纵向上我们希望学习慢一点;而横向上我们更希望加快学习,快速从左向右移,移向最小值红点。

所以使用动量梯度下降法时,需要在第t次迭代的过程中,计算微分dW,db;

然后重新赋值权重,减缓梯度下降的幅度;最终我们会发现纵向的摆动平均值接近于零,横向的平均值较大,因此具体计算算法为:

cke_360068.png

两个超参数学习率cke_389641.png和参数cke_411068.png的设置也是需要注意技巧的,控制着指数加权平均数,常用值为0.9,VdW初始值为0,跟W拥有相同的维数,vdb的初始值也是向量零,和b是同一维数。

动量梯度下降法就是这么简单,通常可以用来加快学习算法。

RMSprop

其实RMSprop算法(root mean square prop)也可以加速梯度下降。

cke_435911.png

假设纵轴代表参数b,横轴代表参数W,可能有W1,W2或者其它参数,这里我们简化一下,暂时使用W表示。

RMSprop算法可以一方面减缓b方向的学习,同时不会减缓横轴方向的学习。

在第t次迭代中,该算法会计算mini-batch的微分dW,db,保留这个指数加权平均数:

cke_474171.png

更新参数:

cke_495833.png

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

cke_517583.png

RMSprop算法的更新过程如图中绿色线部分一样,可以用一个的更大学习率加快学习,但其实dW实际是一个高维度的参数向量,实际使用中需要注意这点。

RMSprop均方根算法,将微分先平方,最后使用平方根,同时我们在处理的时候,通常会在分母上加上一个很小的cke_539438.png(10-8)以保证算法不会除以0。

Adam 优化算法

Adam(Adam optimization algorithm)优化算法就很巧妙了,是上述两个算法的结合。

1.初始化:cke_561427.png

2.在第t次迭代中,用mini-batch梯度下降法计算dW,db;

3.计算Momentum指数加权平均数:cke_583533.pngcke_605731.png

4.RMSprop更新:cke_660368.pngcke_689413.png

5.偏差修正:cke_718663.pngcke_747960.png

6.更新W和b:cke_777446.png

之前我们已经提过,cke_815709.png作为dW的移动平均数,通常选用0.9,超参数cke_854151.png推荐使用0.999,cke_883980.png设置为10-8,这样我们就可以尝试不同的cke_943961.png,看看哪个效果最好啦。

Adam算法结合了Momentum和RMSprop梯度下降法,是一种极其常用的学习算法,被证明能有效适用于不同神经网络,适用于广泛的结构。

学习率衰减

学习率衰减(Learning rate decay):随时间慢慢减少学习率,我们将之称为学习率衰减。

cke_974156.png

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

cke_1011607.png

但要慢慢减少学习率的话,在初期的时候,学习率较大,学习相对较快;但随着学习率变小,移动步伐也会变慢变小,所以曲线(绿色线)会在最小值附近的一小块区域里摆动,而不是大幅度在最小值附近摆动。

学习率衰减一代就要遍历一次数据,拆分不同的mini-batch,第一次遍历训练集叫做第一代,第二次就是第二代,依此类推,将学习率设为cke_1040450.png(decay-rate称为衰减率,epoch-num为代数,cke_1074591.png为初始学习率)。

当然也可以使用其他公式,比如指数衰减,其中a0是小于1的值,如cke_1105324.png,学习率呈指数下降。

好啦,这次的优化算法就全部介绍到这里啦,尤其需要注意的是参数和公式的理解!下次给大家带来超参数调试的讲解,挥手十分钟再见!