假设我正在训练一个神经网络,并且可以将我的所有数据放入内存中。在这种情况下,使用带有 SGD 的小批量有什么好处吗?还是在可能的情况下,使用全梯度进行批量训练总是更好?
此外,似乎许多更现代的优化算法(RMSProp、Adam 等)在设计时都考虑了 SGD。这些方法是否仍然优于具有完整梯度的标准梯度下降(有动量)?
假设我正在训练一个神经网络,并且可以将我的所有数据放入内存中。在这种情况下,使用带有 SGD 的小批量有什么好处吗?还是在可能的情况下,使用全梯度进行批量训练总是更好?
此外,似乎许多更现代的优化算法(RMSProp、Adam 等)在设计时都考虑了 SGD。这些方法是否仍然优于具有完整梯度的标准梯度下降(有动量)?
在大型数据集上,SGD 可以比批量训练更快地收敛,因为它更频繁地执行更新。我们可以避免这种情况,因为数据通常包含冗余信息,因此可以在不使用完整数据集的情况下合理地近似梯度。Minibatch 训练可以比在单个数据点上训练更快,因为它可以利用矢量化操作来一次处理整个 minibatch。在线/小批量训练的随机性也可以跳出可能会陷入批量训练的局部最小值。
使用批量训练的一个原因是无法使用单个点/小批量来近似梯度的情况(例如,损失函数不能分解为每个数据点的误差总和)。这不是标准分类/回归问题的问题。
我不记得看到 RMSprop/Adam/etc。与批量梯度下降相比。但是,考虑到它们相对于普通 SGD 的潜在优势,以及普通 SGD 相对于批量梯度下降的潜在优势,我想它们会比较有利。
当然,我们必须牢记没有免费的午餐定理;必须存在目标函数,这些优化算法中的每一个都比其他算法执行得更好。但是,不能保证这些函数是否与一组实际有用的、现实世界的学习问题有关。