在训练期间更改批量大小

数据挖掘 梯度下降 贝叶斯 小批量梯度下降 sgd
2021-10-14 18:53:45

批量大小的选择在某种意义上是随机性的度量:

  • 一方面,较小的批大小使梯度下降更加随机,SGD 可以显着偏离整个数据上的确切 GD,但允许进行更多探索并在某种意义上执行贝叶斯推理。
  • 较大的批大小更好地逼近确切的梯度,但这样更容易过度拟合数据或陷入局部最优。处理更大的批量大小还可以加快并行架构上的计算,但会增加对 RAM 或 GPU RAM 的需求。

似乎一个明智的策略是从较小的批量大小开始,在初始阶段进行大量探索,然后逐渐增加批量大小以微调模型。

但是,我没有看到在实践中实施这种策略?结果是效率低下吗?或者选择合适的学习率调度Dropout器是否足够好?

1个回答

有效利用资源

这是一个学习率的平衡游戏,你通常看不到人们这样做的一个原因是你想尽可能多地利用 GPU。

通常首选从内存中可以容纳的最大批大小开始,然后相应地提高学习率。这适用于“有效批量大小”,例如,当您有 4 个 GPU,每个 GPU 运行时batch_size=10,您的全局学习率可能为nb_gpu * initial_lr(与所有 4 个 GPU 的总和或平均值一起使用)。

最终的“最佳方法”通常是针对特定问题的——小批量可能不适用于 GAN 类型的模型,而大批量可能对于某些基于视觉的任务来说很慢且次优。

朋友不要让朋友使用大批量

几乎所有时候都有文献支持使用小批量尽管这一想法得到了 Yann Lecun 的支持,但也存在意见分歧

超融合

如果您对更快的收敛感兴趣,还可以考虑其他技巧,玩学习率循环