Ist es nutzlos, einem gradientenbasierten Optimierer ungefähre Verläufe bereitzustellen?


9

Ist es sinnlos, gradientenbasierte Optimierungsalgorithmen zu verwenden, wenn Sie nur einen numerischen Gradienten bereitstellen können? Wenn nicht, warum überhaupt einen numerischen Gradienten bereitstellen, wenn es trivial ist, eine endliche Differenzierung für die Optimierungsbibliothek selbst durchzuführen?

[BEARBEITEN]

  • Zur Verdeutlichung ist meine Frage in der Tat allgemeiner als eine spezifische Anwendung. Obwohl mein Anwendungsbereich zufällig die Wahrscheinlichkeitsoptimierung unter verschiedenen statistischen Rahmenbedingungen ist.

  • Mein Problem bei der automatischen Differenzierung ist, dass es immer einen Haken zu geben scheint. Entweder kann die AD-Bibliothek nicht an externe Bibliotheksaufrufe (wie BLAS) weitergegeben werden, oder Sie müssen Ihren Workflow so drastisch überarbeiten, dass es schwierig wird, damit umzugehen ... insbesondere, wenn Sie mit typsensitiven Sprachen arbeiten. Meine Probleme mit AD sind ein ganz anderes Thema. Aber ich möchte glauben!

  • Ich denke, ich muss meine Frage besser formulieren, aber ich mache einen schlechten Job. Wenn Sie die Option haben, entweder einen ableitungsfreien Optimierungsalgorithmus oder einen derivatbasierten Optimierungsalgorithmus mit der Einschränkung zu verwenden, dass ich ihm nur einen numerischen Gradienten geben kann, welcher ist im Durchschnitt überlegen?


2
Versuchen Sie zu fragen, warum man einen analytischen Gradienten bereitstellen sollte, anstatt nur einen ungefähren mit endlichen Differenzen zu berechnen?
spektr

1
Meine Frage ist, anders ausgedrückt, angenommen, Ihre Gleichungen sind viel zu kompliziert, als dass Sie analytische Gradienten berechnen könnten. Können gradientenabhängige Optimierungsalgorithmen denen überlegen sein, die überhaupt keine Gradienten erfordern?
Professor Bigglesworth

Das ist eine andere Frage als die, die Sie oben gestellt haben. Möglicherweise können Sie numerische Ableitungen auf andere Weise berechnen, z. B. durch finite Elemente.
Nicoguaro

1
@nicoguaro Ja, im Zusammenhang mit der Optimierung mit partiellen Differentialgleichungen ist dies sicherlich der Fall (und da dies einer meiner Forschungsbereiche ist, war dies auch mein erster Gedanke). Aber die Frage erwähnt nichts in diese Richtung (und ist in dieser Allgemeinheit nützlicher. Ich denke).
Christian Clason

1
Auch in diesem Fall ist es eine vernünftige Frage: Was ist, wenn Ihr (System von) PDE (s) so kompliziert ist, dass Sie keine adjungierte Gleichung ableiten können, die numerisch gelöst werden muss, um den Gradienten zu erhalten? (Diese Dinge können ziemlich böse werden, besonders wenn es sich um nicht standardmäßige Randbedingungen handelt.)
Christian Clason

Antworten:


11

Lassen Sie mich als Ergänzung zu Brians hervorragender Antwort ein wenig (redaktionellen) Hintergrund geben. Derivatfreie Optimierungsmethoden werden als Methoden definiert, die nur Funktionsbewertungen verwenden. Grundsätzlich handelt es sich um alle Variationen von "Die zulässige Menge mehr oder weniger systematisch abtasten und den besten Funktionswert speichern" - das ist alles, was Sie angesichts der Informationen tun können. Diese Methoden können grob unterteilt werden in

  1. 1 Dies ist alles, was Sie tun können, und Sie könnten Glück haben.

  2. Deterministische Methoden , bei denen die Auswahl der Stichproben nicht zufällig ist, dh nur auf früheren Funktionsbewertungen basiert. Das bekannteste Beispiel ist wahrscheinlich die Nelder-Mead-Simplex-Methode; andere generieren festgelegte Suchmethoden . Es ist wichtig zu wissen, dass dies nur funktionieren kann, wenn eine (ausnutzbare) Beziehung zwischen dem Wert der Funktion an verschiedenen Punkten besteht - dh eine gewisse Glätte der Funktion. Tatsächlich basiert die Konvergenztheorie für z. B. die Nelder-Mead-Methode auf der Konstruktion einer UngleichmäßigkeitFinite-Differenzen-Approximation des Gradienten basierend auf den Funktionswerten an den Eckpunkten des Simplex und zeigt, dass er sowohl zum exakten Gradienten als auch zur Null konvergiert, wenn sich der Simplex zu einem Punkt zusammenzieht. (Die auf einer Standard-Finite-Differenzen-Näherung basierende Variante wird als Kompasssuche bezeichnet .)

  3. Modellbasierte Methoden , bei denen die Funktionswerte verwendet werden, um ein lokales Modell der Funktion zu erstellen (z. B. durch Interpolation), das dann mithilfe von Standardmethoden (gradienten- / hessisch-basiert) minimiert wird. Da eine Näherung mit endlicher Differenz der exakten Ableitung eines Polynominterpolanten entspricht, fällt der klassische Ansatz des "numerischen Gradienten" ebenfalls in diese Klasse.

Wie Sie sehen können, sind die Grenzen zwischen diesen Klassen fließend und oft nur eine Frage der Interpretation. Die Moral sollte jedoch klar sein: Stellen Sie sicher, dass Sie alle verfügbaren Informationen zu der Funktion verwenden, die Sie minimieren. Um Cornelius Lanczos zu zitieren:

Ein Mangel an Informationen kann nicht durch mathematische Tricks behoben werden.

Wenn Sie nichts über Ihre Funktion wissen , kann es auch völlig zufällig sein, und das Minimieren eines zufälligen Werts ist ein Kinderspiel ...


17

Wenn Ihr Ziel glatt ist, ist die Verwendung von Näherungen mit endlichen Differenzen an die Ableitung häufig effektiver als die Verwendung eines ableitungsfreien Optimierungsalgorithmus. Wenn Sie Code haben, der die Ableitungen genau berechnet, ist es normalerweise am besten, diesen Code zu verwenden, anstatt Näherungen mit endlichen Differenzen zu verwenden.

Obwohl einige Optimierungsbibliotheken mithilfe von Heuristiken zur Bestimmung der Schrittgrößenparameter automatisch Näherungen für endliche Differenzen berechnen, kann es besser sein, eigene Routinen zu verwenden, um die Näherungen für endliche Differenzen zu berechnen, entweder weil Sie die entsprechenden Schrittgrößen besser kennen oder weil spezielle Struktur in der Funktion, die Ihr Code ausnutzen kann.

Eine andere Option, die sich oft lohnt, ist die Verwendung automatischer Differenzierungstechniken, um eine Unterroutine zu erstellen, die die analytischen Ableitungen aus dem Quellcode zur Berechnung der Zielfunktion selbst berechnet.


3
+1 für die automatische Differenzierung . Dies ist oft viel besser als ein a-priori-Symbolausdruck für den Gradienten oder eine Näherung mit endlicher Differenz.
links um den

Ich würde auch die automatische Differenzierung empfehlen. Versuchen Sie für fortran Tapenade von INRIA Sophia-Antipolis, die auf der Quellentransformation basiert. Für C / C ++ gibt es mehr Auswahlmöglichkeiten wie adol-c, adept, sacado (Teil von Trilinos). All dies basiert auf einer Überlastung des Bedieners und ist einfacher zu bedienen, obwohl es bei sehr großen Problemen nicht sehr effizient ist.
cfdlab

Es gibt auch einige Umstände, unter denen die automatische Differenzierung (AD) schwierig anzuwenden sein kann, aber eine komplexe Stufendifferenzierung, die manchmal fast dasselbe wie AD sein kann (abgesehen davon, dass im umgekehrten Modus ein ganzer Gradient auf einmal berechnet werden kann von AD) kann anwendbar und relativ einfach anzuwenden sein.
Mark L. Stone

Antwort auf die überarbeitete Frage: Wenn Ihr Ziel glatt ist (es macht keinen Sinn, einen auf Ableitungen basierenden Optimierungsalgorithmus zu verwenden, wenn dies nicht der Fall ist) und wenn die Anzahl der Variablen relativ gering ist (Ableitungen mit endlichen Differenzen funktionieren bei der PDE-beschränkten Optimierung nicht ), dann ist es höchstwahrscheinlich besser, eine auf Derivaten basierende Optimierungsmethode mit endlichen Differenznäherungen zu verwenden, als eine DFO-Technik.
Brian Borchers

4

In Ihrer Frage geht es um gradientenbasierte Optimierer. Ich denke, Brian hatte Recht. Ich würde nur einige der Probleme teilen, da ich derzeit selbst damit zu kämpfen habe.

Die Probleme mit der endlichen Differenz sind 1) Leistung, da Sie die Funktion für jede Dimension erneut bewerten müssen, und 2) es kann schwierig sein, eine gute Schrittgröße zu wählen. Wenn der Schritt zu groß ist, gilt die Annahme der Linearität der Funktion möglicherweise nicht. Wenn der Schritt zu klein ist, kann er in der Funktion selbst auf das Rauschen stoßen, da Ableitungen das Rauschen verstärken. Letzteres kann ein echtes Problem sein, wenn die Funktion das Lösen von Differentialgleichungen beinhaltet. Wenn es möglich ist, die Gradienten analytisch oder unter Verwendung von Empfindlichkeitsgleichungen zu berechnen, ist dies sicherlich genauer und möglicherweise schneller.

Es gibt einen anderen Ansatz, den Sie ausprobieren können, wenn Sie noch nicht zu viel Zeit in die Software investiert haben, und zwar mit komplexer Arithmetik. Es heißt komplexe Stufendifferenzierung . Die Grundidee ist, wenn Sie die Funktion auswerten, wenn Sie ihren Gradienten in Bezug auf Parameter X wünschen, setzen Sie den Imaginärteil von X auf eine sehr kleine Zahl eps . Nachdem Sie die Berechnung durchgeführt haben, ist der Imaginärteil des Funktionswerts, geteilt durch eps , der Gradient in Bezug auf X. Wenn Sie den Gradienten in Bezug auf Y wollen, müssen Sie natürlich alles noch einmal machen. Das Interessante daran ist, dass epskann sehr klein gemacht werden. Der Grund dafür ist, dass die normalen Regeln der Differentialrechnung genau in den Regeln der komplexen Arithmetik widergespiegelt werden.

Ich halte es jedoch nicht für ein Allheilmittel, da es nicht immer einfach ist, eine komplizierte Funktion in komplexer Arithmetik auszuführen. Es lohnt sich nicht, wenn der Gradient analytisch berechnet werden kann, und im Fall von Differentialgleichungen entspricht er genau den Empfindlichkeitsgleichungen , was ich nach Bedarf mache.


Ich denke, einer der Hauptvorteile ist die Tatsache, dass Sie in dieser komplexen Finite-Differenzen-Formel keine Subtraktionen durchführen. Als ich vor einiger Zeit einen Artikel über Ableitungen für diese Methode las, war dies einer der Punkte, die sie im Vergleich zu anderen Finite-Differenzen-Formeln experimentell zu validieren schienen. Dieser Unterschied ermöglichte die Auswahl kleinerer Schrittgrößen, bevor Rundungsfehler zum Problem wurden.
Spektr

@ Choward: Richtig. Das ist das Schöne daran. Ich war allerdings skeptisch. Einige meiner Kollegen schienen zu glauben, es sei ein Wundermittel. Ich vermutete, dass es den Sensitivitätsgleichungen entspricht, und einer meiner Mitarbeiter, ein angewandter Mathematiker, bewies es.
Mike Dunlavey

Das ist cool an der Empfindlichkeitsgleichung. Dies ist ein interessanter Ansatz, der jedoch durchaus Kompromisse bei der Implementierung eingehen kann. Angenommen, Sie möchten es verwenden, müssen Sie komplexe Versionen Ihrer Funktionen definieren und dann die zusätzlichen komplexen Variablenalgebra / Berechnungen durchführen, wodurch jede Funktionsbewertung länger wird. Dies ist eines der Dinge, die Sie herausfinden müssen, wenn die langsamere Funktionsbewertung die zusätzliche Ableitungsgenauigkeit wert ist.
Spektr

@choward: Zu diesem Schluss bin ich gekommen. Außerdem optimieren wir normalerweise einen Vektor, was eine wiederholte Auswertung bedeutet. Die Alternative ist natürlich, dass es schwierig sein kann, Empfindlichkeitsgleichungen abzuleiten. Ich benutze symbolische Differenzierung und sie sind immer noch schwierig. Das ganze Thema ist ein bisschen wie ein Minenfeld.
Mike Dunlavey
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.