我注意到我的模型的性能随着批量大小的变化而变化很大,无论是在收敛时间和(可能)过度拟合的数量方面。我认为批量大小只是控制图像的数量在任何给定时间发送到 gpu / cpu,但我无法将其与这种行为相匹配。有人可以解释模型中的批量大小控制吗?为什么会出现性能差异?有什么好的资源吗?
抱歉这个天真的问题。这是我第一次使用这类模型,在我完成的背景阅读中,我仍然没有完全掌握这个参数在做什么。
我注意到我的模型的性能随着批量大小的变化而变化很大,无论是在收敛时间和(可能)过度拟合的数量方面。我认为批量大小只是控制图像的数量在任何给定时间发送到 gpu / cpu,但我无法将其与这种行为相匹配。有人可以解释模型中的批量大小控制吗?为什么会出现性能差异?有什么好的资源吗?
抱歉这个天真的问题。这是我第一次使用这类模型,在我完成的背景阅读中,我仍然没有完全掌握这个参数在做什么。
批量大小决定了训练期间权重的更新频率。批大小越小,更新越频繁。另一方面,当批量较小时,在不评估手头大部分数据的情况下进行更新,因此有时,如果该特定批量不能很好地代表整个数据集。因此,从某种意义上说,与小批量相比,大批量可以帮助您更快地获得更低的损失——它需要相对较大的步长,而且噪音很小。在实践中,很少使用整个数据集,因为每次迭代需要太多时间。当然,对于较小的数据集,这不是问题。
在这里你可以找到 Andrew Ng 对这个问题的一个很好的讨论。
话虽如此,我还依稀记得一篇论文不鼓励使用太大的批次(超过 1024 个)。较小的批次可能会在达到最小值之前左右摆动太多,但它们会更接近它。还有一些关于在验证集上表现不佳的大批量训练的讨论。所以有一个权衡,应该通过反复试验来选择最佳值。
批量大小控制应用于模型的更新数量。假设你有图像,您使用的批量大小为你可以期待更新您的模型。增加显然会减少完成的更新次数,减少 b 会增加更新次数。
关于批量大小的普遍共识之一是较大的批量大小会导致较差的泛化。这个交叉验证的链接提供了关于这个问题的很好的讨论和答案。当您有资源和数据量来训练模型但又不想牺牲性能时,这种行为尤其不利于大规模行业使用。另一件事是梯度下降优化是一个顺序过程,因此并行化是不可能的。因此,人们一直在尝试大规模/批量训练,facebook 研究的一篇论文很好地了解了如何训练这种模型。
这里有一些我觉得有帮助的帖子。通常,batch size 越小,更新的噪音越大,所以如果你减小 batch size,你可能应该降低学习率,并训练更多的迭代。
我发现下面的两个链接很有帮助。一个是 Ilya Sutskever 的博客文章,底部有一些实用建议。另外,请参阅 Caffe 线程。他们谈到了如何为较小的批量调整学习率。
http://yyue.blogspot.com/2015/01/a-brief-overview-of-deep-learning.html