随着批量大小的变化,学习率应该如何变化? [关闭]
Posted
技术标签:
【中文标题】随着批量大小的变化,学习率应该如何变化? [关闭]【英文标题】:How should the learning rate change as the batch size change? [closed] 【发布时间】:2019-04-01 16:19:03 【问题描述】:当我增加/减少 SGD 中使用的小批量的批量大小时,我应该改变学习率吗?如果是,那怎么办?
作为参考,我和某人讨论过,据说当batch size增加时,学习率应该有所降低。
我的理解是当我增加批量大小时,计算出的平均梯度会减少噪音,所以我要么保持相同的学习率,要么提高它。
另外,如果我使用自适应学习率优化器,例如 Adam 或 RMSProp,那么我想我可以保持学习率不变。
如果我错了,请纠正我,并就此提供任何见解。
【问题讨论】:
【参考方案1】:理论表明,当将批大小乘以 k 时,应该将学习率乘以 sqrt(k) 以保持梯度期望的方差不变。见第 5 页 A。克里热夫斯基。并行化卷积神经网络的一个奇怪技巧:https://arxiv.org/abs/1404.5997
但是,最近对大型 mini-batch 的实验建议使用更简单的线性缩放规则,即在使用 kN 的 mini-batch 大小时将学习率乘以 k。 请参阅 P.Goyal 等人:准确、大型 Minibatch SGD:在 1 小时内训练 ImageNethttps://arxiv.org/abs/1706.02677
我想说,使用 Adam、Adagrad 和其他自适应优化器,如果批量大小没有发生实质性变化,学习率可能会保持不变。
【讨论】:
如果批量大小没有显着变化,您有什么理由认为学习率可能保持不变?在理论上或实践中从未见过这种情况。 每篇关于深度学习的文章(使用 cifar 或 mnist 等数据集)都应该以“理论建议......”这句话开头【参考方案2】:除了Dmytro的回答中提到的论文,你可以参考:Jastrzębski, S., Kenton, Z., Arpit, D., Ballas, N., Fischer, A., Bengio, Y., & Storkey, A. (2018, October). Width of Minima Reached by Stochastic Gradient Descent is Influenced by Learning Rate to Batch Size Ratio的文章。作者为学习率与批量大小的比率影响 DNN 的泛化能力这一观点提供了数学和经验基础。他们表明,这个比率在 SGD 发现的最小值的宽度中起着重要作用。比率越高,最小值越宽,泛化性越好。
【讨论】:
不确定这是否回答了如何通过批量大小更改学习率的问题?它只是说明学习率与批量大小的比值越大,泛化能力就越强。【参考方案3】:傻瓜学习率缩放
我一直发现启发式算法似乎在随批量大小的平方根的比例和批量大小之间有所不同,这在深度学习中经常出现这种情况。因此,我设计了自己的理论框架来回答这个问题。如果您有兴趣,这里有完整的预印本(目前正在审核中) https://arxiv.org/abs/2006.09092
学习率是最大特征值的函数
让我从两个小的子问题开始,它们回答了主要问题
是否存在我们可以先验知道最佳学习率的情况?是的,对于凸二次方程,最优学习率给出为 2/(λ+μ),其中 λ,μ 表示 Hessian 的最大和最小特征值(Hessian = loss 的二阶导数∇∇L,这是一个矩阵)。
我们如何期望这些特征值(表示损失沿着特征向量方向的无穷小移动变化了多少)作为批量大小的函数而变化?这实际上有点难以回答(这是我最初提出这个理论的原因),但它是这样的。
让我们假设我们拥有所有数据,这将为我们提供完整的 Hessian H。但现在我们只对这个 Hessian 进行二次采样,因此我们使用批量 Hessian B。我们可以简单地重写 B=H+( BH)=H+E。其中 E 现在是一些误差或波动矩阵。
根据对 E 元素性质的一些技术假设,我们可以假设这种波动是零均值随机矩阵,因此 Batch Hessian 变为固定矩阵 + 随机矩阵。
对于这个模型,特征值的变化(决定学习率的大小)是已知的。 在我的论文中还有另一种更花哨的模型,但答案或多或少是一样的。
实际发生了什么?实验和扩展规则
我附上了一张图,说明在完整数据矩阵中的最大特征值远远超出噪声矩阵(通常是这种情况)的情况下会发生什么。随着我们增加小批量大小,噪声矩阵的大小会减小,因此最大特征值的大小也会减小,因此可以使用更大的学习率。这种影响最初是成比例的,并且会继续近似成比例,直到达到一个阈值,之后没有明显的下降发生。
这在实践中的效果如何?如下图所示,我在没有批量规范的 VGG-16 上给出了答案(请参阅批量标准化和 resnet 的论文)。
我会赶紧补充一点,对于自适应顺序方法,参数有点不同,因为你有特征值、估计特征值和估计特征向量的相互作用!所以你实际上最终会得到一个平方根规则,直到一个阈值。老实说,为什么没有人讨论这个或发表这个结果,这让我有点想不通。
但是,如果您需要我的实用建议,请坚持使用 SGD,如果您的批量较小,则与批量的增加成正比,然后不要将其增加到超过某个点。
【讨论】:
令人印象深刻的答案。 arxiv.org/abs/2103.00065 的结果是证实还是反驳你的模型? “你介意更具体的结果吗?”我指的是:>“在稳定的边缘,梯度下降对真实神经训练目标的行为与梯度下降对二次泰勒近似的行为有着不可调和的不同:前者取得一致(如果不稳定)的进展,而后者会发散(并且这种发散会很快发生,正如我们在附录 D 中所展示的那样)。因此,梯度下降在稳定边缘的行为本质上是非二次的。 感谢@DeltaIV 抽出时间来说明您的 cmets。我会尽我所能在这里回答你的问题。 1) 如果一个函数是可微的(或者在神经网络的情况下,几乎处处可微),那么它可以在其附近建模为 n 阶多项式(泰勒斯定理)。我们成功地使用梯度下降进行训练,这是一阶的,因此在比这更大的区域内,我们可以预期二阶近似是合理的。谈论梯度下降(这是一阶)同时说二阶动力学无效是没有意义的。 我的工作非常清楚地说明了小批量时特征值会发生什么。我进一步表明,给定一个选定的训练方案,这非常准确地模拟了我们如何在子样本中进行扩展。现在 Wu 等人的工作提出了一个有趣的观察结果。与其考虑我们有一些近似二次曲面并对其进行优化优化,不如想象我们有一个复杂的多模态曲面并且我们基本上执行基于梯度下降的退火呢?即以高学习率在损失表面上反弹,然后将其丢弃以找到“好的”局部最小值? @DeltaIV 总之。毫无疑问,优化文献给出的规定(对于最佳渐近性能,学习率应该有多小)在深度学习中本质上是无关紧要的。此外,我发现尝试使用曲率“学习学习率”是无效的。然而,如果我们已经确定了一个学习率方案,那么在我们改变小批量时我们应该如何改变它可以通过曲率的变化得出(并且由我通过实验验证),这绝对没有矛盾。以上是关于随着批量大小的变化,学习率应该如何变化? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
c# winform groupbox上动态生成的控件,如何让控件随着分辨率变化而自动调整位置和大小