超參數調整總覽

在機器學習中,超參數調整會找出學習演算法的最佳超參數組合。超參數是模型引數,其值會在學習程序開始前設定。相反地,系統會學習其他參數的值,例如線性模型的係數。

超參數調整可讓您減少手動重複超參數的時間,並將更多時間專注於探索資料中的洞察資料。

您可以為下列模型類型指定超參數調整選項:

對於這類型別的模型,如果您在 CREATE MODEL 陳述式中為 NUM_TRIALS 選項指定值,系統就會啟用超參數調整功能。

如要嘗試在線性迴歸模型上執行超參數調整,請參閱「使用 BigQuery ML 超參數調整來改善模型效能」。

下列模型也支援超參數調整,但不允許您指定特定值:

如要瞭解每個模型類型支援的 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_
FACTORIZATION
(明確)
MEAN_SQUARED_ERROR NUM_FACTORS

L2_REG
[2, 200]

(0, ∞)
[2, 20]

(0, 10]
LINEAR

LOG
MATRIX_
FACTORIZATION
(隱含)
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_
COMBINED_
CLASSIFIER
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_
COMBINED_
REGRESSOR
MEAN_ABSOLUTE_ERROR

MEAN_SQUARED_ERROR

MEAN_SQUARED_LOG_ERROR

MEDIAN_ABSOLUTE_ERROR

R2_SCORE (預設)

EXPLAINED_VARIANCE
BOOSTED_TREE_
CLASSIFIER
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_
REGRESSOR






MEAN_ABSOLUTE_ERROR

MEAN_SQUARED_ERROR

MEAN_SQUARED_LOG_ERROR

MEDIAN_ABSOLUTE_ERROR

R2_SCORE (預設)

EXPLAINED_VARIANCE
RANDOM_FOREST_
CLASSIFIER
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_
REGRESSOR






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_RANGEHPARAM_CANDIDATES 指定超參數的搜尋空間,系統會從該超參數的預設值開始搜尋,如該模型類型的 CREATE MODEL 主題所述。舉例來說,如果您要為提升樹模型執行超參數調整,但未指定 L1_REG 超參數的值,則搜尋會從 0 (預設值) 開始。

如果您使用 HPARAM_RANGEHPARAM_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.EVALUATEML.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 超參數調整來改善模型效能」。