Epoch、Batch Size和Iterations

我想在你身上一定发生过这样的情况吧:你感觉Epoch, Batch Size和Iteration这三个参数很相似却又分不清它们,只能坐在电脑前挠头想到:“为什么我要在代码里写这三种术语呢?他们究竟有什么不同?”

为了找出这三个术语之间的不同,你需要通过学习像梯度下降这样的一些机器学习术语来帮助你理解。

下面简单介绍一下梯度下降。

梯度下降

下图显示的是一个在机器学习中使用的通过迭代优化算法来找最佳结果(本例中也就是曲线的最小值)的例子。

首先梯度的含义相当于曲线的斜率或者是斜坡的坡度这样的概念,下降表示的是代价函数值的下降。

迭代优化算法中的“迭代”的意思是我们需要不断调用算法多次获取结果来得到最优的结果。好的梯度下降的迭代质量能够帮助优化一个欠拟合的图形,使其更加适应数据。


参见我翻译的另一篇文章机器学习简介

梯度下降有一个参数叫做学习率。如上图左所示,刚开始的时候步长比较大意味着学习率也比较高,随着图中黑色点的下移,学习率变得越来越小,从而步长也变得越来越短。同时,成本函数或者说成本值也在不断下降。有时候,人们会说,损失函数或者损失值在下降,其实,成本(Cost)和损失(Lost)在这里代表同样的意思(顺便需要说明的是,成本/损失的减少是件好事)。

只有在数据量很大以至于我们不能够一次性将所有数据输入到计算机中时,我们才需要使用到epochs、batch_size、iterations这几个概念,而这种情况在机器学习中是时常发生的。因此,为了解决这个问题,我们需要将数据分成一小份一小份的,并将它们一个个输入计算机,并在每一步结束更新神经网络的权重来拟合给定的数据。

Epochs

当一个数据集前向通过神经网络并反向通过神经网络一次,这个过程被称作一个Epoch。

因此,当一个数据集太大而不能一次性通过神经网络时,我们将它分为多个batch。

为什么我们要使用多个Epoch?

我想刚开始听到下面的说法也许大家会觉得很奇怪,就是将一个完整的数据集向神经网络中输入仅一次是不够的,我们需要将这个数据集反复传递给神经网络。但是各位需要明白的是,正因为我们所能够使用的数据集是有限的,仅靠一次输入数据的过程或者说一个epoch是不能够建立好模型的,所以我们才需要多次传递数据给神经网络,在此基础上利用梯度下降也就是一个迭代的过程来优化学习过程和网络图。


如上图所示,随着epoch数量的增加,神经网络中的权重也随之改变,曲线拟合的函数也从欠拟合最适宜的再到过拟合的

那么,最合适的epoch数量是多少呢?

不幸的是,这个问题没有正确的答案。不同数据集适合不同的epoch数量,但epoch的数量与数据集的多样性是相关的,比如,只有黑猫的数据集和有多种颜色的猫的数据集适合的epoch数量一般是不同的。

Batch Size

在一个batch中训练样本的数量。

注意:batch sizenumber of batches是不一样的概念。

但是什么是一个batch呢?

正如前文所说,在不能一次性将一个完整的数据集输入给神经网络时,就需要将数据集划分成多个batch

这就正如我将本篇文章分为Introduction、Gradient descent、Epoch、Batch size和Iterations这几部分,以使读者更容易阅读一样。大笑

Iterations

想要了解Iterations,你只需要知道乘法表或者拥有一个计算器就行啦。吐舌头

迭代是完成一个epoch需要的batch数量(number of batches)。

注意:对于一个epoch而言,number of batches和number of iterations是一样的。

假设我们有一个具有2000个样本的训练集。

那么我们可以将这2000个样本分成4份有500个样本大小的batch,那么number of batches和number of iterations就都为4,而batch size为500,这2000个样本完整地通过神经网络一次的过程就是一个epoch。


本篇翻译原文链接https://towardsdatascience.com/epoch-vs-iterations-vs-batch-size-4dfb9c7ce9c9,有翻译不对的地方欢迎各位读者批评指正。


猜你喜欢

转载自blog.csdn.net/hfutdog/article/details/81051270
今日推荐