训练神经网络时的Epoch vs Iteration

时间:2011-01-20 21:11:16

标签: machine-learning neural-network deep-learning artificial-intelligence terminology

训练多层感知器时 epoch 迭代有什么区别?

14 个答案:

答案 0 :(得分:514)

在神经网络术语中:

  • 一个纪元 =一个向前传递和一个向后传递所有训练示例
  • 批量大小 =一次前进/后退传递中的训练示例数。批量大小越大,您需要的内存空间就越大。
  • 迭代次数 =次数,每次使用[批量大小]数量的示例。需要说明的是,一次传球=一次前传+一次后传(我们不计算前传和后传两种不同的传球)。

示例:如果您有1000个训练样例,并且批量大小为500,则需要2次迭代才能完成1个时期。

仅供参考:Tradeoff batch size vs. number of iterations to train a neural network

术语"批次"模糊不清:有些人用它来指定整个训练集,有些人用它来指代一个前进/后退传递中训练样例的数量(正如我在这个答案中所做的那样)。为了避免这种模糊性并明确批次对应于一个前向/后向传递中的训练样例的数量,可以使用术语小批量

答案 1 :(得分:121)

Epoch 迭代描述不同的事物。

历元

纪元描述算法查看整个数据集的次数。因此,每次算法查看数据集中的所有样本时,都会完成一个纪元。

迭代

迭代描述了通过算法传递的数据的次数。在神经网络的情况下,这意味着正向传递向后传递。因此,每次通过NN传递一批数据时,您都完成了迭代

实施例

一个例子可能会让它更清晰。

假设您有10个示例(或示例)的数据集。批量大小为2,并且您已指定希望算法运行3个时期。

因此,在每个时代,你有5批(10/2 = 5)。每个批次都通过算法,因此每个时期有5次迭代。 由于您已经指定了3个时期,因此您总共需要15次迭代(5 * 3 = 15)进行训练。

答案 2 :(得分:20)

许多神经网络训练算法涉及将整个数据集多次呈现给神经网络。通常,整个数据集的单个呈现被称为“时期”。相比之下,一些算法一次将单个案例的数据呈现给神经网络。

“迭代”是一个更通用的术语,但由于你与“epoch”一起询问它,我认为你的来源是指将一个案例呈现给神经网络。

答案 3 :(得分:11)

你有一个训练数据,你可以随机抽取并从中挑选小批量。当您使用一个小批量调整权重和偏差时,您已完成一次迭代。一旦你用完了迷你批次,你就完成了一个时代。然后你再次洗牌你的训练数据,再次选择你的迷你批次,并再次遍历所有这些。那将是你的第二个时代。

答案 4 :(得分:11)

我猜是在神经网络术语的背景下

  • Epoch::当您的网络最终遍历整个训练集(即每个训练实例一次)时,它便完成了一个时期。

要定义迭代(又称​​步骤),您首先需要了解批量大小

  • 批处理大小::您可能不希望一次向前处理整个训练实例,因为它效率低下并且需要大量内存。因此,通常要做的是将训练实例分成子集(即批次),对所选子集(即批次)执行一次传递,然后通过反向传播优化网络。子集(即批处理)中训练实例的数量称为 batch_size

  • 迭代:(又称训练步骤),您知道您的网络必须一次通过所有训练实例才能完成一个纪元。可是等等!当您将训练实例分为几批时,这意味着您只能在一个正向传递中处理一个 batch (训练实例的子集),那么其他批次呢?这是术语迭代起作用的地方:

  • 定义:为了完成一个纪元(即遍历所有训练实例),网络必须进行的前向通过次数(已创建的批次数) )称为迭代

例如,当您有10000个训练实例,并且您想进行大小为10的批处理时;您必须完成10000/10 = 1000个迭代次数才能完成1个 epoch

希望这可以回答您的问题!

答案 5 :(得分:8)

通常情况下,您可以将测试集分成小批量供网络学习,并使训练逐步完成您的层数,逐渐应用渐变下降。所有这些小步骤都可以称为迭代

epoch 对应于整个网络一次的整个训练集。限制这种情况可能很有用,例如:打击过度拟合。

答案 6 :(得分:7)

据我了解,当您需要训练NN时,您需要一个涉及许多数据项的大型数据集。当NN正在训练时,数据项逐个进入NN,称为迭代;当整个数据集通过时,它被称为一个纪元。

答案 7 :(得分:6)

一个纪元包含一些迭代。这实际上就是这个'时代'。让我们将'epoch'定义为数据集上的迭代次数,以便训练神经网络。

答案 8 :(得分:5)

我相信迭代相当于批量SGD中的单批前向+后推。 Epoch正在经历整个数据集一次(正如其他人提到的那样)。

答案 9 :(得分:3)

epoch是用于训练的样本子集的迭代,例如,中性网络中的梯度下降算法。一个很好的参考是:http://neuralnetworksanddeeplearning.com/chap1.html

请注意,该页面包含使用纪元

的梯度下降算法的代码
def SGD(self, training_data, epochs, mini_batch_size, eta,
        test_data=None):
    """Train the neural network using mini-batch stochastic
    gradient descent.  The "training_data" is a list of tuples
    "(x, y)" representing the training inputs and the desired
    outputs.  The other non-optional parameters are
    self-explanatory.  If "test_data" is provided then the
    network will be evaluated against the test data after each
    epoch, and partial progress printed out.  This is useful for
    tracking progress, but slows things down substantially."""
    if test_data: n_test = len(test_data)
    n = len(training_data)
    for j in xrange(epochs):
        random.shuffle(training_data)
        mini_batches = [
            training_data[k:k+mini_batch_size]
            for k in xrange(0, n, mini_batch_size)]
        for mini_batch in mini_batches:
            self.update_mini_batch(mini_batch, eta)
        if test_data:
            print "Epoch {0}: {1} / {2}".format(
                j, self.evaluate(test_data), n_test)
        else:
            print "Epoch {0} complete".format(j)

查看代码。对于每个时期,我们随机生成梯度下降算法的输入子集。为什么epoch有效也在页面中解释。请看一下。

答案 10 :(得分:3)

要了解它们之间的区别,您必须了解Gradient Descent Algorithm and its Variants

在开始实际答案之前,我想先了解一下背景。

批处理是完整的数据集。它的大小是可用数据集中训练示例的总数。

最小批量大小是学习算法在一次遍历中(向前和向后)处理的示例数。

小批量是给定的小批量数据集的一小部分。

迭代次数是该算法已查看的数据批次数(或简单来说是该算法对数据集执行的传递次数)。

时期是学习算法看到完整数据集的次数。现在,这可能不等于迭代次数,因为该数据集也可以分批处理,实际上,单次通过可能只处理数据集的一部分。 在这种情况下,迭代次数不等于时期

在批次梯度下降的情况下,整个批次将在每个训练遍上进行处理。因此,梯度下降优化器的收敛性比Mini-batch梯度下降更平滑,但是花费的时间更多。如果存在,则可以确保批次梯度下降找到最佳值。

随机梯度下降是迷你批量梯度下降的一种特殊情况,其中迷你批量大小 1

Batch gradient descent vs Mini-batch gradient descent

Comparison of batch, stochastic and mini-batch gradient descents.

答案 11 :(得分:1)

根据Google's Machine Learning Glossary,一个时期被定义为

"对整个数据集进行一次完整的训练,这样每个示例都被看过一次。因此,一个时期代表 N/batch_size 次训练迭代,其中 N 是示例的总数。 "

如果您使用批量大小 6 训练 10 个时期的模型,则给定总共 12 个样本,这意味着:

  1. 模型将能够在 2 次迭代 (12 / 6 = 2) 中看到整个数据集,即单个时期。

  2. 总体而言,该模型将有 2 X 10 = 20 次迭代(每轮迭代次数 X 没有轮次)

  3. 每次迭代后都会重新评估损失和模型参数!

答案 12 :(得分:0)

  

epoch

     

对整个数据集进行全面培训,以便每个   例子已经见过一次。因此,一个纪元代表N / batch size个训练iterations,其中N是   例子。

     

iteration

     

训练期间模型权重的单个更新。   迭代包括计算参数的梯度   关于单个batch数据的丢失。

作为奖励:

  

batch

     

一个iteration(即一个gradient)中使用的示例集   更新)model training

     

另请参阅batch size

来源:https://developers.google.com/machine-learning/glossary/

答案 13 :(得分:0)

1.Epoch是一个完整的周期,其中神经网络已经查看了所有数据。
2.一个人可能说有100,000张图像来训练模型,但是内存空间可能不足以一次处理所有图像,因此我们将训练模型分成称为批处理的较小数据块。例如批处理大小为100。
3.我们需要使用多个批次覆盖所有图像。因此,我们将需要1000次迭代才能覆盖所有100,000张图像。 (100批* 1000次迭代)
4.神经网络查看完所有数据后,将其称为1历元(点1)。一个人可能需要多个时期来训练模型。 (让我们说10个纪元)。