选择用于训练神经网络的优化器的指南

数据挖掘 神经网络 优化 反向传播
2021-10-11 21:35:40

我使用神经网络已经有一段时间了。但是,我一直在努力解决的一件事是选择用于训练网络的优化器(使用反向传播)。我通常做的只是从一个(例如标准 SGD)开始,然后几乎随机地尝试其他的。我想知道是否有更好(且随机性更低)的方法来找到一个好的优化器,例如从这个列表中:

  • SGD(有或没有动量)
  • AdaDelta
  • 阿达格拉德
  • RMSProp
  • 亚当

特别是,考虑到训练数据具有某些属性,例如它是稀疏的,如果有一些理论上的理由来选择一个而不是另一个,我很感兴趣。我还想象一些优化器在特定领域比其他优化器工作得更好,例如在训练卷积网络与前馈网络或分类与回归时。

如果你们中的任何人就如何选择优化器制定了一些策略和/或直觉,我会非常有兴趣听到它。此外,如果有一些工作可以为选择一个而不是另一个提供理论依据,那就更好了。

4个回答
  1. AdaGrad 对频繁更新的参数的学习率惩罚过于严厉,并为稀疏参数(不经常更新的参数)提供更高的学习率。在几个问题中,最关键的信息通常出现在不那么频繁但稀疏的数据中。因此,如果您正在处理的问题涉及稀疏数据,例如 tf-idf 等。Adagrad 可能很有用。

  2. AdaDelta,RMSProp 几乎可以在类似的线路上工作,唯一的区别是 Adadelta 您不需要初始学习率常数即可开始。

  3. Adam 结合了 Adadelta 和 RMSprop 的良好特性,因此往往在大多数问题上做得更好。

  4. 随机梯度下降是非常基础的,现在很少使用。一个问题是与全局学习率相关联。因此,当参数处于不同的尺度时,它就不能很好地工作,因为低学习率会使学习变慢,而大的学习率可能会导致振荡。此外,随机梯度下降通常很难逃脱鞍点。Adagrad、Adadelta、RMSprop 和 ADAM 通常能更好地处理鞍点。具有动量的 SGD 可以加快优化速度,也有助于更好地避开局部最小值。

我个人的方法是选择最新的优化器(即,在同行评审期刊中最新发布的),因为它们通常会在标准数据集上报告结果,或者超越最先进的技术,或者两者兼而有之。例如,当我使用 Caffe 时,我总是使用Adam

根据Kingma 和 Ba (2014)的说法, Adam 已被开发用于“大型数据集和/或高维参数空间”

作者声称:“[Adam] 结合了 [...] AdaGrad 处理稀疏梯度的优势,以及 RMSProp 处理非平稳目标的能力”(第 9 页)。

在论文中,有一些模拟将 Adam 与 SGDNesterov、AdaGrad、RMSProp 进行了比较(MNIST,IMDB,第 6 页;CIFAR10(ConvNet),第 7 页)。与其他人相比,亚当做得很好。作者发现 Adam 在卷积网络中的收敛速度比 AdaGrad 快(5x5 卷积滤波器,3x3 最大池化,步幅为 2,然后是 1000 个校正线性隐藏单元的全连接层)。

总的来说,对于大多数(非浅层)问题, Adam 似乎是一个不错的选择。

Nadam(lr=0.002, beta_1=0.9, beta_2=0.999, epsilon=None, schedule_decay=0.004)

很像Adam本质RMSprop上是动量,Nadam是亚当RMSprop与涅斯捷罗夫动量。