Verständnis Neuronalen Netzes Backpropagation
Update: eine bessere Formulierung der Frage.
Ich versuche zu verstehen, der backpropagation-Algorithmus mit einem XOR neuronale Netzwerk als ein Beispiel. Für diesen Fall gibt es 2 eingabeneuronen + 1 Neigung, 2 Neuronen in der hidden-layer + 1 bias-und 1 output-neuron.
A B A XOR B
1 1 -1
1 -1 1
-1 1 1
-1 -1 -1
(Quelle: wikimedia.org)
Ich bin mit stochastische RÜCKFÜHRUNG.
Nach der Lektüre ein bisschen mehr ich haben heraus gefunden, dass der Fehler der die Ausgabe-Einheit weitergegeben wird, um die ausgeblendeten Ebenen... anfangs verwirrend, weil, wenn Sie die input-layer des neuronalen Netzes, dann ist jedes neuron bekommt eine Fehlermeldung Anpassung von sowohl der Neuronen in der versteckten Schicht. In allem die Art, wie der Fehler verteilt ist, ist schwer auf den ersten zu erfassen.
Schritt 1 berechnen der Ausgabe für jede Instanz von Eingabe.
Schritt 2 berechne den Fehler zwischen dem output-neuron(s) (in unserem Fall gibt es nur eine) und der Sollwert(s):
Schritt 3 verwenden wir die Fehler aus Schritt 2 zur Berechnung des Fehlers für jede hidden unit h:
Das "Gewicht kh' ist der GEWICHTE zwischen der hidden-unit h und die Ausgabe-Einheit k, auch dies ist verwirrend, da sich die input-Einheit nicht direkt Gewicht im Zusammenhang mit der output-unit. Nach starrte auf die Formel für ein paar Stunden fing ich an zu denken über das, was die Summe bedeutet, und ich fange an, kommen zu dem Schluss, dass jedes input-neuron, das Gewicht, das in Verbindung zu dem verborgenen Schicht Neuronen multipliziert wird, indem der Ausgang Fehler und summiert. Dies ist eine logische Schlussfolgerung, aber die Formel scheint ein wenig verwirrend, da es sagt ganz klar das "Gewicht kh' (zwischen der output-Schicht k und der verdeckten Schicht h).
Verstehe ich alles richtig hier? Kann jemand dies bestätigen?
Was ist O(h) von der input-Schicht? Mein Verständnis ist, dass jeder Eingabe-Knoten hat zwei Ausgänge: einen, der geht in den ersten Knoten der verborgenen Schicht und eine, die geht in die zweiten Knoten der verborgenen Ebene. Welcher der beiden Ausgänge sollten eingesteckt werden in die O(h)*(1 - O(h))
Teil der Formel?
- dies sah referenziert gestern und bemerkt, dass die Schritt 2-Bild hat sich verschoben. sowie die Schritt 3-Bild
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dem tutorial das hier gepostet ist, es tatsächlich zu tun falsch. Ich doppelt überprüft es gegen Bishop ' s zwei standard-Bücher und zwei von meinen arbeiten Implementierungen. Ich will darauf hinweisen, unter dem genau.
Eine wichtige Sache im Auge zu behalten ist, dass Sie sind immer auf der Suche für Derivate, die der error-Funktion, mit Bezug auf ein Gerät oder Gewicht. Die ersteren sind die deltas, die letztere ist, was Sie verwenden, um aktualisieren Sie Ihre GEWICHTE.
Wenn man verstehen will, RÜCKFÜHRUNG, müssen Sie verstehen, die Kettenregel. Es ist alles über die Kettenregel hier. Wenn Sie nicht wissen, wie es genau funktioniert, check-up-bei wikipedia - es ist nicht so schwer. Aber sobald Sie verstehen, die Ableitungen, alles fällt in Platz. Versprechen! 🙂
∂E/∂W aus in ∂E/∂o ∂o/∂W über die Kettenregel. ∂o/∂W leicht berechnet werden, da es nur die Ableitung des Aktivierungs - /Ausgabe eine Einheit mit Bezug auf die GEWICHTE. ∂E/∂o ist eigentlich das, was wir nennen die deltas. (Ich gehe davon aus, dass E, o und W sind Vektoren/Matrizen hier)
Wir haben Sie für die Ausgabe-Einheiten, da das ist, wo können wir berechnen, den Fehler. (Wir haben meistens eine Fehler-Funktion, kommt es auf delta (t_k - o_k), z.B. für quadratische Fehler-Funktion im Fall von linearen Ausgängen und cross-Entropie für den Fall für Logistik-Ausgänge.)
Die Frage ist jetzt, wie bekommen wir die Ableitungen für die interne Einheiten? Gut, wir wissen, dass der Ausgang eines Gerätes ist die Summe aller ankommenden Einheiten gewichtet mit den gewichten und die Anwendung des transfer-Funktion danach. So o_k = f(sum(w_kj * o_j, für alle j)).
Also, was wir tun, ist, ableiten o_k mit Bezug auf o_j. Da delta_j = ∂E/∂o_j = ∂E/∂o_k ∂o_k/∂o_j = delta_k ∂o_k/o_j. Also da delta_k, können wir berechnen, delta_j!
Lassen Sie uns dies tun. o_k = f(sum(w_kj * o_j, für alle j)) => ∂o_k/∂o_j = f'(sum(w_kj * o_j, für alle j)) * w_kj = f'(z_k) * w_kj.
Für den Fall, dass die sigmoidale Transferfunktion, dies wird z_k(1 - z_k) * w_kj. (Hier ist der Fehler im tutorial, der Autor sagt o_k(1 - o_k) * w_kj!)
f'(z_k) = f(z_k)(1 - f(z_k))
entsprichto_k(1 - o_k)
.Ich bin mir nicht sicher, was deine Frage ist, aber ich ging eigentlich durch das tutorial mich und ich kann Ihnen versichern, andere als eine offensichtliche Tippfehler, es ist nichts falsch daran.
Mache ich die Annahme, dass Ihre Frage ist, weil Sie verwirrt sind, wie die RÜCKFÜHRUNG versteckt delta abgeleitet ist. Ist dies Ihre Frage, dann überlegen Sie bitte
(Quelle: pandamatak.com)
Sind Sie wahrscheinlich verwirrt, wie die Autorin dieser Gleichung abgeleitet. Dies ist eigentlich eine einfache Anwendung der multivariate Kettenregel. Nämlich, (was folgt, stammt aus wikipedia)
"Nehmen wir an, dass jedes argument von z = f(u, v) ist eine zwei-Variablen-Funktion, so dass u = h(x, y) und v = g(x, y), und, dass diese Funktionen alle differenzierbar. Dann die Ketten-Regel würde wie folgt Aussehen:
"
Nun Stell dir vor, die Verlängerung der Kette, in der Regel durch Induktion argument
E(z'1,z'2,..'z' n)
wo z'k ist der Ausgang des kth-output-layer der pre-Aktivierung,
und z'k(wji), die ist zu sagen, dass E eine Funktion von z' und z " selbst ist eine Funktion von wji (wenn dies nicht sinnvoll Sie auf den ersten denke sehr sorgfältig über wie ein NN-setup.) Die Anwendung der Kettenregel direkt erweitert auf n Variablen:
δE(z'1,z'2,..'z' n)/δwji = Σk δE/δz'k δz'k/δwji
ist der wichtigste Schritt, den Autor, dann gilt die Kettenregel noch einmal, dieses mal in der Summe, erweitern Sie den δz'k/δwji - Begriff, das ist
δz'k/δwji = δz'k/δoj
δoj/δzj
δzj/δwji.
Wenn Sie Schwierigkeiten haben, das Verständnis der Kettenregel, können Sie brauchen, um einen Kurs zu nehmen auf multivariate Kalkül, oder Lesen wie ein Abschnitt in einem lehrbuch.
Glück.
Was ich gelesen habe von Schritt 3 die Gleichung ist:
Jede Einheit hat nur einen Ausgang, aber jede Verbindung zwischen der Ausgabe und der nächsten Schicht gewichtet wird. Also die Ausgabe ist die gleiche, aber auf dem empfangenden Ende, jede Einheit wird einen anderen Wert erhalten, wenn das Gewicht der verbindungen ist unterschiedlich. O_h bezieht sich immer auf den Wert dieses neuron für die Letzte iteration. Fehler gilt nicht für die input-Ebene, wie durch definition, der Eingang hat keine "Fehler" per se.
Den Fehler berechnet werden muss Schicht für Schicht, beginnend auf der output-Seite, da müssen wir die Fehler-Werte der Schicht N+1 zu berechnen Schicht N. Sie haben Recht, es gibt keine direkte Verbindung zwischen input-und output-in der RÜCKFÜHRUNG.
Glaube ich, dass die Gleichung korrekt ist, wenn es unlogisch scheint. Was ist wahrscheinlich verwirrend ist, dass in der vorwärts-propagation für jede Einheit, die wir haben, um alle Einheiten und verbindungen auf der linken Seite des Gerätes (Eingabe von Werten), aber für die Fehlerfortpflanzung (RÜCKFÜHRUNG) war zu beachten, dass die Einheiten auf der rechten Seite (output-Wert) des Gerätes bearbeitet.