Batch size:一次放入模型训练的样本数,batch_size将影响到模型的优化程度和速度。
为什么要有batch size:batch size的正确选择是为了在内存效率和内存容量之间寻找最佳平衡。
相对于正常数据集,如果Batch_Size过小,训练数据就会非常难收敛,从而导致underfitting。
增大Batch_Size,相对处理速度加快,所需内存容量增加(epoch的次数需要增加以达到最好的结果)。
这里我们发现上面两个矛盾的问题,因为当epoch增加以后同样也会导致耗时增加从而速度下降。因此我们需要寻找最好的Batch_Size。
Iteration:表示1次迭代(也叫training step),1个iteration等于使用batch size个样本训练一次,每次迭代更新1次网络结构的参数。
Epoch:1个epoch等于使用训练集中的全部样本训练一次。一般来说,Epoch = Batch size * Iteration,但是,在深度学习领域中,常用带mini-batch的随机梯度下降算法(Stochastic Gradient Descent, SGD)训练深层结构,它有一个好处就是并不需要遍历全部的样本,当数据量非常大时十分有效。此时,可根据实际问题来定义epoch,例如定义1000次迭代为1个epoch,若每次迭代的batch-size设为256,那么1个epoch相当于过了256000个训练样本。
深度学习中为什么要使用多于一个epoch?
因为在神经网络中传递完整的数据集一次是不够的,而且我们需要将完整的数据集在同样的神经网络中传递多次。但请记住,我们使用的是有限的数据集,并且我们使用一个迭代过程即梯度下降来优化学习过程。如下图所示。因此仅仅更新一次或者说使用一个epoch是不够的。
随着epoch数量增加,神经网络中的权重的更新次数也在增加,曲线从欠拟合变得过拟合。
那么,问题来了,几个epoch才是合适的呢?
不幸的是,这个问题并没有正确的答案。对于不同的数据集,答案是不一样的。但是数据的多样性会影响合适的epoch的数量。比如,只有黑色的猫的数据集,以及有各种颜色的猫的数据集。