我正在进行具有4个功能的神经网络回归。如何确定问题的小批量大小?我看到人们使用100~1000批量大小的计算机视觉,每个图像有32 * 32 * 3的功能,这是否意味着我应该使用100万的批量大小?我有数十亿的数据和几十GB的内存,所以没有硬性要求我不这样做。
我还观察到使用大小为1000的小批量使得收敛速度比100万批量大得多。我认为它应该是另一种方式,因为用较大批量计算的梯度最能代表整个样品的梯度?为什么使用迷你批处理会使收敛更快?
答案 0 :(得分:3)
来自Tradeoff batch size vs. number of iterations to train a neural network:
来自Nitish Shirish Keskar,Dheevatsa Mudigere,Jorge Nocedal,Mikhail Smelyanskiy,Ping Tak Peter Tang。论深度学习的大批量训练:泛化差距和尖锐极小。 https://arxiv.org/abs/1609.04836:
随机梯度下降法及其变体是许多深度学习任务的首选算法。这些方法以小批量方案操作,其中对训练数据的一部分(通常为32-512个数据点)进行采样以计算梯度的近似值。 在实践中已经观察到,当使用较大的批次时,模型的质量会显着下降,这可以通过其推广的能力来衡量。已经有一些尝试来研究其原因。大批量制度的普遍化下降,但这种现象的确切答案是前所未有的。在本文中,我们提供了充分的数据证据,支持大批量方法倾向于收敛到训练和测试函数的尖锐最小化的观点 - 并且尖锐的最小值导致较差的泛化。相比之下,小批量方法始终如一地收敛到平面最小化器,我们的实验支持一种普遍认为这是由于梯度估计中的固有噪声。我们还讨论了几种经验策略,这些策略有助于大批量方法消除泛化差距,并以一系列未来的研究思路和开放性问题作为结论。
[...]
缺乏泛化能力的原因在于大批量方法倾向于收敛于训练函数的尖锐最小化 。这些最小化器的特征在于$ \ nabla ^ 2 f(x)$中的大的正特征值,并且倾向于较不普遍。相比之下,小批量方法收敛于平均最小值,其特征在于$ \ nabla ^ 2 f(x)$的小的正特征值。我们观察到深度神经网络的损失函数景观使得大批量方法几乎总是被吸引到具有尖锐最小值的区域,并且与小批量方法不同,它们无法逃离这些最小化的盆地。
[...]
此外,Ian Goodfellow提供了一些很好的见解 在Quora上回答why do not use the whole training set to compute the gradient? :
学习率的大小主要受限于如何影响 弯曲的成本函数是。您可以将梯度下降视为 对成本函数进行线性近似,然后移动 沿着这个近似的成本下坡。如果成本函数很高 非线性(高度弯曲)然后近似不会很大 非常好,所以只有很小的步长是安全的。你可以阅读 更多关于深度学习教科书第4章的内容 数值计算: http://www.deeplearningbook.org/contents/numerical.html
当你放 在一个小批量的例子中,你需要进行O(m)计算和使用 O(m)内存,但减少了渐变中的不确定性 仅为O(sqrt(m))。换句话说,有减少 边际回报将更多的例子放在小批量中。您可以 在深度学习教科书的第8章中详细了解这一点 深度学习的优化算法: http://www.deeplearningbook.org/contents/optimization.html
另外,如果 你想一想,即使使用整个训练集也不是真的 给你真正的渐变。真正的梯度将是预期的 渐变与所有可能的例子的期望, 由数据生成分布加权。使用整个 训练集只是使用非常大的小批量大小,其大小 您的迷你邮件受到您在数据上花费的金额的限制 收集,而不是你花在计算上的金额。