Hyperparameter-Feinabstimmung

Beim maschinellen Lernen ermittelt die Hyperparameter-Abstimmung eine Reihe optimaler Hyperparameter für einen Lernalgorithmus. Ein Hyperparameter ist ein Modellargument, dessen Wert vor dem Beginn des Lernprozesses festgelegt wird. Im Gegensatz dazu werden die Werte anderer Parameter erlernt, z. B. Koeffizienten eines linearen Modells.

Dank der Hyperparameter-Abstimmung können Sie weniger Zeit für die manuelle Iteration von Hyperparametern aufwenden und sich verstärkt auf die Datenauswertung konzentrieren.

Sie können Hyperparameter-Abstimmungsoptionen für die folgenden Modelltypen angeben:

Für diese Arten von Modellen ist die Hyperparameter-Abstimmung aktiviert, wenn Sie einen Wert für dieNUM_TRIALS-Option in der CREATE MODEL-Anweisung angeben.

Die folgenden Modelle unterstützen auch die Hyperparameter-Abstimmung. Sie können jedoch keine bestimmten Werte angeben:

  • In AutoML Tables-Modellen ist die automatische Abstimmung der Hyperparameter standardmäßig im Modelltraining eingebettet.
  • Mit ARIMA_PLUS-Modellen können Sie das Argument AUTO_ARIMA festlegen, um die Hyperparameter-Abstimmung mit dem auto.ARIMA-Algorithmus durchzuführen. Dieser Algorithmus führt eine Hyperparameter-Abstimmung für das Trendmodul durch. Die Hyperparameter-Abstimmung wird nicht für die gesamte Modellierungspipeline unterstützt.

Informationen zu den unterstützten SQL-Anweisungen und -Funktionen für die einzelnen Modelltypen erhalten Sie unter End-to-End-Nutzerpfad für jedes Modell.

Standorte

Informationen darüber, welche Standorte die Hyperparameter-Abstimmung unterstützen, finden Sie unter BigQuery ML-Standorte.

Hyperparameter festlegen

Zum Optimieren eines Hyperparameters müssen Sie einen Wertebereich für diesen Hyperparameter angeben, den das Modell für eine Reihe von Tests verwenden kann. Dazu können Sie beim Festlegen des Hyperparameters in der CREATE MODEL-Anweisung eines der folgenden Keywords verwenden, anstatt einen einzelnen Wert anzugeben:

  • HPARAM_RANGE: Ein ARRAY(FLOAT64)-Wert mit zwei Elementen, der die Mindest- und Höchstgrenzen des Suchbereichs kontinuierlicher Werte für einen Hyperparameter definiert. Verwenden Sie diese Option, um einen Wertebereich für einen Hyperparameter anzugeben, z. B. LEARN_RATE = HPARAM_RANGE(0.0001, 1.0).

  • HPARAM_CANDIDATES: Ein ARRAY(STRUCT)-Wert, der die Gruppe einzelner Werte für den Hyperparameter angibt. Verwenden Sie diese Option, um eine Reihe von Werten für einen Hyperparameter anzugeben, z. B. OPTIMIZER = HPARAM_CANDIDATES(['ADAGRAD', 'SGD', 'FTRL']).

Hyperparameter und Ziele

In der folgenden Tabelle sind die unterstützten Hyperparameter und Ziele für jeden Modelltyp aufgeführt, der die Hyperparameter-Abstimmung unterstützt:

Modelltyp Hyperparameter-Ziele Hyperparameter Gültiger Bereich Standardbereich Skalentyp
LINEAR_REG MEAN_ABSOLUTE_ERROR

MEAN_SQUARED_ERROR

MEAN_SQUARED_LOG_ERROR

MEDIAN_ABSOLUTE_ERROR

R2_SCORE (Standard)

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 (Standard)
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
(explizit)
MEAN_SQUARED_ERROR NUM_FACTORS

L2_REG
[2, 200]

(0, ∞)
[2, 20]

(0, 10]
LINEAR

LOG
MATRIX_
FACTORIZATION
(implizit)
MEAN_AVERAGE_PRECISION (Standard)

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 (Standard)

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)

Array von [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 (Standard)
BATCH_SIZE

DROPOUT

HIDDEN_UNITS

LEARN_RATE

OPTIMIZER



L1_REG

L2_REG

ACTIVATION_FN
(0, ∞)

[0, 1)

Array von [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 (Standard)

EXPLAINED_VARIANCE
DNN_LINEAR_
COMBINED_
CLASSIFIER
PRECISION

RECALL

ACCURACY

F1_SCORE

LOG_LOSS

ROC_AUC (Standard)
BATCH_SIZE

DROPOUT

HIDDEN_UNITS

L1_REG

L2_REG

ACTIVATION_FN
(0, ∞)

[0, 1)

Array of [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 (Standard)

EXPLAINED_VARIANCE
BOOSTED_TREE_
CLASSIFIER
PRECISION

RECALL

ACCURACY

F1_SCORE

LOG_LOSS

ROC_AUC (Standard)
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_
REGRESSOR






MEAN_ABSOLUTE_ERROR

MEAN_SQUARED_ERROR

MEAN_SQUARED_LOG_ERROR

MEDIAN_ABSOLUTE_ERROR

R2_SCORE (Standard)

EXPLAINED_VARIANCE
RANDOM_FOREST_
CLASSIFIER
PRECISION

RECALL

ACCURACY

F1_SCORE

LOG_LOSS

ROC_AUC (Standard)
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_
REGRESSOR






MEAN_ABSOLUTE_ERROR

MEAN_SQUARED_ERROR

MEAN_SQUARED_LOG_ERROR

MEDIAN_ABSOLUTE_ERROR

R2_SCORE (Standard)

EXPLAINED_VARIANCE

Die meisten Hyperparameter der Skalierung LOG verwenden die offene untere Grenze von 0. Sie können 0 auch als untere Grenze festlegen. Verwenden Sie dazu das Keyword HPARAM_RANGE, um den Hyperparameter-Bereich festzulegen. In einem Boosted Tree-Klassifikationsmodell können Sie beispielsweise den Bereich für den Hyperparameter L1_REG auf L1_REG = HPARAM_RANGE(0, 5) setzen. Ein Wert von 0 wird in 1e-14 konvertiert.

Bedingte Hyperparameter werden unterstützt. In einem Boosted Tree-Regressormodell können Sie beispielsweise nur die Abstimmung der DART_NORMALIZE_TYPE Hyperparameter vornehmen, wenn der Wert des Hyperparameters BOOSTER_TYPE DART ist. In diesem Fall geben Sie beide Suchbereiche an und die Bedingungen werden automatisch verarbeitet, wie im folgenden Beispiel gezeigt:

BOOSTER_TYPE = HPARAM_CANDIDATES(['DART', 'GBTREE'])
DART_NORMALIZE_TYPE = HPARAM_CANDIDATES(['TREE', 'FOREST'])

Ausgangspunkt für die Suche

Wenn Sie keinen Suchbereich für einen Hyperparameter mit HPARAM_RANGE oder HPARAM_CANDIDATES angeben, beginnt die Suche ab dem Standardwert dieses Hyperparameters, wie im Thema CREATE MODEL für diesen Modelltyp dokumentiert. Wenn Sie beispielsweise Hyperparameter-Abstimmung für ein Boosted Tree-Modell ausführen und Sie keinen Wert für den Hyperparameter L1_REG angeben, beginnt die Suche ab dem Standardwert 0.

Wenn Sie mit HPARAM_RANGE oder HPARAM_CANDIDATES einen Suchbereich für einen Hyperparameter angeben, hängt der Startpunkt der Suche davon ab, ob der angegebene Suchbereich den Standardwert für diesen Hyperparameter enthält, wie im Thema CREATE MODEL für diesen Modelltyp dokumentiert:

  • Wenn der angegebene Bereich den Standardwert enthält, beginnt die Suche an dieser Stelle. Wenn Sie beispielsweise die Abstimmung der Hyperparameter für ein implizites Matrixfaktorisierungsmodell durchführen und den Wert [20, 30, 40, 50] für den Hyperparameter WALS_ALPHA angeben, beginnt die Suche bei dem Standardwert 40.
  • Wenn der angegebene Bereich nicht den Standardwert enthält, beginnt die Suche ab dem Punkt im angegebenen Bereich, der dem Standardwert am nächsten ist. Wenn Sie beispielsweise den Wert [10, 20, 30] für den Hyperparameter WALS_ALPHA angeben, beginnt die Suche bei 30, dem nächstgelegenen Wert zum Standardwert von 40.

Datenaufteilung

Wenn Sie einen Wert für die Option NUM_TRIALS angeben, erkennt der Dienst, dass Sie die Hyperparameter-Abstimmung durchführen, und führt automatisch eine dreifache Aufteilung der Eingabedaten durch, um sie in Trainings-, Auswertungs- und Test-Datasets aufzuteilen. Standardmäßig werden die Eingabedaten nach dem Zufallsprinzip ausgewählt und dann in 80 % für das Training, 10 % für die Bewertung und 10 % für Tests aufgeteilt.

Die Trainings- und Bewertungs-Datasets werden in jedem Testtraining verwendet, genauso wie bei Modellen, die keine Hyperparameter-Abstimmung verwenden. Die Vorschläge für Test-Hyperparameter werden basierend auf den Modellbewertungsmesswerten für diesen Modelltyp berechnet. Am Ende jedes Testtrainings wird das Test-Dataset verwendet, um den Test zu testen und seine Messwerte im Modell aufzuzeichnen. Dadurch wird die Objektivität der Messwerte für die endgültige Berichterstellung sichergestellt, da Daten verwendet werden, die noch nicht vom Modell analysiert wurden. Die Auswertungsdaten werden verwendet, um die Zwischenmesswerte für den Vorschlag von Hyperparametern zu berechnen, während die Testdaten zur Berechnung der endgültigen, objektiven Modellmesswerte verwendet werden.

Wenn Sie nur ein Trainings-Dataset verwenden möchten, geben Sie NO_SPLIT für die Option DATA_SPLIT_METHOD der CREATE MODEL-Anweisung an.

Wenn Sie nur Trainings- und Bewertungs-Datasets verwenden möchten, geben Sie 0 für die Option DATA_SPLIT_TEST_FRACTION der CREATE MODEL-Anweisung an. Wenn das Test-Dataset leer ist, wird das Bewertungs-Dataset als Test-Dataset für die endgültigen Berichte mit den Bewertungsmesswerten verwendet.

Die Messwerte aus Modellen, die von einem normalen Trainingsjob generiert werden, und die aus einem Hyperparameter-Abstimmungstrainingsjob sind nur vergleichbar, wenn die Datenaufteilungsanteile gleich sind. Die folgenden Modelle sind beispielsweise vergleichbar:

  • Nicht-Hyperparameter-Abstimmung: DATA_SPLIT_METHOD='RANDOM', DATA_SPLIT_EVAL_FRACTION=0.2
  • Hyperparameter-Feinabstimmung: DATA_SPLIT_METHOD='RANDOM', DATA_SPLIT_EVAL_FRACTION=0.2, DATA_SPLIT_TEST_FRACTION=0

Leistung

Die Modellleistung ist bei Verwendung der Hyperparameter-Abstimmung normalerweise nicht schlechter als die Modellleistung bei Verwendung des Standardsuchbereichs und ohne Hyperparameter-Abstimmung. Ein Modell, das den Standardsuchbereich und keine Hyperparameter-Abstimmung nutzt, verwendet immer die Standard-Hyperparameter im ersten Test.

Wenn Sie die von der Hyperparameter-Abstimmung bereitgestellten Modellleistung verbessern möchten, vergleichen Sie den optimalen Test für das Hyperparameter-Abstimmungsmodell mit dem ersten Test für das Nicht-Hyperparameter-Abstimmungsmodell.

Lerntransfer

Lerntransfer ist standardmäßig aktiviert, wenn Sie die Option HPARAM_TUNING_ALGORITHM in der Anweisung CREATE MODEL auf VIZIER_DEFAULT setzen. Die Hyperparameter-Abstimmung für ein Modell profitiert von dem Nutzen von zuvor abgestimmten Modellen, wenn es die folgenden Anforderungen erfüllt:

  • Es hat denselben Modelltyp wie zuvor abgestimmte Modelle.
  • Es befindet sich im selben Projekt wie zuvor abgestimmte Modelle.
  • Es verwendet denselben Hyperparameter-Suchbereich ODER eine Teilmenge des Hyperparameter-Suchbereichs zuvor abgestimmter Modelle. Eine Teilmenge verwendet dieselben Hyperparameternamen und -typen, muss jedoch nicht dieselben Bereiche haben. Beispiel: (a:[0, 10]) wird als Teilmenge von (a:[-1, 1], b:[0, 1]) betrachtet.

Für den Lerntransfer müssen die Eingabedaten nicht identisch sein.

Der Lerntransfer hilft, das Kaltstartproblem zu lösen, bei dem das System während des ersten Testbatches eine zufällige explorative Datenanalyse ausführt. Der Lerntransfer stellt dem System ein grundlegendes Wissen über die Hyperparameter und deren Ziele bereit. Um die Modellqualität kontinuierlich zu verbessern, trainieren Sie immer ein neues Hyperparameter-Abstimmungsmodell mit denselben oder einer Teilmenge von Hyperparametern.

Mit dem Lerntransfer wird die Hyperparameter-Abstimmung beschleunigt, anstatt Teilmodelle bei der Konvergenz zu unterstützen.

Fehlerbehandlung

Bei der Hyperparameter-Abstimmung werden Fehler auf folgende Weise gehandhabt:

  • Abbrechen: Wenn ein Trainingsjob während der Ausführung abgebrochen wird, können alle erfolgreichen Tests weiterhin verwendet werden.

  • Ungültige Eingabe: Wenn die Nutzereingabe ungültig ist, gibt der Dienst einen Nutzerfehler zurück.

  • Ungültige Hyperparameter: Wenn die Hyperparameter für einen Test ungültig sind, wird der Test übersprungen und in der Ausgabe der Funktion ML.TRIAL_INFO als INFEASIBLE markiert.

  • Interner Testfehler: Wenn mehr als 10 % des Werts NUM_TRIALS aufgrund von INTERNAL_ERROR fehlschlagen, wird der Trainingsjob beendet und ein Nutzerfehler zurückgegeben.

  • Wenn weniger als 10 % des NUM_TRIALS-Werts aufgrund von INTERNAL_ERROR fehlschlagen, wird das Training mit den fehlgeschlagenen Tests fortgesetzt, die in der Ausgabe der Funktion ML.TRIAL_INFO als FAILED markiert sind.

Modellbereitstellungsfunktionen

Sie können Ausgabemodelle der Hyperparameter-Abstimmung mit einer Reihe vorhandener Modellbereitstellungsfunktionen verwenden. Befolgen Sie die folgenden Regeln, um diese Funktionen zu verwenden:

  • Wenn die Funktion Eingabedaten verwendet, wird nur das Ergebnis eines Tests zurückgegeben. Standardmäßig ist dies der optimale Test. Sie können jedoch auch einen bestimmten Test auswählen, indem Sie TRIAL_ID als Argument für die angegebene Funktion angeben. Sie können die TRIAL_ID aus der Ausgabe der Funktion ML.TRIAL_INFO abrufen. Die folgenden Funktionen werden unterstützt:

  • Wenn die Funktion keine Eingabedaten verwendet, werden alle Testergebnisse zurückgegeben und die erste Ausgabespalte ist TRIAL_ID. Die folgenden Funktionen werden unterstützt:

Die Ausgabe von ML.FEATURE_INFO ändert sich nicht, da alle Tests dieselben Eingabedaten verwenden.

Die Bewertungsmesswerte von ML.EVALUATE und ML.TRIAL_INFO können aufgrund der Aufteilung der Eingabedaten unterschiedlich sein. Standardmäßig wird ML.EVALUATE für die Testdaten ausgeführt, während ML.TRIAL_INFO für die Bewertungsdaten ausgeführt wird. Weitere Informationen finden Sie unter Datenaufteilung.

Nicht unterstützte Funktionen

Die Funktion ML.TRAINING_INFO gibt Informationen für jede Iteration zurück und die Iterationsergebnisse werden nicht in Hyperparameter-Abstimmungsmodellen gespeichert. Stattdessen werden die Testergebnisse gespeichert. Mit der Funktion ML.TRIAL_INFO können Sie Informationen zu Testergebnissen abrufen.

Modellexport

Mit der Anweisung EXPORT MODEL können Sie Modelle, die mit Hyperparameter-Abstimmung erstellt wurden, in Cloud Storage-Speicherorte exportieren. Sie können den standardmäßigen optimalen Test oder einen bestimmten Test exportieren.

Preise

Die Kosten für das Training zur Hyperparameter-Abstimmung sind die Summe der Kosten aller ausgeführten Tests. Die Preise eines Testzeitraums entsprechen dem vorhandenen BigQuery ML-Preismodell.

FAQs

Wie viele Versuche brauche ich, um ein Modell zu optimieren?

Wir empfehlen, mindestens 10 Tests für einen Hyperparameter zu verwenden, sodass die Gesamtzahl der Tests mindestens 10 * num_hyperparameters beträgt. Wenn Sie den Standardsuchbereich verwenden, finden Sie in der Spalte Hyperparameter in der Tabelle Hyperparameter und Ziele die Anzahl der Hyperparameter, die standardmäßig für einen bestimmten Modelltyp abgestimmt sind.

Was ist, wenn ich bei der Verwendung der Hyperparameter-Abstimmung keine Leistungsverbesserungen sehe?

Befolgen Sie die Anleitung in diesem Dokument, um einen fairen Vergleich zu erhalten. Wenn Sie immer noch keine Leistungsverbesserungen feststellen, bedeutet dies möglicherweise, dass die Standard-Hyperparameter bereits gut funktionieren. Sie können sich auf das Feature Engineering konzentrieren oder andere Modelltypen ausprobieren, bevor Sie eine weitere Hyperparameter-Abstimmung ausprobieren.

Wie kann ich ein Modell weiter optimieren?

Trainieren Sie ein neues Hyperparameter-Abstimmungsmodell mit demselben Suchbereich. Mit dem Lerntransfer können Sie die Abstimmung auf der Grundlage Ihrer zuvor abgestimmten Modelle fortsetzen.

Muss ich das Modell mit allen Daten und den optimalen Hyperparametern neu trainieren?

Dies hängt von folgenden Faktoren ab:

  • Da K-Means-Modelle bereits alle Daten als Trainingsdaten verwenden, müssen Sie das Modell nicht neu trainieren.

  • Bei Matrixfaktorisierungsmodellen können Sie das Modell mit den ausgewählten Hyperparametern und allen Eingabedaten neu trainieren, um eine bessere Abdeckung von Nutzern und Elementen zu erzielen.

  • Bei allen anderen Modelltypen ist das erneute Training in der Regel nicht erforderlich. Der Dienst behält bereits 80 % der Eingabedaten für das Training während der standardmäßigen zufälligen Datenaufteilung bei. Sie können das Modell immer noch mit mehr Trainingsdaten und den ausgewählten Hyperparametern neu trainieren, wenn Ihr Dataset klein ist. Wenn Sie jedoch nur wenige Auswertungsdaten für ein frühzeitiges Anhalten übrig lassen, kann dies zu einer Überanpassung führen.

Nächste Schritte

Informationen zum Ausführen der Hyperparameter-Abstimmung finden Sie unter BigQuery ML-Hyperparameter-Abstimmung zur Verbesserung der Modellleistung verwenden.