梯度下降主要有以下三种:

  • batch gradient descent:即批梯度下降,其计算开销大,计算速度慢,不支持在线学习;
  • stochastic gradient descent:即随机梯度下降,收敛性能不太好,可能 hit 不到最优点;
  • mini-batch gradient descent:即小批量梯度下降,通常所说的 batch_size 指的就是这个批量的大小。

batch_size = 1 时称为在线学习。

batch_size 的选择,首先决定的是下降方向,如果数据集较小,完全可以采用全数据集的形式。

增大 batch_size 的好处:

  • 内存的利用率提高了,大矩阵乘法的并行化效率提高了;
  • 跑完一次 epoch(即全数据集)所需迭代次数减少,对于相同数据量的处理速度进一步加快;
  • 在一定范围内,batch_size 越大,其确定的下降方向就越准确,引起训练震荡越小。

盲目增大 batch_size 的坏处:

  • 当数据集太大时,内存撑不住;
  • 跑完全数据集所需迭代次数减少了,但要达到相同的精度,时间开销大,参数的修正更加缓慢;
  • batch_size 增大到一定程度,其确定的下降方向已基本不再变化。

总结:

1) batch_size 太小,而类别又比较多的时候,可能会导致 loss 函数震荡而不收敛,尤其是网络比较复杂的时候;

2) 随着 batch_size 的增大,处理相同数据量的速度越快;

3) 随着 batch_size 的增大,达到相同的精度所需的训练 epoch 数量越多;

4) 由于上述两种因素的矛盾,batch_size 增加到某个时候,达到时间上的最优;

5) 由于最终收敛精度会陷入不同的局部极值,因此,batch_size 增大到某些时候,达到最终收敛精度上的最优;

6) 过大的 batch_size 会使网络收敛到一些不好的局部最优点,同样太小的 batch_size 会使网络收敛太慢、不易收敛等;

7) 具体 batch_size 的选取和训练集的样本数目有关。