Backpropagation in neuronalen Netzen

Dec 06 2022
Einführung In dieser Geschichte werde ich erklären, wie ein neuronales Netzwerk mit Backpropagation trainiert werden kann. In der vorherigen Geschichte wurde der Gradientenabstiegsalgorithmus eingeführt, aber wir haben nicht darüber nachgedacht, wie der Gradient einer Funktion mit einer Million Variablen berechnet werden kann.

Einführung

In dieser Geschichte werde ich erklären, wie ein neuronales Netzwerk mit Backpropagation trainiert werden kann. In der vorherigen Geschichte wurde der Gradientenabstiegsalgorithmus eingeführt, aber wir haben nicht berücksichtigt, wie der Gradient einer Funktion mit einer Million Variablen berechnet werden kann. Bevor ich die Hauptgleichungen der Backpropagation herleite, werde ich kurz erklären, wie Neuronen in verschiedenen Schichten miteinander verbunden sind, und auch die Notation für Variablen einführen.

Neurales Netzwerk

In Abbildung 1 sehen Sie ein vollständig verbundenes NN mit vier Schichten: eine Eingabe-, zwei verborgene und eine Ausgabeschicht. Wenn wir dieses Netzwerk zur Erkennung von Bildern verwenden, wird das Eingabebild in Form eines Vektors der Eingabeschicht zugeführt. Wenn wir alle Variablen zufällig initialisieren, werden die erhaltenen Ergebnisse in der Ausgabeschicht die Eingaben nicht angemessen klassifizieren. Aus diesem Grund müssen diese Variablen so angepasst werden, dass das Netzwerk die Eingaben entsprechend klassifiziert. Der Einfachheit halber betrachten wir das folgende Netzwerk, das nur vier Schichten enthält. Die Notation für Gewichtungen und Verzerrungen, die in dieser Geschichte verwendet wird, wird in Abbildung 1 widergespiegelt.

Bild vom Autor. Abbildung 1

Betrachten wir zunächst die Beziehung zwischen der Ausgabe des aktuellen Neurons und der der vorherigen Schicht. Die folgende Gleichung stellt den Hauptteil dieser Abhängigkeit dar.

Gleichung 1

Für das 2. Neuron der 3. Schicht können wir diese Gleichung beispielsweise wie folgt schreiben:

Diese z-Werte werden für jedes Neuron berechnet und schließlich wird eine Aktivierungsfunktion auf sie angewendet, um eine Ausgabe zu erzeugen.

Ein häufig verwendetes Beispiel einer Aktivierungsfunktion ist die Sigmoidfunktion, die die Berechnungsfähigkeit eines neuronalen Netzwerks durch Hinzufügen von Nichtlinearität erhöht. Schließlich wird die Ausgabe des j-ten Neurons der Schicht l wie folgt bezeichnet:

Gleichung 2

wobei Sigma eine Aktivierungsfunktion ist. Beachten Sie, dass die Aktivierungsfunktion ab der zweiten Schicht angewendet wird, einschließlich der Ausgabeschicht. Daher wiederholen die Ausgaben der Eingabeschicht nur die Eingaben ohne Aktivierung.

Wenn wir mit zufälligen Gewichtungen und Verzerrungen beginnen, wird unser Netzwerk Zahlen auf der Ausgabeebene erzeugen, die weit von unseren Vorstellungen entfernt sind. Glücklicherweise können wir alle Gewichtungen und Verzerrungen schrittweise anpassen, um die Daten genau zu klassifizieren.

Jetzt werde ich die Kostenfunktion einführen und deutlich erklären, warum die Minimierung dieser Funktion zu einer besseren Klassifikation führt. Die Gesamtkostenfunktion von NN wird durch die folgende Formel angegeben:

Woher:

x ist der Eingangsvektor

y_a ist ein tatsächlicher Ausgangsvektor (der eine Funktion des Eingangsvektors, aller Gewichtungen und Bias ist)

y_d ist der gewünschte Ausgangsvektor (der für jeden Eingangsvektor x festgelegt ist).

n ist die Gesamtzahl der Eingabevektoren (z. B. die Anzahl der Bilder)

Da jeder Term in der Summe nicht negativ ist, entspricht die Minimierung der Gesamtkosten der Minimierung jedes Terms, und die Minimierung jedes Terms kann nur erreicht werden, indem die tatsächliche Ausgabe näher an die gewünschte gebracht wird. Eine Methode zur Minimierung der Funktion ist der Gradientenabstiegsalgorithmus. Der Gradientenalgorithmus sagt uns jedoch nicht, wie der Gradient für eine Funktion mit Tausenden von Variablen berechnet wird. Aus diesem Grund betrachten wir in diesem Abschnitt Backpropagation.

Es ist klar, dass die Kostenfunktion die Summe verschiedener Funktionen ist. Daher kann der Gradient der gesamten Kostenfunktion gefunden werden, indem die Gradienten jedes Terms in der Summe addiert werden. Versuchen wir deshalb, unsere Kostenfunktion wie folgt darzustellen:

Woher

Die obige Formel ist in Vektorform, wobei y_a und y_d die tatsächlichen bzw. gewünschten Vektoren darstellen. In Komponentenform können die Kosten wie folgt dargestellt werden:

Da y_ai die Ausgabeschicht von NN darstellt, können wir die Kosten für Abbildung 1 wie folgt umschreiben:

Es ist klar, dass wir für jeden Eingabevektor x eine zugeordnete Kostenfunktion haben, die mit C_x bezeichnet wird. Der Durchschnitt dieser Kostenfunktionen ist gleich den Gesamtkosten von NN. Daher ergibt der Durchschnitt der Gradienten dieser Kosten den Gradienten der Gesamtkosten.

Nun betrachten wir, wie wir den Gradienten (mit anderen Worten alle partiellen Ableitungen in Bezug auf Gewichte und Bias in einem Netzwerk) von C_x unter Verwendung des Backpropagation-Algorithmus erhalten können.

Bevor wir beginnen, wollen wir eine Fehlerfunktion einführen, die für jedes Neuron berechnet wird und unsere Aufgabe beim Finden partieller Ableitungen vereinfachen. Wir definieren einen Fehler für jedes Neuron wie folgt:

Lassen Sie uns zunächst den obigen Fehler für die Ausgabeschicht (also die 4. Schicht) berechnen. Nach folgenden Formeln:

Der Fehler für die Ausgabeschicht kann wie folgt berechnet werden, was die gewöhnliche Kettenregel ist:

Anschließend zeigen wir, wie Fehler für Neuronen in der dritten Schicht berechnet werden. Aus unserem neuronalen Netz geht hervor, dass zj³ einen Einfluss auf alle Ausgaben der nächsten Schicht hat, nämlich z1⁴, z2⁴, z3⁴ und z4⁴, die wiederum die Kostenfunktion beeinflussen. Unter der Annahme, dass zj³ eine unabhängige Variable ist, kann die Kettenregel wie folgt angewendet werden:

Aus der Definition:

und ∂zk⁴/∂zj³ können wie folgt unter Verwendung der Gleichung für zk⁴ berechnet werden:

Wenn wir schließlich diese partiellen Ableitungen wieder in die Gleichung für Fehler in der dritten Schicht einsetzen, erhalten wir das folgende Ergebnis:

In ähnlicher Weise werden die Fehler der zweiten Schicht sein:

Die allgemeine Fehlerformel im j-ten Neuron der Schicht l wird wie folgt bezeichnet:

Gleichung 3

Bisher scheint es, dass jeder Fehler in Schicht drei von denen in Schicht vier abhängt, genauso wie die in Schicht zwei von Fehlerwerten in Schicht drei abhängig sind. Indem wir den Fehler für die Ausgabeschicht berechnen und zurückverbreiten, können wir tatsächlich den Gradienten der Kostenfunktion finden. (was als nächstes erklärt wird). Der Name "Backpropagation" rührt eigentlich von dieser unidirektionalen Fehlerabhängigkeit zwischen den Neuronen benachbarter Schichten her.

Lassen Sie uns nun mit den bekannten Fehlern sehen, wie wir partielle Ableitungen der Kostenfunktion in Bezug auf alle Unbekannten (Gewichte und Bias) berechnen können. Beginnen mit:

Wir wissen, dass für Schicht l alle wjk^l-Gewichte, die mit dem j-ten Neuron der Schicht l verbunden sind, direkt zj^l beeinflussen, was sich wiederum auf die Kostenfunktion auswirkt. Daher können wir die Kettenregel wie folgt anwenden:

Aus der Fehlerdefinition:

und der andere Term der Summe kann wie folgt berechnet werden:

Gleichung 4

Durch Zurücksetzen dieser Gleichungen erhalten wir die folgende Formel für partielle Ableitungen der Kostenfunktion in Bezug auf alle Gewichte:

Lassen Sie uns nun partielle Ableitungen in Bezug auf Verzerrungen berechnen:

In ähnlicher Weise wirkt sich eine Änderung der j-ten Vorspannung von Schicht l direkt auf zj^l aus, was sich wiederum auf die Kostenfunktion auswirkt. Also gilt nach der Kettenregel:

Woher:

und

Deshalb:

Gleichung 5

Fazit

In dieser Geschichte haben wir diskutiert, wie ein neuronales Netzwerk durch Neuronen aufgebaut wird, die mit Gewichten verbunden sind. Wir haben auch eine Notation eingeführt, die häufig für die Benennung von Gewichtungen und Bias verwendet wird. Die Beziehung zwischen den Ausgabe- und Eingabeschichten wurde durch die Einführung gewichteter Summenoperationen zwischen Schichten und einer darauf angewendeten Aktivierungsfunktion erklärt.

Nachdem wir die Fehlerfunktion definiert haben, die für alle Neuronen ausgehend von der Ausgabeschicht berechnet wird, haben wir entdeckt, dass Fehler rekursiv ausgehend von der Ausgabeschicht berechnet werden können. Und schließlich haben wir unter der Annahme, dass Fehler berechnet wurden, Gleichungen für partielle Ableitungen abgeleitet, um den Gradienten der Kostenfunktion zu erhalten.

Nun möchte ich in mehreren Sätzen den Back-Propagation-Algorithmus zusammenfassen:

Schritt 1: Netzwerk mit zufälligen Gewichtungen und Verzerrungen initialisieren (z. B. in einem Bereich [0–1])

Schritt 2: Berechnen Sie für jeden Eingabevektor x die z-Werte und Ausgaben (a) aller Neuronen in einem Netzwerk. (Dieser Vorgang wird Vorwärtsausbreitung genannt). (Gl. 1,2)

Schritt 3: Berechnen Sie Fehler für jedes Neuron in der Ausgabeschicht und geben Sie sie zurück (unter Verwendung der Fehler aus der Ausgabeschicht, berechnen Sie Fehler für die vorherige Schicht und setzen Sie diesen Prozess rekursiv fort). (Dies ist der Prozess der Backpropagation). (Gl. 3)

Schritt 4: Berechnen Sie unter Verwendung der erhaltenen Ergebnisse für Fehler und Ausgaben alle partiellen Ableitungen (Gradientenvektor). (Gl. 4,5)

Schritt 5: Führen Sie unter Verwendung des erhaltenen Gradienten eine Iteration im Gradientenabstiegsalgorithmus durch (machen Sie einen Schritt in Richtung des lokalen Minimums der Kostenfunktion).