![]() 引言模型優(yōu)化是機(jī)器學(xué)習(xí)算法實(shí)現(xiàn)中最困難的挑戰(zhàn)之一。機(jī)器學(xué)習(xí)和深度學(xué)習(xí)理論的所有分支都致力于模型的優(yōu)化。 機(jī)器學(xué)習(xí)中的超參數(shù)優(yōu)化旨在尋找使得機(jī)器學(xué)習(xí)算法在驗(yàn)證數(shù)據(jù)集上表現(xiàn)性能最佳的超參數(shù)。超參數(shù)與一般模型參數(shù)不同,超參數(shù)是在訓(xùn)練前提前設(shè)置的。舉例來說,隨機(jī)森林算法中樹的數(shù)量就是一個超參數(shù),而神經(jīng)網(wǎng)絡(luò)中的權(quán)值則不是超參數(shù)。 其它超參數(shù)有: · 神經(jīng)網(wǎng)絡(luò)訓(xùn)練中的學(xué)習(xí)率 · 支持向量機(jī)中的 參數(shù)和 參數(shù) · k 近鄰算法中的 參數(shù)…… 超參數(shù)優(yōu)化找到一組超參數(shù),這些超參數(shù)返回一個優(yōu)化模型,該模型減少了預(yù)定義的損失函數(shù),進(jìn)而提高了給定獨(dú)立數(shù)據(jù)的預(yù)測或者分類精度。 ![]() 分類算法中的超參數(shù) 超參數(shù)優(yōu)化方法超參數(shù)的設(shè)置對于模型性能有著直接影響,其重要性不言而喻。為了最大化模型性能,了解如何優(yōu)化超參數(shù)至關(guān)重要。接下來介紹了幾種常用的超參數(shù)優(yōu)化方法。 1.手動調(diào)參很多情況下,工程師們依靠試錯法手動對超參數(shù)進(jìn)行調(diào)參優(yōu)化,有經(jīng)驗(yàn)的工程師能夠很大程度上判斷超參數(shù)如何進(jìn)行設(shè)置能夠獲得更高的模型準(zhǔn)確性。但是,這一方法依賴大量的經(jīng)驗(yàn),并且比較耗時(shí),因此發(fā)展出了許多自動化超參數(shù)優(yōu)化方法。 2. 網(wǎng)格化尋優(yōu)(Grid Search)網(wǎng)格化尋優(yōu)可以說是最基本的超參數(shù)優(yōu)化方法。使用這種技術(shù),我們只需為所有超參數(shù)的可能構(gòu)建獨(dú)立的模型,評估每個模型的性能,并選擇產(chǎn)生最佳結(jié)果的模型和超參數(shù)。 ![]() 網(wǎng)格化尋優(yōu)方法 以一個典型的核函數(shù)為 RBF 的 SVM 分類模型為例,其至少有兩個超參數(shù)需要優(yōu)化——正則化常數(shù) 和 核函數(shù)參數(shù) 。這兩個超參數(shù)都是連續(xù)的,需要執(zhí)行網(wǎng)格化尋優(yōu)為每個超參數(shù)選擇合理取值。假設(shè) 。那么網(wǎng)格化尋優(yōu)方法將對每一對( ,)賦值后的 SVM 模型進(jìn)行訓(xùn)練,并在驗(yàn)證集上分別評估它們的性能(或者在訓(xùn)練集內(nèi)進(jìn)行 cross-validation)。最終,網(wǎng)格化尋優(yōu)方法返回在評估過程中得分最高的模型及其超參數(shù)。 通過以下代碼,可以實(shí)現(xiàn)上述方法: 首先,通過 sklearn 庫調(diào)用 GridSearchCV 。 from sklearn.datasets import load_irisfrom sklearn.svm import SVCiris = load_iris()svc = SVR()from sklearn.model_selection import GridSearchCVfrom sklearn.svm import SVRgrid = GridSearchCV( estimator=SVR(kernel='rbf'), param_grid={ 'C': [0.1, 1, 100, 1000], 'epsilon': [0.0001, 0.0005, 0.001, 0.005, 0.01, 0.05, 0.1, 0.5, 1, 5, 10], 'gamma': [0.0001, 0.001, 0.005, 0.1, 1, 3, 5] }, cv=5, scoring='neg_mean_squared_error', verbose=0, n_jobs=-1) 然后擬合網(wǎng)格。
輸出結(jié)果。 #print the best score throughout the grid searchprint grid.best_score_#print the best parameter used for the highest score of the model.print grid.best_param_ 網(wǎng)格化尋優(yōu)的一個缺點(diǎn)是,當(dāng)涉及到多個超參數(shù)時(shí),計(jì)算數(shù)量呈指數(shù)增長。并且這一方法并不能保證搜索會找到完美的超參數(shù)值。 隨機(jī)尋優(yōu)(Random Search)通常并不是所有的超參數(shù)都有同樣的重要性,某些超參數(shù)可能作用更顯著。 而隨機(jī)尋優(yōu)方法相對于網(wǎng)格化尋優(yōu)方法能夠更準(zhǔn)確地確定某些重要的超參數(shù)的最佳值。 ![]() 隨機(jī)尋優(yōu)方法 隨機(jī)尋優(yōu)方法在超參數(shù)網(wǎng)格的基礎(chǔ)上選擇隨機(jī)的組合來進(jìn)行模型訓(xùn)練。 可以控制組合的數(shù)量,基于時(shí)間和計(jì)算資源的情況,選擇合理的計(jì)算次數(shù)。 這一方法可以通過調(diào)用 sklearn 庫中的 randomizedSearchCV 函數(shù)來實(shí)現(xiàn)。 盡管 RandomizedSearchCV 的結(jié)果可能不如GridSearchCV準(zhǔn)確,但它令人意外地經(jīng)常選擇出最好的結(jié)果,而且只花費(fèi)GridSearchCV所需時(shí)間的一小部分。給定相同的資源,RandomizedSearchCV甚至可以優(yōu)于的結(jié)果可能不如GridSearchCV準(zhǔn)確。當(dāng)使用連續(xù)參數(shù)時(shí),兩者的差別如下圖所示。 ![]() 網(wǎng)格化尋優(yōu) VS 隨機(jī)尋優(yōu) 隨機(jī)尋優(yōu)方法找到最優(yōu)參數(shù)的機(jī)會相對更高,但是這一方法適用于低維數(shù)據(jù)的情況,可以在較少迭代次數(shù)的情況下找到正確的參數(shù)集合,并且花費(fèi)的時(shí)間較少。 通過以下代碼,可以實(shí)現(xiàn)上述方法: 首先,通過 sklearn 庫調(diào)用 RandomizedSearchCV 。
然后進(jìn)行計(jì)算。 rf_random.fit(X,y) 輸出結(jié)果。
貝葉斯優(yōu)化方法(Bayesian Optimization)前面兩種方法能夠針對單獨(dú)超參數(shù)組合模型進(jìn)行訓(xùn)練,并評估各自的性能。每個模型都是獨(dú)立的,因此很易于進(jìn)行并行計(jì)算。但是每個模型都是獨(dú)立的,也導(dǎo)致模型之間不具有指導(dǎo)意義,前一模型的計(jì)算結(jié)果并不能影響后一模型的超參數(shù)選擇。 而貝葉斯優(yōu)化方法(順序優(yōu)化方法的一種,sequential model-besed optimization, SMBO)則可以借鑒已有的結(jié)果進(jìn)而影響后續(xù)的模型超參數(shù)選擇。 這也限制了模型訓(xùn)練評估的計(jì)算次數(shù),因?yàn)橹挥杏型岣吣P托阅艿某瑓?shù)組合才會被進(jìn)行計(jì)算。 貝葉斯優(yōu)化是通過構(gòu)造一個函數(shù)的后驗(yàn)分布(高斯過程)來工作的,該后驗(yàn)分布最好地描述了要優(yōu)化的函數(shù)。隨著觀測次數(shù)的增加,后驗(yàn)分布得到改善,算法更加確定參數(shù)空間中哪些區(qū)域值得探索,哪些區(qū)域不值得探索。 ![]() 當(dāng)反復(fù)迭代時(shí),算法會在考慮到它對目標(biāo)函數(shù)的了解的情況下,平衡它的探索和開發(fā)需求。在每個步驟中,高斯過程被擬合到已知的樣本(先前探索的點(diǎn)),后驗(yàn)分布與探索策略(例如UCB(上置信限,upper confidence bound)或EI(預(yù)期改善, expected improvement))被用于確定下一個應(yīng)該探索的點(diǎn)。 通過貝葉斯優(yōu)化方法,可以更高效得探索超參數(shù)變量空間,降低優(yōu)化時(shí)間。 基于梯度的優(yōu)化方法(Gradient-based Optimization)基于梯度的優(yōu)化方法經(jīng)常被用于神經(jīng)網(wǎng)絡(luò)模型中,主要計(jì)算超參數(shù)的梯度,并且通過梯度下降算法進(jìn)行優(yōu)化。 ![]() 這一方法的應(yīng)用場景并不廣泛,其局限性主要在于: 1. 超參數(shù)優(yōu)化通常不是一個平滑的過程 1. 超參數(shù)優(yōu)化往往具有非凸的性質(zhì) 進(jìn)化尋優(yōu)(Evolutionary Optimization)進(jìn)化尋優(yōu)方法的思想來源于生物學(xué)概念,由于自然進(jìn)化是不斷變化的環(huán)境中發(fā)生的一個動態(tài)過程,因此適用于超參數(shù)尋優(yōu)問題,因?yàn)槌瑓?shù)尋優(yōu)也是一個動態(tài)過程。 ![]() 進(jìn)化算法經(jīng)常被用來尋找其他技術(shù)不易求解的近似解。優(yōu)化問題往往沒有一個精確的解決方案,因?yàn)樗赡芴臅r(shí)并且計(jì)算資源占用很大。在這種情況下,進(jìn)化算法通??梢杂脕韺ふ乙粋€足夠的近似最優(yōu)解。 進(jìn)化算法的一個優(yōu)點(diǎn)是,它們可以產(chǎn)生出不受人類誤解或偏見影響的解決方案。 作為一個一般性的經(jīng)驗(yàn)法則,任何時(shí)候想要優(yōu)化調(diào)整超參數(shù),優(yōu)先考慮網(wǎng)格化尋優(yōu)方法和隨機(jī)尋優(yōu)方法! 總結(jié)在本文中,我們了解到為超參數(shù)找到正確的值可能是一項(xiàng)令人沮喪的任務(wù),并可能導(dǎo)致機(jī)器學(xué)習(xí)模型的欠擬合或過擬合。我們看到了如何通過使用網(wǎng)格化尋優(yōu)、隨機(jī)尋優(yōu)和其他算法來克服這一障礙。 |
|