内容主要摘录并汇总自参考资料中的文章。
batchsize(BS)是模型训练过程中非常重要的一个超参数,其直接或者间接地影响着模型的训练速度和收敛速度。另外,在计算机视觉模型中,常用的归一化方法BN与其也有着直接的关联,因而也极大的影响着模型的表现。
不考虑BN
对时间的影响
简单而言,单次迭代时使用的BS增大,会增加每次迭代时的数据处理时间、数据传输时间和运算的时间,进而影响着总体的时间。
- 如果按照epoch的计数方式(目标检测、分类中的常用设定),那么总体epoch不变的情况下,一般而言出于GPU计算的并行优势,整体训练时长可能会有所减少。
- 如果按照iteration的计数方式(语义分割中的常用设定),那么总体iteration不变的情况下,由于单次迭代时间加长了,整体的训练时长也会随之延长。
当然,如果考虑到更大的BS会带来更准确的梯度估计,收敛的速度可能会加快,这时或许也应该随之改变训练的总体迭代数。如果考虑这一点,那么整体的训练时长就不太好量化对比了。
对梯度的影响
BS的大小对于梯度的估计也有这直接的影响。
现有框架在反向传播计算梯度时,默认流程都是直接将每个批次中各个样本的损失平均之后反传计算,所以BS的大小也影响着迭代之间的梯度平滑的程度。
- BS太小,相邻批次差异相对过大,相邻两次迭代的梯度震荡情况会比较严重,不利于模型收敛。这个时候一般要将学习率设置的小一点,以避免因为异常值的出现严重扰动到训练过程,即在不太准确的方向上走的谨慎些。
- BS越大,降低了梯度里的噪声,相邻批次差异相对越小,梯度震荡情况会比较小,一定程度上利于模型收敛。这个时候一般可以将学习率设置的大一点,因为此时的梯度方向相对稳定,大的学习率可以加速收敛,即在正确的方向可以走的更快些。
- 但是从另一个角度来看,更大的BS也会随之减弱梯度更新中的随机性,具体表现为泛化性变差和收敛变慢。一般采用线性放缩规则,等效增加学习率并配合学习率预热来弥补收敛和泛化性上的差距。
- BS极大,相邻批次差异就会过小,相邻两次迭代的梯度没有区别,整个训练过程就会沿着一个方向进行,很容易陷入到局部最小值出不来。
模型的收敛快慢取决于梯度方向和更新次数,所以对于过大的BS,可能仍然需要足够的迭代数才会获得较好的收敛效果,这一点可以参考结尾文章中的实验分析。