machine-learning - 随着批大小的变化,学习率应该如何变化?
问题描述
当我增加/减少 SGD 中使用的小批量的批量大小时,我应该改变学习率吗?如果是这样,那怎么办?
作为参考,我正在和某人讨论,据说当batch size增加时,学习率应该有所降低。
我的理解是当我增加批量大小时,计算出的平均梯度会减少噪音,所以我要么保持相同的学习率,要么增加它。
此外,如果我使用自适应学习率优化器,如 Adam 或 RMSProp,那么我想我可以保持学习率不变。
如果我弄错了,请纠正我并对此提供任何见解。
解决方案
理论表明,当批量大小乘以 k 时,应该将学习率乘以 sqrt(k) 以保持梯度期望的方差不变。见A. Krizhevsky 第 5 页。并行化卷积神经网络的一个奇怪技巧:https ://arxiv.org/abs/1404.5997
然而,最近对大型 mini-batch 的实验建议使用更简单的线性缩放规则,即当使用 kN 的 mini-batch 大小时,将学习率乘以 k。请参阅P.Goyal 等人:准确、大型 Minibatch SGD:在 1 小时内训练 ImageNet https://arxiv.org/abs/1706.02677
我想说的是,使用 Adam、Adagrad 和其他自适应优化器,如果批量大小没有发生实质性变化,学习率可能会保持不变。
推荐阅读
- node.js - 在事务中更新 google cloud firestore 中的 2 个字段
- google-apps-script - 谷歌登录 redirect_uri_mismatch
- python - python dataframe groupby并追加新列
- react-native - react-native 选择器未显示数组项
- ruby-on-rails - 有没有一种方法可以堆栈跟踪事情发生的位置
- python - 处理通过 HTTP 请求传递时可能包含可疑宏的文件
- laravel - Laravel:总是在给定的路由上调用一个函数。没有中间件
- php - 从短代码属性获取自定义分类
- css - 为孩子覆盖 css flex align-content
- javascript - 如何替换适当的href标签中的链接