Epoch、Iteration、batch_size的区别

最近发现一个比较扯的事情,大家都在谈AI、深度学习、model training,可当坐下来交流的时候,却连一些最基本的概念都搞不清楚。印证了大数据时代的一句老话,“Big Data is like teenage sex: Everyone talks about it, nobody really knows how to do it, everyone thinks everyone else is doing it, so everyone claims they are doing it too”。

会英语的请直接参考:
https://towardsdatascience.com/epoch-vs-iterations-vs-batch-size-4dfb9c7ce9c9
https://machinelearningmastery.com/gentle-introduction-mini-batch-gradient-descent-configure-batch-size/

Epoch

Epoch:指在训练过程中对整个数据集进行一次forward和backward过程。

请注意,这里说的“整个数据”是一个相对的概念,对于小规模的数据集,所有数据都会用于训练,那么就是所有数据;而对于大规模的数据集,比如ImageNet,我们在训练时只用了其中的10W张图片,那么10W张就是一个epoch。

在网络训练的时候,我们需要对训练集进行多次训练,也就说Epoch more than once。如果Epoch次数过少,那么模型会欠拟合(underfitting);如果Epoch次数过多,那么模型会过拟合(overfitting)。至于具体Epoch值设多少,没有标准答案,跟数据集大小、模型的网络深度都有关系。

Batch Size

Batch Size:一个Batch中的训练样本数(training examples)

请注意,Batch Size 和 the number of batchs完全是两个不同的概念。

根据Batch Size数的不同,会有不同的梯度下降法:
Batch_size = 1 –> Stochastic Gradient Descent
Batch_size = fixed number (8,16,32) –> Mini-Batch Gradient Descent
Batch_size = the total number of all examples –> Batch Gradient Descent

Batch又是什么意思呢?batch可以理解为sets/parts,整个数据集分成N个子集/部分,某个子集就是batch。

Iterations

Iterations:一个Epoch中包含Batch的个数,等于The number of batchs。

也就是说,根据既定的batch size,完成一个Epoch所需要的次数。

举个栗子

假设我的训练集中总样本数为2048、Batch_size=128,那么我需要迭代(Iterations)20次才能完成一个Epoch。