458

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

4

14 回答 14

638

在神经网络术语中:

  • 一个epoch =所有训练示例的一次前向传递和一次反向传递
  • 批量大小= 一次前向/后向传递中的训练示例数。批处理大小越大,您需要的内存空间就越多。
  • 迭代次数=传递次数,每次传递使用 [batch size] 示例数。需要明确的是,一次传球 = 一次向前传球 + 一次向后传球(我们不将向前传球和向后传球算作两次不同的传球)。

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

仅供参考:权衡批量大小与训练神经网络的迭代次数


术语“批次”是模棱两可的:有些人用它来指定整个训练集,有些人用它来指代一次前向/后向传递中的训练示例的数量(就像我在这个答案中所做的那样)。为了避免这种歧义并明确批次对应于一次前向/后向传递中的训练示例数,可以使用术语mini-batch

于 2015-08-05T21:14:23.237 回答
172

时代迭代描述了不同的事物。


时代

一个时期描述了算法看到整个数据集的次数。因此,每次算法看到数据集中的所有样本时,就完成了一个 epoch。

迭代

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


例子

一个例子可能会更清楚。

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

因此,在每个 epoch 中,您有 5 个批次 (10/2 = 5)。每个批次都通过算法,因此每个 epoch 有 5 次迭代。由于您指定了 3 个时期,因此您总共有 15 次迭代 (5*3 = 15) 用于训练。

于 2016-07-21T02:45:15.613 回答
27

许多神经网络训练算法涉及将整个数据集多次呈现给神经网络。通常,整个数据集的单个表示被称为“纪元”。相反,一些算法一次将数据呈现给神经网络一个案例。

“迭代”是一个更笼统的术语,但由于您与“时代”一起询问它,我假设您的来源是指将单个案例呈现给神经网络。

于 2011-01-21T09:17:09.397 回答
24

要了解这些之间的区别,您必须了解梯度下降算法及其变体

在我开始实际答案之前,我想建立一些背景。

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

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

Mini-batch是给定mini-batch 大小的数据集的一小部分。

迭代次数是算法已经看到的数据批次数(或者只是算法在数据集上执行的次数)。

Epochs是学习算法看到完整数据集的次数。现在,这可能不等于迭代次数,因为数据集也可以小批量处理,本质上,单遍可能只处理数据集的一部分。在这种情况下,迭代次数不等于epochs的数量。

在批量梯度下降的情况下,整个批次在每次训练过程中进行处理。因此,梯度下降优化器比 Mini-batch 梯度下降更平滑,但需要更多时间。如果存在,批量梯度下降保证找到一个最优值。

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

批量梯度下降与小批量梯度下降

批量、随机和小批量梯度下降的比较。

于 2019-04-09T12:52:02.577 回答
18

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

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

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

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

  • 迭代:(又名训练步骤)您知道您的网络必须一次性遍历所有训练实例才能完成一个 epoch。可是等等!当您将训练实例分成批次时,这意味着您只能在一次前向传递中处理一个批次(训练实例的子集),那么其他批次呢?这就是迭代一词发挥作用的地方:

  • 定义:为了完成一个 epoch(即遍历所有训练实例),您的网络必须执行的转发次数(您创建的批次数)称为迭代

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

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

于 2020-04-03T17:28:33.820 回答
14

你有训练数据,你可以洗牌并从中挑选小批量。当您使用一个小批量调整权重和偏差时,您已经完成了一次迭代。

一旦你用完你的小批量,你就完成了一个 epoch。然后你再次打乱你的训练数据,再次选择你的小批量,并再次遍历所有这些数据。那将是你的第二个时代。

于 2016-09-06T06:51:51.173 回答
9

通常,您会将测试集分成小批量供网络学习,并逐步通过您的层数进行训练,并一直应用梯度下降。所有这些小步骤都可以称为迭代

一个epoch对应于整个训练集通过整个网络一次。限制这一点可能很有用,例如对抗过度拟合。

于 2012-10-26T21:46:14.817 回答
8

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

于 2012-01-06T22:41:25.707 回答
7

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

于 2011-01-20T21:18:11.983 回答
7

我相信迭代相当于批量 SGD 中的单个批量前向+反向传播。Epoch遍历整个数据集一次(正如其他人提到的)。

于 2015-06-16T20:55:20.750 回答
5
  1. Epoch 是神经网络已经看到所有数据的 1 个完整周期。

  2. 有人可能会说 100,000 张图像来训练模型,但是,内存空间可能不足以一次处理所有图像,因此我们在称为批处理的较小数据块上拆分训练模型。例如批量大小为 100。

  3. 我们需要使用多个批次覆盖所有图像。所以我们需要 1000 次迭代才能覆盖所有 100,000 张图像。(100 批大小 * 1000 次迭代)

  4. 一旦神经网络查看了整个数据,它就被称为 1 Epoch(点 1)。一个人可能需要多个时期来训练模型。(让我们说 10 个时期)。

于 2019-09-23T22:58:25.747 回答
3

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

请注意,该页面有一个使用 epoch 的梯度下降算法的代码

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,我们随机生成梯度下降算法的输入子集。页面上还解释了为什么 epoch 有效。请看一下。

于 2015-11-20T13:18:15.643 回答
2

根据谷歌的机器学习词汇表,一个纪元被定义为

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

如果您正在训练模型10 个 epoch批大小为 6,则总共有12 个样本,这意味着:

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

  2. 总体而言,该模型将有 2 X 10 = 20 次迭代(每 epoch 的迭代次数 X no-of-epochs)

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

于 2020-12-30T05:43:21.713 回答
1

时代

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

迭代

训练期间模型权重的一次更新。迭代包括计算参数相对于单数据损失的梯度。

作为奖励:

在模型训练的一次迭代(即一次梯度 更新)中使用的一组示例。

另请参阅批量大小

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

于 2019-09-01T16:23:11.693 回答