【1】Batch size
一般来说,在合理的范围之内,越大的 batch size 使下降方向越准确,震荡越小,这就好比决定往哪里走时参考了很多样本的意见,减少了小样本引入的随机性,但是越大的 batch size 也意味着训练时占用的显存更多。
【batch的选取类型】
Full Batch Learning:全数据集学习,通常用于数据集比较小的情况,每次训练时将所有数据都送入网络中进行学习,相当于 batch size = 训练集大小,这种方式能够保证梯度下降的方向代表了整个数据集的方向,但并不适用于目前的情况,因为现在的数据集都很大。
Online Learning:在线学习,是全数据集学习的另一个极端,每次只学习一个样本,即 batch size = 1,这样会学的很慢,而且每次只由一个单独的样本决定梯度的下降方向,引入了很大的随机性。
Mini-batches Learning:每次用少量的数据来计算梯度下降的方向,只要数据集足够充分,这样训练出来的梯度与全数据集学习的效果几乎是一样的。
【增大batch的好处】
- 训练一个 epoch 所需的迭代次数(interation)减少,对于相同的数据量,大 batch 处理速度更快;
- 在合适的范围内,batch 越大,下降方向越准确,引起的震荡越小;
【盲目增大batch的坏处】
- 内存容量撑不住;
- 每次迭代花费的时间增多,对参数的修正变慢,想要达到同样精度所需训练的 epoch 变多;
- batch 增大到一定程度,其下降方向的修正会很小(收益递减定律);
【选取策略】
- 首先要考虑计算资源(内存、显存)的限制,得到被允许的最大 batch 值;
- 考虑数据的平衡性,尽量使得一个 batch 中能够包含到各种类别的样本
- 观察训练过程中的 loss 曲线,很不稳定的话增加 batch 或减小 learning rate
- 收敛末期,可以考虑逐渐增加 batch 逐渐减小 learning rate,使得学习结果更接近局部最小值
- batch size 一般选择 2