Heim  >  Artikel  >  Technologie-Peripheriegeräte  >  Vergleich der Hyperparameteroptimierung: Rastersuche, Zufallssuche und Bayes'sche Optimierung

Vergleich der Hyperparameteroptimierung: Rastersuche, Zufallssuche und Bayes'sche Optimierung

WBOY
WBOYnach vorne
2023-04-04 12:05:082000Durchsuche

In diesem Artikel werden die gängigsten Hyperparameter-Optimierungsmethoden zur Verbesserung der Ergebnisse des maschinellen Lernens ausführlich vorgestellt.

Übersetzer |. Zhu Xianzhong​

Rezensent |. Zusätzliche Daten sind oft hilfreich (außer unter bestimmten Umständen), aber die Generierung hochwertiger Daten kann sehr teuer sein. Durch die Hyperparameteroptimierung sparen wir Zeit und Ressourcen, indem wir vorhandene Daten nutzen, um die beste Modellleistung zu erzielen.

Wie der Name schon sagt, handelt es sich bei der Hyperparameteroptimierung um den Prozess der Bestimmung der besten Kombination von Hyperparametern für ein maschinelles Lernmodell, um die Optimierungsfunktion zu erfüllen (d. h. die Leistung des Modells angesichts des untersuchten Datensatzes zu maximieren). Mit anderen Worten: Jedes Modell bietet mehrere Tuning-„Schaltflächen“ mit Optionen, die wir ändern können, bis wir eine optimale Kombination von Hyperparametern für unser Modell erreicht haben. Einige Beispiele für Parameter, die wir während der Hyperparameteroptimierung ändern können, können die Lernrate, die Architektur des neuronalen Netzwerks (z. B. die Anzahl der verborgenen Schichten), die Regularisierung usw. sein. ​

In diesem Artikel werden wir die drei häufigsten Methoden zur Hyperparameteroptimierung konzeptionell vorstellen, nämlich Rastersuche, Zufallssuche und Bayes'sche Optimierung, und sie dann einzeln implementieren.

Ich werde am Anfang des Artikels eine allgemeine Vergleichstabelle als Referenz für den Leser bereitstellen und dann im weiteren Verlauf des Artikels jedes Element in der Vergleichstabelle weiter untersuchen, erklären und implementieren. ​

Tabelle 1: Vergleich der Hyperparameter-Optimierungsmethoden​

Vergleich der Hyperparameteroptimierung: Rastersuche, Zufallssuche und Bayes'sche Optimierung1. Rastersuche ist wahrscheinlich die einfachste und intuitivste Methode zur Hyperparameteroptimierung, bei der in einem definierten Suchraum gründlich gesucht wird die beste Kombination von Hyperparametern. Der „Suchraum“ ist in diesem Zusammenhang der gesamte Hyperparameter und die Werte solcher Hyperparameter, die bei der Optimierung berücksichtigt werden. Lassen Sie uns die Rastersuche anhand eines Beispiels besser verstehen. ​

Angenommen, wir haben ein maschinelles Lernmodell mit nur drei Parametern. Jeder Parameter kann den in der Tabelle angegebenen Wert annehmen:​

Parameter_1 = [1, 2, 3]​

Parameter_2 = [a, b, c ]​

parameter_3 = [x, y, z]​

Wir wissen nicht, welche Kombination dieser Parameter die Optimierungsfunktion unseres Modells optimiert (d. h. die beste Ausgabe für unser maschinelles Lernmodell liefert). Bei der Rastersuche probieren wir einfach jede Kombination dieser Parameter aus, messen die Modellleistung für jeden Parameter und wählen einfach die Kombination aus, die die beste Leistung liefert! In diesem Beispiel kann Parameter 1 3 Werte annehmen (d. h. 1, 2 oder 3), Parameter 2 kann 3 Werte annehmen (d. h. a, b und c) und Parameter 3 kann 3 Werte annehmen ​​(d. h. x, y und z). Mit anderen Worten: Insgesamt gibt es 3*3*3=27 Kombinationen. Die Rastersuche in diesem Beispiel umfasst 27 Runden zur Bewertung der Leistung des maschinellen Lernmodells, um die Kombination mit der besten Leistung zu finden. ​

Wie Sie sehen, ist diese Methode sehr einfach (ähnlich einer Trial-and-Error-Aufgabe), weist jedoch auch einige Einschränkungen auf. Fassen wir die Vor- und Nachteile dieser Methode zusammen. ​

Zu den Vorteilen gehören unter anderem:​

Einfach zu verstehen und zu implementieren

Einfach zu parallelisieren​

Geeignet sowohl für diskrete als auch für kontinuierliche Räume​Zu den Nachteilen gehören hauptsächlich:​
  • In großen und/oder komplexen Räumen Systeme mit einer großen Anzahl von Hyperparametern. Kostspielig im Modell (da alle Kombinationen ausprobiert und bewertet werden müssen).
  • Speicher – lernt nicht aus früheren Beobachtungen.
  • Findet möglicherweise nicht die beste Kombination, wenn der Suchraum zu groß ist. Mein Vorschlag ist Wenn Sie ein einfaches Modell mit einem kleinen Suchraum haben, verwenden Sie ansonsten die Rastersuche. Es wird empfohlen, weiterzulesen, um eine Lösung zu finden, die für einen größeren Suchraum besser geeignet ist.
  • Nun implementieren wir die Rastersuche anhand eines realen Beispiels.
  • 1.1. Implementierung des Rastersuchalgorithmus
  • Um die Rastersuche zu implementieren, verwenden wir den Iris-Datensatz in scikit-learn, um ein zufälliges Waldklassifizierungsmodell zu erstellen. Dieser Datensatz umfasst drei verschiedene Irisblüten- und Kelchblattlängen und wird für diese Klassifizierungsübung verwendet. In diesem Artikel ist die Modellentwicklung zweitrangig, da das Ziel darin besteht, die Leistung verschiedener Hyperparameter-Optimierungsstrategien zu vergleichen. Ich empfehle Ihnen, sich auf die Ergebnisse der Modellbewertung und die Zeit zu konzentrieren, die jede Hyperparameter-Optimierungsmethode benötigt, um den ausgewählten Satz von Hyperparametern zu erreichen. Ich beschreibe die Ergebnisse des Laufs und stelle dann eine zusammenfassende Vergleichstabelle für die drei in diesem Artikel verwendeten Methoden bereit. ​
  • Der Suchraum einschließlich aller Hyperparameterwerte ist wie folgt definiert:​

search_space = {'n_estimators': [10, 100, 500, 1000],​

'max_ Depth': [2, 10, 25, 50, 100],​

'min_samples_split': [2, 5, 10],​

'min_samples_leaf': [1, 5, 10]}​

Der obige Suchraum besteht aus 4*5*3*3= 180 Hyperparameter der Gesamtkombination. Wir werden die Rastersuche verwenden, um die Kombination zu finden, die die Zielfunktion wie folgt optimiert:​

# Bibliotheken importieren​
aus sklearn.model_selection import GridSearchCV​
aus sklearn.datasets import load_iris​
aus sklearn.ensemble import RandomForestClassifier​
aus sklearn.model_selection import cross_val_score​
Importzeit​
# Iris-Datensatz laden
iris = Load_Iris()​
, 10, 25, 50, 100],​
'min_samples_split': [2, 5, 10],​
'min_samples_leaf': [1, 5, 10]}​
#Define Random Forest Classifier​
clf = RandomForestClassifier (random_state=1234)​
# Optimierungsobjekt generieren​
optimizer = GridSearchCV(clf, search_space, cv=5, Scoring='accuracy')​
#Speichern Sie die Startzeit, damit diese zur Berechnung des Gesamtverbrauchs verwendet werden kann Zeit ​
start_time = time.time()​
# Optimierer für die Datenanpassung​
optimizer.fit(X, y)​
# Speichern Sie die Endzeit, damit sie zur Berechnung der Gesamtzeit verwendet werden kann
end_time = time .time ()​
# Drucken Sie den optimalen Hyperparametersatz und die entsprechende Punktzahl​
print(f"selected hyperparameters:")​
print(optimizer.best_params_)​
print("")​
print(f"best_score: {optimizer. best_score_}")​
print(f"elapsed_time: {round(end_time-start_time, 1)}")​

Die Ausgabe des obigen Codes ist wie folgt:​

Hier können wir die Verwendung von sehen Die Netzwerk-Grid-Suche wählt Hyperparameterwerte aus. Darunter beschreibt best_score die Bewertungsergebnisse unter Verwendung des ausgewählten Satzes von Hyperparametern und elapsed_time beschreibt die Zeit, die mein lokaler Laptop benötigt hat, um diese Hyperparameter-Optimierungsstrategie auszuführen. Wenn Sie mit der nächsten Methode fortfahren, behalten Sie zum Vergleich die Bewertungsergebnisse und die verstrichene Zeit im Hinterkopf. Kommen wir nun zur Diskussion der Zufallssuche. ​Vergleich der Hyperparameteroptimierung: Rastersuche, Zufallssuche und Bayes'sche Optimierung

2. Zufallssuchalgorithmus​

Wie der Name schon sagt, ist die Zufallssuche der Prozess der zufälligen Auswahl von Hyperparametern aus einem definierten Suchraum. Im Gegensatz zur Rastersuche wählt die Zufallssuche nur eine zufällige Teilmenge von Hyperparameterwerten für eine vordefinierte Anzahl von Iterationen aus (abhängig von den verfügbaren Ressourcen wie Zeit, Budget, Zielen usw.) und berechnet das maschinelle Lernmodell für die Leistung jedes Hyperparameters Wählen Sie dann die besten Hyperparameterwerte aus. ​

Basierend auf dem oben genannten Ansatz können Sie sich vorstellen, dass die Zufallssuche kostengünstiger ist als eine vollständige Rastersuche, aber dennoch ihre eigenen Vor- und Nachteile hat, wie folgt:​

Vorteile:​

Einfach zu verstehen und umzusetzen

    Einfach zu parallelisieren​
  • Anwendbar sowohl auf diskrete als auch auf kontinuierliche Räume​
  • Kostengünstiger als die Rastersuche​
  • Konvergiert eher zum Optimum als die Rastersuche mit der gleichen Anzahl von Versuchen. Nachteile: ​
  • Speicher – lernt nicht Aus früheren Beobachtungen​
  • Unter Berücksichtigung der Zufallsauswahl können wichtige Hyperparameterwerte übersehen werden​
  • In der nächsten Methode werden wir das Raster und den „speicherlosen“ Nachteil der Zufallssuche lösen. Aber bevor wir diese Methode besprechen, implementieren wir die Zufallssuche. ​
2.1. Implementierung des Zufallssuchalgorithmus

Mit dem folgenden Codeausschnitt implementieren wir die Optimierung der Zufallssuchhyperparameter für dasselbe Problem, das in der Rastersuchimplementierung beschrieben wurde. ​

# Bibliothek importieren​

aus sklearn.model_selection import RandomizedSearchCV​

aus scipy.stats import randint​


# Erstellen Sie ein RandomizedSearchCV-Objekt​
optimizer = RandomizedSearchCV(clf, param_distributinotallow=search_space,​
n_iter=50, cv= 5, Scoring='accuracy',​
random_state=1234)​

# Speichern Sie die Startzeit, um die Gesamtlaufzeit zu berechnen​
start_time = time.time()​

# Passen Sie den Optimierer an die Daten an​
Optimierer . fit(X, y)​

# Speichern Sie die Endzeit, um die Gesamtlaufzeit zu berechnen :" )​
print(optimizer.best_params_)​
print("")​
print(f"best_score: {optimizer.best_score_}")​
print(f"elapsed_time: {round(end_time-start_time, 1) }" )​

Die Ausgabe des obigen Codes ist wie folgt:​




Zufällige Suchergebnisse​

Diese Ergebnisse sind im Vergleich zu den Ergebnissen der Rastersuche sehr interessant. best_score bleibt gleich, aber elapsed_time verringert sich von 352,0 Sekunden auf 75,5 Sekunden! Wie beeindruckend! Mit anderen Worten, der Zufallssuchalgorithmus hat es geschafft, eine Reihe von Hyperparametern zu finden, die die gleiche Leistung wie die Rastersuche erbrachten, und zwar in etwa 21 % der für die Rastersuche erforderlichen Zeit! Allerdings ist der Wirkungsgrad hier deutlich höher. ​

Als nächstes fahren wir mit unserer nächsten Methode fort, der sogenannten Bayes’schen Optimierung, die aus jedem Versuch im Optimierungsprozess lernt. Vergleich der Hyperparameteroptimierung: Rastersuche, Zufallssuche und Bayes'sche Optimierung

3. Bayesianische Optimierung

Bayesianische Optimierung ist eine Hyperparameter-Optimierungsmethode, die ein Wahrscheinlichkeitsmodell verwendet, um aus früheren Versuchen zu „lernen“ und die Suche auf die beste Kombination von Hyperparametern im Suchraum zu lenken, wodurch die Zielfunktion des maschinellen Lernens optimiert wird Modell. ​

Die Bayes'sche Optimierungsmethode lässt sich in 4 Schritte unterteilen, die ich im Folgenden beschreibe. Ich empfehle Ihnen, diese Schritte durchzulesen, um den Prozess besser zu verstehen. Für die Verwendung dieser Methode sind jedoch keine Vorkenntnisse erforderlich. ​

  1. Definieren Sie ein „prior“, das ein probabilistisches Modell über unsere Überzeugung zu einem bestimmten Zeitpunkt über die wahrscheinlichste Kombination von Hyperparametern ist, die die Zielfunktion optimiert.
  2. Ein Modell zur Bewertung einer Stichprobe von Hyperparametern.
  3. Verwenden Sie die Schritte Mithilfe der in Schritt 2 gewonnenen Erkenntnisse aktualisieren wir das probabilistische Modell aus Schritt 1 (was wir als „prior“ bezeichnen), um zu verstehen, wo unserer Meinung nach die wahrscheinlichsten Kombinationen von Hyperparametern liegen, die die Zielfunktion optimieren. Unser aktualisierter Glaube wird „posterior“ genannt. Mit anderen Worten: Das in Schritt 2 gewonnene Wissen hilft uns, den Suchraum besser zu verstehen und führt uns vom Vorhergehenden zum Hinteren, wodurch das Hintere unser „neuestes“ Wissen über den Suchraum und die Zielfunktion wird, wie in Schritt 2 ermittelt. Informationen bereitstellen
  4. Wiederholen Sie die Schritte 2 und 3, bis die Modellleistung konvergiert, die Ressourcen erschöpft sind oder andere vordefinierte Metriken erfüllt sind.

Wenn Sie mehr Details zur Bayes'schen Optimierung erfahren möchten, können Sie sich den folgenden Beitrag ansehen:

" „Bayesian Optimization Algorithm in Machine Learning“, die Adresse lautet:
​​https://medium.com/@fmnobar/conceptual-overview-of-bayesian-optimization-for-parameter-tuning-in -machine-learning-a3b1b4b9339f. ​​​

Da wir nun verstanden haben, wie die Bayes'sche Optimierung funktioniert, schauen wir uns ihre Vor- und Nachteile an. ​

Vorteile:​

  • Lernen Sie aus vergangenen Beobachtungen und seien Sie dadurch effizienter. Mit anderen Worten: Es wird erwartet, dass in weniger Iterationen ein besserer Satz von Hyperparametern gefunden wird als bei gedächtnislosen Methoden Die Wahl der Prioritäten und anfänglichen Wahrscheinlichkeitsverteilungen für die bei der Bayes’schen Optimierung verwendeten Funktionen (z. B. Get-Funktionen usw.) können die Leistung und ihre Lernkurve erheblich beeinflussen die Ergebnisse. ​
  • 3.1. Implementierung des Bayes'schen Optimierungsalgorithmus
  • Ähnlich wie im vorherigen Abschnitt werden wir den folgenden Codeausschnitt verwenden, um die Bayes'sche Hyperparameteroptimierung für dasselbe Problem zu implementieren, das in der Rastersuchimplementierung beschrieben wurde. ​
  • # Bibliothek importieren​
  • aus Skopt-Import BayesSearchCV​
  • # Bayessche Optimierung durchführen​
optimizer = BayesSearchCV(estimator=RandomForestClassifier(),​

search_spaces=search_space,​

n_iter=10,​

cv=5 ,​

scoring='accuracy',​

random_state=1234)​

# Speichern Sie die Startzeit, um die Gesamtlaufzeit zu berechnen​
start_time = time.time()​

optimizer.fit(X, y)​

# Speichern Sie die Endzeit, um die Gesamtlaufzeit zu berechnen​
end_time = time.time()​

# Drucken Sie den besten Hyperparametersatz und die entsprechende Punktzahl aus​
print(f"selected hyperparameters:")​
print(optimizer.best_params_ ) ​
print("")​
print(f"best_score: {optimizer.best_score_}")​
print(f"elapsed_time: {round(end_time-start_time, 1)}")​

Die Ausgabe der obiger Code Wie folgt:​




Bayesianische Optimierungsergebnisse​

Eine weitere Reihe interessanter Ergebnisse! Der best_score stimmt mit den Ergebnissen überein, die wir mit der Raster- und Zufallssuche erhalten haben, aber das Ergebnis dauerte nur 23,1 Sekunden im Vergleich zu 75,5 Sekunden bei der Zufallssuche und 352,0 Sekunden bei der Rastersuche! Mit anderen Worten: Die Verwendung der Bayes'schen Optimierung nimmt etwa 93 % weniger Zeit in Anspruch als die Rastersuche. Dies ist ein enormer Produktivitätsschub, der bei größeren, komplexeren Modellen und Suchräumen noch bedeutsamer wird. ​

Beachten Sie, dass die Bayes'sche Optimierung nur 10 Iterationen benötigte, um diese Ergebnisse zu erhalten, da sie aus früheren Iterationen lernen kann (im Gegensatz zur Zufalls- und Rastersuche).

Ergebnisvergleich

Die folgende Tabelle vergleicht die Ergebnisse der drei bisher besprochenen Methoden. Die Spalte „Methodik“ beschreibt die verwendete Hyperparameter-Optimierungsmethode. Darauf folgen die mit jeder Methode ausgewählten Hyperparameter. „Beste Punktzahl“ ist die mit einer bestimmten Methode ermittelte Punktzahl, und „Verstrichene Zeit“ gibt an, wie lange es gedauert hat, bis die Optimierungsstrategie auf meinem lokalen Laptop ausgeführt wurde. In der letzten Spalte „Gewonnene Effizienz“ wird von der Rastersuche als Basislinie ausgegangen und dann die durch jede der beiden anderen Methoden im Vergleich zur Rastersuche gewonnene Effizienz berechnet (unter Verwendung der verstrichenen Zeit). Da die Zufallssuche beispielsweise 75,5 Sekunden und die Rastersuche 352,0 Sekunden dauert, wird die Effizienz der Zufallssuche im Verhältnis zur Rastersuchbasislinie zu 1–75,5/352,0=78,5 % berechnet. ​

Vergleich der Hyperparameteroptimierung: Rastersuche, Zufallssuche und Bayes'sche Optimierung

Tabelle 2 – Vergleichstabelle zur Methodenleistung​

Zwei Hauptschlussfolgerungen in der obigen Vergleichstabelle:​

  1. Effizienz: Wir können sehen, wie Lernmethoden wie die Bayes'sche Optimierung in kürzerer Zeit bessere Ergebnisse erzielen können. Finden Sie eine optimierter Satz von Hyperparametern. ​
  2. Parameterauswahl: Es kann mehrere richtige Antworten geben. Beispielsweise unterscheiden sich die ausgewählten Parameter für die Bayes'sche Optimierung von denen für die Raster- und Zufallssuche, obwohl die Bewertungsmetrik (d. h. best_score) gleich bleibt. Dies ist in größeren, komplexeren Umgebungen umso wichtiger. ​

Fazit

In diesem Artikel haben wir besprochen, was Hyperparameteroptimierung ist, und die drei am häufigsten verwendeten Methoden für diese Optimierungsübung vorgestellt. Anschließend stellen wir jede dieser drei Methoden im Detail vor und implementieren sie in einer Klassifizierungsübung. Abschließend vergleichen wir die Ergebnisse der Implementierung der drei Methoden. Wir stellen fest, dass Methoden wie die Bayes'sche Optimierung, die aus früheren Versuchen gelernt wurden, die Effizienz erheblich verbessern können, was ein wichtiger Faktor in großen komplexen Modellen wie tiefen neuronalen Netzen sein kann, bei denen die Effizienz ein entscheidender Faktor sein kann. ​

Einführung in den Übersetzer

Zhu Xianzhong, 51CTO-Community-Redakteur, 51CTO-Expertenblogger, Dozent, Computerlehrer an einer Universität in Weifang und ein Veteran in der freiberuflichen Programmierbranche. ​

Originaltitel: ​​Hyperparameter Optimization – Intro and Implementation of Grid Search, Random Search and Bayesian Optimization​​, Autor: Farzad Mahmoodinobar​



Das obige ist der detaillierte Inhalt vonVergleich der Hyperparameteroptimierung: Rastersuche, Zufallssuche und Bayes'sche Optimierung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:51cto.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen