澄清何时进行损失/成本函数计算和反向传播

人工智能 神经网络 机器学习 深度学习
2021-10-21 11:57:55

我阅读了不同的文章,并在这一点上一直感到困惑。不确定文献是否提供了混合信息,或者我的解释不正确。

因此,通过阅读文章,我对以下术语的理解(松散地)如下:

纪元: 一个纪元是指整个数据集仅通过神经网络向前和向后传递一次。

批量大小: 单个批次中存在的训练示例总数。在使用神经网络的现实生活场景中,数据集需要尽可能大,以便网络更好地学习。所以你不能一次将整个数据集传递到神经网络中(由于计算能力的限制)。因此,您将数据集划分为批次数。

迭代次数: 迭代次数是完成一个 epoch 所需的批次数。我们可以将 2000 个示例的数据集划分为 500 个批次,然后需要 4 次迭代才能完成 1 个 epoch。

所以如果一切都是正确的,那么我的问题是,损失/成本函数和随后的反向传播过程在什么时候发生(根据我的理解假设反向传播是在计算损失/成本之后直接发生的)?是否计算成本/损失函数:

  1. 在该批次中的数据样本已前馈到网络的每个批次结束时(即在每个“迭代,而不是每个时期”)?如果是这样,那么损失/成本函数会得到该批次中所有数据样本的所有损失的平均损失,对吗?

  2. 在每个纪元结束时?这意味着在计算成本/损失函数之前,首先对所有批次的所有数据样本进行前馈。

我的理解是这是第一点,即在每批结束时(传递给网络),因此在每次迭代时(不是 Epoch)。至少在 SGD 优化方面是这样。我的理解是 - 重点是您计算每批的损失/成本和反向传播。这样你就不会计算整个数据样本的平均损失。否则,您将在成本图中获得一个非常普遍的最小值,而不是从您单独训练的每个批次中获得成本较低的局部最小值。一旦所有的迭代都发生了,那么这将算作 1 个 Epoch。但后来我在看一个解释神经网络的 YouTube 视频,其中提到成本/损失函数是在每个 Epoch 结束时计算的,这让我很困惑。任何澄清将不胜感激。

1个回答

纪元:一个纪元是指整个数据集仅通过神经网络向前和向后传递一次。

批量大小:单个批次中存在的训练示例总数。在使用神经网络的现实生活场景中,数据集需要尽可能大,以便网络更好地学习。所以你不能一次将整个数据集传递到神经网络中(由于计算能力的限制)。因此,您将数据集划分为批次数。

迭代次数:迭代次数是完成一个 epoch 所需的批次数。我们可以将 2000 个示例的数据集划分为 500 个批次,然后需要 4 次迭代才能完成 1 个 epoch。

这在大多数情况下是正确的,除了您有时想要使用批处理的其他原因(即使您可以将整个内容放入内存中)。一是它不太可能在随机环境中过度拟合,而不是在完整环境中。另一个是它可以以更快的收敛速度达到类似的极值。

现在关于您的问题,是的,您在每个批次或所需批次的末尾应用梯度下降步骤(我的意思是所需批次,如果您想使用 24 的批次大小但您的设备只能处理 8 个,您可以使用 3 个伪批次的梯度累积来实现 24 个模拟批次)。

尽管我确实认为它值得一提,但您的目标仍然是找到全局最小值。即使您的批量大小是整个数据集,这并不意味着您不会陷入局部最小值,实际上在大多数情况下它仍然是最可能的结果