神经网络中的epoch、batch_size和iteration

一、epoch、batch_size和iteration名词解释,关系描述

  • epoch:所有的样本空间跑完一遍就是一个epoch;
  • batch_size:指的是批量大小,也就是一次训练的样本数量。我们训练的时候一般不会一次性将样本全部输入模型,而是分批次的进行训练,每一批里的样本数量就是batch_size;
  • iteration:1个iteration就是一个batch_size训练结束。

  他们之间是存在数学关系的,举个例子,假如一共有2000个样本,我设置batch_size为100,那么将所有样本训练完成1次的话,iteration就是2000/100=20个,这样就很清晰了。

二、问题思考

  通常情况下,batch_size和epoch作为超参,需要自己设定。但要明确,只有在数据很庞大的时候(在机器学习和神经网络中,数据一般情况下都会很大),我们才需要使用epoch,batch size,iteration这些术语,在这种情况下,一次性将数据输入计算机是不可能的。因此,为了解决这个问题,我们需要把数据分成小块,一块一块的传递给计算机,在每一步的末端更新神经网络的权重,拟合给定的数据。那么问题就来了:

  • batch_size设置多少比较合适呢?

   设置batch_size是会影响到我们模型的优化速度和程度的,它是在寻找一种内存效率和内存容量之间的平衡,是很重要的。那么batch_size设置为多少比较合适呢,准确的说,没有一个标准答案,需要根据自己的数据量大小来定。

     适当的增加batch_size有以下的优势:

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

      2.单次epoch的迭代次数减少,提高运行速度。

      3.适当的增加Batch_Size,梯度下降方向准确度增加,训练震动的幅度减小。

      但也要清楚地认识到:相对于正常数据集,如果batch_size过小,训练数据就会非常难收敛,从而导致underfitting。增大batch_size,相对处理速度加快。增大batch_size,      所需内存容量增加(epoch的次数需要增加以达到最好的结果)

    所以发现没有,上面两个是互相矛盾的问题,因为当epoch增加以后同样也会导致耗时增加从而速度下降。因此我们需要寻找最适合的batch_size。

  • 1个epoch不是所有的样本都跑完了吗?为什么epoch还需要设置?几个epoch才是合适的呢?

     我们跑完所有的样本确实只需要1个epoch,但是这样训练的得到的模型,它的参数却不够好,我们需要把完整的数据样本在同样的网络中跑多次(每一次的参数是不一样的哦),以使得我们的参数最优化,从而损失函数最小。随着epoch数量增加,神经网络中的权重的更新次数也在增加,曲线也从欠拟合变得过拟合,所以合适的epoch次数也是一个重要的参数。

   

三、总结

  1. epoch、batch_size、iteration都是模型的超参数,不存在最好的,只有最合适的;
  2. 他们存在数学关系,指定了epoch和batch_size就能知道iteration是多少了;
  3. 他们都与我们模型训练的最终结果密切相关,参数的最优化、训练的速度、模型的过拟合、欠拟合都或多或少有关系,所以搞清楚这几个基础概念很有必要。

猜你喜欢

转载自www.cnblogs.com/wsjgdxx/p/11962643.html