前言

  本文我们对之前介绍的优化器进行简单实验。

实验设置与说明

  在之前的文章中我们介绍了很多很多优化器,但都没有做比较详细的实验。那么在本文中我们集中进行一下实验。
  目前任务在CV中选择了MNIST,NLP中选择了GLUE,都是分类任务..后续可能会添加更多的任务。CV模型为一个CNN架构:ResNet和一个Transformer架构:ViT(Vision Transformer);NLP选择了LSTM和BERT。
  优化器主要有:Vanilla SGD、HB、NAG、AdaGrad、RMSPop、AdaDelta、Adam、AdaMax。
  此外值得一提的是学习率。在之前的理论分析中我们会令学习率为定值$\eta^{(\tau)}\equiv \eta$或多项式衰减:$\eta^{(\tau)}=\eta/\tau^p$,但在实践中如果采用这种衰减方式衰减太快,实验中的多项式衰减为:

$$ \eta^{(\tau)}=\eta\cdot\left(1-\frac{\tau}{total\_steps}\right)^p\tag{1} $$

其中$p=0$即学习率为常数;$p=1$即为常用的linear decay。
  在训练完一个epoch后测试一下指标,最终指标表示最优值。$^+$表示欠拟合;$^-$表示已过拟合;-表示未拟合。接下来开始我们的排列组合吧!

CV

  首先来看CV任务。MNIST任务上模型选择的是ResNet34、ViT-Base(patch16-224)。batch size统一为256,无dropout、正则与weight decay,5个epoch,初始学习率均为0.005。指标为测试集ACC。表现如下:
  ResNet34:

SGDHBNAGAdaGradRMSPropAdaDeltaAdamAdaMax
$p=0$97.29$^+$99.0899.02$^-$99.198.8393.99$^+$98.92$^+$98.97$^-$
$p=1$96.36$^+$99.14$^-$99.09$^-$99.5299.5879.79$^+$99.4599.29
Avg Time0:59:180:58:460:54:330:48:380:54:271:05:571:01:251:05:19

  ViT-Base: (硬件原因这里bs=128,8个epoch)

SGDHBNAGAdaGradRMSPropAdaDeltaAdamAdaMax
$p=0$92.35$^+$94.6295.2590.12$^+$--96.17$^+$93.31$^+$
$p=1$93.84$^+$95.3195.1791.36$^+$--97.38$^+$93.03
Avg Time1:34:131:24:031:33:071:12:39--1:34:101:45:38

NLP

  接下来是NLP任务。

1.Language Model

  对于LSTM,让它在GLUE上进行测试有点牵强了,我们这里测试LSTM做语言模型的表现。数据集为Penn TreeBank(PTB),指标为测试集困惑度(perplexity,PPL,越低越好)。数据的获取与处理主要参考:AdaBelief。batch size统一为32,无dropout、正则与weight decay,200个epoch,初始学习率均为0.01。

SGDHBNAGAdaGradRMSPropAdaDeltaAdamAdaMax
$p=0$650.9219.9222.6350--487.9-
$p=1$651237.9241.8326.1--469.4-
Avg Time2:29:562:32:352:34:152:34:54--2:41:09-

2.GLUE

  对于BERT,我们测试其在GLUE上的表现。由于GLUE任务比较多,我们先来看SST-2。指标为验证集ACC。batch size统一为8,无dropout、正则与weight decay,5个epoch,初始学习率均为2e-5。

SGDHBNAGAdaGradRMSPropAdaDeltaAdamAdaMax
$p=0$
$p=1$
Avg Time

结论

  接下来我们结合上述实验结果以及一些paper看能得出哪些结论。首先我们从一些浅显的结论开始。

1.不同优化器在不同任务、不同模型上的性能差异很大

  实验表明,不同的优化器在不同的任务上具有显著差异的表现;其中有一些优化器如Adam与SGD+动量在所有任务上都具有不错的表现,而像RMSProp与AdaDelta则在有些任务上可能不收敛。参考资料1也证明了这一点:
不同任务上不同优化器的表现

  具体而言,对于非Transformer架构(CNN、LSTM)SGD可能有更好表现;而Transformer架构上可能自适应方法(特别是Adam)可能表现更好。关于这一点的原因涉及比较复杂的loss landscape analysis,这里先不展开了。

2.调节超参数与LR scheduler很有必要

  参考资料1同时指出,对于超参数与LR scheduler如果应用论文默认值(如Adam中的$\eta^{(0)}= 10^{-3},\beta_1=0.9,\beta_2=0.999$) 对于部分优化器(如Adam)可能效果不错,这说明这些优化器已经足够好;而对于部分优化器(如RMSProp、AdaDelta)则表现不佳,这说明它们对于超参数与LR scheduler很敏感,而且其默认设置并不是很合适。
调节超参数与LR scheduler的指标的影响1

  其中Small budget表示在一个小范围内搜索超参数。下表也说明了进行超参数搜素与调节LR scheduler可以有效改进性能:

调节超参数与LR scheduler的指标的影响2

  而本文的实验也证明了学习率采用一定的衰减策略有助于提高指标,这与我们的理论分析是相符的。

3.自适应方法收敛更快而SGD泛化更好

  在训练早期自适应方法拥有出色的收敛速度,但其在测试集的表现往往不如SGD。这其实是一个相当普遍的结论了,参考资料2、3都说明了这一点,见下图:
不同优化器泛化性能对比

  至于其背后的理论原因,我们同样需要对loss landscape进行分析,我们之后再介绍。这条结论对于我们设计新的优化器是有启发意义的:我们能不能在前期使用自适应方法来获得较快的收敛速度;而在后期使用SGD来获得更好的泛化性?接下来我们将介绍这个思路下几篇比较优秀的工作:SWATS、AdaBound、RAdam。

References

  1. Descending through a crowded valley-benchmarking deep learning optimizersRobin M. Schmidt, Frank Schneider, Philipp Hennig,PMLR,2021
  2. The marginal value of adaptive gradient methods in machine learningAshia C. Wilson, Rebecca Roelofs, Mitchell Stern, Nathan Srebro, Benjamin Recht,NIPS,2017
  3. Improving Generalization Performance by Switching from Adam to SGDNitish Shirish Keskar, Richard Socher,arXiv preprint arXiv:1712.07628,2017
如果觉得我的文章对你有用,请随意赞赏