Mini-batch
当采用mini-batch时,cost function持续减小,但是cost function减小的并不完全平坦,因为每个batch可能带来不同的下降方向和大小。
当batch size 减小为1时,退化为SGD,此时将会丢失向量化处理的优势;
当batch size增大到m时,此时为batch gradient descent,此时每次循环将会需要很长时间。
相反如果采用mini-batch时,不仅能够利用向量化处理的优点,而且在不同时处理整个数据集时取得不错的效果。
一般的mini-batch的大小为64/128/256/512(2的次方)。
实践中的mini-batch包括shuffle和partition两步,同时还需要考虑到最后一个batch的数量小于mini_batch_size的情况:
num_complete_minibatches=math.floor(m/mini_batch_size)
优化
优化算法之前讨论两个问题:
1. 局部最小值问题。在深度学习中,最优化问题其实并不容易困在局部最小值点。在高维度空间时(如20000维),局部最小值点需要在所有维度上都取得最小值,概率为,反而更容易困在鞍点处。
反而是平稳端(plateaus)也会使得学习变慢,因此可以通过学习率衰减例如Adam或者RMSProp加速学习。
2. 指数加权(移动)平均(Exponentially Weighted (moving) average)
在数据抖动较大的情况下,如果希望利用之前的整体变化趋势,可以对每个时刻的数据进行平滑处理,即指数加权移动平均,一般形式为:
其中数据
为什么是前
作业
Momentum
采用指数加权平均的动量方式加速训练,每一层需要初始化v(velocity),然后再在每一层进行梯度下降:
如何选择参数beta?
Adam
由于采用指数加权平均的初始化过程中存在初始阶段的偏值,因此添加了偏置修正(bias correction)的Adam参数更新如下:
参数更新的时候,注意此时一般的beta1取0.9,beta2取0.999:
最后通过比较梯度下降(Mini-batch SGD)、Momentum、Adam在分类上的效果,得出如下结论:
Adam的优势:
1. 相对较小的存储要求(利用指数加权平均的方式不需要存储过去时间的数据)
2. 微调也能得到很好的效果