batch_size设的大一些,收敛得快,也就是需要训练的次数少,准确率上升得也很稳定,但是实际使用起来精度不高。需要加大epoch数,同时将学习率增大。
batch_size设的小一些,收敛得慢,而且可能准确率来回震荡,所以还要把基础学习速率降低一些;但是实际使用起来精度较高。
What?
设置了过大的批次(batch)大小,可能会对训练时网络的准确性产生负面影响,因为它降低了梯度下降的随机性。
How?
要在可接受的训练时间内,确定最小的批次大小。一个能合理利用GPU并行性能的批次大小可能不会达到最佳的准确率,因为在有些时候,较大的批次大小可能需要训练更多迭代周期才能达到相同的正确率。
在开始时,要大胆地尝试很小的批次大小,如16、8,甚至是1。
Why?
较小的批次大小能带来有更多起伏、更随机的权重更新。这有两个积极的作用,一是能帮助训练“跳出”之前可能卡住它的局部最小值,二是能让训练在“平坦”的最小值结束,着通常会带来更好的泛化性能。
And?
数据中其他的一些要素有时也能起到批次大小的作用。
例如,以两倍大小的先前分辨率来处理图像,得到的效果与用四倍批次大小相似。
做个直观的解释,考虑在CNN网络中,每个滤波器的权重更新值将根据输入图像的所有像素点和批次中的每张图像来进行平均,将图像分辨率提高两倍,会产生一种四倍像素量同样的平均效果,与将批次大小提高四倍的做法相似。
总体来说,最重要的是要考虑到,在每次迭代中有多少决定性的梯度更新值被平均,并确保平衡好这种不利影响与充分利用GPU并行性能的需求之间的关系。