【1】Batch size

一般来说,在合理的范围之内,越大的 batch size 使下降方向越准确,震荡越小,这就好比决定往哪里走时参考了很多样本的意见,减少了小样本引入的随机性,但是越大的 batch size 也意味着训练时占用的显存更多。

【batch的选取类型】

Full Batch Learning全数据集学习,通常用于数据集比较小的情况,每次训练时将所有数据都送入网络中进行学习,相当于 batch size = 训练集大小,这种方式能够保证梯度下降的方向代表了整个数据集的方向,但并不适用于目前的情况,因为现在的数据集都很大。

Online Learning在线学习,是全数据集学习的另一个极端,每次只学习一个样本,即 batch size = 1,这样会学的很慢,而且每次只由一个单独的样本决定梯度的下降方向,引入了很大的随机性。

Mini-batches Learning:每次用少量的数据来计算梯度下降的方向,只要数据集足够充分,这样训练出来的梯度与全数据集学习的效果几乎是一样的。

【增大batch的好处】

  1. 训练一个 epoch 所需的迭代次数(interation)减少,对于相同的数据量,大 batch 处理速度更快;
  2. 在合适的范围内,batch 越大,下降方向越准确,引起的震荡越小;

【盲目增大batch的坏处】

  1. 内存容量撑不住;
  2. 每次迭代花费的时间增多,对参数的修正变慢,想要达到同样精度所需训练的 epoch 变多;
  3. batch 增大到一定程度,其下降方向的修正会很小(收益递减定律);

【选取策略】

  1. 首先要考虑计算资源(内存、显存)的限制,得到被允许的最大 batch 值;
  2. 考虑数据的平衡性,尽量使得一个 batch 中能够包含到各种类别的样本
  3. 观察训练过程中的 loss 曲线,很不稳定的话增加 batch 或减小 learning rate
  4. 收敛末期,可以考虑逐渐增加 batch 逐渐减小 learning rate,使得学习结果更接近局部最小值
  5. batch size 一般选择 2