Mehrschichtige Neuronale Netze Delta-Regel Back-Propagation of Errors Back-propagation through time / Rekurrente Netze Die “XOR-Problematik” AND XOR 2 2 1 1 O1 w0 1.5 w1 1 1 w2 1 2 ? Einfache Folgerungen: • Es gibt Probleme, die nur mit mehrschichtigen Netzen gelöst werden können • Es muß noch erörtert werden, wie dies im Einzelnen geschehen kann Ein neuronales Netz, mit dem man XOR lösen könnte: O1 W11 W13 W12 V1 V2 V3 1 w22 w11 w21 w23 w12 w13 1 2 3 1 …fehlen nur noch die richtigen Gewichte. Die Idee von Back-Propagation • Das Netz soll “selbstständig” lernen, seine Gewichte anzupassen • Dieses Anpassen der Gewichte erfolgt so lange, bis die gewünschte Funktion erlernt ist Wie sieht das ungefähr aus? 1) 2) Backward Propagation of Errors Forward Propagation of Input Signals Was passiert im Netz? h jµ w jkkµ (6.1) Vjµ g(h jµ ) g w jkkµ k (6.2) hiµ WijVjµ Wij g w jkkµ k j j (6.3) µ µ O g(h ) g WijVj g Wij g w jkk k j j (6.4) k µ i µ i Berechnungen im 1. Layer O1 W11 h jµ w jkkµ k W12 Vjµ g h jµ V1 V2 w11 w22 w21 1 h10 w11 10 w12 20 (6.1) w12 2 h20 w21 10 w22 20 (6.2) Berechnungen im 2. Layer hiµ WijVjµ O1 (6.3) j W11 W12 h10 W11 V10 W12 V20 V1 V2 w11 w22 w21 1 w12 2 Oiµ g hiµ (6.4) Gradientenverfahren Eine neue Fehler-Funktion 1 µ µ 2 E w i Oi 2 µi (6.5) wird zu: 1 µ µ E w i g Wij g w jkk k 2 µi j 2 (6.6) Gradienten-Berechnung (1) E Wij Wij i Oi g hi Vj (6.7) iVj i g hi i Oi (6.8) Gradienten-Berechnung (2) E w jk w jk E Vj V w j jk i Oi g hi Wij g h j k i iWij g h j k i (6.9) j k j g h j Wij i i (6.10) Die allgemeine Back-Propagation Update-Regel w pq output Vinput (6.11) patterns Delta für Hidden-to-output Neuronen: i g hi i Oi (6.8) Delta für Input/Hidden-to-hidden Neuronen j g h j Wij i i (6.10) Vorgehensweise für BackPropagation 1. Wir initialisieren die Gewichte mit kleinen Zufallszahlen…. 2. …wählen ein Muster als Eingabe…. 3. …berechnen die Auswirkungen der Eingabe auf das Netz… 4. …und erhalten schließlich die Abweichung der Ausgabe vom gewünschten Wert (im Idealfall natürlich = 0 !) Der eigentliche Clou: 5. Wir berechnen die Fehler der anderen Gewichte (z.B. input-to-hidden), indem wir sie von dem Fehler der Ausgabe ableiten! 6. Nachdem wir alle Fehler berechnet haben, updaten wir alle Gewichte…. 7. …und machen mit dem nächsten Pattern bei Step 2 weiter. :-) Genaueres zu den Steps 4) und 5) : “Backward propagation of errors” 1 O1 W11 iM g hiM iµ Vi M im1 g him1 w mji mj W12 j V1 V2 w11 w22 w12 1 w21 2 Was macht diese Vorgehensweise so vorteilhaft? • Verwendet man eine günstige Aktivierungsfunktion, muss man keine Ableitungen mehr berechnen! • Günstig heißt in diesem Fall, man kann die Ableitung der Funktion durch die Funktion selbst darstellen (z.B. Sigmoid oder tanh) • Mit bekanntem Output O=g(h) ist dann auch die Ableitung bekannt Nochmal ins Detail: Der Output ist uns bekannt und die Delta-Regel ebenso: Oiµ g hiµ iµ g hiµ iµ Oiµ Wir verwenden eine sigmoide Funktion, deren Ableitung g’ man wieder mit g beschreiben kann: 1 g h 2 g h 1 g h g h f h 2 h 1 e Mit 1/2 wird aus iµ g hiµ iµ Oiµ iµ Oiµ 1 Oiµ iµ Oiµ Optimierungsmöglichkeiten für den Algorithmus • • • • Verwendung von anderen Fehler-Funktionen Momentum-Terms Verschiedene andere Minimierungsverfahren Vermeidung von lokalen Minima Beispiele für die Anwendung von Backprop • • • • • Verallgemeinerung von XOR (Parity) Sonar: Zielerkennung Navigation eines Fahrzeugs Bildkomprimierung Erkennung von handgeschriebenen PLZNummern • Spracherkennung (nur sehr eingeschränkt) Rekurrente Back-Propagation • Erweiterung des Back-PropagationAlgorithmus auf beliebige Netze • Bedingung: das Netz muss in einen stabilen Zustand konvergieren Zwei Beispiele: Aus eins wird zwei dVi Vi g wijVj i dt j dYi Yi g hp w piY p Ei dt p Wie funktioniert BackPropagation bei rekurrenten Netzen? • Pattern auswählen, Eingaben ins Netz “schicken” • Warten, bis das Netz in einen stabilen Zustand konvergiert • Berechnung der Ausgabe-Fehler • Fehler ins zugehörige error-propagation-Netz “schicken” und warten bis dieses in einen stabilen Zustand konvergiert • Mit den Ausgaben dieses Netzes die neuen Gewichte berechnen Lernen von zeitlichen Abfolgen • Sequenzerkennung • Reproduktion von Mustern • Zeitliche Zuordnung “Back-Propagation through time” • Modellierung eines voll rekurrenten Netzes durch ein reines Feed-Forward-Netz • Nur beim Umgang mit kleinen Sequenzen sinnvoll • Für jeden Zeitschritt t = 1, 2, …, T werden die Einheiten des rekurrenten Netzes dupliziert (also T-mal) • Im Feed-Forward-Netz werden in jedem Layer die Original-Gewichte verwendet Ein konkretes Beispiel: V14 w12 w21 w11 V13 w12 w11 V1 V2 w21 w22 w22 w12 w21 w22 w12 w21 t=2 V22 w11 V11 t=3 V23 w11 V12 t=4 V24 w22 V21 t=1 Was bringt das? • Das resultierende Feed-Forward-Netz kann mit Back-Propagation trainiert werden • Hat man einmal die Gewichte berechnet, kann man wieder das rekurrente Netz benutzen Resumé • Back-Propagation ist eine interessante Methode um “Supervised Learning” zu ermöglichen • Back-Propagation ist allerdings nur bei stark eingegrenzten Problemfeldern effizient einsetzbar • Es gibt Bereiche, in denen Back-Propagation trotzdem nicht mit “herkömmlichen” Algorithmen mithalten kann