所谓Mini-batch梯度下降法就是划分训练集和测试集为等分的数个子集,比如原来有500W个样本,将其划分为5000个baby batch,每个子集中有1000个样本,然后每次对一个mini-batch进行梯度下降
mini-batch大小 = m:
极限情况下,当mini-batch的单个子集样本数量和原集合大小一致都为m时,也就是说对原样本只划分一个子集,这意味着没有划分,此时的梯度下降法为原始的Batch梯度下降
batch方法意味着每次迭代对大量的数据进行处理,这意味着在进行深度神经网络训练海量数据的时候需要花费很多很多时间,当然在数据集较小的时候这种方法很精确
mini-batch大小 = 1:
另一种极限情况下,当mini-batch的单个子集样本数量等于1的时候,也就是说对有m个样本的原集合划分m个子集的时候,此时的梯度下降法为随机梯度下降法
随机梯度下降法意味着失去了向量化运算带来的加速效果,因为基本上这就等于每次运算1个样本的数据。还有一个缺点在于,这种情况下的总体收敛方向是向中心的,但是由于每次训练某一个样本,所以会呈现波动的趋势,最终也不会收敛于极小值点,而是在极小值点附近波动。
所以综上所述,一般而言最好选择不大不小的mini-batch的大小,这会带来较好的学习速率。其原因在于mini-batch的单个子集比如1000个样本可以进行向量化运算加快单次运算的速度,其次有可能不用等待所有样本训练完毕就可以收敛,因为此时单次操作的都是每个子集。
那么,如何选择一个合适的mini-batch大小呢?
1.如果训练集较小(通常来说其样本数量m < 2000)直接使用batch,也就是说mini-batch大小等于m
2.典型的mini-batch大小:考虑到计算机运行方式将其设置为2的次方,如64、128、256、512、1024(较为少见),同时要考虑到mini-batch的大小应当小于CPU/GPU的内存(这在图片处理等占用大量存储空间的计算中很重要)
当然,在实际操作中还有一种比mini-batch表现更加高效的优化算法,稍后请参见我的day8.2博文