模型调参指南北东西
說到超參,不得不先提到參數(shù),這兩個是有本質區(qū)別的。對于神經網絡而言,學習率、batchsize等都是超參,而參數(shù)就是網絡中所有的weight。可以這樣簡單的區(qū)分超參和參數(shù),在模型訓練前需要固定的參數(shù)就是超參,而參數(shù)受到訓練數(shù)據(jù)和超參的影響,按照優(yōu)化目標逐步更新,到最后得到該超參下的最優(yōu)模型。超參的重要性不言而喻,那么如何正確的設定超參呢?
如何選擇好的超參
- 手動調超參: 用這個方法,需要人工按照試驗過程中得出的經驗人工指定各個超參的組合,這個過程冗長且乏味,如果有大量的超參,組合是指數(shù)級別增加,手動調是不切實際的。
- 自動調超參: 用這個方法,超參會用一種算法自動優(yōu)化。
調整超參的方法
Random Search
先給出每個超參可能的值,然后每次迭代使用這些值的隨機組合訓練模型,參考最終的評估指標,選擇最好效果的超參。
Grid Search
網格搜索大家也并不陌生,同隨機搜索不同的是,會按照一種特定的順序選擇超參,參考最終的評估指標,選擇最好的超參。如下圖所示:
貝葉斯優(yōu)化
和用梯度下降方法找到最優(yōu)參數(shù)降低模型loss類似,找正確的超參也是一個優(yōu)化問題,貝葉斯優(yōu)化幫助我們在較少的嘗試次數(shù)下找到最優(yōu)解。通過已經觀測到的提升的細節(jié),定義一個函數(shù),知道超參的采樣。
詳情見 https://en.wikipedia.org/wiki/Bayesian_optimization。
Tree-structured Parzen estimators (TPE)
這個方法和貝葉斯方法類似,并不是對p(y|x)進行建模(x表示超參,y表示我們要優(yōu)化的模型),而是對p(x|y)和p(y)進行建模。TPE的缺點就是該方法沒有描述各個超參之間的聯(lián)系,該方法在實踐效果非常好。
詳情見 https://optunity.readthedocs.io/en/latest/user/solvers/TPE.html。
超參調參算法
Hyperband
這是一種隨機搜索的方法,但是有一些探索理論的指導,從而合理分配搜索各個參數(shù)的時間。
詳情見論文《Hyperband: A Novel Bandit-Based Approach to Hyperparameter Optimization》 https://arxiv.org/pdf/1603.06560.pdf
Population-based training (PBT)
這種方法集成了2種常用的參數(shù)搜索方法(隨機搜索,人工搜索),用于神經網絡模型調超參。PBT先用隨機參數(shù)并行訓練多個模型,這些模型并不是相互獨立的。該算法使用population的信息去提煉超參,并決定用哪種參數(shù)。
詳情見 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
總結
- 上一篇: 用隐式反馈做推荐模型,你做对了吗
- 下一篇: 个性化推荐系统该如何评估,四种不同策略的