1.Gradient Decent
把所有的训练样本丢进去训练一次之后,把W和b更新一次,然后重复这个过程,具体重复多少次就看我们的“迭代次数”是多少。
“把所有训练样本过一遍”为一个epoch
2. Mini-batch GD
我们训练的时候,跑完一个mini-batch就把W和b更新一次,这样的的话,在一个epoch中,我们就已经把参数更新了多次了!虽然每一步没有batch GD的一步走的准,但是我多步加起来,怎么样也比你走一步的效果好的多,因此可以加快训练速度,更快到达最值点。
对于不同的mini-batch的大小(size),也有不一样的效果:
size=样本数 —> Batch GD
size=1 —> Stochastic GD(随机梯度下降)
size=1的时候,会有两个问题:
1)震动太剧烈,误差会灰常大,可能根本无法到达最低点
2)每次只计算一个样本,就失去了我们前面提到的“Vectorization(矢量化)”的优势,因此计算效率反而不高
mini-batch size通常取2的指数,主要是16,32,64,128,256,512,1024这几个值,因为计算机是二进制,这样的数字计算起来效率会更高一些
3. Momentum 动量法
使用mini-batch之后,稳定性降低了,在梯度下降的时候会有较为剧烈的振动,这样可能导致在最低点附近瞎晃悠,因此效果会受影响。
一般的梯度下降的更新过程(以W为例)是:W = W -α*dW。
动量法相当于多了一个V_dW,它考虑了前面若干个dW,(实际上,V_dW约等于前1/(1-β)个dW的平均值,数学上称为“指数加权平均”)这样,dW的方向就会受到前面若干个dW的冲击,于是整体就变得更平缓。
mini-batch是上下起伏不定的箭头,但是把若干个的方向平均一下,就变得平缓多了,相当于抵消掉了很多的方向相反的误差
超参数β一般取0.9
4. Adam算法
对momentum再进一步改进,结合了RMSprop算法(是另一种减小梯度下降振动的方法),更新过程如下:
在learning-rate太小以及数据集比较简单的情况下momentum发挥不了太大的作用
Adam算法中的超参数β1和β2以及learning-rate也会显著影响模型,因此需要我们反复调试
一般β1=0.9和β2=0.999
【1】优化算法