神经网络中的批量大小是多少?


174

我正在使用Python Keras package神经网络。这是链接。是batch_size等于测试样品的数量?从维基百科,我们可以获得以下信息:

但是,在其他情况下,求和梯度可能需要对所有求和函数的梯度进行昂贵的求值。当训练集庞大且不存在简单公式时,评估梯度之和变得非常昂贵,因为评估梯度需要评估所有求和函数的梯度。为了节省每次迭代的计算成本,随机梯度下降在每一步都采样了求和函数的子集。这在大规模机器学习问题的情况下非常有效。

以上信息描述的是测试数据?这与batch_sizekeras中相同(每个梯度更新的样本数)吗?


3
很高兴看到class.coursera.org/ml-005/lecture/preview课程,特别是对于您4-6岁10周。维基百科对于学习神经网络可能不是那么有价值的资源。
404pio

Answers:


228

批量大小定义了将通过网络传播的样本的数目。

例如,假设您有1050个训练样本,而您想要设置一个batch_size等于100的样本。该算法从训练数据集中获取前100个样本(从第1到第100个样本)并训练网络。接下来,它获取第二个100个样本(从101到200)并再次训练网络。在我们通过网络传播所有样本之前,我们可以继续执行此过程。最后一组样本可能会出现问题。在我们的示例中,我们使用了1050,它不能被100整除而没有余数。最简单的解决方案是仅获取最终的50个样本并训练网络。

使用批量大小<所有样本数的优势:

  • 它需要较少的内存。由于您使用较少的样本训练网络,因此整个训练过程需要较少的内存。如果您无法将整个数据集放入计算机内存中,则这一点尤其重要。

  • 通常,使用小批量生产时,网络训练速度更快。这是因为我们在每次传播后都会更新权重。在我们的示例中,我们传播了11个批次(其中10个批次包含100个样本,1个批次包含50个样本),并且在每个批次之后,我们都更新了网络的参数。如果我们在传播过程中使用了所有样本,我们将仅对网络参数进行1次更新。

使用批次大小<所有样本数的缺点:

  • 批次越小,梯度估计的准确性越差。在下图中,您可以看到小批量梯度(绿色)的方向与完整批梯度(蓝色)的方向相比波动更大。

不同批次设置的渐变方向

随机只是一个batch_size等于1 的小批量。在这种情况下,梯度的方向甚至比小批量梯度更频繁地更改其方向。


谢谢你的答案。你一起工作Keras吗?无论如何在这个包中设置测试数据?
user2991243

3
不,我没有。这是神经网络中的流行技术,您可以在不同的库,书籍和文章中看到此术语。您是否要在每个时期检查测试数据错误或只是在训练后验证模型?
itdxer 2015年

是。确实如此。我们具有类似的结构,MATLAB但在这里我只找到训练和验证数据集。我认为此包中的验证数据集与测试数据相同,但没有提早停止,因此我们没有任何实际的验证数据。
user2991243

1
随着更新数量的增加,网络也收敛得更快。设置最小批量大小是一种艺术,它太小了,您可能冒使学习过于随机,更快的风险,但会收敛到不可靠的模型,太大而又无法容纳到内存中并且仍然需要很长时间。
拉马略

1
通常,当人们说在线学习时,他们的意思是batch_size=1。在线学习背后的想法是,只要看到示例,便可以更新模型。如果批次大小较大,则意味着首先要在更新之前浏览多个样本。在RNN中,批次的大小可以具有不同的含义。通常,将训练序列分成固定大小的窗口(如10个字)是很常见的。在这种情况下,在培训期间包括100个此类窗口将意味着您已经拥有了batch_size=100
itdxer

151

在神经网络术语中:

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

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

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


但是,使用示例的[batch size]数量和在每个示例上训练网络并继续下一个[batch size]的数量示例之间有什么区别。由于您通过网络传递了一个示例并应用了SGD,然后采用下一个示例,依此类推,如果批量大小为10或1000或100000,则没有任何区别。下一批将接follow而至。仅当示例的[批处理大小]数量将通过网络的[迭代次数]乘以网络,然后继续进行下一个[批处理大小]示例时,这才有所不同。
Erhard Dinhobl

一个重要的区别是,学习步骤(一个步骤)对每个批次都应用一次,而您必须循环遍历所有批次才能形成一个时代。因此,差异不仅在内存上也存在算法上的差异:较大的批次意味着您可以对更多样本平均梯度。
meduz '18

纪元与迭代之间有什么区别?
金牌

1
@Goldname 1个纪元包括所有训练示例,而1个迭代仅包括[batch size]个训练示例。
20:39

3

使用CPU解决优化问题时,可以对某些输入数据迭代地应用算法。在这些迭代中的每一个中,通常都会对数据进行一些计算来更新问题的度量标准。现在,当数据量很大时,可能需要大量时间才能完成每次迭代,并且可能会消耗大量资源。因此,有时您选择将这些迭代计算应用于部分数据以节省时间和计算资源。这部分是batch_size,该过程称为(在神经网络Lingo中)批处理数据处理。将计算应用于所有数据时,便会进行在线数据处理。我猜这个术语来自60年代,甚至更早。有谁记得那个。蝙蝠DOS文件?但是,当然,该概念体现为要使用的线程或数据的一部分。


2

Keras有关批次大小的文档可fit在“ 模型”(功能性API)页面的功能下找到

batch_size:整数或无。每个梯度更新的样本数。如果未指定,batch_size将默认为32。

如果数据集较小,则最好使批次大小等于训练数据的大小。首先尝试小批量,然后增加以节省时间。如itdxer所述,在准确性和速度之间需要权衡。

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.