Lesson 10.1Lesson 10.2 开篇:超参数优化与枚举网格搜索的理论极限随机网格搜索
目錄
一 超參數(shù)優(yōu)化與枚舉網(wǎng)格的理論極限
二 隨機網(wǎng)格搜索RandomSearchCV
? 1 隨機網(wǎng)格搜索的基本原理
? 2 隨機網(wǎng)格搜索實現(xiàn)
? 3 隨機網(wǎng)格的理論極限
三 Halving網(wǎng)格搜索HalvingSearchCV
? 1 對半網(wǎng)格搜索的基本流程
? 2 對半網(wǎng)格搜索的實現(xiàn)
? 3 對半隨機網(wǎng)格搜索
四 【加餐】AutoML前沿進展
? 1 自動化第三方框架
? 2 AutoML三大成熟研究領(lǐng)域
? 3 AutoML的新興研究
一 超參數(shù)優(yōu)化與枚舉網(wǎng)格的理論極限
- 超參數(shù)優(yōu)化HPO(HyperParameter Optimization)
每一個機器學(xué)習(xí)算法都會有超參數(shù),而超參數(shù)的設(shè)置很大程度上影響了算法實際的使用效果,因此調(diào)參是機器學(xué)習(xí)算法工程師最為基礎(chǔ)和重要的任務(wù)。現(xiàn)代機器學(xué)習(xí)與深度學(xué)習(xí)算法的超參數(shù)量眾多,不僅實現(xiàn)方法異常靈活、算法性能也受到更多的參數(shù)的復(fù)合影響,因此當(dāng)人工智能浪潮來臨時,可以自動選擇超參數(shù)的超參數(shù)優(yōu)化HPO領(lǐng)域也迎來了新一輪爆發(fā)。
在算法的世界中,我們渴望一切流程最終都走向完美自動化,專門研究機器學(xué)習(xí)自動化的學(xué)科被稱為AutoML,而超參數(shù)自動優(yōu)化是AutoML中最成熟、最深入、也是最知名的方向。理論上來說,當(dāng)算力與數(shù)據(jù)足夠時,HPO的性能一定是超過人類的。HPO能夠降低人為工作量,并且HPO得出的結(jié)果比認為搜索的復(fù)現(xiàn)可能性更高,所以HPO可以極大程度提升科學(xué)研究的復(fù)現(xiàn)性和公平性。當(dāng)代超參數(shù)優(yōu)化算法主要可以分為:
基于網(wǎng)格的各類搜索(Grid)
基于貝葉斯優(yōu)化的各類優(yōu)化算法(Baysian)
基于梯度的各類優(yōu)化(Gradient-based)
基于種群的各類優(yōu)化(進化算法,遺傳算法等)
其中,各類網(wǎng)格搜索方法與基于貝葉斯的優(yōu)化方法是最為盛行的,貝葉斯優(yōu)化方法甚至可以被稱為是當(dāng)代超參數(shù)優(yōu)化中的SOTA模型。這些模型對于復(fù)雜集成算法的調(diào)整有極大的作用與意義。
- 網(wǎng)格搜索的理論極限與缺點
在所有超參數(shù)優(yōu)化的算法當(dāng)中,枚舉網(wǎng)格搜索是最為基礎(chǔ)和經(jīng)典的方法。在搜索開始之前,我們需要人工將每個超參數(shù)的備選值一一列出,多個不同超參數(shù)的不同取值之間排列組合,最終將組成一個參數(shù)空間(parameter space)。枚舉網(wǎng)格搜索算法會將這個參數(shù)空間當(dāng)中所有的參數(shù)組合帶入模型進行訓(xùn)練,最終選出泛化能力最強的組合作為模型的最終超參數(shù)。
對網(wǎng)格搜索而言,如果參數(shù)空間中的某一個點指向了損失函數(shù)真正的最小值,那枚舉網(wǎng)格搜索時一定能夠捕捉到該最小值以及對應(yīng)的參數(shù)(相對的,假如參數(shù)空間中沒有任意一點指向損失函數(shù)真正的最小值,那網(wǎng)格搜索就一定無法找到最小值對應(yīng)的參數(shù)組合)。
參數(shù)空間越大、越密,參數(shù)空間中的組合剛好覆蓋損失函數(shù)最小值點的可能性就會越大。這是說,極端情況下,當(dāng)參數(shù)空間窮盡了所有可能的取值時,網(wǎng)格搜索一定能夠找到損失函數(shù)的最小值所對應(yīng)的最優(yōu)參數(shù)組合,且該參數(shù)組合的泛化能力一定是強于人工調(diào)參的。
但是,參數(shù)空間越大,網(wǎng)格搜索所需的算力和時間也會越大,當(dāng)參數(shù)維度上升時,網(wǎng)格搜索所需的計算量更是程指數(shù)級上升的。以隨機森林為例:
只有1個參數(shù)n_estimators,備選范圍是[50,100,150,200,250,300],需要建模6次。
增加參數(shù)max_depth,且備選范圍是[2,3,4,5,6],需要建模30次。
增加參數(shù)min_sample_split,且備選范圍為[2,3,4,5],需要建模120次。
同時,參數(shù)優(yōu)化的目標(biāo)是找出令模型泛化能力最強的組合,因此需要交叉驗證來體現(xiàn)模型的泛化能力,假設(shè)交叉驗證次數(shù)為5,則三個參數(shù)就需要建模600次。在面對超參數(shù)眾多、且超參數(shù)取值可能無限的人工神經(jīng)網(wǎng)絡(luò)、融合模型、集成模型時,伴隨著數(shù)據(jù)和模型的復(fù)雜度提升,網(wǎng)格搜索所需要的時間會急劇增加,完成一次枚舉網(wǎng)格搜索可能需要耗費幾天幾夜。考慮到后續(xù)實踐過程中,算法和數(shù)據(jù)都將更加復(fù)雜,而建模過程中超參數(shù)調(diào)優(yōu)是模型訓(xùn)練的必備環(huán)節(jié),因此,我們急需尋找到一種更加高效的超參數(shù)搜索方法。在本節(jié)課中,我們將介紹三種基于網(wǎng)格進行改進的超參數(shù)優(yōu)化方法,并將他們的結(jié)果與網(wǎng)格搜索進行時間/空間/效果上的對比。
- 建立benchmark:隨機森林中枚舉網(wǎng)格搜索的結(jié)果
二 隨機網(wǎng)格搜索RandomizedSearchCV
- 基本原理
在講解網(wǎng)格搜索時我們提到,伴隨著數(shù)據(jù)和模型的復(fù)雜度提升,網(wǎng)格搜索所需要的時間急劇增加。以隨機森林算法為例,如果使用過萬的數(shù)據(jù),搜索時間則會立刻上升好幾個小時。因此,我們急需尋找到一種更加高效的超參數(shù)搜索方法。
首先,當(dāng)所使用的算法確定時,決定枚舉網(wǎng)格搜索運算速度的因子一共有兩個:
1 參數(shù)空間的大小:參數(shù)空間越大,需要建模的次數(shù)越多
2 數(shù)據(jù)量的大小:數(shù)據(jù)量越大,每次建模時需要的算力和時間越多
因此,sklearn中的網(wǎng)格搜索優(yōu)化方法主要包括兩類,其一是調(diào)整搜索空間,其二是調(diào)整每次訓(xùn)練的數(shù)據(jù)。其中,調(diào)整參數(shù)空間的具體方法,是放棄原本的搜索中必須使用的全域超參數(shù)空間,改為挑選出部分參數(shù)組合,構(gòu)造超參數(shù)子空間,并只在子空間中進行搜索。
以下圖的二維空間為例,在這個n_estimators與max_depth共同組成的參數(shù)空間中,n_estimators的取值假設(shè)為[50,100,150,200,250,300],max_depth的取值假設(shè)為[2,3,4,5,6],則枚舉網(wǎng)格搜索必須對30種參數(shù)組合都進行搜索。當(dāng)我們調(diào)整搜索空間,我們可以只抽樣出橙色的參數(shù)組合作為“子空間”,并只對橙色參數(shù)組合進行搜索。如此一來,整體搜索所需的計算量就大大下降了,原本需要30次建模,現(xiàn)在只需要8次建模。
fig, [ax1, ax2] = plt.subplots(1,2,dpi=300) n_e_list = [*range(50,350,50)] m_d_list = [*range(2,7)] comb = pd.DataFrame([(n_estimators, max_depth) for n_estimators in n_e_list for max_depth in m_d_list])ax1.scatter(comb.iloc[:,0],comb.iloc[:,1],cmap="Blues") ax1.set_xticks([*range(50,350,50)]) ax1.set_yticks([*range(2,7)]) ax1.set_xlabel("n_estimators") ax1.set_ylabel("max_depth") ax1.set_title("GridSearch")ax2.scatter(comb.iloc[:,0],comb.iloc[:,1],cmap="Blues") ax2.scatter([50,250,200,200,300,100,150,150],[4,2,6,3,2,3,2,5],cmap="red",s=20,linewidths=5) ax2.set_xticks([*range(50,350,50)]) ax2.set_yticks([*range(2,7)]) ax2.set_xlabel("n_estimators") ax2.set_ylabel("max_depth") ax2.set_title("RandomSearch");在sklearn中,隨機抽取參數(shù)子空間并在子空間中進行搜索的方法叫做隨機網(wǎng)格搜索RandomizedSearchCV。由于搜索空間的縮小,需要枚舉和對比的參數(shù)組的數(shù)量也對應(yīng)減少,整體搜索耗時也將隨之減少,因此:
當(dāng)設(shè)置相同的全域空間時,隨機搜索的運算速度比枚舉網(wǎng)格搜索快很多。
當(dāng)設(shè)置相同的訓(xùn)練次數(shù)時,隨機搜索可以覆蓋的空間比枚舉網(wǎng)格搜索大很多。
同時,絕妙的是,隨機網(wǎng)格搜索得出的最小損失與枚舉網(wǎng)格搜索得出的最小損失很接近。
可以說,是提升了運算速度,又沒有過多地傷害搜索的精度。
不過,需要注意的是,隨機網(wǎng)格搜索在實際運行時,并不是先抽樣出子空間,再對子空間進行搜索,而是仿佛“循環(huán)迭代”一般,在這一次迭代中隨機抽取1組參數(shù)進行建模,下一次迭代再隨機抽取1組參數(shù)進行建模,由于這種隨機抽樣是不放回的,因此不會出現(xiàn)兩次抽中同一組參數(shù)的問題。我們可以控制隨機網(wǎng)格搜索的迭代次數(shù),來控制整體被抽出的參數(shù)子空間的大小,這種做法往往被稱為“賦予隨機網(wǎng)格搜索固定的計算量,當(dāng)全部計算量被消耗完畢之后,隨機網(wǎng)格搜索就停止”。
- 隨機網(wǎng)格搜索的實現(xiàn)
class?sklearn.model_selection.RandomizedSearchCV(estimator, param_distributions, *, n_iter=10, scoring=None, n_jobs=None, refit=True, cv=None, verbose=0, pre_dispatch='2*n_jobs', random_state=None, error_score=nan, return_train_score=False)
全部參數(shù)解讀如下,其中加粗的是隨機網(wǎng)格搜索獨有的參數(shù):
隨機網(wǎng)格搜索可以輸入連續(xù)的參數(shù),普通網(wǎng)格搜索不能輸入連續(xù)的參數(shù)。?
我們依然借用之前在網(wǎng)格搜索上見過的X和y,以及隨機森林回歸器,來實現(xiàn)隨機網(wǎng)格搜索:
X.shape #(1460, 80)X.head() y.describe() #count 1460.000000 #mean 180921.195890 #std 79442.502883 #min 34900.000000 #25% 129975.000000 #50% 163000.000000 #75% 214000.000000 #max 755000.000000 #Name: SalePrice, dtype: float64- 相同的全域參數(shù)空間
很明顯,在相同參數(shù)空間、相同模型的情況下,隨機網(wǎng)格搜索的運算速度是普通網(wǎng)格搜索的一半,當(dāng)然,這與子空間是全域空間的一半有很大的聯(lián)系。由于隨機搜索只是降低搜索的次數(shù),并非影響搜索過程本身,因此其運行時間基本就等于n_iter/全域空間組合數(shù) * 網(wǎng)格搜索的運行時間。
- 隨機網(wǎng)格搜索的理論極限
雖然通過縮小子空間可以提升搜索的速度,但是隨機網(wǎng)格搜索的精度看起來并沒有削減太多,隨機網(wǎng)格搜索可以得到和網(wǎng)格搜索一樣好的結(jié)果嗎?它也像網(wǎng)格搜索一樣,可以得到最優(yōu)的參數(shù)組合嗎?為什么縮小參數(shù)空間之后,隨機網(wǎng)格搜索的結(jié)果還與網(wǎng)格搜索一致?
理論上來說,枚舉網(wǎng)格搜索的上限和隨機網(wǎng)格搜索的上限哪個高?
從直覺上來說,我們很難回答這些問題,但我們可以從數(shù)學(xué)的隨機過程的角度來理解這個問題。在機器學(xué)習(xí)算法當(dāng)中,有非常多通過隨機來提升運算速度(比如Kmeans,隨機挑選樣本構(gòu)建簇心,小批量隨機梯度下降,通過隨機來減少每次迭代需要的樣本)、或通過隨機來提升模型效果的操作(比如隨機森林,比如極度隨機樹)。兩種隨機背后的原理完全不同,而隨機網(wǎng)格搜索屬于前者,這一類機器學(xué)習(xí)方法總是伴隨著“從某個全數(shù)據(jù)集/全域中進行抽樣”的操作,而這種操作能夠有效的根本原因在于:
- 抽樣出的子空間可以一定程度上反饋出全域空間的分布,且子空間相對越大(含有的參數(shù)組合數(shù)越多),子空間的分布越接近全域空間的分布
? - 當(dāng)全域空間本身足夠密集時,很小的子空間也能獲得與全域空間相似的分布
? - 如果全域空間包括了理論上的損失函數(shù)最小值,那一個與全域空間分布高度相似的子空間很可能也包括損失函數(shù)的最小值,或包括非常接近最小值的一系列次小值
上述數(shù)學(xué)事實聽起來比較抽象,但其實我們可以通過繪制圖像來直觀地呈現(xiàn)這些事實。許多在數(shù)學(xué)上比較抽象的概念都可以被可視化。在這里,我們借助matplotlib工具庫mplot3d中的一組默認數(shù)據(jù)。
from mpl_toolkits.mplot3d import axes3d p1, p2, MSE = axes3d.get_test_data(0.05) #自動獲取數(shù)據(jù)的功能get_test_data,可以自動生成復(fù)合某一分布的數(shù)據(jù) #我們現(xiàn)在假設(shè)這一組數(shù)據(jù)中有兩個參數(shù),p1與p2,兩個參數(shù)組成的參數(shù)組合對應(yīng)著損失函數(shù)值MSE #參數(shù)0.05是指參數(shù)空間中,點與點之間的距離 #因此該數(shù)字越小,取出來的樣本越多l(xiāng)en(p1) #參數(shù)1的取值有120個 #120 len(p2) #參數(shù)2的取值也有120個 #120請問現(xiàn)在參數(shù)空間當(dāng)中一共有多少個參數(shù)組合?120*120=14400種組合,所以參數(shù)空間中一共有14400個點。
MSE.shape #損失函數(shù)值,總共14400個點 #(120, 120)#繪制P1與P2的參數(shù)空間 - 這是一個呈現(xiàn)出14400個點的密集空間 plt.figure(dpi=300) plt.scatter(p1,p2,s=0.2) plt.xticks(fontsize=9) plt.yticks(fontsize=9); #參數(shù)與損失共同構(gòu)建的函數(shù) p1, p2, MSE = axes3d.get_test_data(0.05) plt.figure(dpi=300) ax = plt.axes(projection="3d") ax.plot_wireframe(p1,p2,MSE,rstride=2,cstride=2,linewidth=0.5) ax.view_init(2, -15) ax.zaxis.set_tick_params(labelsize=7) ax.xaxis.set_tick_params(labelsize=7) ax.yaxis.set_tick_params(labelsize=7); np.min(MSE) #整個參數(shù)空間中,可獲得的MSE最小值是-73.39 #-73.39620971601681#現(xiàn)在,我們從該空間上抽取子空間 import numpy as np MSE.shape #(120, 120) #我們從空間中抽取n個組合,n越大子空間越大 #現(xiàn)在總共有14400個組合 #對被抽中的點來說,損失函數(shù)的值就是MSE,對沒有抽中的點來說,損失函數(shù)值是空值 #因此,我們只需要找出沒有抽中的點,并讓它的損失函數(shù)值MSE為空就可以了n = 100 #從0~14400中生成(14400-n)個隨機數(shù),形成沒有被抽到子空間中的點的索引 unsampled = np.random.randint(0,14400,14400-n)p1, p2, MSE = axes3d.get_test_data(0.05)#拉平MSE,并將所有沒抽中的點的損失函數(shù)變?yōu)榭罩?MSE = MSE.ravel() MSE[unsampled] = np.nan MSE = MSE.reshape((120,120)) #設(shè)置完畢空值后,記得把MSE恢復(fù)成原來的結(jié)構(gòu),否則繪圖報錯#參數(shù)與損失共同構(gòu)建的函數(shù) plt.figure(dpi=300) ax = plt.axes(projection="3d") ax.view_init(2, -15) ax.plot_wireframe(p1,p2,MSE,rstride=2,cstride=2,linewidth=0.5) ax.zaxis.set_tick_params(labelsize=7) ax.xaxis.set_tick_params(labelsize=7) ax.yaxis.set_tick_params(labelsize=7);#求出當(dāng)前損失函數(shù)上的最小值 #注意此時因為MSE中含有了空值,因此要先排除空值影響,否則min函數(shù)會返回空值 MSE = MSE.ravel().tolist() MSE = [x for x in MSE if str(x) != 'nan'] print(np.min(MSE)) #-73.24243733589367我們可以在圖像上驗證如下事實:
- 抽樣出的子空間可以一定程度上反饋出全域空間的分布,且子空間相對越大(含有的參數(shù)組合數(shù)越多),子空間的分布越接近全域空間的分布
? - 當(dāng)全域空間本身足夠密集時,很小的子空間也能獲得與全域空間相似的分布
? - 如果全域空間包括了理論上的損失函數(shù)最小值,那一個與全域空間分布高度相似的子空間很可能也包括損失函數(shù)的最小值,或包括非常接近最小值的一系列次小值
因此,只要子空間足夠大,隨機網(wǎng)格搜索的效果一定是高度逼近枚舉網(wǎng)格搜索的。在全域參數(shù)空間固定時,隨機網(wǎng)格搜索可以在效率與精度之間做權(quán)衡。子空間越大,精度越高,子空間越小,效率越高。
- 更大/更密集的全域空間
不過,由于隨機網(wǎng)格搜索計算更快,所以在相同計算資源的前提下,我們可以對隨機網(wǎng)格搜索使用更大的全域空間,因此隨機搜索可能得到比網(wǎng)格搜索更好的效果:
#創(chuàng)造參數(shù)空間 - 讓整體參數(shù)空間變得更密 param_grid_simple = {'n_estimators': [*range(80,100,1)], 'max_depth': [*range(10,25,1)], "max_features": [*range(10,20,1)], "min_impurity_decrease": [*np.arange(0,5,10)]} #計算全域參數(shù)空間大小,這是我們能夠抽樣的最大值 count_space(param_grid_simple) #3000#建立回歸器、交叉驗證 reg = RFR(random_state=1412,verbose=True,n_jobs=-1) cv = KFold(n_splits=5,shuffle=True,random_state=1412)#定義隨機搜索 search = RandomizedSearchCV(estimator=reg,param_distributions=param_grid_simple,n_iter = 1536 #使用與枚舉網(wǎng)格搜索類似的擬合次數(shù),scoring = "neg_mean_squared_error",verbose = True,cv = cv,random_state=1412,n_jobs=-1) #訓(xùn)練隨機搜索評估器 #=====【TIME WARNING: 5~10min】=====# start = time.time() search.fit(X,y) end = time.time() - start print(end/60) #Fitting 5 folds for each of 1536 candidates, totalling 7680 fits #3.8464645385742187#查看最佳評估器 search.best_estimator_ #RandomForestRegressor(max_depth=22, max_features=14, min_impurity_decrease=0, # n_estimators=89, n_jobs=-1, random_state=1412, # verbose=True)#查看最終評估指標(biāo) abs(search.best_score_)**0.5 #29012.90569846546rebuild_on_best_param(search.best_estimator_) #訓(xùn)練RMSE:11208.818 #測試RMSE:28346.673可以發(fā)現(xiàn),當(dāng)全域參數(shù)空間增大之后,隨即網(wǎng)格搜索可以使用與小空間上的網(wǎng)格搜索相似或更少的時間,來探索更密集/更大的空間,從而獲得更好的結(jié)果。除了可以容忍更大的參數(shù)空間之外,隨機網(wǎng)格搜索還可以接受連續(xù)性變量作為參數(shù)空間的輸入。
- 連續(xù)型的參數(shù)空間
對于網(wǎng)格搜索來說,參數(shù)空間中的點是分布均勻、間隔一致的,因為網(wǎng)格搜索無法從某種“分布”中提取數(shù)據(jù),只能使用組合好的參數(shù)組合點,而隨機搜索卻可以接受“分布”作為輸入。如上圖所示,對于網(wǎng)格搜索來說,損失函數(shù)的最低點很不幸的、位于兩組參數(shù)之間,在這種情況下,枚舉網(wǎng)格搜索是100%不可能找到最小值的。但對于隨機網(wǎng)格搜索來說,由于是一段分布上隨機選擇參數(shù)點,因此在同樣的參數(shù)空間中,取到更好的值的可能性更大。
import scipy #使用scipy來幫助我們建立分布 scipy.stats.uniform(loc=1,scale=100) #<scipy.stats._distn_infrastructure.rv_frozen at 0x137a147d7c0>uniform是均勻分布,默認生成[0,1]之間的數(shù)字,可以使用loc來調(diào)整起點,scale來調(diào)整終點。我們還可以選擇其他的分布,比如指數(shù)分布expon, gamma分布, 或者是randint。注意scipy這里并不是像np.linspace()一樣生成一段離散的數(shù)字,而是直接生成一個分布對象。并且,我們并沒有在分布對象中指定尺寸,也就是說,在這段分布上究竟要取幾個隨機的參數(shù)備選值,是由隨機搜索自己決定的。理論上來說,我們給出的n_iter越大,任意參數(shù)的分布上可能被取到的點就越多。因此,當(dāng)參數(shù)空間中包含某個分布的時候,我們無法估計全域參數(shù)空間的大小。
在之前調(diào)整隨機森林的時候,我們給出的所有參數(shù)都是只能接納正整數(shù)的參數(shù),因此在這里我們可以使用scipy.stats.randint,不過randint并不是嚴(yán)格意義上的連續(xù)分布。
嚴(yán)格來說,連續(xù)型搜索更適用于學(xué)習(xí)率,C,alpha這樣的參數(shù)(無上限,以浮點數(shù)為主),隨機森林的參數(shù)中最接近這個定義的是min_impurity_decrease,表示決策樹在分枝是可以容忍的最小的不純度下降量。我們借著這個參數(shù),使用均勻分布來進行搜索試試看。
param_grid_simple = {'n_estimators': [*range(80,100,1)], 'max_depth': [*range(10,25,1)], "max_features": [*range(10,20,1)], "min_impurity_decrease": scipy.stats.uniform(0,50)}#建立回歸器、交叉驗證 reg = RFR(random_state=1412,verbose=True,n_jobs=12) cv = KFold(n_splits=5,shuffle=True,random_state=1412)#定義隨機搜索 search = RandomizedSearchCV(estimator=reg,param_distributions=param_grid_simple,n_iter = 1536 #還是使用1536這個搜索次數(shù),scoring = "neg_mean_squared_error",verbose = True,cv = cv,random_state=1412,n_jobs=12)#訓(xùn)練隨機搜索評估器 #=====【TIME WARNING: 5~10min】=====# start = time.time() search.fit(X,y) end = time.time() - start print(end/60) #Fitting 5 folds for each of 1536 candidates, totalling 7680 fits #3.921058924992879#查看最佳評估器 search.best_estimator_ #RandomForestRegressor(max_depth=22, max_features=14, # min_impurity_decrease=20.070367229896224, n_estimators=98, # n_jobs=12, random_state=1412, verbose=True)#查看最終評估指標(biāo) abs(search.best_score_)**0.5 #29148.381610182565rebuild_on_best_param(search.best_estimator_) #訓(xùn)練RMSE:11184.428 #測試RMSE:28495.682在本次搜索當(dāng)中,由于我們之前已經(jīng)知道最好的可能的min_impurity_decrease的值為0,因此強行向更大的數(shù)拓展搜索空間可能會導(dǎo)致模型效果下降。不過在隨機森林當(dāng)中,min_impurity_decrease是唯一可以使用分布進行搜索的參數(shù),因此在這里我們就容忍了這部分表現(xiàn)上升。
理論上來說,當(dāng)枚舉網(wǎng)格搜索所使用的全域參數(shù)空間足夠大/足夠密集時,枚舉網(wǎng)格搜索的最優(yōu)解是隨機網(wǎng)格搜索的上限,因此理論上隨機網(wǎng)格搜索不會得到比枚舉網(wǎng)格搜索更好的結(jié)果。
但現(xiàn)實中的問題是,由于枚舉網(wǎng)格搜索的速度太慢,因此枚舉網(wǎng)格搜索的全域參數(shù)空間往往無法設(shè)置得很大,也無法設(shè)置得很密集,因此網(wǎng)格搜索的結(jié)果很難接近理論上的最優(yōu)值。當(dāng)隨機網(wǎng)格搜索將空間設(shè)置更大、更密集時,就可以捕獲更廣空間的分布,也自然就可能捕獲到理論上的最優(yōu)值了。
總結(jié)
以上是生活随笔為你收集整理的Lesson 10.1Lesson 10.2 开篇:超参数优化与枚举网格搜索的理论极限随机网格搜索的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 美赛O奖、F奖论文写作技巧!【微信公众号
- 下一篇: Windows10安装Matlab 20