超參數調整運用 Google Cloud 的處理基礎架構,可在訓練模型時測試不同的超參數設定。這項功能可提供最佳化的超參數值,儘可能提高模型的預測準確率。
什麼是超參數?
「超參數」包含了管理訓練程序本身的資料。
訓練應用程式在訓練模型的過程中會處理三種資料類別:
「輸入資料」(也稱做訓練資料) 是個別記錄 (樣本) 的集合,其中包含了對機器學習問題來說很重要的特徵。這項資料會在訓練期間用於設定模型,以便準確推斷相似資料的新例項。不過,輸入資料中的值一律不會直接成為模型的一部分。
模型的「參數」是指選定的機器學習技術用來調整資料的變數。舉例來說,深層類神經網路 (DNN) 由處理節點 (神經元) 組成,每個處理節點會包含將資料傳輸到網路時對資料執行的作業。訓練 DNN 時,每個節點都會有權重值,可讓模型瞭解該節點對最終推論的影響程度。那些權重值是模型參數的範例。在許多情況下,模型的參數「就是」模型,因為它們可將特定模型與處理類似資料的其他同類型模型區分開來。
您的「超參數」是管理訓練程序本身的變數。舉例來說,設計 DNN 時,您必須決定在輸入層和輸出層之間使用多少隱藏節點層,以及每個隱藏層應使用多少節點。這些變數與訓練資料並無直接關聯。這些是設定變數。請注意,參數會在訓練工作期間變更,而超參數通常在工作期間保持不變。
模型參數會在訓練程序中進行最佳化 (也就是「調整」):您會透過模型運算執行資料,將結果推論與每個資料例項的實際值進行比較,評估準確度,並調整至找到最佳值。您可以執行整個訓練工作、查看總體準確度,然後進行調整,藉此調整超參數。這兩種情況都會修改模型的組成,以找出解決問題的最佳組合。
如果不使用 Vertex AI 超參數調整這種自動化技術,您必須在多次執行訓練的過程中手動調整超參數,才能取得最佳值。超參數調整技術讓找出最佳超參數設定的程序更加簡單方便。
超參數調整的運作方式
超參數調整功能會根據您選定的超參數,使用符合其指定限制範圍內的值,執行訓練應用程式的多個試驗。Vertex AI 會追蹤每個試驗的結果,並調整後續的試驗。當工作完成後,您可以取得所有試驗的匯總資料,以及根據您的指定條件算出的最佳設定值。
超參數調整必須在 Vertex AI 和訓練應用程式之間進行明確通訊。您的訓練應用程式會定義模型所需的所有資訊。您可以定義要調整的超參數 (變數),以及用於評估每個試驗的目標變數。
除了貝氏最佳化方法以外,Vertex AI 還可以最佳化多個超參數調整工作。如果您針對類似模型進行超參數調整,只變更目標函式或新增輸入資料欄,Vertex AI 會隨著時間持續改善,提升超參數調整的效率。
超參數調整最佳化的項目
超參數調整可將您指定的目標變數最佳化,這些變數稱為超參數指標。模型準確度是常見的指標,計算方式是透過評估階段計算得出。指標必須為數字。
設定超參數調整工作時,您會定義每個指標的名稱和目標。目標會指定您要調整模型以最大化或最小化此指標的值。
Vertex AI 如何取得指標
使用 cloudml-hypertune
Python 套件將指標傳遞至 Vertex AI。這個程式庫提供輔助函式,可將指標回報給 Vertex AI。
設定超參數值的流程
如果不使用超參數調整服務,您可以透過任何方式設定超參數,例如在訓練應用程式中進行設定。例如,您可以透過將指令列引數傳送給主要應用程式模組,或是在設定檔中提供給應用程式的方式來設定超參數。
使用超參數調整時,您必須使用以下程序來設定要用於調整的超參數值:
在主要訓練模組中,為每個調整的超參數定義指令列引數。
使用這些引數中傳遞的值,在應用程式程式碼中設定對應的超參數。
設定超參數調整工作時,您會定義要調整的每個超參數、其資料類型,以及要嘗試的值範圍。您可以使用主模組中定義的對應引數名稱,來識別每個超參數。訓練服務中包含執行應用程式時使用這些名稱的指令列引數。
選取要調整的超參數
我們無法提供任何通用的建議,說明如何選擇應調整的超參數。如果您對正在使用的機器學習技術有經驗,您可能會對超參數的行為方式有所瞭解。您也可以透過機器學習社群找到相關建議。
無論選用哪些超參數,瞭解其含意都很重要。每個您選擇要調整的超參數都可能提高成功調整工作所需的試驗次數。在 Vertex AI 上執行超參數調整工作時,您需要支付的費用會根據超參數調整工作啟動的試驗持續時間而定。仔細選擇要調整的超參數可降低超參數調整工作所需的時間和成本。
超參數資料類型
在 ParameterSpec 物件中,您可以將超參數資料類型指定為參數值規格例項。下表列出支援的參數值規格。
類型 | 資料類型 | 值範圍 | 值資料 |
---|---|---|---|
DoubleValueSpec |
DOUBLE |
minValue 和 maxValue |
浮點值 |
IntegerValueSpec |
INTEGER |
minValue 和 maxValue |
整數值 |
CategoricalValueSpec |
CATEGORICAL |
categoricalValues |
類別字串清單 |
DiscreteValueSpec |
DISCRETE |
discreteValues |
遞增排序的值清單 |
調整超參數
您可以在 ParameterSpec
物件中指定應對此超參數執行調整。建議針對 DOUBLE 和 INTEGER 資料類型進行縮放。可用的資源調度類型如下:
SCALE_TYPE_UNSPECIFIED
:系統不會對此超參數套用縮放設定。UNIT_LINEAR_SCALE
:將可行空間以 0 到 1 的線性方式縮放。UNIT_LOG_SCALE
:以對數方式將可行空間縮放至 0 到 1。整個可行空間必須是嚴格正值。UNIT_REVERSE_LOG_SCALE
:以對數方式將可行空間「反向」縮放至 0 到 1。結果是,靠近可行空間頂端的值會比靠近底部的點更為分散。整個可行空間必須是嚴格正值。
條件式超參數
當父項超參數的值符合您指定的條件時,您可以使用 ConditionalParameterSpec
物件,在試驗中新增超參數。
舉例來說,您可以定義超參數調整工作,目標是使用線性迴歸或深度神經網路 (DNN) 找出最佳模型。如要讓調整工作指定訓練方法,請定義名為 training_method
的分類超參數,並使用以下選項:LINEAR_REGRESSION
和 DNN
。如果 training_method
為 LINEAR_REGRESSION
,調整工作就必須為學習率指定超參數。如果 training_method
為 DNN
,則調整工作必須指定學習率和隱藏層數的參數。
由於隱藏層數量只適用於試驗的 training_method
為 DNN
時,您可以定義條件式參數,在 training_method
為 DNN
時新增名為 num_hidden_layers
的超參數。
由於學習率會同時用於兩個 training_method
選項,您必須決定是否要共用這個條件式超參數。如果超參數是共用,調整工作會使用從 LINEAR_REGRESSION
和 DNN
試驗中學到的內容,調整學習率。在這種情況下,為每個 training_method
設定不同的學習率會比較合理,因為使用 LINEAR_REGRESSION
訓練模型的學習率不應影響使用 DNN
訓練模型的學習率。因此,您可以定義下列條件式超參數:
- 當
training_method
為LINEAR_REGRESSION
時,會新增名為learning_rate
的超參數。 - 當
training_method
為DNN
時,會新增名為learning_rate
的超參數。
您可以使用條件式超參數,將調整工作的超參數定義為圖表。這樣一來,您就能使用不同的訓練技巧調整訓練程序,每種技巧都有各自的超參數依附元件。
搜尋演算法
您可以在 StudySpec
物件中指定搜尋演算法。如果您未指定演算法,工作會使用預設的 Vertex AI 演算法。預設演算法會套用貝式最佳化方法,以更有效率的方式搜尋參數空間,進而獲得最佳解決方案。
可用的值:
ALGORITHM_UNSPECIFIED
:與未指定演算法時相同。Vertex AI 會在高斯過程隨機變異、線性組合搜尋或其變化版本之間,選擇最佳搜尋演算法。GRID_SEARCH
:在可行空間內執行格狀搜尋。如果您要指定的試驗數量超過可行空間中的點數,這個選項就非常實用。在這種情況下,如果您沒有指定格狀搜尋,Vertex AI 預設演算法可能會產生重複的建議。如要使用格狀搜尋,所有參數的類型必須是INTEGER
、CATEGORICAL
或DISCRETE
。RANDOM_SEARCH
:在可行空間內執行隨機搜尋。
後續步驟
- 瞭解如何為訓練工作實作超參數調整
- 閱讀有關貝式最佳化方法和超參數調整的網誌文章。