我对批量大小的理解是越小,噪音越大,计算效率越低,但是我开发了一个模型,我使用了一个特定的数据集,我在其中尝试了不同的配置,我所能看到的是,随着批量大小的减少,准确性会变得更好(同时保持其余参数不变)。我尝试了2、4、8、16、32和64的批量大小。我预计准确度将从2提高到8,并且在其他情况下将保持稳定/振荡,但与批量减少相比的改善是完全明确的(2倍5倍交叉验证)。
我的问题是,为什么会这样?当这种情况发生时,我能对我的模型和数据集说些什么呢?
我对批量大小的理解是越小,噪音越大,计算效率越低,但是我开发了一个模型,我使用了一个特定的数据集,我在其中尝试了不同的配置,我所能看到的是,随着批量大小的减少,准确性会变得更好(同时保持其余参数不变)。我尝试了2、4、8、16、32和64的批量大小。我预计准确度将从2提高到8,并且在其他情况下将保持稳定/振荡,但与批量减少相比的改善是完全明确的(2倍5倍交叉验证)。
我的问题是,为什么会这样?当这种情况发生时,我能对我的模型和数据集说些什么呢?
2条答案
按热度按时间ioekq8ef1#
这个想法是由于 * 梯度噪声 * 而难以过拟合。但它不仅在改善。参见Analysis and Optimization of Convolutional Neural Network Architectures第59页的表5.9。如果批量太小,准确性又会降低。
zpgglvta2#
我是这样理解的。
1.当批量较小时,梯度通常较大且混乱。这是因为当批次大小为2时,数据点预测中的一个不正确的值可能导致更大的损失,而不是4(或16与32相比)。这使得模型一次更接近该特定批次的局部最优值。
1.当你训练你的模型时,你会意识到,在较少的epoch之后,准确性并没有得到任何改善,这是因为,在一段时间之后,梯度值的这些零星变化不起作用。我们需要一个更大的批量来使我们的模型更快地推广。
因此,小批量将给予快速的梯度更新,但准确性将迅速停滞。较大的批次将非常缓慢地提高准确性,但将在更长的时期内保持这样做,并且将在更长的时间内导致更好的整体准确性。
这就是为什么batch_size也是一个超参数,需要调优。
在实践中,我已经改变了batch_size mid训练以获得这些好处,但坦率地说,这几乎不值得。只需在最佳batch_size上运行epoch。