Startseite
  Über...
  Archiv
  Gästebuch
  Kontakt
  Abonnieren


http://myblog.de/mycode

Gratis bloggen bei
myblog.de





Simples Neuronales Netz Teil 3

In diesem Teil wird etwas näher auf die Backpropagation
eingegangen.

Warum funktioniert die Backpropagation?

Gehen wir erst einmal von der Ausgabe-Schicht aus:

Unser Fehler wird standardmäßig über 1/2(DesiredOutput - CurrentOutput)²
berechnet.

Für unser Verfahren nutzen wir die Ableitung -> (DesiredOutput - CurrentOutput) um die Steigung zu erhalten.

Durch das Quadrieren haben wir eine Art Parabel, die ihr Minimum beim kleinsten Fehler bekommt und somit auch die kleinste Steigung besitzt.

Zusätzlich leiten wir die Aktivierungsfunktion ab, wodurch wir
die Steigung der Aktivierungsfunktion erhalten.

Der Rest ist simpler als man meinen möchte.
Wir multiplizieren die Steigung des Fehlers mit der Steigung des Ergebnisses.

Dadurch kommen zwei Mechanismen zum Einsatz:
Ist der Fehler groß ist auch die Steigung groß.
Ist das Ergebnis nahe an der null, ist die Steigung groß.

(Man geht davon aus, dass, je näher die Summe an die 0 herankommt, desto größer ist die Auswirkung auf den Fehler. Hier liegt auch das Problem: Bei extremen Werten ändert der Algorithmus garnichts)

Dadurch wird dort, wo die Steigungen beider Funktionen groß sind auch das größte Fehlersignal erzeugt.

Schauen wir uns nun die weiteren Schichten an, wird die Ableitung des Fehlers der folgenden Schicht rückwärts gewichtet und mit der Steigung der Aktivierungsfunktion multipliziert.

Somit wird der Fehler dort größer, wo am meisten
Gewicht vorhanden ist, also dort, wo der größte Einfluss auf
den Fehler liegt.

Stellen wir uns das ganze als Berg- und Hügellandschaft vor.
Haben wir den maximalen Fehler liegt der Wert auf der Bergkuppel.
Wir wolle das der Fehler möglichst tief liegt.
Die Steigung gibt die Richtung an. Ist die Steigung negativ geht der Wert runter. Wir rollen vorwärts den Berg hinab Richtung Fehlerfrei.
Ist Steigung positiv rollen wir den Berg rückwärts runter.
Wir Pendeln also zwischen zwei Bergen hin und her, bis wir
im Tal zum stehen kommen.

So pendelt sich auch das Gewicht bis zum Optimum ein.

Hier erkennt man auch die Wichtigkeit einer guten Lernrate.
Ist sie zu hoch, springen wir um das Optimum herum.
Zu niedrig und es dauert zu lange.

Ein weiterer Punkt ist, dass es auch zu lokalen Minima kommen kann.
Dort ist das Fehlersignal klein, aber der Fehler an sich nicht beseitigt.

Dahin gehend gibt es allerdings ein paar Techniken um dies zu vermeiden (Stichwort: Momentum).

Im nächsten Teil werde ich mich noch einmal der Implementierung widmen. Diesmal jedoch in der Matrizen-Version, was, wie ich denke, viel cooler ist, da es eleganter ist und direkt auf der GPU ausgeführt werden kann (was um einiges schneller ist!)
17.3.16 14:27
 


bisher 0 Kommentar(e)     TrackBack-URL

Name:
Email:
Website:
E-Mail bei weiteren Kommentaren
Informationen speichern (Cookie)



 Smileys einfügen



Verantwortlich für die Inhalte ist der Autor. Dein kostenloses Blog bei myblog.de! Datenschutzerklärung
Werbung