Batch size对神经网络训练的影响

本文主要参考知乎问题“怎么选取训练神经网络时的Batch size?”下的回答

首先摆出结论:

在CPU/GPU内存允许的前提下,batch_size不能太小,也不能太大(几千上万)。对于我们日常使用的显卡(显存4~32GB),batch_size一般设置为几十到几百,同时选取较大batch_size往往能有更好的收益。

解释:

(1)使用单个单核的CPU进行训练时,batch_size=n相对于batch_size=1来说,计算量(计算时间)提升了n倍,但训练效果(使误差降低的倍数)为sqrt(n)倍。这种情况下,batch_size增大n倍,收敛速度变为原来的sqrt(n)/n,因此batch_size越小,收敛速度越快(相同时间下收敛得更多)。但在工程上GPU具有超强的并行运算能力,跑一个样本的时间和跑几十个甚至几百个样本的时间基本相同,只要batch_size的设置不超出GPU并行运算的能力,就不存在上述问题了。这时,较大的batch_size能充分利用GPU的并行计算能力,大矩阵乘法的并行化效率提高,同时跑完一次 epoch(全数据集)所需的迭代次数减少,对于相同数据量的处理速度进一步加快。
(2)选取过小的batch_size时(如batch_size=1),每次修正方向以各自样本的梯度方向修正,横冲直撞各自为政,难以达到收敛,如下图。在一定范围内,一般来说 batch_size 越大,其确定的下降方向越准,引起训练震荡越小,模型的泛化过程更加稳定。

Batch size对神经网络训练的影响_第1张图片

(3)大的batch_size容易陷入局部最优(很少出现),这时调小batch_size能够带来更大的方差(训练噪声),同时一个epoch有更多次迭代,这样更容易跳出局部最优。
(4)由于计算机硬件本身的储存方式问题,GPU对2的幂次的batch可以发挥更佳的性能。

拓展:

批量随机梯度下降方法的原理如下,n是批量大小(batch size),η是学习率(learning rate):

n和η是分母和分子的关系,因此调大Batch Size一定程度上相当于调小学习率。

你可能感兴趣的:(深度学习基础,深度学习,神经网络)