超參數調整總覽
在機器學習中,超參數調整會找出學習演算法的最佳超參數組合。超參數是模型引數,其值會在學習程序開始前設定。相反地,系統會學習其他參數的值,例如線性模型的係數。
超參數調整可讓您減少手動重複超參數的時間,並將更多時間專注於探索資料中的洞察資料。
您可以為下列模型類型指定超參數調整選項:
對於這類型別的模型,如果您在 CREATE MODEL
陳述式中為 NUM_TRIALS
選項指定值,系統就會啟用超參數調整功能。
如要嘗試在線性迴歸模型上執行超參數調整,請參閱「使用 BigQuery ML 超參數調整來改善模型效能」。
下列模型也支援超參數調整,但不允許您指定特定值:
- AutoML Tables 模型預設會在模型訓練中嵌入自動超參數調整功能。
- ARIMA_PLUS 模型可讓您設定
AUTO_ARIMA
引數,以便使用 auto.ARIMA 演算法執行超參數調整。這個演算法會為趨勢模組執行超參數調整。整個建模管道不支援超參數調整。
如要瞭解每個模型類型支援的 SQL 陳述式和函式,請參閱「每個模型的端對端使用者歷程」。
位置
如要瞭解哪些地區支援超參數微調,請參閱 BigQuery ML 地區。
設定超參數
如要調整超參數,您必須為該超參數指定值範圍,讓模型可在一系列試驗中使用。您可以在 CREATE MODEL
陳述式中設定超參數時使用下列任一關鍵字,而非提供單一值:
HPARAM_RANGE
:兩個元素ARRAY(FLOAT64)
值,定義超參數連續值搜尋空間的最小和最大範圍。使用這個選項可為超參數指定值的範圍,例如LEARN_RATE = HPARAM_RANGE(0.0001, 1.0)
。HPARAM_CANDIDATES
:指定超參數的離散值集合的ARRAY(STRUCT)
值。使用這個選項可為超參數指定一組值,例如OPTIMIZER = HPARAM_CANDIDATES(['ADAGRAD', 'SGD', 'FTRL'])
。
超參數和目標
下表列出每種支援超參數調整的模型類型,以及各模型支援的超參數和目標:
模型類型 | 超參數目標 | 超參數 | 有效範圍 | 預設範圍 | 縮放類型 |
---|---|---|---|---|---|
LINEAR_REG
|
MEAN_ABSOLUTE_ERROR
MEAN_SQUARED_ERROR
MEAN_SQUARED_LOG_ERROR
MEDIAN_ABSOLUTE_ERROR
R2_SCORE (預設)
EXPLAINED_VARIANCE
|
L1_REG
L2_REG
|
(0, ∞]
(0, ∞]
|
(0, 10]
(0, 10]
|
LOG
LOG
|
LOGISTIC_REG
|
PRECISION
RECALL
ACCURACY
F1_SCORE
LOG_LOSS
ROC_AUC (預設)
|
L1_REG
L2_REG
|
(0, ∞]
(0, ∞]
|
(0, 10]
(0, 10]
|
LOG
LOG
|
KMEANS
|
DAVIES_BOULDIN_INDEX
|
NUM_CLUSTERS
|
[2, 100]
|
[2, 10]
|
LINEAR
|
MATRIX_ (明確)
|
MEAN_SQUARED_ERROR
|
NUM_FACTORS
L2_REG
|
[2, 200]
(0, ∞)
|
[2, 20]
(0, 10]
|
LINEAR
LOG
|
MATRIX_ (隱含)
|
MEAN_AVERAGE_PRECISION (預設)
MEAN_SQUARED_ERROR
NORMALIZED_DISCOUNTED_CUMULATIVE_GAIN
AVERAGE_RANK
|
NUM_FACTORS
L2_REG
WALS_ALPHA
|
[2, 200]
(0, ∞)
[0, ∞)
|
[2, 20]
(0, 10]
[0, 100]
|
LINEAR
LOG
LINEAR
|
AUTOENCODER
|
MEAN_ABSOLUTE_ERROR
MEAN_SQUARED_ERROR (預設)
MEAN_SQUARED_LOG_ERROR
|
LEARN_RATE
BATCH_SIZE
L1_REG
L2_REG
L1_REG_ACTIVATION
DROPOUT
HIDDEN_UNITS
OPTIMIZER
ACTIVATION_FN
|
[0, 1]
(0, ∞)
(0, ∞)
(0, ∞)
[0, 1)
陣列的 [1, ∞)
{ ADAM , ADAGRAD , FTRL , RMSPROP , SGD }
{ RELU , RELU6 , CRELU , ELU , SELU , SIGMOID , TANH }
(0, ∞) |
[0, 1]
[16, 1024]
(0, 10]
(0, 10]
(0, 10]
[0, 0.8]
不適用 { ADAM , ADAGRAD , FTRL , RMSPROP , SGD }
不適用 |
LOG
LOG
LOG
LOG
LOG
LINEAR
不適用 不適用 不適用 |
DNN_CLASSIFIER
|
PRECISION
RECALL
ACCURACY
F1_SCORE
LOG_LOSS
ROC_AUC (預設)
|
BATCH_SIZE
DROPOUT
HIDDEN_UNITS
LEARN_RATE
OPTIMIZER
L1_REG
L2_REG
ACTIVATION_FN
|
(0, ∞)
[0, 1)
[1, ∞) 陣列
[0, 1]
{ ADAM , ADAGRAD , FTRL , RMSPROP , SGD }
(0, ∞)
(0, ∞)
{ RELU , RELU6 , CRELU , ELU , SELU , SIGMOID , TANH }
|
[16, 1024]
[0, 0.8]
不適用 [0, 1]
{ ADAM , ADAGRAD , FTRL , RMSPROP , SGD }
(0, 10]
(0, 10]
不適用 |
LOG
LINEAR
不適用 LINEAR
不適用 LOG
LOG
不適用 |
DNN_REGRESSOR
|
MEAN_ABSOLUTE_ERROR
MEAN_SQUARED_ERROR
MEAN_SQUARED_LOG_ERROR
MEDIAN_ABSOLUTE_ERROR
R2_SCORE (預設)
EXPLAINED_VARIANCE
|
||||
DNN_LINEAR_
|
PRECISION
RECALL
ACCURACY
F1_SCORE
LOG_LOSS
ROC_AUC (預設)
|
BATCH_SIZE
DROPOUT
HIDDEN_UNITS
L1_REG
L2_REG
ACTIVATION_FN
|
(0, ∞)
[0, 1)
[1, ∞) 陣列
(0, ∞)
(0, ∞)
{ RELU , RELU6 , CRELU , ELU , SELU , SIGMOID , TANH }
|
[16, 1024]
[0, 0.8]
不適用 (0, 10]
(0, 10]
不適用 |
LOG
LINEAR
不適用 LOG
LOG
不適用 |
DNN_LINEAR_
|
MEAN_ABSOLUTE_ERROR
MEAN_SQUARED_ERROR
MEAN_SQUARED_LOG_ERROR
MEDIAN_ABSOLUTE_ERROR
R2_SCORE (預設)
EXPLAINED_VARIANCE
|
||||
BOOSTED_TREE_
|
PRECISION
RECALL
ACCURACY
F1_SCORE
LOG_LOSS
ROC_AUC (預設)
|
LEARN_RATE
L1_REG
L2_REG
DROPOUT
MAX_TREE_DEPTHMAX_TREE_DEPTH
SUBSAMPLE
MIN_SPLIT_LOSS
NUM_PARALLEL_TREE
MIN_TREE_CHILD_WEIGHT
COLSAMPLE_BYTREE
COLSAMPLE_BYLEVEL
COLSAMPLE_BYNODE
BOOSTER_TYPE
DART_NORMALIZE_TYPE
TREE_METHOD
|
[0, ∞)
(0, ∞)
(0, ∞)
[0, 1]
[1, 20]
(0, 1]
[0, ∞)
[1, ∞)
[0, ∞)
[0, 1]
[0, 1]
[0, 1]
[0, 1]
{ GBTREE , DART }
{ TREE , FOREST }
{ AUTO , EXACT , APPROX , HIST }
|
[0, 1]
(0, 10]
(0, 10]
不適用 [1, 10]
(0, 1]
不適用 不適用 不適用 不適用 不適用 不適用 不適用 不適用 不適用 N/A N/A N/A N/A N/A N/A N/A N/A N/A |
LINEAR
LOG
LOG
LINEAR
LINEAR
LINEAR
LINEAR
LINEAR
LINEAR
LINEAR
LINEAR
LINEAR
LINEAR
N/A N/A N/A |
BOOSTED_TREE_ |
MEAN_ABSOLUTE_ERROR
MEAN_SQUARED_ERROR
MEAN_SQUARED_LOG_ERROR
MEDIAN_ABSOLUTE_ERROR
R2_SCORE (預設)
EXPLAINED_VARIANCE
|
||||
RANDOM_FOREST_
|
PRECISION
RECALL
ACCURACY
F1_SCORE
LOG_LOSS
ROC_AUC (預設)
|
L1_REG
L2_REG
MAX_TREE_DEPTH
SUBSAMPLE
MIN_SPLIT_LOSS
NUM_PARALLEL_TREE
MIN_TREE_CHILD_WEIGHT
COLSAMPLE_BYTREE
COLSAMPLE_BYLEVEL
COLSAMPLE_BYNODE
TREE_METHOD
|
(0, ∞)
(0, ∞)
[1, 20]
(0, 1)
[0, ∞)
[2, ∞)
[0, ∞)
[0, 1]
[0, 1]
[0, 1]
[0, 1]
{ AUTO , EXACT , APPROX , HIST }
|
(0, 10]
(0, 10]
[1, 20]
(0, 1)
N/A [2, 200]
N/A N/A N/A N/A N/A N/A N/A |
LOG
LOG
LINEAR
LINEAR
LINEAR
LINEAR
LINEAR
LINEAR
LINEAR
LINEAR
LINEAR
LINEAR
LINEAR
LINEAR
N/A |
RANDOM_FOREST_ |
MEAN_ABSOLUTE_ERROR
MEAN_SQUARED_ERROR
MEAN_SQUARED_LOG_ERROR
MEDIAN_ABSOLUTE_ERROR
R2_SCORE (預設)
EXPLAINED_VARIANCE
|
大多數 LOG
比例超參數都會使用 0
的開放式下限。您仍可以使用 HPARAM_RANGE
關鍵字設定超參數範圍,將 0
設為下限。舉例來說,在提升樹分類器模型中,您可以將 L1_REG
超參數的範圍設為 L1_REG = HPARAM_RANGE(0, 5)
。0
的值會轉換為 1e-14
。
支援條件式超參數。舉例來說,在提升樹回歸模型中,只有在 BOOSTER_TYPE
超參數的值為 DART
時,才能調整 DART_NORMALIZE_TYPE
超參數。在這種情況下,您會指定搜尋空間和條件,系統會自動處理這些條件,如以下範例所示:
BOOSTER_TYPE = HPARAM_CANDIDATES(['DART', 'GBTREE'])
DART_NORMALIZE_TYPE = HPARAM_CANDIDATES(['TREE', 'FOREST'])
搜尋起點
如果您未使用 HPARAM_RANGE
或 HPARAM_CANDIDATES
指定超參數的搜尋空間,系統會從該超參數的預設值開始搜尋,如該模型類型的 CREATE MODEL
主題所述。舉例來說,如果您要為提升樹模型執行超參數調整,但未指定 L1_REG
超參數的值,則搜尋會從 0
(預設值) 開始。
如果您使用 HPARAM_RANGE
或 HPARAM_CANDIDATES
指定超參數的搜尋空間,搜尋起點取決於指定搜尋空間是否包含該超參數的預設值,如該模型類型的 CREATE MODEL
主題所述:
- 如果指定的範圍包含預設值,搜尋作業就會從該值開始。舉例來說,如果您要為隱含的矩陣因數分解模型執行超參數調整,並為
WALS_ALPHA
超參數指定[20, 30, 40, 50]
值,則搜尋會從40
(預設值) 開始。 - 如果指定的範圍不含預設值,搜尋作業會從指定範圍中與預設值最接近的點開始。舉例來說,如果您為
WALS_ALPHA
超參數指定[10, 20, 30]
值,搜尋作業就會從30
開始,這是與40
預設值最接近的值。
資料分割
當您為 NUM_TRIALS
選項指定值時,服務會識別您正在進行超參數調整,並自動對輸入資料執行三向分割,將其分割為訓練、評估和測試集。根據預設,系統會隨機分配輸入資料,然後將 80% 用於訓練、10% 用於評估,最後 10% 用於測試。
訓練和評估集會用於每個試驗訓練,這與不使用超參數調整的模型相同。系統會根據該模型類型的模型評估指標計算試用超參數建議。每個試驗訓練結束時,系統會使用測試集測試試驗,並在模型中記錄其指標。這樣一來,系統就能使用模型尚未分析的資料,確保最終報表評估指標的客觀性。評估資料會用於計算超參數建議的中繼指標,而測試資料則用於計算最終的客觀模型指標。
如果您只想使用訓練集,請在 CREATE MODEL
陳述式的 DATA_SPLIT_METHOD
選項中指定 NO_SPLIT
。
如果您只想使用訓練和評估集,請在 CREATE MODEL
陳述式的 DATA_SPLIT_TEST_FRACTION
選項中指定 0
。如果測試集為空白,系統會將評估集用作測試集,以便產生最終評估指標報表。
只有在資料分割的部分相同時,才能比較透過一般訓練工作產生的模型指標,以及透過超參數調整訓練工作產生的模型指標。舉例來說,下列型號可互相比較:
- 非超參數調整:
DATA_SPLIT_METHOD='RANDOM', DATA_SPLIT_EVAL_FRACTION=0.2
- 超參數調整:
DATA_SPLIT_METHOD='RANDOM', DATA_SPLIT_EVAL_FRACTION=0.2, DATA_SPLIT_TEST_FRACTION=0
成效
使用超參數調整時的模型效能,通常不會比使用預設搜尋空間 (不使用超參數調整) 時的模型效能差。採用預設搜尋空間且未使用超參數調整的模型,一律會在第一次嘗試中使用預設超參數。
如要確認超參數調整可改善模型效能,請比較超參數調整模型的最佳試驗結果,以及非超參數調整模型的第一個試驗結果。
遷移學習
如果您將 CREATE MODEL
陳述式中的 HPARAM_TUNING_ALGORITHM
選項設為 VIZIER_DEFAULT
,系統會預設啟用轉移學習。模型的超參數調整作業可從先前調整的模型學習,前提是該模型符合下列條件:
- 與先前調整過的模型使用相同的模型類型。
- 與先前調整過的模型位於相同專案中。
- 使用相同的超參數搜尋空間,或先前調整過的模型超參數搜尋空間的子集。子集會使用相同的超參數名稱和類型,但不一定有相同的範圍。舉例來說,
(a:[0, 10])
會視為(a:[-1, 1], b:[0, 1])
的子集。
轉移學習不要求輸入資料必須相同。
轉移學習有助於解決冷啟動問題,也就是系統在第一批試驗期間執行隨機探索的情況。遷移學習會為系統提供一些關於超參數及其目標的初始知識。如要持續改善模型品質,請務必使用相同或子集超參數訓練新的超參數調整模型。
轉移學習可加快超參數調整的收斂速度,但無法協助子模型收斂。
處理錯誤
超參數調整會以以下方式處理錯誤:
取消:如果訓練作業在執行期間遭到取消,則所有成功的試驗仍可使用。
無效的輸入內容:如果使用者輸入內容無效,服務就會傳回使用者錯誤。
無效的超參數:如果超參數對測試無效,系統會略過測試,並在
ML.TRIAL_INFO
函式輸出內容中標示為INFEASIBLE
。試用內部錯誤:如果超過 10% 的
NUM_TRIALS
值因INTERNAL_ERROR
而失敗,則訓練工作會停止並傳回使用者錯誤。如果
NUM_TRIALS
值因INTERNAL_ERROR
而失敗的比例小於 10%,訓練程序就會繼續進行,並在ML.TRIAL_INFO
函式輸出內容中將失敗的試驗標示為FAILED
。
模型服務函式
您可以使用超參數調整的輸出模型,搭配多個現有的模型服務函式。如要使用這些函式,請遵循下列規則:
函式接收輸入資料時,只會傳回單一試驗的結果。根據預設,這是最佳試驗,但您也可以指定
TRIAL_ID
做為指定函式的引數,選擇特定試驗。您可以從ML.TRIAL_INFO
函式的輸出內容取得TRIAL_ID
。支援下列函式:如果函數未採用輸入資料,系統會傳回所有試驗結果,而第一個輸出欄會是
TRIAL_ID
。支援下列函式:
由於所有試驗都共用相同的輸入資料,因此 ML.FEATURE_INFO
的輸出內容不會改變。
ML.EVALUATE
和 ML.TRIAL_INFO
的評估指標可能不同,因為輸入資料的切割方式不同。根據預設,ML.EVALUATE
會針對測試資料執行,而 ML.TRIAL_INFO
會針對評估資料執行。詳情請參閱「資料分割」。
不支援的函式
ML.TRAINING_INFO
函式會傳回每個疊代作業的資訊,疊代結果不會儲存在超參數調整模型中。系統會改為儲存試驗結果。您可以使用 ML.TRIAL_INFO
函式取得試用結果資訊。
模型匯出
您可以使用 EXPORT MODEL
陳述式,將透過超參數調整功能建立的模型匯出至 Cloud Storage 位置。您可以匯出預設最佳試驗或任何指定試驗。
定價
超參數調整訓練的費用,等於所有執行過的試驗費用總和。試用方案的定價與現有的 BigQuery ML 定價模式一致。
常見問題
本節將解答超參數調整的常見問題。
我需要進行多少次試驗才能調整模型?
建議您為每個超參數至少使用 10 次試驗,因此試驗總數至少應為 10 * num_hyperparameters
。如果您使用的是預設搜尋空間,請參閱「超參數和目標」表格中的「超參數」欄,瞭解系統預設為特定模型類型調整的超參數數量。
如果使用超參數調整後,效能並未提升,該怎麼辦?
請務必按照本文的指引進行公平比較。如果成效仍未改善,表示預設超參數可能已經能有效運作。建議您先專注於特徵工程,或嘗試其他模型類型,再進行下一輪超參數調整。
如果我想繼續調整模型,該怎麼做?
使用相同的搜尋空間訓練新的超參數調整模型。內建的遷移學習功能可根據先前調整的模型,繼續進行調整。
是否需要使用所有資料和最佳超參數重新訓練模型?
這取決於下列因素:
k-means 模型已將所有資料用作訓練資料,因此無須重新訓練模型。
針對矩陣分解模型,您可以使用所選超參數和所有輸入資料重新訓練模型,以便更全面地涵蓋使用者和項目。
對於所有其他模型類型,通常不需要重新訓練。在預設的隨機資料分割作業中,服務已保留 80% 的輸入資料用於訓練。如果資料集較小,您仍可使用更多訓練資料和所選超參數重新訓練模型,但如果只留下少量評估資料來提早停止訓練,可能會使過度擬合惡化。
後續步驟
如要嘗試執行超參數調整,請參閱「使用 BigQuery ML 超參數調整來改善模型效能」。