【问题标题】:Neural Network : Epoch and Batch Size神经网络:时代和批量大小
【发布时间】:2021-02-06 03:37:10
【问题描述】:

我正在尝试训练神经网络将单词分类为不同的类别。 我注意到两件事:

当我使用较小的batch_size(如 8、16、32)时,损失并没有减少,而是偶尔变化。当我使用更大的batch_size(如 128、256)时,损失会下降,但速度很慢。

更重要的是,当我使用更大的EPOCH 值时,我的模型在减少损失方面做得很好。但是我使用了一个非常大的值 (EPOCHS = 10000)。

问题: 如何获得最优的EPOCHbatch_size 值?

【问题讨论】:

  • 我认为你应该进行超参数调整......optuna 库与 pytorch 配合得很好
  • @PrajotKuvalekar 谢谢我检查一下似乎是我需要的东西。

标签: deep-learning neural-network pytorch


【解决方案1】:

无法根据某些规则来决定这些值。不幸的是,最佳选择取决于问题和任务。不过,我可以给你一些见解。

当你训练一个网络时,你会计算一个梯度来减少损失。为此,您需要反向传播损失。现在,理想情况下,您可以根据数据中的所有样本计算损失,因为您基本上会考虑每个样本,并得出一个可以捕获所有样本的梯度。实际上,由于计算所有样本的梯度的计算复杂性,这是不可能的。因为对于每次更新,您都必须计算所有样本的前向传递。这种情况是 batch_size = N,其中 N 是您拥有的数据点总数。

因此,我们使用 small batch_size 作为近似值!我们的想法不是考虑所有样本,而是说我根据一小部分样本计算梯度,但问题是我丢失了有关梯度的信息。

经验法则: 较小的批次大小会产生噪声梯度,但它们会更快地收敛,因为每个 epoch 都有更多的更新。如果您的批量大小为 1,那么每个 epoch 将有 N 次更新。如果是 N,则每个 epoch 将只有 1 次更新。另一方面,较大的批大小会提供更多信息梯度,但收敛速度较慢。

这就是为什么对于较小的批量,您会观察到不同的损失,因为梯度是嘈杂的。对于较大的批量大小,您的梯度信息量很大,但您需要很多时期,因为您更新的频率较低。

理想的批量大小应该是能够为您提供信息梯度但又足够小以便您可以有效地训练网络的批量大小。只有实际尝试才能找到。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-15
    • 2023-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-01
    • 2014-10-10
    • 2021-02-11
    相关资源
    最近更新 更多