automatische Differenzierung
In der Mathematik und Computeralgebra. automatische Unterscheidung (AD), auch algorithmische Differenzierung oder computational Differenzierung bezeichnet. [1] [2] ist ein Satz von Techniken, um die Ableitung einer Funktion von einem Computerprogramm anzug numerisch auswerten. AD nutzt die Tatsache, dass jedes Computerprogramm, egal wie kompliziert, führt eine Folge von elementaren Rechenoperationen (Addition, Subtraktion, Multiplikation, Division, etc.) und elementare Funktionen (exp, log, sin, cos, usw.). Durch die Anwendung wiederholte die Kettenregel zu diesen Operationen können Ableitungen beliebiger Reihenfolge automatisch berechnet werden, genau auf Präzision zu arbeiten, und mit höchstens einem kleinen konstanten Faktor mehr Rechenoperationen als das ursprüngliche Programm.
Automatische Differenzierung ist nicht:

Abbildung 1: Wie automatische Unterscheidung betrifft symbolische Differenzierung
Diese klassischen Methoden auf Probleme stoßen: symbolische Differenzierung führt zu ineffizienten Code (es sei denn, sorgfältig durchgeführt) und steht vor der Schwierigkeit, ein Computerprogramm zu einem einzigen Ausdruck der Umwandlung, während numerische Differenzierung Rundungsfehler im Diskretisierungsprozess und Stornierung einführen können. Beiden klassischen Methoden haben Probleme mit der Berechnung der höheren Derivate, wobei die Komplexität und Fehler erhöhen. Schließlich sind beide klassischen Methoden langsam, um die partiellen Ableitungen der Funktion im Hinblick auf viele Eingänge an Berechnung, wie für Gradienten -basierte Optimierungsalgorithmen benötigt wird. Automatische Differenzierung löst all diese Probleme auf Kosten von mehr Software-Abhängigkeiten einzuführen.
Die Kettenregel, Vorwärts- und Rückwärts Akkumulation bearbeiten
Üblicherweise werden zwei verschiedene Modi von AD vorgestellt, vorwärts Ansammlung (oder Forward-Modus) und Reverse-Akkumulation (oder Reverse-Modus). Vorwärts-Akkumulation gibt an, dass man die Kettenregel von innen nach außen durchläuft (das heißt, zuerst berechnet man dw / dx und dann dy / dw. Während Rückwärtsakkumulation hat die Traversierung von außen nach innen.
Im Allgemeinen sowohl Vorwärts- als auch Rückwärts Akkumulation sind spezifische Ausprägungen des Betreibers der Programmzusammenstellung anwenden. mit dem entsprechenden einem der beiden Abbildungen (w. y) festgelegt ist.
Vorwärts-Akkumulation bearbeiten

Abbildung 2: Beispiel der Vorwärts Akkumulation mit Berechnungsgraphen
In Vorwärts-Akkumulation AD, ein ersten Fixes die unabhängige Variable, auf der Differenzierung durchgeführt, und berechnet die Ableitung jeden Unterausdruck rekursiv. In einer Stift-und-Papier-Berechnung kann man tun, indem wiederholt die Ableitung der inneren Funktionen in der Kettenregel Substitution:
Dies kann auf mehrere Variablen als Matrixprodukt von Jacobi verallgemeinert werden.
wie durch den Punkt gekennzeichnet. Die Derivate werden dann synchron mit den Auswertungsschritten und in Kombination mit anderen Derivaten über die Kettenregel berechnet.
Als Beispiel betrachten wir die Funktion:
Aus Gründen der Übersichtlichkeit sind die einzelnen Unterausdrücke wurden mit der Variablen wi bezeichnet.
Die Wahl der unabhängigen Variablen, auf die Differenzierung erfolgt wirkt sich auf die Startwerte w1 und w2. Angenommen, man interessiert sich für die Ableitung dieser Funktion in Bezug auf x1. In diesem Fall sollten die Seed-Werte eingestellt werden:
Zur Berechnung des Gradienten dieses Beispiel Funktion, die die Derivate von f bezüglich erfordert nicht nur, sondern auch x1 x2. man muß eine zusätzliche Schleife über den Berechnungsgraphen unter Verwendung der Startwerte w ˙ 1 = 0 erfüllen; ˙ w 2 = 1> _ = 0;> _ = 1>.
Die rechnerische Komplexität eines Schwung nach vorn Akkumulation ist auf die Komplexität des ursprünglichen Codes proportional.
Vorwärts-Akkumulation ist effizienter als Reverse-Akkumulation für Funktionen f. R n → r m mit m »n als nur n Sweeps sind notwendig, im Vergleich zu m-Sweeps für Rückwärts Akkumulation.
Reverse-Akkumulation bearbeiten

Abbildung 3: Beispiel der reversen Kumulation mit Berechnungsgraphen
In umgekehrter Akkumulation AD, ein ersten fixen die abhängige Variable differenziert werden und berechnet die Ableitung in Bezug auf jeden Teil Ausdruck rekursiv. In einer Stift-und-Papier-Berechnung kann man die äquivalente durch wiederholtes Ersetzen des Derivats der äußeren Funktionen in der Kettenregel auszuführen:
In umgekehrter Akkumulation, ist die Menge an Interesse die adjoint. bezeichnet mit einer Stange (W); Es ist ein Derivat von einem gewählten abhängigen Variable bezüglich eines subexpression w:
Die Operationen des Derivats unter Verwendung von Umkehr Akkumulation zu berechnen sind in der Tabelle unten (man beachte die umgekehrte Reihenfolge) gezeigt:
Reverse-Akkumulation ist effizienter als die Vorwärts-Akkumulation für Funktionen f. R n → r m mit m «n als nur m Sweeps sind notwendig, im Vergleich zu n-Sweeps für die Vorwärts Akkumulation.
Reverse-Modus AD wurde erstmals im Jahr 1970 von Seppo Linnainmaa in seiner Diplomarbeit veröffentlicht. [5] [6] [7]
Backpropagation von Fehlern in Multilayerperceptrons, eine Technik, bei maschinellem Lernen eingesetzt. ist ein Spezialfall des Reverse-Modus AD.
Jenseits Vorwärts- und Rückwärts Akkumulation bearbeiten
Automatische Differenzierung mit Dualzahlen bearbeiten
(X + x 'ε) + (y + y' ε) = x + y + (x '+ y') ε (x + x 'ε) ⋅ (y + y' ε) = xy + xy 'ε + yx 'ε + x' y 'ε 2 = xy + (xy' + yx ') ε (x + x '\ varepsilon) + (y + y' \ varepsilon) - = x + y + (x '+ y') \ \\ varepsilon (x + x '\ varepsilon) \ cdot (y + y' \ varepsilon) - = xy + xy '\ varepsilon + yx' \ varepsilon + X'Y '\ varepsilon ^ = xy + (xy' + yx ‚) \ varepsilon \ Ende >>
und ebenfalls für die Subtraktion und Division.
P (x + x 'ε) = p 0 + p 1 (x + x' ε) + ⋯ + pn (x + x 'ε) n = p 0 + p 1 x + ⋯ + pnxn + p 1 x' ε + 2 p 2 xx 'ε + ⋯ + npnxn - 1 x' ε = P (x) + P (1) (x) x 'ε P (x + x' \ varepsilon) - = p_ + p_ (x + x '\ varepsilon) + \ cdots + p_ (x + x' \ varepsilon) ^ \\ - = p_ + P_x + \ cdots + P_x ^ + P_x '\ varepsilon + 2p_xx' \ varepsilon + \ cdots + np_x ^ x '\ varepsilon \\ - = P (x) + P ^ (x) x '\ varepsilon \ Ende >>
wobei P (1)>, um die Ableitung von P mit Bezug auf das erste Argument bezeichnet und x '. genannt Samen. kann beliebig gewählt werden.
Die neue Arithmetik besteht aus geordneten Paaren. Elemente geschrieben ⟨x. x '⟩. mit gewöhnlichen arithmetics auf der ersten Komponente und erster Ordnung Differenzierung Arithmetik auf der zweiten Komponente, wie oben beschrieben. Die Ausweitung der obigen Ergebnisse auf Polynome analytische Funktionen haben wir eine Liste der grundlegenden arithmetischen und einige Standardfunktionen für die neue Arithmetik erhalten:
⟨U. u '+⟩ ⟨v. v' =⟩ ⟨u + v. u '+ v'⟩ ⟨u. u '⟩ -. ⟨v v' =⟩ ⟨u - v u. '- v'⟩ ⟨u. u '*⟩ ⟨v. v' =⟩ ⟨u v. u 'u v + v'⟩ ⟨u. . U '.⟩ / ⟨V v' =⟩ ⟨u v u 'v - u v' v 2⟩ (v ≠ 0) sin ⟨u. 'U =⟩ ⟨ sin (u). u 'cos (u) cos⟩ ⟨u. u '=⟩ ⟨ cos (u). - u 'sin (u)⟩ exp ⟨u. u '=⟩ ⟨exp u. u 'exp u⟩ log ⟨u. u '=⟩ ⟨ log (u). u '/ u⟩ (u> 0) ⟨u. u '⟩ k = u k ⟨. k u k - 1 u '⟩ (u ≠ 0) | ⟨U. u '⟩ | = ⟨| u |. u 'schreiben u⟩ (u ≠ 0) \ left \ langle u, u '\ right \ rangle + \ left \ langle v, v' \ right \ rangle - = \ left \ langle u + v, u '+ v' \ right \ rangle \\\ links \ langle u, u 'rechts \ rangle \ - \ links \ langle v, v' \ right \ rangle - = \ left \ langle uv, u'-v '\ right \ \\ rangle \ left \ langle u, u 'rechts \ rangle \ * \ left \ langle v, v' \ right \ rangle - = \ left \ langle uv, u'v + uv '\ right \ rangle \\\ links \ u langle , u '\ right \ rangle / \ left \ langle v, v' \ right \ rangle - = \ left \ langle>, >> \ right \ rangle \ quad (v \ neq 0) \\\ sin \ left \ langle u, u 'rechts \ \ rangle - = \ left \ langle \ sin (u), u' \ cos (u) \ right \ rangle \\\ cos \ left \ langle u, u rechts \ rangle '\ - = \ links \ langle \ cos (u), - u 'sin \ (u) \ right \ rangle \\\ exp \ left \ langle u, u' rechts \ \ rangle - = \ left \ langle \ exp u, u '\ exp u \ right \ rangle \\\ log \ links \ langle u, u 'rechts \ \ rangle - = \ left \ langle \ log (u), u' / u \ right \ rangle \ quad (u> 0) \ \\ links \ langle u, u '\ right \ rangle ^ - = \ left \ langle u ^, ^ ku u' \ right \ rangle \ quad (u \ NEQ 0) \\\ links | \ left \ langle u, u '\ Recht \ rangle \ right | - = \ left \ langle \ left | u \ right |, u'> u \ right \ rangle \ quad (u \ neq 0) \ end >>
und im allgemeinen für die primitive Funktion g,
wobei g u> und g v> sind die Derivate von g gegenüber seiner ersten und zweiten Argumenten, respectively.
Wenn eine binäre Grundrechenoperation auf gemischte Argumente-Paar des angelegten ⟨u. u '⟩ und die reelle Zahl c -die reelle Zahl wird zuerst auf ⟨C angehoben. 0⟩. Die Ableitung einer Funktion f. R → R \ rightarrow \ mathbb> an der Stelle x 0> jetzt durch Berechnen f (x ⟨0. 1⟩), 1 \ rangle)> unter Verwendung der obigen arithmetischen gefunden wird, die ⟨f ergibt (x 0). f '(x 0)⟩), f' (x _) \ rangle> als das Ergebnis.
Vector Argumente und Funktionen bearbeiten
Hohe Ordnung und viele Variablen bearbeiten
Die obige arithmetische kann verallgemeinert werden, um zweite und höhere Ableitungen der multivariaten Funktionen zu berechnen. Allerdings wachsen die arithmetischen Regeln schnell sehr kompliziert: Komplexität wird in dem höchsten Ableitung Grad quadratisch sein. Stattdessen abgeschnittene kann Polynomalgebra Taylor verwendet werden. Die sich ergebende Arithmetik, definiert auf verallgemeinerte Dualzahlen, ermöglicht unter Verwendung von Funktionen effizient zu berechnen, als ob sie ein neuer Datentyp waren. Sobald das Taylor-Polynom einer Funktion bekannt ist, werden die Derivate leicht extrahiert. Verwendung von Zahnstein auf Betriebsprogrammierräume Eine rigorose, allgemeine Formulierung wird durch die Tensor Reihenentwicklung erreicht.
Operative Kalkül auf Programmierräume bearbeiten