18

ich einen CLDNN konstruiert (Faltungs, LSTM Deep Neural Network) -Struktur für Rohsignal Klassifikationsaufgabe.Hyper Optimierung für Deep Learning Strukturen Bayesian Optimierung mit

Jede Trainingsepoche dauert etwa 90 Sekunden und die Hyperparameter scheinen sehr schwer zu optimieren.

Ich habe verschiedene Möglichkeiten zur Optimierung der Hyperparameter (z. B. zufällige oder Grid-Suche) erforscht und über Bayesian Optimierung herausgefunden.

Obwohl ich bin immer noch nicht in vollem Umfang den Optimierungsalgorithmus verstehen, ich füttern, wie es mir sehr helfen.

Ich möchte einige Fragen bezüglich der Optimierungsaufgabe stellen.

  1. Wie richte ich in Bezug auf ein tiefes Netz die Bayes-Optimierung auf? (Wie ist die Kostenfunktion wir zu optimieren versuchen?)
  2. Was ist die Funktion, die ich optimieren möchte? Sind die Kosten für die Validierung nach N Epochen festgelegt?
  3. Ist Spearmint ein guter Ausgangspunkt für diese Aufgabe? Irgendwelche anderen Vorschläge für diese Aufgabe?

Ich würde stark keine Einblicke in dieses Problem zu schätzen wissen.

+0

Wenn Sie für ein Tool zur Optimierung von Hyperparametern offen sind, haben Sie sich TPOT http://www.randalolson.com/2016/05/08/tpot-a-python-tool-for-automating-data-science angeschaut / –

Antwort

12

Obwohl ich den Algorithmus noch nicht vollständig verstehe, füttere ich, wie es mir sehr helfen wird.

Zuerst, lassen Sie mich diesen Teil kurz erklären. Bayes'sche Optimierungsmethoden zielen darauf ab, die Exploration-Ausbeutung-Abwägung in der multi-armed bandit problem zu behandeln. In diesem Problem gibt es eine unbekannt Funktion, die wir in jedem Punkt auswerten können, aber jeder Evaluierungskosten (direkte Strafe oder Opportunitätskosten), und das Ziel ist, ihr Maximum mit möglichst wenigen Versuchen wie möglich zu finden. Im Prinzip ist das ein Kompromiss: Du kennst die Funktion in einer endlichen Menge von Punkten (von denen einige gut und einige schlecht sind), also kannst du einen Bereich um das aktuelle lokale Maximum versuchen, in der Hoffnung, es zu verbessern (Ausbeutung), oder Sie können ein völlig neues Gebiet ausprobieren, das möglicherweise viel besser oder viel schlechter (Exploration) oder irgendwo dazwischen sein kann.

Bayesianische Optimierungsmethoden (z. B. PI, EI, UCB), erstellen Sie ein Modell der Zielfunktion unter Verwendung einer Gaussian Process (GP) und wählen Sie bei jedem Schritt den "vielversprechendsten" Punkt basierend auf ihrem GP-Modell "kann durch verschiedene besondere Methoden unterschiedlich definiert werden).

Hier ist ein Beispiel:

sin(x)*x

Die wahre Funktion ist f(x) = x * sin(x) (schwarze Kurve) auf [-10, 10] Intervall. Rote Punkte stehen für jede Studie, rote Kurve der GP meine ist, blaue Kurve ist der Mittelwert plus oder minus einer Standardabweichung . Wie Sie sehen können, ist das GP-Modell die wahre Funktion überall nicht überein, aber der Optimierer ziemlich schnell den „heißen“ Bereich um -8 identifiziert und begann es zu nutzen.

Wie richte ich die Bayessche Optimierung in Bezug auf ein tiefes Netzwerk ein?

In diesem Fall wird der Raum von (möglicherweise transformierten) Hyperparametern definiert, normalerweise von einem mehrdimensionalen Hypercube.

Beispiel: Angenommen, Sie drei Hyper haben: eine Lernrate α in [0.001, 0.01], die Regularisator λ in [0.1, 1] (beide kontinuierlich) und die verborgene Schicht Größe N in [50..100] (integer). Der Platz für die Optimierung ist ein 3-dimensionaler Würfel [0, 1]*[0, 1]*[0, 1]. Jeder Punkt (p0, p1, p2) in diesem Würfel entspricht eine Trinität (α, λ, N) durch die folgende Transformation:

p0 -> α = 10**(p0-3) 
p1 -> λ = 10**(p1-1) 
p2 -> N = int(p2*50 + 50) 

Was ist die Funktion, die ich optimieren möchte? Sind die Kosten für die Validierung nach N Epochen gesetzt?

Korrekt, die Zielfunktion ist die Validierungsgenauigkeit des neuronalen Netzwerks. Natürlich ist jede Bewertung teuer, weil sie mindestens mehrere Epochen für das Training benötigt.

Beachten Sie auch, dass die Zielfunktion ist stochastischen, das heißt zwei Bewertungen auf denselben Punkt kann etwas anders sein, aber es ist nicht ein Blocker für Bayes-Optimierung, obwohl es offensichtlich die Unsicherheit erhöht.

Ist Spearmint ein guter Ausgangspunkt für diese Aufgabe? Irgendwelche anderen Vorschläge für diese Aufgabe?

spearmint ist eine gute Bibliothek, Sie können definitiv damit arbeiten. Ich kann auch hyperopt empfehlen.

In meiner eigenen Forschung, schrieb ich meine eigene kleine Bibliothek, im Wesentlichen aus zwei Gründen: Ich wollte genaue Bayes-Methode zu verwenden (insbesondere fand ich eine portfolio strategy von UCB und PI konvergierte schneller als alles andere, in meinem Fall); Außerdem gibt es eine weitere Technik, die bis zu 50% der Trainingszeit einsparen kann: learning curve prediction (die Idee besteht darin, den vollen Lernzyklus zu überspringen, wenn der Optimierer sicher ist, dass das Modell nicht so schnell lernt wie in anderen Bereichen). Ich bin mir keiner Bibliothek bewusst, die das implementiert, also habe ich es selbst programmiert, und am Ende hat es sich gelohnt. Wenn Sie interessiert sind, ist der Code on GitHub.