深度学习中的batch, epoch, iteration的含义
原文:https://blog.csdn.net/qq_18668137/article/details/80883350
此处谨作学习记录之用。
深度学习的优化算法,说白了就是梯度下降。每次的参数更新有两种方式。
第一种,遍历全部数据集算一次损失函数,然后计算函数对各个参数的梯度,更新梯度。这种方式每更新一次参数都要把数据集里的所有样本看一篇,计算量开销大,计算速度慢,不支持在线学习,这称为Batch gradient desecnt, 批梯度下降。
另一种,每看一个数据就算一次损失函数,然后求梯度更新参数,这个称为随机梯度下降,stochastic gradient descent。这个方法速度比较快,但是收敛性能不太好,可能在最优点附近晃来晃去,hit不到最优点。两次参数的更新也有可能互相抵消掉,造成目标函数震荡比较剧烈。
为了克服两种方法的缺点,现在一般采用的是一种折中手段, mini-batch gradient decent, 小批的梯度下降,这种方法把数据分为若干批,按批来更新参数。这样,一个批中的一组数据共同决定了本次梯度的方向,下降起来就不容易跑偏,减少了随机性。另一方面因为批的样本数与整个数据集相比少了很多,计算量也不是很大。
现在用的优化器SGD是stochastic gradient descent 的缩写,但不代表是一个样本就更新一回,还是基于mini-batch的。
那batch, epoch, iteration代表什么呢?
- batchsize:批大小。在深度学习中,一般采用SGD训练,即每次训练在训练集中取batchsize个样本训练;
- iteration:迭代。1个迭代等于使用batchsize个样本训练一次;
- epoch:1个epoch等于使用训练集中的全部样本训练一次,通俗的讲epoch的值就是整个数据集被轮回了几次。
batchsize最大是样本总数N,此时就是Full batch learning;最小是1,即每次只训练一个样本,这就是在线学习(online Learning)。当我们分批学习时,每次使用过全部训练数据完成一次Forward运算以及一次BP运算,完成了一次epoch。