神经网络中Batch与Epoch的区别
随机梯度下降是一种具有多个超参数的学习算法。
两个经常让初学者感到困惑的超参数是batch大小和epoch数量。它们都是整数值,似乎都做同样的事情。
在这篇文章中,你会发现在随机梯度下降中batch和epoch之间的区别。
读完这篇文章,你就会知道:
- 随机梯度下降是一种迭代学习算法,它使用训练数据集来更新模型。
- batch大小是梯度下降的超参数,它控制在更新模型的内部参数之前要处理的训练样本的数量。
- epoch数是控制通过训练数据集的完整通过数的梯度下降的超参数。
我们开始吧。
概述
这篇文章分为五个部分,它们是:
- 随机梯度下降。
- 什么是样品?
- 什么是Batch?
- 什么是Epoch?
- Batch和Epoch有什么不同?
随机梯度下降
随机梯度下降,简称SGD,是一种用于训练机器学习算法的优化算法,最著名的是用于深度学习的人工神经网络。
该算法的工作是找出一组在对数损失或均方误差等性能指标下表现良好的内模参数。
优化是一种搜索过程,你可以将这种搜索视为学习。该优化算法被称为“梯度下降”,其中“梯度”是指误差梯度或误差斜率的计算,而“下降”是指沿着该斜率向下朝某一最小误差水平移动。
该算法是迭代的。这意味着搜索过程发生在多个离散的步骤中,每一步都有望略微改进模型参数。
每个步骤涉及使用具有当前内部参数集的模型来对一些样本进行预测,将预测与实际预期结果进行比较,计算误差,并使用误差来更新内部模型参数。
这种更新过程对于不同的算法是不同的,但在人工神经网络的情况下,使用的是反向传播更新算法。
在我们深入到Batch和Epoch之前,让我们先来看看我们所说的样本是什么意思。
单击此处了解有关渐变下降的更多信息:
什么是样品?
样品是单行数据。
它包含输入到算法中的输入和用于与预测进行比较并计算误差的输出。
训练数据集由许多行数据组成,例如许多样本。样本也可以称为实例、观测、输入向量或特征向量。
现在我们知道了什么是样本,让我们定义一个Batch。
什么是Batch?
Batch大小是一个超参数,它定义在更新内部模型参数之前要处理的样本数。
可以将Batch看作是对一个或多个样本进行迭代并进行预测的for循环。在Batch结束时,将预测与预期输出变量进行比较,并计算误差。根据该误差,使用更新算法来改进模型,例如沿着误差梯度向下移动。
训练数据集可以被分成一个或多个Batch。
当所有训练样本都用来创建一批时,这种学习算法称为Batch梯度下降。当批次是一个样本的大小时,这种学习算法称为随机梯度下降。当Batch大小大于一个样本且小于训练数据集的大小时,该学习算法称为小Batch梯度下降。
- Batch渐变下降。Batch大小=训练集的大小。
- 随机梯度下降。Batch大小=1。
- 小Batch梯度下降。1
在小Batch梯度下降的情况下,流行的Batch大小包括32、64和128个样本。你可以在文献和教程中看到模型中使用的这些值。
如果数据集没有按Batch大小平均划分怎么办?
在训练模型时,这种情况可以而且确实经常发生。这仅仅意味着最后一Batch的样品比其他Batch少。
或者,你可以从数据集中删除一些样本或更改Batch大小,以便数据集中的样本数除以Batch大小。
有关这些渐变下降变化之间的差异的更多信息,请参见帖子:
有关Batch大小对学习过程影响的更多信息,请参阅帖子:
Batch涉及使用示例对模型进行更新;接下来,让我们看一下Epoch。
什么是Epoch?
Epoch数是定义学习算法将通过整个训练数据集工作的次数的超参数。
一个Epoch意味着训练数据集中的每个样本都有机会更新内部模型参数。一个Epoch由一个或多个Batch组成。例如,如上所述,具有一个Batch的Epoch称为Batch梯度下降学习算法。
你可以考虑对Epoch的数量执行for循环,其中每个循环对训练数据集进行处理。在这个for循环中是另一个嵌套的for循环,它迭代每个Batch样本,其中一个Batch样本具有指定的“Batch”数量的样本。
Epoch的数量传统上很大,通常是数百或数千,从而允许学习算法运行,直到来自模型的误差已经充分最小化。你可以在文献和教程中看到设置为10、100、500、1000和更大的Epoch数的示例。
通常创建线状图,将沿x轴的Epoch显示为时间,并在y轴上显示模型的误差或技巧。这些曲线图有时被称为学习曲线。这些曲线图可以帮助诊断模型是否过度学习、学习不足或是否适合训练数据集。
有关通过LSTM网络的学习曲线进行诊断的更多信息,请参阅帖子:
如果还不清楚,让我们来看看Batch和Epoch之间的区别。
Batch和Epoch有什么不同?
Batch大小是在更新模型之前处理的样本数。
Epoch数是训练数据集的完整通过数。
Batch的大小必须大于或等于1,并且小于或等于训练数据集中的样本数。
Epoch数可以设置为1到无穷大之间的整数值。你可以随心所欲地运行该算法,甚至可以使用除固定数量的Epoch之外的其他标准来停止它,例如模型误差随时间的变化(或缺少变化)。
它们都是整数值,并且都是用于学习算法的超参数,例如用于学习过程的参数,而不是由学习过程找到的内部模型参数。
你必须指定学习算法的Batch大小和Epoch数。
对于如何配置这些参数,没有神奇的规则。你必须尝试不同的值,看看哪种值最适合你的问题。
工作示例。
最后,让我们用一个小示例将其具体化。
假设你有一个包含200个样本(数据行)的数据集,并且你选择的Batch大小为5和1,000个Epoch。
这意味着数据集将被分成40 Batch,每个Batch有5个样本。模型权重将在每个Batch的五个样本之后更新。
这也意味着一个Epoch将涉及40批或40个模型更新。
对于1,000个Epoch,模型将暴露或通过整个数据集1,000次。就是整个训练过程一共是四万Batch。
进一步阅读
如果你想深入了解,本节提供了更多关于该主题的资源。
- 机器学习中的梯度下降算法。
- 如何控制神经网络训练批量的速度和稳定性。
- 浅谈小Batch梯度下降及Batch配置。
- 用于诊断模型性能的学习曲线的简要介绍。
- 维基百科上的随机梯度下降。
- 维基百科上的反向传播。
总结
在这篇文章中,你发现了随机梯度下降中批次和纪元之间的区别。
具体地说,你了解到:
- 随机梯度下降是一种迭代学习算法,它使用训练数据集来更新模型。
- batch大小是梯度下降的超参数,它控制在更新模型的内部参数之前要处理的训练样本的数量。
- epoch数是控制通过训练数据集的完整通过数的梯度下降的超参数。