Wann ist eine automatische Differenzierung günstig?

12

Durch die automatische Unterscheidung können wir die Ableitung eines Programms für eine bestimmte Eingabe numerisch auswerten. Es gibt einen Satz, der besagt, dass diese Berechnung weniger als das Fünffache der Kosten für die Ausführung des ursprünglichen Programms kostet. Dieser Faktor fünf ist eine Obergrenze.

In welchen Situationen können diese Kosten weiter gesenkt werden? Viele vor Ort abgeleitete Codes laufen mit der Geschwindigkeit des ursprünglichen Programms. Was wird getan, um diese Beschleunigung zu erreichen?

Welche Merkmale des ursprünglichen Programms können genutzt werden, um die Berechnung zu beschleunigen?

Welche Software-Engineering-Tricks können verwendet werden, um die Berechnung zu beschleunigen?

MRocklin
quelle
1
Sicherlich möchte man die besonderen Eigenschaften von Ableitungen von Funktionen wie der Exponentialfunktion und der trigonometrischen Funktionen ausnutzen. Viele mögliche gemeinsame Unterausdrücke.
JM
Fragen Sie nach dem Rückwärts- oder Vorwärtsmodus?
Jed Brown
Mein (begrenztes) Verständnis ist, dass sowohl der Vorwärts- als auch der Rückwärtsmodus ungefähr ähnliche Kosten verursachen.
MRocklin

Antworten:

6

Mein begrenztes Verständnis von AD entspricht dem, was Matt gesagt hat. Um die Berechnung von Derivaten zu beschleunigen, muss die Struktur des Ausdrucksgraphen die Spärlichkeit und Knappheit in der Menge der Jacobi-Matrizen ausnutzen. (Weitere Informationen finden Sie in diesem Artikel von Griewank.) Die Tricks der Softwareentwicklung liegen wahrscheinlich im AD-Code selbst, um das Ausdrucksdiagramm so zu strukturieren, dass diese Eigenschaften in der Menge der Jacobi-Matrizen genutzt werden. Wenn Sie wissen, wie der AD-Code aus dem von Ihnen geschriebenen Code ein Ausdrucksdiagramm generiert, können Sie besser verstehen, wie Code geschrieben wird, für den weniger Berechnungen erforderlich sind. Jeder gute AD-Code sollte bereits die Vorteile von Intrinsics mit gängigen Unterausdrücken nutzen, aber gute AD-Codes sind schwer zu schreiben.

Die Standardreferenz auf diesem Gebiet lautet Evaluierung von Derivaten: Prinzipien und Techniken der algorithmischen Differenzierung, Zweite Auflage von Andreas Griewank und Andrea Walther. Sie sollte detailliertere Informationen darüber enthalten, wie die Anzahl der zur Evaluierung der Ableitung eines Programms erforderlichen Berechnungen verringert werden kann.

Geoff Oxberry
quelle
3

Jedes AD benötigt weiterhin die Bereitstellung dieser intrinsischen Elemente, sodass ich nicht erkennen kann, was dies mit der generischen Komplexität eines Ausdrucks zu tun hat. Ich vermute, Sie können die Komplexität anhand der Anzahl der Pfade durch das Ausdrucksdiagramm klassifizieren, da Sie auf diese Weise AD ausdrücken. Andrew Lyons hat hier gute Arbeit mit Serien-Parallel-Graphen geleistet.

Matt Knepley
quelle