Deep learning 神经网络:历元与批量

Deep learning 神经网络:历元与批量,deep-learning,neural-network,pytorch,Deep Learning,Neural Network,Pytorch,我正在尝试训练一个神经网络来将单词分类成不同的类别。 我注意到两件事: 当我使用较小的批量时(如8,16,32),损失不会减少,而是偶尔变化。当我使用更大的批量大小时(比如128256),损失会下降,但速度非常缓慢 更重要的是,当我使用更大的EPOCH值时,我的模型在减少损失方面做得很好。但是我使用了一个非常大的值(EPOCHS=10000) 问题: 如何获得最佳的EPOCH和batch\u size值?无法根据某些规则确定这些值。不幸的是,最佳选择取决于问题和任务。不过,我可以给你一些见解 当

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

当我使用较小的
批量时(如8,16,32),损失不会减少,而是偶尔变化。当我使用更大的
批量大小时(比如128256),损失会下降,但速度非常缓慢

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

问题
如何获得最佳的
EPOCH
batch\u size
值?

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

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

因此,我们使用小批量作为近似值!这个想法不是考虑所有的样本,我们说我根据一些小样本集计算梯度,但问题是我丢失了关于梯度的信息

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

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


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

我认为您应该使用超参数tunning…optuna库与pytorch@PrajotKuvalekar谢谢,我去看看,这似乎是我需要的东西。