我们知道,简单来说,深度学习就是很深很深的神经网络(这一说法并不准确,但姑且让我们这么说),也就是说,有很多层,每层可能有很多神经元,结构也可能比较复杂。然后相应的,数据集也可能比较大。那跑一遍(迭代)会比较慢。所以人们就想出了一个变通的办法,就是每次只使用数据集中的部分样本,这个数目就称为batch_size.
虽然只使用了部分样本,但很多时候已经足以优化权重,降低损失函数了。这样训练效率高很多,训练时间也能缩短不少。
不过这样一来,一次迭代就不一定完整跑遍数据集中的所有样本了。那在比较的时候,就不太方便直接比较迭代次数了。
比如,假设深度神经网络A经过32次迭代损失函数的值足够低了,而深度神经网络B经过16次迭代损失函数的值足够低了,但实际上,A的batch size可能是256,而B的batch size可能是2048。所以直接比较A和B的迭代次数并没有什么意义。
所以就又提出了epoch这个概念,指数据集中的所有样本都跑一遍。
假设训练集中有2000个样本,把训练集的2000个样本一个不漏地输入到模型中,让模型进行学习,即为1个epoch;训练的时候2000个样本太多了,分小一点,若分成10份,则batch=10;batch_size=2000/10=200;此时,每次输入到模型的样本数为batch_size大小,即每一次输入200个样本;每输入一个batch_size大小的样本,模型则学习一次,更新一次参数,即一个iteration/step。
总结:
- epoch:所有的训练集输入到模型完整地训练一遍
- batch: 模型训练时,往往不是一次性把所有的训练集输入到模型中,而是把训练集分成较小的批,即分成一个个的batch
- batch_size: batch的大小
- iteration/step: 一个iteration/step,更新一次参数权重,即进行一次学习,每一次更新参数需要batch_size个样本进行运算学习,根据运算结果调整更新一次参数。