神经网络训练中的几个概念Epoch, Batch, Iteration
前言
在读论文时一直碰到如标题的几个概念,参考网上的资料进行整理。以下是自己的一点理解,有不对的地方还请包涵。
参考地址:
https://blog.csdn.net/program_developer/article/details/78597738
https://www.jianshu.com/p/22c50ded4cf7?from=groupmessage
解释
概念 | 解释 |
---|---|
Epoch | 使用训练集的全部数据对模型进行以此完整训练,即“一代训练” |
Batch | 使用训练集中的一小部分对模型权重进行以此反向传播的参数更新 |
Iteration | 对Batch数据进行一次参数更新的过程,被称为“一次训练” |
三者关系
Epoch:时期,纪元。
一个时期=所有训练样本的一个正向传递和一个反向传递。也即所有的数据进行了一次完整的训练。当数据量十分大的时候,一次性投入训练效果往往会变差,为此需要对数据进行分批次的训练,这就引出了Batch这个概念。
Batch:一组,一批。
将训练集切分为多个Batch,每个Batch有一定的大小称为batch_size。batch_size将影响到模型的优化程度和速度。选择batch_size的大小需要兼顾内存效率和内存容量。
iteration:迭代。
迭代是重复反馈的动作,神经网络中我们希望通过迭代进行多次的训练以达到所需的目标或结果。每一次迭代得到的结果都会被作为下一次迭代的初始值。训练一个Batch就相当于参数迭代一次。
一个迭代=正向训练+反向转播。
例子
mnist 数据集有60000张图片作为训练数据,10000张图片作为测试数据。假设现在选择 Batch_Size = 100对模型进行训练。迭代30000次。
- 每个 Epoch 要训练的图片数量:60000(训练集上的所有图像)
- 训练集具有的 Batch 个数: 60000 / 100 = 600
- 每个 Epoch 需要完成的 Batch 个数:600
- 每个 Epoch 具有的 Iteration 个数:600(完成一个Batch训练,相当于参数迭代一次)
- 每个 Epoch 中发生模型权重更新的次数:600(一次训练包含正向+反向,反向就是一次权重更新)
- 训练 10 个Epoch后,模型权重更新的次数: 10 * 600 = 6000
- 总共完成30000次迭代,相当于完成了个Epoch
不同Epoch的训练,其实用的是同一个训练集的数据。第1个Epoch和第10个Epoch虽然用的都是训练集的图片,但是对模型的权重更新值却是完全不同的。因为不同Epoch的模型处于代价函数空间上的不同位置,模型的训练代越靠后,越接近谷底,其代价越小。