超參數調整總覽

超參數調整運用 Google Cloud 的處理基礎架構,可在訓練模型時測試不同的超參數設定。這項功能可提供最佳化的超參數值,儘可能提高模型的預測準確率。

什麼是超參數?

「超參數」包含了管理訓練程序本身的資料。

訓練應用程式在訓練模型的過程中會處理三種資料類別:

  • 輸入資料 (也稱為訓練資料) 是個別記錄 (例項) 的集合,其中包含對機器學習問題而言重要的特徵。訓練期間會使用這項資料設定模型,以便準確推斷類似資料的新例項。不過,輸入資料中的值絕不會直接成為模型的一部分。

  • 模型的「參數」是指選定的機器學習技術用來調整資料的變數。舉例來說,深層類神經網路 (DNN) 由處理節點 (神經元) 組成,每個處理節點會包含將資料傳輸到網路時對資料執行的作業。訓練 DNN 時,每個節點都會有權重值,可讓模型瞭解該節點對最終推論的影響程度。那些權重值是模型參數的範例。從許多方面來看,模型的參數就是模型本身,可區別您的特定模型與處理類似資料的同類型其他模型。

  • 您的「超參數」是管理訓練程序本身的變數。舉例來說,設計 DNN 時,您必須決定要在輸入和輸出層之間使用多少個節點隱藏層,以及每個隱藏層應使用多少個節點。這些變數與訓練資料沒有直接關聯。這些是設定變數。請注意,參數會在訓練工作期間變更,而超參數通常在工作期間保持不變。

訓練程序會最佳化 (或說「調整」) 模型的參數:您會透過模型運算執行資料、比較產生的推論與每個資料樣本的實際值、評估準確率,然後進行調整,直到找出最佳值為止。訓練工作會調整超參數,方法是執行整個訓練工作、查看匯總準確度,然後進行調整。這兩種情況都會修改模型的組成,以找出解決問題的最佳組合。

如果不使用 Agent Platform 超參數調整這種自動化技術,您必須在多次執行訓練的過程中手動調整超參數,才能取得最佳值。超參數調整技術讓找出最佳超參數設定的程序更加簡單方便。

超參數調整的運作方式

超參數調整功能會根據您選定的超參數,使用符合其指定限制範圍內的值,執行訓練應用程式的多次試驗。Agent Platform 會追蹤每個試驗的結果,並調整後續的試驗。當工作完成後,您可以取得所有試驗的匯總資料,以及根據您的指定條件算出的最佳設定值。

超參數調整必須在 Agent Platform 和您的訓練應用程式之間進行明確通訊。您的訓練應用程式會定義模型所需的所有資訊。您要定義要調整的超參數 (變數),以及用於評估每次試驗的目標變數。

進一步瞭解如何使用貝氏最佳化方法調整超參數

除了貝氏最佳化方法以外,Agent Platform 還可以最佳化多個超參數調整工作。如果您針對類似模型進行超參數調整,只變更目標函式或新增輸入資料欄,Agent Platform 會隨著時間持續改善,提升超參數調整的效率。

超參數調整最佳化的項目

超參數調整會將您指定的目標變數 (稱為超參數指標) 最佳化。模型準確率是常見的指標,可從評估階段計算得出。指標必須是數值。

設定超參數調整工作時,請定義每個指標的名稱和目標。目標會指定您要調整模型,以盡量提高或降低這個指標的值。

Agent Platform 如何取得指標

使用 cloudml-hypertune Python 套件將指標傳遞至 Agent Platform。這個程式庫提供輔助函式,可將指標回報給 Agent Platform。

進一步瞭解如何回報超參數指標

設定超參數值的流程

如果不使用超參數調整服務,您可以透過任何方式設定超參數,例如在訓練應用程式中進行設定。例如,您可以透過將指令列引數傳送給主要應用程式模組,或是在設定檔中提供給應用程式的方式來設定超參數。

使用超參數調整時,您必須使用以下程序來設定要用於調整的超參數值:

  • 在主要訓練模組中,為每個調整的超參數定義指令列引數。

  • 在應用程式的程式碼中,使用這些引數傳遞的值設定對應的超參數。

設定超參數調整工作時,您會定義要調整的每個超參數、資料類型,以及要嘗試的值範圍。您可以使用與主模組中定義的對應引數相同的名稱,識別每個超參數。訓練服務中包含執行應用程式時使用這些名稱的指令列引數。

進一步瞭解剖析命令列引數的相關規定

選取要調整的超參數

如何選擇要調整的超參數,這方面沒有通用的建議。如果您對正在使用的機器學習技術有經驗,您可能會對超參數的行為方式有所瞭解。您也可以透過機器學習社群找到相關建議。

無論選用哪些超參數,瞭解其含意都很重要。每個您選擇要調整的超參數都可能提高成功調整工作所需的試驗次數。在 Agent Platform 上執行超參數調整工作時,系統會根據超參數調整工作啟動的試驗時間長度計費。仔細選擇要調整的超參數,可縮短超參數調整工作時間並降低成本。

超參數資料類型

ParameterSpec 物件中,您會將超參數資料型別指定為參數值規格的例項。下表列出支援的參數值規格。

類型 資料類型 值範圍 值資料
DoubleValueSpec DOUBLE minValuemaxValue 浮點值
IntegerValueSpec INTEGER minValuemaxValue 整數值
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_REGRESSIONDNN。如果 training_methodLINEAR_REGRESSION,調整工作就必須指定學習率的超參數。如果 training_methodDNN,調整工作就必須指定學習率隱藏層數量的參數。

由於隱藏層數量僅適用於 training_methodDNN 的試驗,因此您要定義條件式參數,在 training_methodDNN 時新增名為 num_hidden_layers 的超參數。

由於這兩個 training_method 選項都會使用學習率,因此您必須決定是否要共用這個條件式超參數。如果超參數是共用的,調整作業會使用從 LINEAR_REGRESSIONDNN 試驗中學到的內容,調整學習率。在這種情況下,為每個 training_method 設定不同的學習率會比較合理,因為使用 LINEAR_REGRESSION 訓練模型的學習率不應影響使用 DNN 訓練模型的學習率。因此,您會定義下列條件式超參數:

  • 名為 learning_rate 的超參數,會在 training_methodLINEAR_REGRESSION 時新增。
  • 名為 learning_rate 的超參數,會在 training_methodDNN 時新增。

條件式超參數可讓您將調整工作的超參數定義為圖形,以便使用不同的訓練技術調整訓練程序,每種技術都有自己的超參數依附元件。

搜尋演算法

您可以在 StudySpec 物件中指定搜尋演算法。如果未指定演算法,工作會使用預設的 Agent Platform 演算法。預設演算法會套用貝氏最佳化方法,以更有效率的方式搜尋參數空間,進而獲得最佳解決方案。

可用的值:

  • ALGORITHM_UNSPECIFIED:與未指定演算法相同。Agent Platform 會從高斯過程老虎機演算法、線性組合搜尋或其變體中,選擇最佳搜尋演算法。

  • GRID_SEARCH:在可行空間內執行網格搜尋。如果您要指定的試驗數量超過可行空間中的點數,這個選項就非常實用。在這種情況下,如果您沒有指定網格搜尋,Agent Platform 預設演算法可能會產生重複的建議。如要使用網格搜尋,所有參數的類型必須是 INTEGERCATEGORICALDISCRETE

  • RANDOM_SEARCH:在可行空間內執行隨機搜尋。

後續步驟