1. Mini-batch 梯度下降法
对整个训练集进行梯度下降法的时候,我们必须处理整个训练数据集,然后才能进行一步梯度下降,即每一步梯度下降法需要对整个训练集进行一次处理,如果训练数据集很大的时候,处理速度就会非常慢。如果我们每次训练的时候只训练一小部分,则我们的算法速度会执行的更快。而处理的这些一小部分训练子集即称为Mini-batch。
整个算法的过程如图所示:
图1
接下来对不同size情况下性能进行比较:
(1)batch梯度下降:
· 对所有m个训练样本执行一次梯度下降,每一次迭代时间较长;
· Cost function 总是向减小的方向下降。
(2)随机梯度下降:
· 对每一个训练样本执行一次梯度下降,但是丢失了向量化带来的计算加速;
· Cost function总体的趋势向最小值的方向下降,但是无法到达全局最小值点,呈现波动的形式。
(3)Mini-batch梯度下降:
· 选择一个1<size<m 的合适的size进行Mini-batch梯度下降,可以实现快速学习,也应用了向量化带来的好处。
· Cost function的下降处于前两者之间。
Mini-batch大小选择原则:
(1)如果训练集比较小(≤2000),可以采用batch算法。
(2)训练集比较大(如)时可采用mini-batch。
(3)mini-batch选择应该符合CPU/GPU的性能要求。
2. 指数加权平均
指数加权平均的关键函数:
设当前参数为:θ1,θ2,…, θt,则:
vt=βvt−1+(1−β)θt
当β=0.9时,指数加权平均最后的结果如图2中红色线所示;
当β=0.98时,指数加权平均最后的结果如图2中绿色线所示;
当β=0.5时,指数加权平均最后的结果如下图2中黄色线所示。
图2
在计算当前时刻的平均值,只需要前一天的平均值和当前时刻的值,所以在数据量非常大的情况下,指数加权平均在节约计算成本的方面是一种非常有效的方式,可以很大程度上减少计算机资源存储和内存的占用。
指数加权平均的偏差修正
在我们执行指数加权平均的公式时,当β=0.98时,我们得到的并不是图3中的绿色曲线,而是下图中的紫色曲线,其起点比较低。
原因:
v0=0v1=0.98v0+0.02θ1=0.02θ1v2=0.98v1+0.02θ2=0.98×0.02θ1+0.02θ2=0.0196θ1+0.02θ2
如果第一天的值为如40,则得到的v1=0.02×40=8,则得到的值要远小于实际值,后面几天的情况也会由于初值引起的影响,均低于实际均值。
图3
为了解决这个问题,我们可以做以下修正:
使用vt/(1−βt)
在使用偏差修正后我们得到了绿色的曲线,在初始阶段,由于有了偏差修正,所以能够得到比原来图像更好的结果。随着t逐渐增大,βt接近于0,即分母接近于1,所以后面绿色的曲线和紫色的曲线逐渐重合了。
3. 动量(Momentum)梯度下降法
动量梯度下降的基本思想与指数加权平均类似,但是它是计算梯度的指数加权平均数,并利用该梯度来更新权重。
我们在利用动量梯度下降法来最小化函数时,每一次迭代都是一种上下波动,如果无法做好限制,就会出现幅度比较大,这会降低梯度下降进行的速度。
我们希望我们的梯度下降能够在纵轴方向缓慢一点,横轴上速度快一点,这里我们就可以采用动量梯度下降算法就可以实现这个目的。
算法的过程如下所示:
On iteration t:
Compute dw, db on the current mini-batch
vdW= βvdW+1-βdW
vdb = βvdb + 1 -βdb
W = WavdW, b=b-avdb
这里我们用到的超参数有α和β,其中β=0.9。
4. RMSprop
除去上面的动量梯度下降算法,还有一种叫做RMSprop算法可以加快梯度下降,这个算法类似于上面的算法。
该算法计算过程如图4所示。
图4
可以看出来,这个算法确实类似于3中的算法,只不过是在每一步中的dw和db都分别做了平方,然后在最后减去的时候也做了处理。
5. Adam 优化算法
Adam 优化算法就是将 Momentum 和 RMSprop 结合起来形成的一种适用于不同深度学习结构的优化算法。
其算法过程如下所示,在这里借助参考文章里面的书写来表示:
图5
这里面用到的超参数如下:
α:需要调试
β1& β2:可以调试,但是一般不用调试,β1默认为0.9,β2默认为0.999
ε推荐值为10-8
6. 学习率衰减
要实现学习率衰减,有以下几种方法:
(1)α=(1/1+decay_rate*epoch_num)·α0
(2)α=0.95epoch_num·α0
(3)α=(k/epoch_num)·α0
(4)离散下降
7. 局部最优问题
在低维度的情形下,我们可能会想象到一个Cost function 如左图所示,存在一些局部最小值点,在初始化参数的时候,如果初始值选取的不得当,会存在陷入局部最优点的可能性。
但是,实际上如果我们建立一个神经网络,由于维度较高,通常梯度为零的点并不是如左图中的局部最优点,而是右图中的鞍点。
图6
我们这样考虑,假设参数维度为2000。那么,若是局部最优点,则要求在该点所有参数都必须是凹函数的凹点,概率为0.52000,所以概率非常低。故在高维度情况下,梯度为0多位鞍点。
在高维度情况下,若要解决这个问题,可以利用如Adam等算法进行改善。
本笔记基于DEEPLEARNING.AI中Andrew Ng课程笔记整理而成,部分内容参考了http://blog.csdn.net/koala_tree/article/details/78199611内容,在此对其表示感谢~