2018年6月16日 星期六

[Spark 學習小筆記] 什麼是 Hyperparameter Tunning? 有什麼方法?



不論在學習或是工作常常都經歷過一段知其然不知其所以然的階段,是否能突破其實就是看有沒有這個機運和決心去突破,話說之前在翻譯 Spark ML 那本書時,看到 Grid Search (網格搜尋) 和 Random Search (隨機搜尋) 的時候其實是一頭霧水,只知道是用來搜尋Hyperparameter 的演算法,但是原理和如何使用卻是一無所知,直到最近開始利用Spark 開發Machine Learning 專案,就慢慢開始有感覺了。



訓練每個Machine Learning  演算法都會有專屬於他的參數可以做調整,舉Word2Vector 為例,就至少有兩個參數:
  • Vector Size
  • Window
那我們要怎麼知道給怎樣的參數Train 出來的Model 是最好的?最直觀的作法就是用For 回圈把所有的排列組合都跑一遍,也就是所謂的 Grid Search:以固定的間隔,把所有可能的參數組合都跑一遍找出最佳組合。

雖說 Grid search 最直觀也最好實作,但是有兩大缺點:
  1. 如果參數少那還好,一個參數就是一維 Grid O(n),兩個參數就是二維 Grid O(n^2),也就是說每增加一個參數就等於是增加一個維度,超過三圍以上的Grid 就很難想像和視覺化。
  2. 此外如果資料量小,Train 一個 model 不用花太多時間還可以接受,但是只要資料量一大,這個方法就會變的曠日費時。
這時候就產生了第二種方法,Random Search 隨機搜尋,讓我感到驚訝的是,這種方法居然有效,而且大大縮短搜尋得時間,而且很難打敗這個方法,詳情請參考這篇論文:Bergstra & Bengio’s “Random Search for Hyper-Parameter Optimization”

當然學術界不會因此就滿意,後來又研究出 Bayesian optimization,有興趣的可以參考下面的投影片。




最近的感想就是一旦開始玩Machine Learning 就會不斷的在工程與學術間切換,一方面要考量工程的議題:如何快速開發,如何模組化,如何調教效能...,一方面又要開始看論文研究有什麼更好的演算法,或是更好的方法。

說實在還蠻享受這種每天都有腦漿燒乾的感覺,但是不知道還有多少可以燒...XD

Reference:

[1] Bayesian Optimization for Hyperparameter Tuning
[2] What methods do you prefer when performing hyperparameter optimization?


張貼留言