Wie wählt man den richtigen Optimierungsalgorithmus?

15

Ich muss das Minimum einer Funktion finden. Wenn ich die Dokumente unter http://docs.scipy.org/doc/scipy/reference/optimize.html lese, sehe ich, dass es mehrere Algorithmen gibt, die dasselbe tun, dh das Minimum finden. Woher weiß ich, welches ich wählen soll?

Einige der aufgelisteten Algorithmen

  • Minimieren Sie eine Funktion mit dem Downhill-Simplex-Algorithmus.
  • Minimieren Sie eine Funktion mit dem BFGS-Algorithmus.
  • Minimieren Sie eine Funktion mit dem nichtlinearen konjugierten Gradientenalgorithmus.
  • Minimieren Sie die Funktion f mit der Newton-CG-Methode.
  • Minimieren Sie eine Funktion mit der modifizierten Powell-Methode.

Meine Funktion ist linear. Die Dimensionalität liegt bei 232750 (dies ist die Anzahl der unterschiedlichen Verläufe, die ich jedes Mal berechnen muss). Die Berechnung des Verlaufs und der Kosten dauert ungefähr 2 Minuten, ist also nicht billig. Ich glaube nicht, dass ich Einschränkungen habe. es ist deterministisch und kontinuierlich.

siamii
quelle
Nun, Sie müssen die Natur Ihres Problems untersuchen: Ist es linear oder nicht? Was ist die Dimensionalität davon? Ist Ihre Kostenfunktion günstig zu bewerten? Können Sie Ihre Derivate analytisch und / oder kostengünstig bewerten? Haben Sie Einschränkungen? Wenn Sie Einschränkungen haben, können Sie Ihr Problem leicht als uneingeschränkt beschreiben? Bitte gehen Sie näher auf diese Fragen ein.
usεr11852 sagt Reinstate Monic
@ user11852 Es ist linear. Die Dimensionalität beträgt ca. 50 Features. Die Berechnung des Gradienten und der Kosten dauert ca. 2 Minuten, ist also nicht billig. Ich glaube nicht, dass ich Einschränkungen habe.
siamii
Ich bin mir nicht sicher, was Sie hier mit "linear" meinen. Wenn Ihr Problem linear ist, ist der Gradient konstant und kostengünstig zu berechnen. Wenn Ihre Zielfunktion linear ist und keine Einschränkungen enthält, ist das Minimum -Infinity (oder vielleicht 0).
Paul
@paul: Bei der Optimierung bezieht sich Linearität normalerweise auf die Einschränkungen, nicht auf die Funktion selbst. Ich habe (fälschlicherweise zugestanden) in Bezug auf die Glätte der Funktion von "Linearität" gesprochen, und ich denke, das ist es, worauf sich das OP auch bezog. In meiner Antwort beruhte ich hauptsächlich auf der Tatsache, dass er danach sowieso "kontinuierlich" sagte.
usεr11852 sagt Reinstate Monic

Antworten:

14

Basierend auf dem, was Sie gesagt haben: Ich gehe davon aus, dass Sie für 50 Variablen optimieren müssen; Ich gehe auch davon aus, dass Sie die Situation haben, dass es sehr teuer ist, analytische Derivate zu finden (geschweige denn, die Zahlen herauszuholen) und dass Ihre Optimierung nicht eingeschränkt ist.

Lassen Sie mich betonen, Sie sind ein bisschen unglücklich, denn zwischen 25 und 100 Variablen handelt es sich um eine Dämmerungszone, wenn es um die Auswahl zwischen großen oder kleinen Optimierungsroutinen geht. Trotzdem ist nichts verloren.

Angesichts der Tatsache, dass Ableitungen erster Ordnung teuer sind, um solche Ableitungen zu erzielen, wird die Idee der Newtonschen Methode zunichte gemacht. Mit Quasi-Newton (BFGS) haben Sie vielleicht etwas Glück, wenn Ihr Hessischer am Anfang leicht diagonal ist. CG ist normalerweise etwas langsamer als BFGS. Verwenden Sie diese Option, wenn der Speicher ebenfalls ein Problem darstellt (oder wählen Sie in diesem Fall einfach L-BFGS). Zusätzlich wäre ein einfacher Suchalgorithmus für steilste Abfahrten / Linien, wenn man bedenkt, wie langsam es ist, Ihre Funktion zu bewerten, äußerst langsam. Das Gleiche gilt für Simulated Annealing und andere Zufallssuchvarianten (ich nehme an, Sie haben keinen Zugriff auf HMC und den ganzen Jazz).

Wenn Sie also das Beste für Ihr Geld brauchen, wenn es um die Bewertung einzelner Funktionen geht: Entscheiden Sie sich für die Powell-Methode und testen Sie COBYLA. Obwohl es sich um einen eingeschränkten Optimierungsalgorithmus handelt, da er den Gradienten Ihrer Funktion intern linear approximiert, um die Dinge zu beschleunigen, kann er die Linearität Ihrer Funktion nutzen. Auch auf jeden Fall versuchen NLopt für Python . Sie haben viele Optimierer ohne Farbverläufe. versuche UOBYQA; es ist auch Powells Idee (uneingeschränkte Optimierung durch quadratische Näherungen).

Ganz kurz: Der N-CG-Algorithmus hängt von der Berechnung des Hessischen ab, und die Berechnung Ihres Hessischen scheint sehr teuer zu sein. NLCG und BFGS benötigen es nicht, obwohl sie versuchen könnten, es in ihrem ersten Schritt einmal zu berechnen.

Ich habe den Simplex-Algorithmus absichtlich weggelassen, weil es ein ganz anderes Biest ist. nichts mit Farbverläufen als solchen zu tun. Probieren Sie es aus, aber ich kann es nicht wirklich kommentieren. es hängt wirklich von der Natur Ihres Problems ab.

Für eine erste gute Referenz zur numerischen Optimierung bringt Sie CTKellys Buch Iterative Methods for Optimization ganz schön weit.

usεr11852 sagt Reinstate Monic
quelle
Zum späteren Nachschlagen: Möglicherweise möchten Sie die Betaversion von Computational Science bei Stackexchange auf ähnliche Fragen prüfen.
usεr11852 sagt Reinstate Monic
Danke für die Antwort. Eigentlich ist meine Dimension 232.750. Dies ist die Anzahl der Gradienten, die ich jedes Mal berechne. Ich mache die Funktionsbewertung und Gradientenberechnung auf der GPU. Wäre das mit NLopt kompatibel?
Siamii
Ich habe NLopt bei GPUs nicht verwendet, sehe aber keinen offensichtlichen Grund, warum dies ein Problem hinsichtlich der Kompatibilität sein sollte. Ich könnte das Problem des häufigen E / A-Vorgangs von und zur GPU in Frage stellen.
usεr11852 sagt Reinstate Monic
@ usεr11852, Kann auch der Vergleich von Gradientenabstiegs- und QR-Zerlegungsmethoden zur Minimierung der linearen Regressionskostenfunktion erörtert werden? Muss ich eine separate Frage stellen?
Dr. Nisha Arora
@ DrNishaArora: Ja. Das wäre für eine eigene Frage angebracht. Lesen Sie den Thread. Warum Gradientenabstieg für lineare Regression verwenden, wenn eine geschlossene mathematische Lösung verfügbar ist? um Doppelarbeit zu vermeiden!
usεr11852 sagt Reinstate Monic
1

Vielleicht sollten Sie sich ein Einführungsbuch über numerische Optimierung zulegen. Sie müssen Ihre Funktion berücksichtigen, um sich für den Algorithmus zu entscheiden.

Unter den Algorithmen, die Sie erwähnen, sind wichtige Unterschiede, ob das Jacobian oder das Hessian oder nur die Funktion selbst benötigt wird.

In Anbetracht der Tatsache, dass es sich hier um eine statistische Q & A-Site handelt und es sich daher um Zufallsvariablen handelt: Stellen Sie sicher, dass Ihre deterministische Funktion so ausgewertet werden kann, dass über den gesamten Suchbereich kontinuierliche Ergebnisse erzielt werden.

cbeleites unterstützt Monica
quelle
es ist deterministisch und kontinuierlich.
Siamii