Hyperparameter-Abstimmung

Bei der Hyperparameter-Abstimmung wird die Verarbeitungsinfrastruktur der Google Cloud genutzt, um verschiedene Hyperparameter-Konfigurationen beim Trainieren Ihres Modells zu testen. Sie kann optimierte Werte für Hyperparameter liefern und damit die Vorhersagegenauigkeit Ihres Modells maximieren.

Was ist ein Hyperparameter?

Hyperparameter enthalten die Daten, denen der Trainingsprozess unterliegt.

Ihre Trainingsanwendung verarbeitet drei Kategorien von Daten, während Ihr Modell trainiert wird:

  • Ihre Eingabedaten (auch als Trainingsdaten bezeichnet) bestehen aus einer Sammlung einzelner Datensätze (Instanzen), in denen die Funktionen enthalten sind, die wichtig sind, um Probleme mit maschinellem Lernen zu lösen. Diese Daten werden während des Trainings verwendet, um das Modell so zu konfigurieren, dass genaue Vorhersagen über neue Instanzen ähnlicher Daten gemacht werden. Allerdings werden die Werte in den Eingabedaten nie direkt Teil des Modells.

  • Die Parameter des Modells sind die Variablen, mit denen das von Ihnen gewählte Verfahren für das maschinelle Lernen an die Daten angepasst wird. Zum Beispiel besteht ein neuronales Deep-Learning-Netzwerk (DNN) aus Verarbeitungsknoten (Neuronen) mit jeweils einem Vorgang, der während der Übertragung im Netzwerk an den Daten ausgeführt wird. Wenn das DNN trainiert wird, besitzt jeder Knoten einen gewichteten Wert, der dem Modell mitteilt, welchen Einfluss er auf die endgültige Vorhersage hat. Die Gewichtung ist ein Beispiel für die Parameter des Modells. In vielerlei Hinsicht sind die Parameter das Modell: Durch die Parameter unterscheidet sich ein bestimmtes Modell von anderen Modellen desselben Typs, die mit ähnlichen Daten arbeiten.

  • Die Hyperparameter sind die Variablen, denen der Trainingsprozess unterliegt. Beispielsweise wird beim Erstellen eines DNN festgelegt, wie viele verborgene Knotenebenen zwischen den Eingabe- und Ausgabeebenen verwendet werden sollen und wie viele Knoten jede verborgene Ebene nutzen soll. Diese Variablen stehen in keinem direkten Zusammenhang mit den Trainingsdaten. Sie sind lediglich Konfigurationsvariablen. Parameter können sich während eines Trainingsjobs verändern, Hyperparameter bleiben jedoch in der Regel während eines Jobs konstant.

Die Parameter Ihres Modells werden durch den Trainingsprozess optimiert bzw. "abgestimmt": Sie lassen Daten durch die Modellvorgänge laufen, vergleichen für jede Dateninstanz die daraus hervorgehende Vorhersage mit dem tatsächlichen Wert, evaluieren die Genauigkeit und nehmen so lange Anpassungen vor, bis die Werte optimal sind. Hyperparameter sind in ähnlicher Weise abgestimmt, denn sie führen Ihren gesamten Trainingsjob aus, betrachten die Gesamtgenauigkeit und werden angepasst. In beiden Fällen ändern Sie die Zusammensetzung Ihres Modells, um die beste Kombination für die Lösung Ihres Problems zu ermitteln.

Ohne eine automatisierte Technologie wie die Hyperparameter-Abstimmung von Vertex AI müssen Sie manuelle Anpassungen der Hyperparameter über viele Trainingsläufe vornehmen, um die optimalen Werte zu ermitteln. Die Hyperparameter-Abstimmung vereinfacht und verkürzt die Bestimmung der besten Hyperparameter-Einstellungen.

So funktioniert die Hyperparameter-Abstimmung

Bei der Hyperparameter-Abstimmung werden mehrere Tests Ihrer Trainingsanwendung mit Werten für Ihre gewählten Hyperparameter innerhalb von Ihnen festgelegten Limits ausgeführt. Vertex AI verfolgt die Ergebnisse jedes Versuchs und nimmt Anpassungen für nachfolgende Versuche vor. Wenn der Job abgeschlossen ist, erhalten Sie eine Zusammenfassung aller Versuche zusammen mit der effektivsten Konfiguration von Werten gemäß den von Ihnen festgelegten Kriterien.

Die Hyperparameter-Feinabstimmung erfordert eine explizite Kommunikation zwischen Vertex AI und Ihrer Trainingsanwendung. Von Ihrer Trainingsanwendung werden alle Informationen festgelegt, die Ihr Modell benötigt. Sie definieren die Hyperparameter (Variablen), die Sie anpassen möchten, und die Zielvariablen, die zur Bewertung jedes Tests verwendet werden.

Weitere Informationen zur Bayes'schen Optimierung für die Hyperparameter-Abstimmung finden Sie in diesem Artikel.

Zusätzlich zur Bayes'schen Optimierung optimiert Vertex AI Hyperparameter-Abstimmungsjobs. Wenn Sie die Hyperparameter-Abstimmung für ähnliche Modelle ausführen, lässt sich Vertex AI nur durch Ändern der Zielfunktion oder durch Einfügen einer neuen Eingabespalte im Laufe der Zeit verbessern und die Hyperparameter-Abstimmung effizienter gestalten.

Was optimiert Hyperparameter-Abstimmung?

Durch Hyperparameter-Abstimmung werden von Ihnen angegebene Zielvariablen optimiert. Diese werden als Hyperparameter-Messwerte bezeichnet. Ein häufig genutzter Messwert ist die Modellgenauigkeit, die aus einem Bewertungsdurchlauf berechnet wird. Messwerte müssen numerisch sein.

Bei der Konfiguration eines Hyperparameter-Abstimmungsjobs definieren Sie den Namen und das Ziel jedes Messwerts. Das Ziel gibt an, ob Sie Ihr Modell optimieren möchten, indem Sie den Wert dieses Messwerts maximieren oder minimieren.

Wie Vertex AI Messwerte abruft

Verwenden Sie das Python-Paket cloudml-hypertune, um Messwerte an Vertex AI zu übergeben. Diese Bibliothek bietet Hilfsfunktionen zum Senden von Messwerten an Vertex AI.

Weitere Informationen zum Übergeben von Hyperparameter-Messwerten finden Sie in diesem Artikel.

Fluss der Hyperparameter-Werte

Ohne Hyperparameter-Abstimmung können Sie Ihre Hyperparameter in Ihrer Trainingsanwendung beliebig festlegen. Sie können die Hyperparameter z. B. konfigurieren, indem Sie Befehlszeilenargumente an Ihr Hauptanwendungsmodul weiterleiten oder sie in einer Konfigurationsdatei an Ihre Anwendung weitergeben.

Wenn Sie die Hyperparameter-Abstimmung verwenden, müssen Sie die Werte der zur Abstimmung verwendeten Hyperparameter auf folgende Weise festlegen:

  • Definieren Sie im Haupt-Trainingsmodul für jeden abgestimmten Hyperparameter ein Befehlszeilenargument.

  • Verwenden Sie den mit diesen Argumenten übergebenen Wert, um den entsprechenden Hyperparameter im Code der Anwendung festzulegen.

Wenn Sie einen Hyperparameter-Abstimmungsjob konfigurieren, definieren Sie alle Hyperparameter, die abgestimmt werden sollen, seinen Typ und den zu testenden Wertebereich. Sie ermitteln jeden Hyperparameter mithilfe desselben Namens wie das entsprechende Argument, das Sie in Ihrem Hauptmodul definiert haben. Der Trainingsdienst fügt Befehlszeilenargumente ein, die diese Namen verwenden, wenn er Ihre Anwendung ausführt.

Weitere Informationen zu den Anforderungen beim Parsen von Befehlszeilenargumenten finden Sie in diesem Artikel.

Hyperparameter zur Feinabstimmung auswählen

Für die Auswahl der Hyperparameter, die abgestimmt werden sollen, lassen sich nur schwer allgemeine Empfehlungen geben. Wenn Sie Erfahrung mit der maschinellen Lernmethode haben, die Sie verwenden, haben Sie wahrscheinlich einen Einblick in das Verhalten Ihrer Hyperparameter. Eventuell finden Sie auch Rat in Machine Learning-Communities.

Wie Sie Hyperparameter auch auswählen, Sie sollten sich über die Auswirkungen Ihrer Wahl bewusst sein. Jeder Hyperparameter, den Sie auswählen, kann die Anzahl der Versuche potenziell erhöhen, die für einen erfolgreichen Abstimmungsjob erforderlich sind. Wenn Sie einen Hyperparameter-Abstimmungsjob in Vertex AI ausführen, wird der Ihnen in Rechnung gestellte Betrag anhand der Dauer der von Ihrem Hyperparameter-Abstimmungsjob ausgelösten Tests ermittelt. Eine sorgfältige Auswahl der Hyperparameter, die optimiert werden sollen, kann den Zeitaufwand und die Kosten Ihres Hyperparameter-Abstimmungsjobs reduzieren.

Hyperparameter-Datentypen

In einem ParameterSpec-Objekt geben Sie den Hyperparameter-Datentyp als Instanz der Spezifikation eines Parameterwertwerts an. In der folgenden Tabelle sind die unterstützten Spezifikationen von Parameterwerten aufgeführt.

Typ Datentyp Wertebereiche Wertdaten
DoubleValueSpec DOUBLE minValue & maxValue Gleitkommawerte
IntegerValueSpec INTEGER minValue & maxValue Ganzzahlige Werte
CategoricalValueSpec CATEGORICAL categoricalValues Liste der Kategorie-Strings
DiscreteValueSpec DISCRETE discreteValues Liste von Werten in aufsteigender Reihenfolge

Hyperparameter skalieren

In einem ParameterSpec-Objekt können Sie festlegen, dass die Skalierung für diesen Hyperparameter ausgeführt werden soll. Die Skalierung wird für die Datentypen DOUBLE und INTEGER empfohlen. Die folgenden Skalierungstypen sind verfügbar:

  • SCALE_TYPE_UNSPECIFIED: Für diesen Hyperparameter wird keine Skalierung angewendet.
  • UNIT_LINEAR_SCALE: Skaliert den zulässigen Bereich linear von 0 bis 1.
  • UNIT_LOG_SCALE: Skaliert den zulässigen Bereich logarithmisch von 0 bis 1. Der gesamte zulässige Bereich muss strikt positiv sein.
  • UNIT_REVERSE_LOG_SCALE: Skaliert den zulässigen Bereich "umgekehrt" logarithmisch von 0 bis 1. Dies hat zur Folge, dass Werte nahe am oberen Rand des zulässigen Bereichs weiter verteilt werden als Punkte am unteren Rand. Der gesamte zulässige Bereich muss strikt positiv sein.

Bedingte Hyperparameter

Mit dem Objekt ConditionalParameterSpec können Sie einem Test Hyperparameter hinzufügen, wenn der Wert seines übergeordneten Hyperparameters mit einer von Ihnen festgelegten Bedingung übereinstimmt.

Beispielsweise können Sie einen Hyperparameter-Abstimmungsjob mit dem Ziel definieren, mithilfe der linearen Regression oder mit einem neuronalen Deep-Learning-Netzwerk ein optimales Modell zu ermitteln. Damit Ihr Abstimmungsjob die Trainingsmethode festlegen kann, definieren Sie einen kategorialen Hyperparameter namens training_method mit den Optionen LINEAR_REGRESSION und DNN. Wenn für training_method der Wert LINEAR_REGRESSION festgelegt ist, muss in Ihrem Abstimmungsjob ein Hyperparameter für die Lernrate angegeben werden. Wenn für training_method der Wert DNN festgelegt ist, müssen in Ihrem Abstimmungsjob Parameter für die Lernrate und für die Anzahl der verborgenen Ebenen angegeben werden.

Da die Anzahl der verborgenen Ebenen nur erforderlich ist, wenn die training_method des Tests DNN lautet, definieren Sie einen bedingten Parameter, der einen Hyperparameter mit dem Namen num_hidden_layers hinzufügt, wenn für training_method der Wert DNN gilt.

Da die Lernrate von beiden training_method-Optionen verwendet wird, müssen Sie festlegen, ob dieser bedingte Hyperparameter freigegeben werden soll. Bei freigegebenen Hyperparametern verwendet der Abstimmungsjob das Erlernte aus den LINEAR_REGRESSION- und DNN-Tests, um die Lernrate anzupassen. In diesem Fall ist es sinnvoller, mit separaten Lernraten für jede training_method zu arbeiten, da die Lernrate zum Trainieren eines Modells mit LINEAR_REGRESSION sich nicht auf die Lernrate für das Training eines Modells mit DNN auswirken darf. Definieren Sie also die folgenden bedingten Hyperparameter:

  • Einen Hyperparameter mit dem Namen learning_rate, der hinzugefügt wird, wenn für training_method der Wert LINEAR_REGRESSION gilt.
  • Einen Hyperparameter mit dem Namen learning_rate, der hinzugefügt wird, wenn für training_method der Wert DNN gilt.

Mit bedingten Hyperparametern können Sie die Hyperparameter für Ihren Abstimmungsjob als Graphen definieren. Damit haben Sie die Möglichkeit, den Trainingsvorgang mit verschiedenen Trainingstechniken zu optimieren, die jeweils eigene Hyperparameter-Abhängigkeiten haben.

Suchalgorithmen

Im Objekt StudySpec können Sie einen Suchalgorithmus angeben. Wenn Sie keinen Algorithmus angeben, verwendet Ihr Job den Standard-Vertex-AI-Algorithmus. Der Standardalgorithmus wendet die Bayes'sche Optimierung für die Ermittlung der optimalen Lösung an, mit einer effektiveren Suche im Parameterbereich.

Verfügbare Werte sind:

  • ALGORITHM_UNSPECIFIED: Dasselbe, als wäre kein Algorithmus angegeben. Vertex AI wählt den besten Suchalgorithmus zwischen Gaußschen Prozess-Bandits, linearer Kombinationssuche oder Varianten aus.

  • GRID_SEARCH: Eine einfache Rastersuche im zulässigen Bereich. Diese Option ist besonders hilfreich, wenn Sie eine Anzahl an Tests festlegen möchten, die größer ist als die Anzahl der Punkte im zulässigen Bereich. Ist in solchen Fällen keine Rastersuche festgelegt, generiert der Vertex AI-Standardalgorithmus unter Umständen doppelte Vorschläge. Alle Parameter müssen vom Typ INTEGER, CATEGORICAL oder DISCRETE sein, um die Rastersuche nutzen zu können.

  • RANDOM_SEARCH: Eine einfache Zufallssuche im zulässigen Bereich.

Nächste Schritte