NNI中目前已經(jīng)實現(xiàn)的Tunner算法分類:
目前Tunner算法:
- 基于暴力搜索的方法:
- GridSearch,定義參數(shù)空間,逐個搜索,浪費資源,但是可以搜索到所有的空間
- Batch tuner,
- 基于序列模型優(yōu)化的方法:
- TPE
- SMAC
- 基于搜索空間的方法:
- Random
- Anneal:搜索空間,采用啟發(fā)式策略
- Naive Evolution:樸素進化
- 基于貝葉斯優(yōu)化的方法:
- Hyperband
- 其他的:
- Network Morphism,可以選擇和設計網(wǎng)絡結構的,主要用于視覺任務,目前支持keras和pytorch
- Metis Tuner ,可以根據(jù)精度選擇下一次配置
參考上一篇博客中統(tǒng)計的部分實驗數(shù)據(jù):
| 算法 | 最高分數(shù) | 最低分數(shù) | >0.80次數(shù) | >0.90次數(shù) | >0.95次數(shù) | 總次數(shù) |
|---|---|---|---|---|---|---|
| TPE | 0.9834 | 0.0958 | 7 | 5 | 3 | 10 |
| Random | 0.9823 | 0.0982 | 3 | 3 | 2 | 10 |
| Anneal | 0.9837 | 0.0892 | 2 | 2 | 2 | 10 |
| Naive Evolution | 0.9692 | 0.0958 | 2 | 1 | 1 | 10 |
| Batch Tuner | 0.9877 | 0.1135 | 3 | 3 | 2 | 6 |
| Grid Search | 0.988 | 0.0892 | 343 | 274 | 162 | 600 |
| SMAC | 0.9733 | 0.098 | 5 | 4 | 1 | 10 |
| Hyperband | 0.9831 | 0.0958 | 5 | 5 | 4 | 10 |
可以看到在Mnist數(shù)據(jù)集上做實驗的話,幾乎所有的Tunner算法都可以達到0.95+的分數(shù)。
- 顯然基于暴力搜索的GridSearch和BatchTuner效率更低下,GridSearch會對所有的數(shù)據(jù)進行排列組合,顯然是最低效的,而且也并沒有明顯的性能指標的提升。BatchTuner只支持
combine_params,類似人工調參的升級版,對于有經(jīng)驗的程序員是一個很不錯的工具。 - 從以上的小數(shù)據(jù)量的實驗來看(如果條件允許,進行大數(shù)據(jù)量實驗的話會更可靠),TPE應該是首選,得分高,而且大于0.80的次數(shù)多。
- SMAC使用
nnictl package install安裝起來著實費勁,github的這個服務器是掛在了美國亞馬遜上,所以如果網(wǎng)速不是很理想的服務器基本在裝的時候每次都是timeout,如果可以直接用pip install smac安裝就好了。