"深恶痛绝"的超参

2021-05-14 17:36:07 浏览数 (1)

时晴,文章框架源于引文[1]

说到超参,不得不先提到参数,这两个是有本质区别的。对于神经网络而言,学习率、batchsize等都是超参,而参数就是网络中所有的weight。可以这样简单的区分超参和参数,在模型训练前需要固定的参数就是超参,而参数受到训练数据和超参的影响,按照优化目标逐步更新,到最后得到该超参下的最优模型。超参的重要性不言而喻,那么如何正确的设定超参呢?

如何选择好的超参

  • 手动调超参: 用这个方法,需要人工按照试验过程中得出的经验人工指定各个超参的组合,这个过程冗长且乏味,如果有大量的超参,组合是指数级别增加,手动调是不切实际的。
  • 自动调超参: 用这个方法,超参会用一种算法自动优化。

调整超参的方法

Random Search

先给出每个超参可能的值,然后每次迭代使用这些值的随机组合训练模型,参考最终的评估指标,选择最好效果的超参。

Grid Search 网格搜索大家也并不陌生,同随机搜索不同的是,会按照一种特定的顺序选择超参,参考最终的评估指标,选择最好的超参。如下图所示:

贝叶斯优化

和用梯度下降方法找到最优参数降低模型loss类似,找正确的超参也是一个优化问题,贝叶斯优化帮助我们在较少的尝试次数下找到最优解。通过已经观测到的提升的细节,定义一个函数,知道超参的采样。

详情见 https://en.wikipedia.org/wiki/Bayesian_optimization。

Tree-structured Parzen estimators (TPE)

这个方法和贝叶斯方法类似,并不是对p(y|x)进行建模(x表示超参,y表示我们要优化的模型),而是对p(x|y)和p(y)进行建模。TPE的缺点就是该方法没有描述各个超参之间的联系,该方法在实践效果非常好。

详情见 https://optunity.readthedocs.io/en/latest/user/solvers/TPE.html。

超参调参算法

Hyperband

这是一种随机搜索的方法,但是有一些探索理论的指导,从而合理分配搜索各个参数的时间。

详情见论文《Hyperband: A Novel Bandit-Based Approach to Hyperparameter Optimization》 https://arxiv.org/pdf/1603.06560.pdf

Population-based training (PBT)

这种方法集成了2种常用的参数搜索方法(随机搜索,人工搜索),用于神经网络模型调超参。PBT先用随机参数并行训练多个模型,这些模型并不是相互独立的。该算法使用population的信息去提炼超参,并决定用哪种参数。

详情见 https://deepmind.com/blog/article/population-based-training-neural-networks

BOHB

混合贝叶斯方法和Hyperband方法进行超参搜索。

详情见 https://www.automl.org/blog_bohb/

超参利器

  • Scikit-learn(grid search, random search): https://scikit-learn.org/stable/
  • Hyperopt: http://hyperopt.github.io/hyperopt/
  • Scikit-Optimize: https://scikit-optimize.github.io/
  • Optuna: https://optuna.org/
  • Ray.tune: https://docs.ray.io/en/latest/tune/index.html

参考文献

1.https://neptune.ai/blog/hyperparameter-tuning-in-python-a-complete-guide-2020

0 人点赞