1. Mini-batch 梯度下降法

对整个训练集进行梯度下降法的时候,我们必须处理整个训练数据集,然后才能进行一步梯度下降,即每一步梯度下降法需要对整个训练集进行一次处理,如果训练数据集很大的时候,处理速度就会非常慢。如果我们每次训练的时候只训练一小部分,则我们的算法速度会执行的更快。而处理的这些一小部分训练子集即称为Mini-batch。

整个算法的过程如图所示:

1518336484130087.jpg

图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=βvt1+(1β)θt

当β=0.9时,指数加权平均最后的结果如图2中红色线所示;

当β=0.98时,指数加权平均最后的结果如图2中绿色线所示;

当β=0.5时,指数加权平均最后的结果如下图2中黄色线所示。

1518336568122890.jpg

图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,则得到的值要远小于实际值,后面几天的情况也会由于初值引起的影响,均低于实际均值。

1518336613102055.jpg

图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所示。

1518336685103477.jpg

图4

可以看出来,这个算法确实类似于3中的算法,只不过是在每一步中的dw和db都分别做了平方,然后在最后减去的时候也做了处理。

5. Adam 优化算法

Adam 优化算法就是将 Momentum 和 RMSprop 结合起来形成的一种适用于不同深度学习结构的优化算法。

其算法过程如下所示,在这里借助参考文章里面的书写来表示:

1518336713700303.jpg

图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 如左图所示,存在一些局部最小值点,在初始化参数的时候,如果初始值选取的不得当,会存在陷入局部最优点的可能性。

但是,实际上如果我们建立一个神经网络,由于维度较高,通常梯度为零的点并不是如左图中的局部最优点,而是右图中的鞍点

1518336755390158.jpg

图6

我们这样考虑,假设参数维度为2000。那么,若是局部最优点,则要求在该点所有参数都必须是凹函数的凹点,概率为0.52000,所以概率非常低。故在高维度情况下,梯度为0多位鞍点。

在高维度情况下,若要解决这个问题,可以利用如Adam等算法进行改善。


本笔记基于DEEPLEARNING.AI中Andrew Ng课程笔记整理而成,部分内容参考了http://blog.csdn.net/koala_tree/article/details/78199611内容,在此对其表示感谢~