超參數調整總覽
在機器學習中,超參數調整會找出學習演算法的最佳超參數組合。超參數是模型引數,其值是在學習程序開始前設定。反之,線性模型係數等其他參數的值則會經過學習。
超參數調整功能可減少手動疊代超參數的時間,讓您有更多時間專注於探索資料的洞察資訊。
您可以為下列模型類型指定超參數調整選項:
對於這類模型,在 CREATE MODEL
陳述式中為 NUM_TRIALS
選項指定值時,系統會啟用超參數微調功能。
如要試著對線性迴歸模型執行超參數調整,請參閱「使用 BigQuery ML 超參數調整來改善模型效能」。
下列模型也支援超參數調整,但不允許您指定特定值:
- AutoML Tables 模型預設會在模型訓練中嵌入自動超參數調整功能。
- ARIMA_PLUS 模型可讓您設定
AUTO_ARIMA
引數,使用 auto.ARIMA 演算法執行超參數調整。這項演算法會為趨勢模組執行超參數調整。超參數調整功能不支援整個模型化管道。
位置
如要瞭解哪些地區支援超參數微調,請參閱 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, ∞)
[0, 1)
[1, ∞) 陣列
{ ADAM , ADAGRAD , FTRL , RMSPROP , SGD }
{ RELU , RELU6 , CRELU , ELU , SELU , SIGMOID , TANH }
|
[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]
{ GBTREE , DART }
{ TREE , FOREST }
{ AUTO , EXACT , APPROX , HIST }
|
[0, 1]
(0, 10]
(0, 10]
不適用 [1, 10]
(0, 1]
不適用 不適用 不適用 不適用 不適用 不適用 不適用 不適用 不適用 |
LINEAR
LOG
LOG
LINEAR
LINEAR
LINEAR
LINEAR
LINEAR
LINEAR
LINEAR
LINEAR
LINEAR
不適用 不適用 不適用 |
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]
{ AUTO , EXACT , APPROX , HIST }
|
(0, 10]
(0, 10]
[1, 20]
(0, 1)
不適用 [2, 200]
不適用 不適用 不適用 不適用 不適用 |
LOG
LOG
LINEAR
LINEAR
LINEAR
LINEAR
LINEAR
LINEAR
LINEAR
LINEAR
不適用 |
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
選項的值時,服務會判斷您正在進行超參數調整,並自動對輸入資料執行 3 向分割,將資料分成訓練、評估和測試集。根據預設,系統會隨機分割輸入資料,其中 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
。試用內部錯誤:如果
NUM_TRIALS
值因INTERNAL_ERROR
而失敗的比例超過 10%,訓練工作就會停止並傳回使用者錯誤。如果因
INTERNAL_ERROR
而失敗的NUM_TRIALS
值少於 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 超參數調整功能改善模型效能」。
- 如要進一步瞭解 ML 模型支援的 SQL 陳述式和函式,請參閱「ML 模型端對端使用者歷程」。