目录
Tree-structured Parzen estimators (TPE)
Population-based training (PBT)
深度学习步骤:
- 建立Function
- 建立loss Function
- 找到使loss Function最小化的参数
训练后结果判断:
training data准确率不高:
- 换新的激活函数(解决梯度消失问题)
- 减小学习率
training data准确率不错但testing data准确率不高(过拟合):
- 早停(early stopping)
- 正则化
- dropout
把accuracy和loss的曲线画出来,在accuracy和loss都趋于平缓的时候就减小学习率
看第一次test时(即iteration 0),loss和精度,如果太差,说明初始点的设置有问题
或许还可以用pca解决过拟合??
----------------------------------其他内容续更(自动调参)------------------------------------------
内容来自公众号:https://mp.weixin.qq.com/s/2LXWO6xe6KiE8IdWrtpQjw
-
手动调超参: 用这个方法,需要人工按照试验过程中得出的经验人工指定各个超参的组合,这个过程冗长且乏味,如果有大量的超参,组合是指数级别增加,手动调是不切实际的。
-
自动调超参: 用这个方法,超参会用一种算法自动优化。
调整超参的方法
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/