超參數優化比較之網格搜尋、隨機搜尋和貝葉斯優化
本文將詳細介紹用來提高機器學習效果的最常見的超參數最佳化方法。
譯者| 朱先忠
審校| 孫淑娟
簡介
通常,在嘗試改進機器學習模型時,人們首先想到的解決方案是增加更多的訓練資料。額外的數據通常是有幫助(在某些情況下除外)的,但產生高品質的數據可能非常昂貴。透過使用現有數據獲得最佳模型效能,超參數優化可以節省我們的時間和資源。
顧名思義,超參數最佳化是為機器學習模型確定最佳超參數組合以滿足最佳化函數(即,給定研究中的資料集,最大化模型的效能)的過程。換句話說,每個模型都會提供多個有關選項的調整“按鈕”,我們可以改變它們,直到我們模型的超參數達到最佳組合。在超參數優化過程中,我們可以更改的參數的一些範例可以是學習率、神經網路的架構(例如,隱藏層的數量)、正規化等。
在這篇文章中,我們將從概念上介紹三種最常見的超參數優化方法,即網格搜尋、隨機搜尋和貝葉斯優化,然後將它們逐一實現。
我將在文章一開始提供一個高層次的比較表,以供讀者參考,然後將在本文的其餘部分進一步探討、解釋和實施比較表中的每一項。
表1:超參數最佳化方法比較
#1.網格搜尋演算法
網格搜尋可能是超參數優化的最簡單和最直觀的方法,它涉及在定義的搜尋空間中徹底搜尋超參數的最佳組合。在此上下文中的「搜尋空間」是整個超參數以及在最佳化過程中考慮的此類超參數的值。讓我們透過一個範例來更好地理解網格搜尋。
假設我們有一個只有三個參數的機器學習模型,每個參數都可以移除表格中提供的值:
parameter_1 = [1 , 2, 3]
parameter_2 = [a, b, c]
parameter_3 = [x, y, z]
我們不知道這些參數的哪個組合將優化我們的模型的最佳化功能(即為我們的機器學習模型提供最佳輸出)。在網格搜尋中,我們只需嘗試這些參數的每一個組合,測量每個參數的模型效能,然後簡單地選擇產生最佳效能的組合!在此範例中,參數1可以取3個值(即1、2或3),參數2可以取3種值(即a、b和c),參數3可以取3種值(即x、y和z)。換句話說,總共有3*3*3=27個組合。本例中的網格搜尋將涉及27輪評估機器學習模型的性能,以找到性能最佳的組合。
如您所見,這種方法非常簡單(類似於試誤任務),但也有一些限制。讓我們一起總結一下此方法的優點和缺點。
其中,優勢包括:
- 易於理解和實施
- 易於並行化
- 適用於離散和連續空間缺點主要有:
- 在具有大量超參數的大型和/或複雜模型中成本高昂(因為必須嘗試和評估所有組合)
- 無記憶——不從過去的觀察中學習
- 如果搜尋空間太大,可能無法找到最佳組合我的建議是,如果您有一個搜尋空間較小的簡單模型,請使用網格搜尋;否則,建議繼續往下閱讀以找到更適合更大搜尋空間的解決方案。
現在,讓我們用一個真實的範例來實現網格搜尋。
1.1.網格搜索演算法實現
為了實現網格搜索,我們將使用scikit-learn中的Iris資料集創建一個隨機森林分類模型。此資料集包括3種不同的鳶尾花瓣和萼片長度,將用於本次分類練習。在本文中,模型開發是次要的,因為目標是比較各種超參數最佳化策略的效能。我鼓勵您專注於模型評估結果,以及每種超參數最佳化方法達到所選超參數集所需的時間。我將描述運行結果,然後為本文中使用的三種方法提供一個匯總比較表。
包含所有超參數值的搜尋空間,定義如下:
search_space = {'n_estimators': [10, 100, 500, 1000],
'max_depth' : [2, 10, 25, 50, 100],
'min_samples_split': [2, 5, 10],
'min_samples_leaf': [1, 5, 10]}
上述搜尋空間由4*5*3*3=180個超參數的總組合組成。我們將使用網格搜尋來找到最佳化目標函數的組合,如下所示:
# Import libraries
from sklearn.model_selection import GridSearchCV
from sklearn.datasets import load_iris
from sklearn.ensemble import RandomForestClassifier#cross-from skle#. import time
# 載入Iris資料集
iris = load_iris()
X, y = iris.data, iris.target
#定義超參數搜尋空間
search_space = {'n_estimators': [10, 100, 500, 1000],
'max_depth': [2, 10, 25, 50, 100],
'min_samples_split': [2, 5, 10],
'min_samples_split': [2, 5, 10 ],
'min_samples_leaf': [1, 5, 10]}
#定義隨機林分類器
clf = RandomForestClassifier(random_state=1234)
# 產生最佳化器物件
optimizer = GridSearchCV(clf, search_space, cv=5, scoring='accuracy')
#儲存起始時間,以便用於計算總的耗時
start_time = time.time()
#擬合資料上的最佳化器
optimizer.fit(X, y)
# 儲存結束時間,以便用於計算總的耗時
end_time = time.time ()
# 列印最佳超參數集和對應分數
print(f"selected hyperparameters:")
print(optimizer.best_params_)
#print("")
print(f"best_score: {optimizer.best_score_}")
print(f"elapsed_time: {round(end_time-start_time, 1)}")
上面程式碼的輸出結果如下:
- 易於理解和實作
- 易於並行化
- 適用於離散和連續空間
- 比網格搜尋便宜
- 與具有相同嘗試次數的網格搜尋相比,更可能收斂到最優缺點:
- 無記憶——不從過去的觀察中學習
- 考慮到隨機選擇,可能會錯過重要的超參數值
from sklearn.model_selection import RandomizedSearchCV
from scipy.stats import randint
# 建立一個RandomizedSearchCV 物件 =##optimizer #nidized clf, param_distributinotallow=search_space,
n_iter=50, cv=5, scoring='accuracy',
random_state=1234)
## 儲存開始時間以計算總運行時間
start_time = time.time()
# 擬合資料上的最佳化器
optimizer.fit(X, y)
# 儲存結束時間以計算總運行時間
end_time = time.time()
# 列印最佳超參數集和對應分數
print(f"selected hyperparameters:")
print(optimizer .best_params_)
print("")
print(f"best_score: {optimizer.best_score_}")
print(f"elapsed_time: {round(end_time-start_time, 1)}" )
上面程式碼的輸出結果如下:
#隨機搜尋結果
#與網格搜尋的結果相比,這些結果非常有趣。 best_score保持不變,但elapsed_time從352.0秒減少到75.5秒!真是令人印象深刻!換句話說,隨機搜尋演算法設法找到了一組超參數,在網格搜尋所需時間的21%左右,其效能與網格搜尋相同!但是,這裡的效率高得多。
接下來,讓我們繼續我們的下一個方法,稱為貝葉斯優化,它從優化過程中的每一次嘗試中學習。
3.貝葉斯最佳化
貝葉斯最佳化是一種超參數最佳化方法,它使用機率模型從先前的嘗試中“學習”,並將搜尋引向搜尋空間中超參數的最佳組合,從而優化機器學習模型的目標函數。
貝葉斯最佳化方法可以分為4個步驟,我將在下面描述。我鼓勵您通讀這些步驟,以便更好地理解流程,但使用這種方法並不需要什麼前提知識。
- 定義一個“先驗”,這是一個關於我們在某個時間點對優化目標函數最可能的超參數組合的信念的機率模型
- 評估超參數樣本的模型
- 使用步驟2中獲得的知識,更新步驟1中的機率模型(即我們所稱的「先驗」),以了解我們認為優化目標函數的超參數的最可能組合在哪裡。我們更新的信念稱為「後驗」。換句話說,在步驟2中獲得的知識幫助我們更好地了解搜尋空間,並將我們從先驗帶到後驗,使後驗成為我們關於搜尋空間和目標函數的「最新」知識,由步驟2提供資訊
- 重複步驟2和3,直到模型效能收斂、資源耗盡或滿足其他預定義指標
如果您有興趣了解更多有關貝葉斯優化的詳細信息,可以查看以下帖子:
《機器學習中的貝葉斯優化演算法》,地址是:
https://medium.com/@fmnobar/conceptual -overview-of-bayesian-optimization-for-parameter-tuning-in-machine-learning-a3b1b4b9339f。
現在,既然我們已經了解了貝葉斯優化是如何運作的,那麼讓我們來看看它的優點和缺點。
優勢:
- 從過去的觀察中學習,因此效率更高。換句話說,與無記憶方法相比,它有望在更少的迭代中找到一組更好的超參數
- 在給定某些假設的情況下收斂到最優缺點:
- 難以並行化
- 計算量大於網格和每次迭代的隨機搜尋
- 先驗和貝葉斯優化中使用的函數(例如,獲取函數等)的初始機率分佈的選擇會顯著影響性能及其學習曲線
在排除了細節之後,讓我們實現貝葉斯優化並查看結果。
3.1.貝葉斯最佳化演算法實作
與上一節類似,我們將使用下面的程式碼片段為網格搜尋實作中描述的相同問題實作貝葉斯超參數最佳化.
# 導入庫
from skopt import BayesSearchCV
# 執行貝葉斯最佳化
optimizer = BayesSearchCV(estimator=RandomForestClassifier(),
search_spacesCV(estimator=RandomForestClassifier(),
# =search_space,
n_iter=10,
cv=5,
scoring='accuracy',
random_state=1234)
# 儲存開始時間以計算總運行時間
start_time = time.time()
optimizer.fit(X, y)
# 儲存結束時間以計算總運行時間
end_time = time.time()
# 列印最佳超參數集和對應分數
print(f"selected hyperparameters:")
print(optimizer.best_params_)
print("")
print(f"best_score: {optimizer.best_score_}")print(f"elapsed_time: {round(end_time-start_time, 1)}")
結果比較
下表對目前所討論的三種方法的結果進行了比較。 「Methodology(方法論)」一欄描述了所使用的超參數最佳化方法。隨後是使用每種方法選擇的超參數。 “Best Score”是使用特定方法獲得的分數,然後是“Elapsed Time”,表示優化策略在我的本地筆記型電腦上運行所需的時間。最後一列「獲得的效率(Gained Efficiency)」假設網格搜尋為基線,然後計算與網格搜尋相比,其他兩種方法中每種方法獲得的效率(使用經過的時間)。例如,由於隨機搜尋耗時75.5秒,而網格搜尋耗時352.0秒,因此相對於網格搜尋的基線,隨機搜尋的效率計算為1–75.5/352.0=78.5%。
表2-方法效能比較表
以上比較表中的兩個主要結論:
- #效率:我們可以看到貝葉斯優化等學習方法如何在更短的時間內找到一組優化的超參數。
- 參數選擇:可以有多個正確答案。例如,貝葉斯優化的選定參數與網格和隨機搜尋的參數不同,儘管評估度量(即best_score)保持不變。這在更大、更複雜的環境中更為重要。
結論
在這篇文章中,我們討論了什麼是超參數最佳化,並介紹了用於此最佳化練習的三種最常見的方法。然後,我們詳細介紹了這三種方法中的每一種,並在分類練習中實現了它們。最後,我們比較了實施這三種方法的結果。我們發現,從先前的嘗試中學習的貝葉斯優化等方法可以顯著提高效率,這可能是大型複雜模型(如深度神經網路)中的一個重要因素,其中效率可能是一個決定因素。
譯者介紹
朱先忠,51CTO社群編輯,51CTO專家部落格、講師,濰坊一所高校電腦教師,自由程式設計界老兵一枚。
原文標題:Hyperparameter Optimization — Intro and Implementation of Grid Search, Random Search and Bayesian Optimization#,作者:Farzad Mahmoodinobarzad Mahmoodinobarzad
以上是超參數優化比較之網格搜尋、隨機搜尋和貝葉斯優化的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

本站6月27日訊息,剪映是由位元組跳動旗下臉萌科技開發的一款影片剪輯軟體,依託於抖音平台且基本面向該平台用戶製作短影片內容,並相容於iOS、安卓、Windows 、MacOS等作業系統。剪映官方宣布會員體系升級,推出全新SVIP,包含多種AI黑科技,例如智慧翻譯、智慧劃重點、智慧包裝、數位人合成等。價格方面,剪映SVIP月費79元,年費599元(本站註:折合每月49.9元),連續包月則為59元每月,連續包年為499元每年(折合每月41.6元) 。此外,剪映官方也表示,為提升用戶體驗,向已訂閱了原版VIP

透過將檢索增強生成和語意記憶納入AI編碼助手,提升開發人員的生產力、效率和準確性。譯自EnhancingAICodingAssistantswithContextUsingRAGandSEM-RAG,作者JanakiramMSV。雖然基本AI程式設計助理自然有幫助,但由於依賴對軟體語言和編寫軟體最常見模式的整體理解,因此常常無法提供最相關和正確的程式碼建議。這些編碼助手產生的代碼適合解決他們負責解決的問題,但通常不符合各個團隊的編碼標準、慣例和風格。這通常會導致需要修改或完善其建議,以便將程式碼接受到應

想了解更多AIGC的內容,請造訪:51CTOAI.x社群https://www.51cto.com/aigc/譯者|晶顏審校|重樓不同於網路上隨處可見的傳統問題庫,這些問題需要跳脫常規思維。大語言模型(LLM)在數據科學、生成式人工智慧(GenAI)和人工智慧領域越來越重要。這些複雜的演算法提升了人類的技能,並在許多產業中推動了效率和創新性的提升,成為企業保持競爭力的關鍵。 LLM的應用範圍非常廣泛,它可以用於自然語言處理、文字生成、語音辨識和推薦系統等領域。透過學習大量的數據,LLM能夠產生文本

大型語言模型(LLM)是在龐大的文字資料庫上訓練的,在那裡它們獲得了大量的實際知識。這些知識嵌入到它們的參數中,然後可以在需要時使用。這些模型的知識在訓練結束時被「具體化」。在預訓練結束時,模型實際上停止學習。對模型進行對齊或進行指令調優,讓模型學習如何充分利用這些知識,以及如何更自然地回應使用者的問題。但是有時模型知識是不夠的,儘管模型可以透過RAG存取外部內容,但透過微調使用模型適應新的領域被認為是有益的。這種微調是使用人工標註者或其他llm創建的輸入進行的,模型會遇到額外的實際知識並將其整合

機器學習是人工智慧的重要分支,它賦予電腦從數據中學習的能力,並能夠在無需明確編程的情況下改進自身能力。機器學習在各個領域都有廣泛的應用,從影像辨識和自然語言處理到推薦系統和詐欺偵測,它正在改變我們的生活方式。機器學習領域存在著多種不同的方法和理論,其中最具影響力的五種方法被稱為「機器學習五大派」。這五大派分別為符號派、聯結派、進化派、貝葉斯派和類推學派。 1.符號學派符號學(Symbolism),又稱符號主義,強調利用符號進行邏輯推理和表達知識。該學派認為學習是一種逆向演繹的過程,透過現有的

編輯|ScienceAI問答(QA)資料集在推動自然語言處理(NLP)研究中發揮著至關重要的作用。高品質QA資料集不僅可以用於微調模型,也可以有效評估大語言模型(LLM)的能力,尤其是針對科學知識的理解和推理能力。儘管目前已有許多科學QA數據集,涵蓋了醫學、化學、生物等領域,但這些數據集仍有一些不足之處。其一,資料形式較為單一,大多數為多項選擇題(multiple-choicequestions),它們易於進行評估,但限制了模型的答案選擇範圍,無法充分測試模型的科學問題解答能力。相比之下,開放式問答

編輯|KX在藥物研發領域,準確有效地預測蛋白質與配體的結合親和力對於藥物篩選和優化至關重要。然而,目前的研究並沒有考慮到分子表面訊息在蛋白質-配體相互作用中的重要作用。基於此,來自廈門大學的研究人員提出了一種新穎的多模態特徵提取(MFE)框架,該框架首次結合了蛋白質表面、3D結構和序列的信息,並使用交叉注意機制進行不同模態之間的特徵對齊。實驗結果表明,該方法在預測蛋白質-配體結合親和力方面取得了最先進的性能。此外,消融研究證明了該框架內蛋白質表面資訊和多模態特徵對齊的有效性和必要性。相關研究以「S

本站8月1日消息,SK海力士今天(8月1日)發布博文,宣布將出席8月6日至8日,在美國加州聖克拉拉舉行的全球半導體記憶體峰會FMS2024,展示諸多新一代產品。未來記憶體和儲存高峰會(FutureMemoryandStorage)簡介前身是主要面向NAND供應商的快閃記憶體高峰會(FlashMemorySummit),在人工智慧技術日益受到關注的背景下,今年重新命名為未來記憶體和儲存高峰會(FutureMemoryandStorage),以邀請DRAM和儲存供應商等更多參與者。新產品SK海力士去年在
