训练神经网络时的时代与迭代


Answers:


574

在神经网络术语中:

  • 一个历元 =一个直传和一个向后通所有的训练样本
  • 批量 =一次向前/向后传递中的训练示例数。批处理大小越高,您将需要更多的内存空间。
  • 的数目迭代 =进程数,每遍使用[批量大小]数目的实例。明确地说,一次通过=一次向前通过+一次向后通过(我们不将向前和向后计算为两个不同的通过)。

示例:如果您有1000个训练示例,并且批次大小为500,那么将需要2次迭代才能完成1个纪元。

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


“批处理”一词含糊不清:有些人用它来指定整个训练集,有些人用它来指代一次向前/向后传递中的训练示例数(就像我在此答案中所做的那样)。为了避免这种歧义并清楚地表明批次与一次向前/向后传递中的训练示例数量相对应,可以使用术语mini-batch


37
我糊涂了。您为什么要训练一个以上的时期-在所有数据上不止一次?那会导致过度拟合吗?
Soubriquet '16

29
Soubriquet神经网络通常使用迭代优化方法(大多数情况下是梯度下降)进行训练,该方法通常需要对训练集执行几次传递才能获得良好的结果。
Franck Dernoncourt '16

6
但是,如果有很多培训样本,比如说1百万美元,那么仅仅一个时期就足够了吗?如果训练量很大,人们通常会做什么?只是将训练集分成几批,只执行一个时期?
pikachuchameleon

5
@pikachuchameleon这取决于任务的复杂性:在某些情况下,一个纪元就足够了。
Franck Dernoncourt,2017年

9
@MaxPower-通常在每次迭代之后执行该步骤,这是Franck Dernoncourt的答案所暗示的;这就是我们处理反向传递的信息的方法。在每个时期m次迭代的小批量梯度下降中,我们每个时期m次更新参数。
丹·麦金莱

142

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


时代

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

迭代

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


一个例子可能会更清楚。

假设您有一个包含10个示例(或示例)的数据集。批处理大小为2,并且已指定要让算法运行3个纪元。

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


15
您能否解释一下权重是在每个时期之后还是在每次迭代之后进行更新?
继承怪胎

7
@InheritedGeek权重是在每个批次而不是时代或迭代之后更新的。
thisisbhavin

2
@bhavindhedhi 1个批处理= 1次迭代,不是吗?
蜜蜂

2
@Bee否,例如,以10000个训练样本和每批1000个样本为例,那么将需要10次迭代才能完成1个时期。
thisisbhavin

4
@bhavindhedhi,我认为Bee在问的是,在您的10000个总样本(每批次1000个)的示例中,实际上有10个总批次,等于10次迭代。我认为这是有道理的,但不确定这是否是解释它的正确方法。
Michael Du

24

许多神经网络训练算法都涉及将整个数据集多次呈现给神经网络。通常,整个数据集的单个表示形式称为“时代”。相反,某些算法一次只将一个案例提供给神经网络。

“迭代”是一个更为笼统的术语,但是由于您将其与“历元”一起提出来,因此我认为您的出处是指将单个案例呈现给神经网络。


3
太好了,您可以参考其中详细介绍的出版物吗?
亚历克斯(Alex)

17

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

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

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

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

小批是给出的数据集的一小部分小批量大小

迭代次数是算法看到的数据批处理数量(或简单来说是算法在数据集上完成的传递次数)。

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

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

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

批次梯度下降与迷你批次梯度下降

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


12

您拥有一个训练数据,可以从其中进行洗牌并从中挑选迷你批次。当您使用一个迷你批次调整权重和偏差时,您已经完成了一次迭代。迷你批次用完后,您便完成了一个纪元。然后,您再次重新整理训练数据,再次选择您的迷你批次,然后再次遍历所有批次。那将是您的第二个时代。


可以将其与交叉验证联系起来吗?
sk

8

通常,您将测试集分成小批供网络学习,然后逐步进行训练,逐步遍历您的层数,一直向下进行渐变下降。所有这些小步骤都可以称为迭代

一个时期对应于一次遍历整个网络的整个训练集。限制这一点很有用,例如,对抗过度拟合。


7

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


4
时代不是一个数字...我想这可能与措辞有关。
Nikana Reklawyks,2012年

否决该表是因为这是错误的:一个时期是情节或批次的数量,以使模型一次看到所有训练数据。
JohnAllen

7

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



5

我想在神经网络术语的上下文中:

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

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

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

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

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

例如,当您有1000个训练实例,而您想要以10个大小进行批处理时;你必须做10000/10 = 1000 次迭代才能完成一个时期。

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


3

历元是用于训练的样本子集的迭代,例如中性网络中的梯度下降算法。一个很好的参考是: 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)

看代码。对于每个时期,我们随机生成梯度下降算法的输入子集。该页还说明了为什么纪元有效。请看一下。


1

时代

对整个数据集进行全面培训,以便每个示例都可以看到一次。因此,一个纪元代表N / 批大小训练迭代,其中N是示例总数。

迭代

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

作为奖励:

批量

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

另请参阅批量大小

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


0

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.