New Immissions/Updates:
boundless - educate - edutalab - empatico - es-ebooks - es16 - fr16 - fsfiles - hesperian - solidaria - wikipediaforschools
- wikipediaforschoolses - wikipediaforschoolsfr - wikipediaforschoolspt - worldmap -

See also: Liber Liber - Libro Parlato - Liber Musica  - Manuzio -  Liber Liber ISO Files - Alphabetical Order - Multivolume ZIP Complete Archive - PDF Files - OGG Music Files -

PROJECT GUTENBERG HTML: Volume I - Volume II - Volume III - Volume IV - Volume V - Volume VI - Volume VII - Volume VIII - Volume IX

Ascolta ""Volevo solo fare un audiolibro"" su Spreaker.
CLASSICISTRANIERI HOME PAGE - YOUTUBE CHANNEL
Privacy Policy Cookie Policy Terms and Conditions
Automatisches Differenzieren - Wikipedia

Automatisches Differenzieren

aus Wikipedia, der freien Enzyklopädie

Das automatische Differenzieren bzw. Differenzieren von Algorithmen ist ein Verfahren der Informatik und angewandten Mathematik. Zu einer Funktion in mehreren Variablen, die als Prozedur in einer Programmiersprache oder als Berechnungsgraph gegeben ist, wird eine erweiterte Prozedur erzeugt, die sowohl die Funktion als auch einen oder beliebig viele Gradienten, bis hin zur vollen Jacobi-Matrix, auswertet. Wenn das Ausgangsprogramm Schleifen enthält darf die Anzahl der Schleifendurchläufe nicht von den unabhängigen Variablen abhängig sein.

Diese Ableitungen werden z.B. für das Lösen von nichtlinearen Gleichungssystemen mittels Newton-Verfahren und für Methoden der nichtlinearen Optimierung benötigt.

Das wichtigste Hilfsmittel dabei ist die Kettenregel sowie die Tatsache, dass zu den im Computer verfügbaren Elementarfunktionen wie sin, cos, exp, log die Ableitungen bekannt und genauso exakt berechenbar sind. Damit wird der Aufwand zur Berechnung der Ableitungen proportional (mit kleinem Faktor) zum Aufwand der Auswertung der Ausgangsfunktion.


Inhaltsverzeichnis

[Bearbeiten] Berechnung von Ableitungen

Aufgabe: Gegeben eine Funktion

f:\mathbb{R}^n \rightarrow \mathbb{R}^m, x \mapsto y

Wie erhält man Code/Funktion für

{\partial f \over \partial x}=\left[ \left( {\partial y_i \over \partial x_j} \right)_{i=1..m, j=1..n} \right]

Verschiedene Ansätze hierfür sind:

  1. Versuche eine geschlossene, analytische Form für f zu finden und bestimmt {\partial f \over \partial y} durch Differentiation. Implementiere dann den Code für {\partial f \over \partial x} von Hand. Problem: Zu schwierig, zeitaufwendig, fehleranfällig
  2. Importiere den Code für f in ein Computeralgebrasystem und wende die dort zur Verfügung stehenden Mittel an. Exportiere dann den Code für {\partial f \over \partial x} in seine eigentliche Umgebung. Problem: Zeitaufwendig, skaliert nicht, zu kompliziert für größerer Programme/Funktionen
  3. Versuche eine numerische Approximation der Ableitung zu bestimmen. Es gilt
{\partial f_k \over \partial x} = \mbox{Lim}_{h\rightarrow 0} {f_k(x+h)-f_k(x) \over h}  \approx {f_k(x+h)-f_k(x) \over h}

. Problem: wie findet man eine optimale Schrittweite h?

  1. Versuche den Code durch Verwendung der Kettenregel zu transformieren, so daß man {\partial f \over \partial x} erhält.

[Bearbeiten] Die Idee der Automatischen Differentiation (AD)

Gegeben ein Programm das eine Funktion f(x):\mathbb{R}^n \rightarrow \mathbb{R}^m, x \mapsto y berechet. AD beschreibt eine Menge von Verfahren, deren Ziel es ist ein neues Programm zu erzeugen welches die Jacobimatrix von f J:={\partial f \over \partial x}, J \in \mathbb{R}^{mxn} beinhaltet. Die Eingabevariablen von x heißen unabhängige Variablen, die Ausgabevariable(n) y abhängige Variablen. Bei AD unterscheidet man mindestens zwei Verschiedene Modi.

  1. Vorwärtsmodus (FM engl Forward Mode)
  2. Rückwärtsmodus (BM engl Backward Mode)

[Bearbeiten] Vorwärtsmodus

Im Vorwärtsmodus berechnet man eine Matrix

JS, S \in \mathbb{R}^{nxp}

mit einer beliebigen Matrix S (Seedmatrix) und einem näher zu bestimmenden Parameter p

[Bearbeiten] Beispiel

p=n \ \ \mbox{und}\ \  S=I_{nxn} \Rightarrow AD berechnet J
Im Vorwärtsmodus werden Richtungsableitungen entlang des Kontrollflusses der Berechnung von f transportiert. Für jede skalare Variable v wird in dem AD-erzeugten Code ein Vektor g_v, dessen i-te Komponente die Richtungsableitung entlang der i-ten unabhängigen Variablen enthält.

[Bearbeiten] Beispiel

Berechne eine Funktion

  [ y_1 \ y_2 \ g ] = f\left(x_1, x_2, a\right)
b = x1 + x2
y_1=a \cdot \sin(b)
y2 = by1

Eine Automatische Differentiation im Vorwärtsmodus hätte eine Funktion

[g\_y_1, y_1, g\_y_2, y_2, b ] = g\_f\left( g\_x_1, x_1, g\_x_2, x_2, \right)

zum Ergebnis. Der Funktionsrumpf von g_f:

  g_b = g_x1 + g_x2
b = x1 + x2
g\_y_1=a\cdot cos(b) g\_b
y_1=a \cdot sin(b)
g_y2 = g_by1 + bg_y1
y2 = by1

[Bearbeiten] Rückwärtsmodus

Der Rückwärtsmodus besteht aus zwei Phasen.

  1. Das Originalprogramm wird ausgeführt und gewisse Daten werden abgespeichert
  2. Das Originalprogramm wird Rückwärts ausgeführt. Dabei werden Richtungsableitungen transportiert und es werden die Daten aus Phase 1 verwendet.

In Phase 2 wird für jede skalare Variable v ein Vektor a_v eingeführt. Dieser Vektor enthält in der i-ten Komponente die i-te Richtungsableitung (in Richtung von v). Die Saatmatrix erscheint als Object a_y. Im Rückwärtsmodus erhält man als Ergebnis ein Produkt

SJ, S \in \mathbb{R}^{pxm}

[Bearbeiten] Beispiel 1

  p=m \ \ \mbox{und}\ \  S=I_{mxm} \Rightarrow AD berechnet J

[Bearbeiten] Beispiel 2

  b = x1 + x2
  y_1=a\cdot\sin(b)
  y_2=b\cdot y_1
  a_b = a_b + y1 + a_y2
  a\_y_1=a\_y_1+b\cdot a\_y_2
  a\_b=a\_b+\cos(b)\cdot a\_y1
  a_x1 = a_x1 + a_b
  a_x1 = a_x2 + a_b

[Bearbeiten] Effizienzbetrachtungen

Die Effizienz von AD-Algorithmen hängt vom Modus und dem Parameter p ab. Die Wahl des Modus und des Parameters p hängt davon ab, wofür die Jacobimatrix berechnet wird. Es gelte

Tf die Zeit f zu berechnen
Mf der Speicherbedarf dieser Rechnung
TJS die Zeit f und JS zu berechnen
MJS der Speicherbedarf dieser Rechnung
TSJ die Zeit f und SJ zu berechnen
MSJ der Speicherbedarf dieser Rechnung

Für die beiden vorgestellten Modi gilt

  1. Vorwärtsmodus: {T_{JS} \over T_f} \approx p, {M_{JS} \over M_f} \approx p
  2. Rückwärtsmodus: {T_{SJ} \over T_f} \approx p, {M_{SJ} \over M_f} \approx T_f

[Bearbeiten] Die Berechnung als Kette von Berechnung

Gegeben: s=g\left(u,v\right), Frage: Wie verändert sich die Ableitug von s während der 2ten Phase, um die Ableitungen von u und v zu erhalten?

  a\_u=a\_u+{\partial g\over \partial u} a\_s
  a\_v=a\_v+{\partial g\over \partial v} a\_s

f(x) wird als Sequenz von Programmen interpretiert. Im Beispiel "Optimierung eines Tragflügels" umfasst die Berechnung die folgenden Schritte.

  • Überlagerung des Tragflügels mit sogenannten "Mode-Funktionen"
A\left( x \right) = A_0 + \sum_{j=1}^n x_j A_j, n=8, f_1:\mathbb{R}^8 \rightarrow \mathbb{R}^{200}
  • Berechnung eines Gitters, das um den Tragflügel herum gelegt wird
G\left( A \right): \mathbb{R}^{200} \leftarrow \mathbb{R}^{17428}
  • Lösung der Navier-Stokes-Gleichungen auf dem Gitter und Berechnung der Integrals der selbigen.
f\left( G \right) : \mathbb{R}^{17428} \rightarrow \mathbb{R}

.

Insgesamt ergibt sich die Funktion

  f=f\left( G \left( A \left( x \right) \right) \right) \rightarrow {\partial f \over \partial x} = {\partial f \over \partial G}{\partial G \over \partial A }{\partial A \over \partial x}

Mit einem naivem Ansatz würde man drei Matrizen {\partial f \over \partial G},{\partial G \over \partial A},{\partial A \over \partial x} berechnen und dann zwei Matrix-Matrix Multiplikationen durchführen. Der Nachteil des Vorwärtsmodus ist allerdings:

  T_{{\partial f \over \partial G}\cdot S} \approx 17428 \cdot T_{f\left( G \right)}

im Rückwärtsmodus würde analog

  T_{S \cdot {\partial f \over \partial G}} \approx 17428 \cdot T_{f\left( G \right)}

gelten. Ein besserer Ansatz ist, das Ergebnis einer Berechnung jeweils als Saatzmatrix der folgenden einzusetzen.

  1. Wähle I_{8x8} \in \mathbb{R}^{8x8} als Saatmatrix der ersten Rechnung
  2. Das Ergebnis der ersten Rechnung als Saatmatrix der zweiten Rechnung
  3. Das Ergebnis der zweiten Rechnung als Saatmatrix der dritten Rechnung

also

  1. {\partial A \over \partial x} I_{8x8} \in \mathbb{R}^{200x8}
  2. {\partial G \over \partial A} {\partial A \over \partial x} \in \mathbb{R}^{17428x8}
  3. {\partial f \over \partial G} {\partial G \over \partial x} \in \mathbb{R}^{1x8}

Da die Zeilenzahl jeder Matrix 8 (p=8) ist erhöht sich der Zeit- und Speicherbedarf ebenfalls um höchstens 8.

[Bearbeiten] Weblinks

Andere Sprachen

Static Wikipedia (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -

Static Wikipedia 2007 (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -

Static Wikipedia 2006 (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu

Static Wikipedia February 2008 (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu