Epoch,Batch,Iteration三个深度学习基本概念
进行深度学习模型训练时,总会用看到的三个概念:Epoch,Batch,Iteration
,初入AI难免会整不明白三个概念的关系,mark下,有误请大佬们指正
定义及解释
Epoch: 使用所有训练集数据对模型进行一次完整训练,称之为“一代训练”
**Batch:**使用训练集中一部分样本对模型权重进行一次反向传播的参数更新,这一部分样本称之为“一批数据”
**Iteration:**使用一个Batch数据对模型进行一次参数更新的过程,称为“一次训练”
epoch:所有训练集数据进行一次训练,也就是所有训练样本在网络中进行了一次正向传播及反向传播。但是一个epoch数据量太大也就是所有训练集数据太大,需要把它分成小块,也就是分成多个batch进行训练。
batch:整个训练集分成若干个batch
batch_size:每个batch所包含的数据大小
iteration:训练一个batch就是一次迭代
为什么使用多个epoch?
在神经网络中传递完整的数据集一次是不够的,而且我们需要将完整的数据集在同样的神经网络中传递多次。但请记住,我们使用的是有限的数据集,并且我们使用一个迭代过程即梯度下降来优化学习过程。如下图所示。因此仅仅更新一次或者说使用一个epoch是不够的。
随着epoch数量增加,神经网络中的权重的更新次数也在增加,曲线从欠拟合变得过拟合。
那么,问题来了,几个epoch才是合适的呢?
不幸的是,这个问题并没有正确的答案。对于不同的数据集,答案是不一样的。 但是数据的多样性会影响合适的epoch的数量。比如,只有黑色的猫的数据集,以及有各种颜色的猫的数据集。
换算关系:
实际上,梯度下降的几种方式的根本区别就在于上面公式中的 Batch_Size 不同。
例子:
minist数据集中有60000张图片作为训练集,100000作为测试集,假设Batch_size=100对模型进行训练,迭代30000次
- 每个 Epoch 要训练的图片数量:60000(训练集上的所有图像)
- 训练集具有的 Batch 个数:60000/100=600
- 每个 Epoch 需要完成的 Batch 个数:600
- 每个 Epoch 具有的 Iteration 个数:600(完成一个Batch训练,相当于参数迭代一次)
- 每个 Epoch中发生模型权重更新的次数: 600
- 训练 10 个Epoch后,模型权重更新的次数: 600*10=6000
- 不同Epoch的训练,其实用的是同一个训练集的数据。第1个Epoch和第10个Epoch虽然用的都是训练集的图片,但是对模型的权重更新值却是完全不同的。因为不同Epoch的模型处于代价函数空间上的不同位置,模型的训练代越靠后,越接近谷底,其代价越小。
- 总共完成30000次迭代,相当于完成了30000/600=50个Epoch
参考链接:这里