模型调参指南北东西

本文探讨了模型调参的重要性,介绍了手动调参与自动调参的区别,详细讲解了Random Search、Grid Search、贝叶斯优化、TPE、Hyperband、PBT以及BOHB等自动调参方法,并推荐了几款调参工具如Scikit-learn、Hyperopt、Scikit-Optimize和Optuna。
摘要由CSDN通过智能技术生成

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

如何选择好的超参

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

调整超参的方法

Random Search

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

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

v2-d864056445d385ea4a49e7fa19d637b9_b.jpg

贝叶斯优化

Hyperopt-sklearn是基于scikit-learn项目的一个子集,其全称是:Hyper-parameter optimization for scikit-learn,即针对scikit-learn项目的超级参数优化工具。由于scikit-learn是基于Python机器学习开源框架,因此Hyperopt-sklearn也基于Python语言。Hyperopt-sklearn的文档称:对于开发者而言,针对不同的训练数据挑选一个合适的分类器(classifier)通常是困难的。而且即使选好了分类器,后面的参数调试过程也相当乏味和耗时。更严重的是,还有许多情况是开发者好不容易调试好了选定的分类器,却发现一开始的选择本身就是错误的,这本身就浪费了大量的精力和时间。针对该问题,Hyperopt-sklearn提供了一种解决方案。Hyperopt-sklearn支持各种不同的搜索算法(包括随机搜索、Tree of Parzen Estimators、Annealing等),可以搜索所有支持的分类器(KNeightborsClassifier、KNeightborsClassifier、SGDClassifier等)或者在给定的分类器下搜索所有可能的参数配置,并评估最优选择。并且Hyperopt-sklearn还支持多种预处理流程,包括TfidfVectorizer,Normalzier和OneHotEncoder等。那么Hyperopt-sklearn的实际效果究竟如何?下表分别展示了使用scikit-learn默认参数和Hyperopt-sklearn优化参数运行的分类器的F-score分数,数据源来自20个不同的新闻组稿件。可以看到,经过优化的分类器的平均得分都要高于默认参数的情况。另外,Hyperopt-sklearn的编码量也很小,并且维护团队还提供了丰富的参考样例。 标签:Hyperopt
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值