机器学习模型定点化_机器学习模型的超参数优化
引言
模型優(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),并且比較耗時,因此發(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)格。
grid.fit(X,y)輸出結(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ù)量呈指數(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ù)。 這一方法可以通過調(diào)用 sklearn 庫中的 randomizedSearchCV 函數(shù)來實(shí)現(xiàn)。
盡管 RandomizedSearchCV 的結(jié)果可能不如GridSearchCV準(zhǔn)確,但它令人意外地經(jīng)常選擇出最好的結(jié)果,而且只花費(fèi)GridSearchCV所需時間的一小部分。給定相同的資源,RandomizedSearchCV甚至可以優(yōu)于的結(jié)果可能不如GridSearchCV準(zhǔn)確。當(dāng)使用連續(xù)參數(shù)時,兩者的差別如下圖所示。
網(wǎng)格化尋優(yōu) VS 隨機(jī)尋優(yōu)
隨機(jī)尋優(yōu)方法找到最優(yōu)參數(shù)的機(jī)會相對更高,但是這一方法適用于低維數(shù)據(jù)的情況,可以在較少迭代次數(shù)的情況下找到正確的參數(shù)集合,并且花費(fèi)的時間較少。
通過以下代碼,可以實(shí)現(xiàn)上述方法:
首先,通過 sklearn 庫調(diào)用 RandomizedSearchCV 。
from sklearn.datasets import load_irisfrom sklearn.ensemble import RandomForestRegressoriris = load_iris()rf = RandomForestRegressor(random_state = 42)from sklearn.model_selection import RandomizedSearchCVrandom_grid = {'n_estimators': n_estimators, 'max_features': max_features, 'max_depth': max_depth, 'min_samples_split': min_samples_split, 'min_samples_leaf': min_samples_leaf, 'bootstrap': bootstrap}rf_random = RandomizedSearchCV(estimator = rf, param_distributions = random_grid, n_iter = 100, cv = 3, verbose=2, random_state=42, n_jobs = -1)# Fit the random search model然后進(jìn)行計算。
rf_random.fit(X,y)輸出結(jié)果。
#print the best score throughout the grid searchprint rf_random.best_score_#print the best parameter used for the highest score of the model.print rf_random.best_param_Output:{'bootstrap': True, 'max_depth': 70, 'max_features': 'auto', 'min_samples_leaf': 4, 'min_samples_split': 10, 'n_estimators': 400}貝葉斯優(yōu)化方法(Bayesian Optimization)
前面兩種方法能夠針對單獨(dú)超參數(shù)組合模型進(jìn)行訓(xùn)練,并評估各自的性能。每個模型都是獨(dú)立的,因此很易于進(jìn)行并行計算。但是每個模型都是獨(dú)立的,也導(dǎo)致模型之間不具有指導(dǎo)意義,前一模型的計算結(jié)果并不能影響后一模型的超參數(shù)選擇。 而貝葉斯優(yōu)化方法(順序優(yōu)化方法的一種,sequential model-besed optimization, SMBO)則可以借鑒已有的結(jié)果進(jìn)而影響后續(xù)的模型超參數(shù)選擇。
這也限制了模型訓(xùn)練評估的計算次數(shù),因?yàn)橹挥杏型岣吣P托阅艿某瑓?shù)組合才會被進(jìn)行計算。
貝葉斯優(yōu)化是通過構(gòu)造一個函數(shù)的后驗(yàn)分布(高斯過程)來工作的,該后驗(yàn)分布最好地描述了要優(yōu)化的函數(shù)。隨著觀測次數(shù)的增加,后驗(yàn)分布得到改善,算法更加確定參數(shù)空間中哪些區(qū)域值得探索,哪些區(qū)域不值得探索。
當(dāng)反復(fù)迭代時,算法會在考慮到它對目標(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)化時間。
基于梯度的優(yōu)化方法(Gradient-based Optimization)
基于梯度的優(yōu)化方法經(jīng)常被用于神經(jīng)網(wǎng)絡(luò)模型中,主要計算超參數(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并且計算資源占用很大。在這種情況下,進(jìn)化算法通常可以用來尋找一個足夠的近似最優(yōu)解。 進(jìn)化算法的一個優(yōu)點(diǎn)是,它們可以產(chǎn)生出不受人類誤解或偏見影響的解決方案。
作為一個一般性的經(jīng)驗(yàn)法則,任何時候想要優(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)和其他算法來克服這一障礙。
作者:Nagesh Singh Chauhan
deephub翻譯組:Oliver Lee
總結(jié)
以上是生活随笔為你收集整理的机器学习模型定点化_机器学习模型的超参数优化的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 电脑e盘不见了如何找回
- 下一篇: 中leetcode提示未登录_分享一款将