这应该会有所不同,但是差异有多大在很大程度上取决于您的任务。但是,一般来说,如果以样本/分钟计算,较小的批次大小将具有较低的速度,但以批次/分钟计算具有较高的速度。如果批量太小,批量/分钟将非常低,因此会严重降低训练速度。但是,batch size 太小(例如 1)会使模型难以泛化并且收敛速度也较慢。
这张幻灯片(来源)很好地展示了批量大小如何影响训练。
从图中可以看出,当批量较小时,收敛的路径将参差不齐且不直接。这是因为模型可能会在异常值上进行训练,并在再次拟合之前降低其性能。当然,这是一个极端情况,你永远不会训练一个批量大小为 1 的模型。
另一方面,如果批量太大,您的模型每次迭代将花费太长时间。至少有一个不错的批量大小(比如 16+),训练模型所需的迭代次数是相似的,所以更大的批量大小不会有太大帮助。性能不会有太大变化。
在您的情况下,准确性会有所不同,但影响很小。在写这个答案时,我已经对批量大小对性能和时间的影响进行了一些测试,结果如下。(要添加 1 个批量大小的结果)
Batch size 256 Time required 98.50849771499634s : 0.9414
Batch size 128 Time required 108.53689193725586s : 0.9668
Batch size 64 Time required 129.92272853851318s : 0.9776
Batch size 32 Time required 162.13709354400635s : 0.9844
Batch size 16 Time required 224.82269191741943s : 0.9854
Batch size 8 Time required 351.2729814052582s : 0.9861
Batch size 4 Time required 514.2667407989502s : 0.9862
Batch size 2 Time required 829.1623721122742s : 0.9869
您可以在这个 Google Colab中测试自己。
如您所见,准确率提高了,而批大小减小了。这是因为更高的批量大小意味着它将在更少的迭代中进行训练。2x 批量大小 = 一半的迭代,所以这是意料之中的。所需时间呈指数增长,但 32 或以下的批大小似乎对所用时间没有太大影响。准确率似乎是正常的,因为一半的迭代是用两倍的批量训练的。
在你的情况下,我实际上建议你坚持使用 64 批大小,即使是 4 个 GPU。在多个 GPU 的情况下,经验法则是每个 GPU 至少使用 16 个(左右)批量大小,因为如果您使用 4 或 8 个批量大小,GPU 不能完全用于训练模型。
对于多个 GPU,由于精度误差,可能会有细微差别。请看这里。
结论
批量大小对性能没有太大影响,只要您设置合理的批量大小(16+)并保持迭代不一样。但是,训练时间会受到影响。对于多 GPU,您应该使用每个 GPU 的最小批量大小,以利用 100% 的 GPU 进行训练。每个 GPU 16 个相当不错。