训练神经网络时的Epoch vs Iteration

在训练多层感知器时,时代迭代之间的区别是什么?

260192 次浏览

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

许多神经网络训练算法都涉及到将整个数据集多次呈现给神经网络。通常,整个数据集的单一表示被称为“epoch”。相比之下,一些算法一次只向神经网络提供一个案例的数据。

“迭代”是一个更一般的术语,但既然你和“epoch”一起问了这个词,我假设你的来源是指一个单一案例对神经网络的呈现。

根据我的理解,当你需要训练一个NN时,你需要一个包含许多数据项的大型数据集。在训练神经网络时,数据项一个一个地进入神经网络,这称为迭代;当整个数据集通过时,它被称为epoch。

通常,你会把你的测试集分成小批,让网络从中学习,并让训练在你的层数中一步一步地进行,一直应用梯度下降。所有这些小步骤都可以被称为迭代

时代对应于整个训练集遍历整个网络一次。限制这种情况是很有用的,例如对抗过拟合。

我相信迭代相当于批SGD中的单个批正+反。时代遍历整个数据集一次(正如其他人提到的那样)。

在神经网络术语中:

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

例如:如果你有1000个训练样本,你的批处理大小是500,那么将需要2次迭代来完成1个epoch。

供参考:权衡批大小和迭代次数来训练神经网络


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

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

迭代

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


例子

举个例子可能会更清楚。

假设您有一个包含10个示例(或样本)的数据集。批处理大小为2,并指定算法运行3个epoch。

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

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

一旦你用完了你的小批,你就完成了一个纪元。然后你再次洗牌你的训练数据,再次选择你的小批量,并再次遍历它们。那将是你的第二个纪元。

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

在我开始回答这个问题之前,我想先了解一下背景。

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

mini-batch大小是学习算法在单次传递(向前和向后)中处理的示例数。

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

迭代是算法已经看到的数据批次的数量(或者简单地说,算法已经在数据集上完成的次数)。

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

在批处理梯度下降的情况下,整个批处理在每个训练通过。因此,梯度下降优化器的收敛比Mini-batch梯度下降更平滑,但需要更多的时间。如果存在最优条件,分批梯度下降法保证能找到最优条件。

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

批量梯度下降vs迷你批量梯度下降

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

epoch

一个完整的训练遍历整个数据集,使得每个 例子已经见过一次了。因此,epoch表示N/批处理 size训练迭代,其中N是训练的总数 例子。< / p >

迭代

在训练过程中对模型权重的一次更新。 迭代包括计算参数的梯度 对于单个批处理上的数据丢失

奖金:

batch

一个迭代(即一个梯度中使用的示例集

. update) 模型训练

另见批量大小

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

  1. Epoch是一个完整的周期,神经网络已经看到了所有的数据。

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

  3. 我们需要使用多个批次来覆盖所有的图像。所以我们将需要1000次迭代来覆盖所有10万张图像。(100批* 1000次迭代)

  4. 一旦神经网络查看整个数据,它被称为1 Epoch(点1)。一个人可能需要多个Epoch来训练模型。(假设是10个时代)。

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

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

为了定义迭代 (a.k.a 步骤),你首先需要知道批量大小:

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

  • 你知道为了完成一个epoch,你的网络必须在一次传递中遍历所有的训练实例。但是等等!当你把你的训练实例分成批次时,这意味着你在一次向前传递中只能处理一个批处理(训练实例的一个子集),那么其他批次呢?这就是术语迭代发挥作用的地方:

  • 为了完成一个epoch(即,遍历所有训练实例),你的网络必须做的转发传递的数量(你已经创建的批次的数量)被称为迭代

例如,当你有10,000个训练实例并且你想用10的大小来做批处理;你必须做10000 /10 = 1000 迭代来完成1 时代

希望这能回答你的问题!

根据谷歌的机器学习术语,一个epoch被定义为

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

如果你正在用批量6训练10世纪模型,给定总的12个样品,这意味着:

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

  2. 总的来说,模型将有2 X 10 = 20个迭代(每个epoch的迭代X no-of-epoch)

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