Batch, Iteration,Epoch概念理解示例
以Mnist数据集为例,Mnist数据集共有6000张训练样本。假设现在选择 Batch_Size = 100对模型进行训练。则:
整个样本被分成了:6000/100=600个Batch
每个Batch的Batch_size=100
训练一个Batch就是一次Iteration(迭代)
所有6000张图片都训练一次的过程叫一个Epoch
每个Epoch中有6000/100=600个Batch
假设训练了50个Epoch,则:
共迭代了50*600=30000次
参考:深度学习 | 三个概念:Epoch, Batch, Iteration
为什么要分成多个Batch呢?
在训练模型时,如果数据集比较大,一次性将所有样本输入去计算一次cost存储会吃不消,因此会采用一次输入一定量的样本来进行训练。 所以Batch就是指计算一次cost需要的样本个数。将每个样本都计算cost后,求平均值,就是整个Batch的cost。
遍历全部数据计算损失函数,然后算函数对各个参数的梯度,然后更新参数。这称为Batch gradient descent,批梯度下降。这种方法缺点很明显,计算量大,吃内存,不适用与在线学习。
每看一个数据就算一下损失函数,然后求梯度更新参数,这个称为随机梯度下降,stochastic gradient descent。这种方法比较快,但是由于迭代一次仅依靠单一样本,这样很容易在相邻的两次迭代计算的梯度差距非常大,甚至方向相反,因此容易不收敛。
另一种就是将上述两种方法的折中,称为mini-batch gradient decent。将数据集分成一定数量的批,梯度不容易跑偏容易收敛,同时减少了一次处理的数据数量,因而计算量也小了很多,速度较快。
参考:深度学习batch的理解
为什么训练时要用多个Epoch呢?
虽然不同的Epoch用的训练图片相同,但是模型的权重值却是完全不同的。不同代的模型处于代价函数空间上的不同位置。