深度学习之神经网络中的Epoch、Iteration、Batchsize

自己平时在训练的过程中老是对于这些概念的混淆。就整理如下。
1、batch-size
batch-size :即批次的大小,也就是一次训练选取的样本的个数。
batch-size的大小对模型的优化和速度有着影响,尤其是GPU的个数不多时,最好不要把数值设置的很大。
在设置的过程中最好使用2的倍数,因为计算机的内存为2的指数倍,采用2进制编码。
batch-size的正确选择就是为了在内存效率和内存容量之间寻找最佳平衡。在这里插入图片描述

上图中的表示为:
①、全批次(蓝色),当数据集的数量比较少的时候,我们可以采用全数据集,全数据集确定的方向能够更好的代表样本总体,从而更准确的朝向极值所在的方向。就跟神经网络一样,能使用全连接最好,但是对于较大的数据集,全连接会出现很多问题,消耗内存大\速度慢。
②、迷你批次(绿色),选择一个适中的batch-size。就是说我们选定一个batch的大小后,将会以batch的大小将数据输入到深度学习网络中,然后计算这个batch的所有样本的平均损失,即代价函数是所有样本的平均。
③、随机(batch-size等于1的情况)(红色)每次修正方向以格子样本的梯度方向修正,横冲直撞各自为政,难以达到收敛。
适当的增加Batch_Size的优点:

1.通过并行化提高内存利用率。

2.单次epoch的迭代次数减少,提高运行速度。(单次epoch=(全部训练样本/batchsize)/iteration=1)

3.适当的增加Batch_Size,梯度下降方向准确度增加,训练震动的幅度减小。(看上图便可晓得)

经验总结:

相对于正常数据集,如果Batch_Size过小,训练数据就会非常难收敛,从而导致underfitting。

增大Batch_Size,相对处理速度加快。

增大Batch_Size,所需内存容量增加(epoch的次数需要增加以达到最好的结果)

这里我们发现上面两个矛盾的问题,因为当epoch增加以后同样也会导致耗时增加从而速度下降。因此我们需要寻找最好的Batch_Size。

2.epoch
1个epoch指用训练集中的全部样本训练一次,此时相当于batchsize 等于训练集的样本数。

什么是epoch?

答:epoch数是一个超参数,它定义了学习算法在整个训练数据集中的工作次数。一个Epoch意味着训练数据集中的每个样本都有机会更新内部模型参数。epoch由一个或多个batch组成, 具有一批的epoch称为批量梯度下降学习算法。您可以将for循环放在每个需要遍历训练数据集的epoch上,在这个for循环中是另一个嵌套的for循环,它遍历每批样本,其中一个批次具有指定的“批量大小”样本数。

当一个完整的数据集通过了神经网络一次并且返回了一次,这个过程称为一次epoch。然而,当一个epoch对于计算机而言太庞大的时候,就需要把它分成多个小块。

为什么要使用多于一个epoch?

在神经网络中传递完整的数据集一次是不够的,而且我们需要将完整的数据集在同样的神经网络中传递多次。但请记住,我们使用的是有限的数据集,并且我们使用一个迭代过程即梯度下降来优化学习过程。如下图所示。因此仅仅更新一次或者说使用一个epoch是不够的。

随着epoch数量增加,神经网络中的权重的更新次数也在增加,曲线从欠拟合变得过拟合。

3.iteration

1个iteration即迭代一次,也就是用batchsize个样本训练一次。

迭代是重复反馈的动作,神经网络中我们希望通过迭代进行多次的训练以到达所需的目标或结果

iteration:中文翻译为迭代,1个iteration等于使用batchsize个样本训练一次;一个迭代 = 一个正向通过+一个反向通过

epoch:迭代次数,1个epoch等于使用训练集中的全部样本训练一次;一个epoch = 所有训练样本的一个正向传递和一个反向传递

举个例子,训练集有1000个样本,batchsize=10,那么:训练完整个样本集需要:100次iteration,1次epoch。