Demo der Backpropagation
$$ \definecolor{input}{RGB}{66, 133, 244} \definecolor{output}{RGB}{219, 68, 55} \definecolor{dinput}{RGB}{244, 180, 0} \definecolor{doutput}{RGB}{15, 157, 88} \definecolor{dweight}{RGB}{102, 0, 255} $$

Backpropagation-Algorithmus

Der Backpropagation-Algorithmus ist wichtig, um große neuronale Netzwerke schnell zu trainieren. In diesem Artikel wird die Funktionsweise des Algorithmus erläutert.

Bitte scrollen Sie nach unten...

Einfaches neuronales Netzwerk

Rechts sehen Sie ein neuronales Netzwerk mit einer Eingabe, einem Ausgabeknoten und zwei versteckten Ebenen von jeweils zwei Knoten.

Knoten in benachbarten Ebenen sind mit Gewichtungen verbunden, die Netzwerkparameter. \(w_{ij}\)

Aktivierungsfunktion

Jeder Knoten hat eine Gesamteingabe \(\color{input}x\), eine Aktivierungsfunktion \(f(\color{input}x\color{black})\)und eine Ausgabe \(\color{output}y\color{black}=f(\color{input}x\color{black})\). \(f(\color{input}x\color{black})\) muss eine nicht lineare Funktion sein. Andernfalls kann das neuronale Netzwerk nur lineare Modelle lernen.

Eine häufig verwendete Aktivierungsfunktion ist die Sigmoid-Funktion: \(f(\color{input}x\color{black}) = \frac{1}{1+e^{-\color{input}x}}\).

Fehlerfunktion

Ziel ist es, die Gewichtung des Netzwerks automatisch aus Daten zu gewinnen, sodass die vorhergesagte Ausgabe \(\color{output}y_{output}\)nah an der Zielvorgabe \(\color{output}y_{target}\) für alle Eingaben liegt \(\color{input}x_{input}\).

Um zu messen, wie weit wir vom Ziel entfernt sind, verwenden wir eine Fehlerfunktion. \(E\) Eine häufig verwendete Fehlerfunktion ist \(E(\color{output}y_{output}\color{black},\color{output}y_{target}\color{black}) = \frac{1}{2}(\color{output}y_{output}\color{black} - \color{output}y_{target}\color{black})^2 \).

Weiterleitung

Wir beginnen mit einem Eingabebeispiel \((\color{input}x_{input}\color{black},\color{output}y_{target}\color{black})\) und aktualisieren die Eingabeebene des Netzwerks.

Aus Konsistenzgründen betrachten wir die Eingabe wie jeden anderen Knoten, jedoch ohne Aktivierungsfunktion, sodass ihre Ausgabe der Eingabe entspricht, also \( \color{output}y_1 \color{black} = \color{input} x_{input} \).

Weiterleitung

Jetzt aktualisieren wir die erste ausgeblendete Ebene. Wir verwenden die Ausgabe \(\color{output}y\) der Knoten in der vorherigen Ebene und verwenden die Gewichtung, um die Eingabe \(\color{input}x\) der Knoten in der nächsten Ebene zu berechnen.
$$ \color{input} x_j \color{black} = $$$$ \sum_{i\in in(j)} w_{ij}\color{output} y_i\color{black} +b_j$$

Weiterleitung

Dann aktualisieren wir die Ausgabe der Knoten auf der ersten ausgeblendeten Ebene. Dazu verwenden wir die Aktivierungsfunktion \( f(x) \).
$$ \color{output} y \color{black} = f(\color{input} x \color{black})$$

Weiterleitung

Mit diesen zwei Formeln übergeben wir für den Rest des Netzwerks und erhalten die endgültige Ausgabe des Netzwerks.
$$ \color{output} y \color{black} = f(\color{input} x \color{black})$$
$$ \color{input} x_j \color{black} = $$$$ \sum_{i\in in(j)} w_{ij}\color{output} y_i \color{black} + b_j$$

Fehlerableitung

Der Backpropagation-Algorithmus entscheidet, wie viel jede Gewichtung des Netzwerks aktualisiert werden soll, nachdem die vorhergesagte Ausgabe mit der gewünschten Ausgabe für ein bestimmtes Beispiel verglichen wurde. Dazu müssen wir berechnen, wie sich der Fehler in Bezug auf die jeweilige Gewichtung ändert \(\color{dweight}\frac{dE}{dw_{ij}}\).
Sobald wir die Fehler abgeleitet haben, können wir die Gewichtungen mit einer einfachen Aktualisierungsregel aktualisieren:
$$w_{ij} = w_{ij} - \alpha \color{dweight}\frac{dE}{dw_{ij}}$$
Dabei ist \(\alpha\) eine positive Konstante, die sogenannte Lernrate, die wir empirisch optimieren müssen.

[Hinweis] Die Regel für die Aktualisierung ist sehr einfach: Wenn der Fehler abnimmt, wenn die Gewichtung zunimmt (\(\color{dweight}\frac{dE}{dw_{ij}}\color{black} < 0\)), dann erhöhen Sie die Gewichtung. Sollte der Fehler höher werden, wenn die Gewichtung zunimmt (\(\color{dweight}\frac{dE}{dw_{ij}} \color{black} > 0\)), verringern Sie die Gewichtung.

Zusätzliche Derivate

Für die Berechnung von \(\color{dweight}\frac{dE}{dw_{ij}}\)speichern wir zusätzlich für jeden Knoten zwei weitere abgeleitete Beispiele: wie sich der Fehler ändert:
  • Gesamteingabe des Knotens \(\color{dinput}\frac{dE}{dx}\) und
  • die Ausgabe des Knotens \(\color{doutput}\frac{dE}{dy}\).

Weiterverbreitung

Beginne mit der Umverteilung des Fehlerderivats. Da wir die vorhergesagte Ausgabe dieses bestimmten Eingabebeispiels haben, können wir berechnen, wie sich der Fehler mit dieser Ausgabe ändert. Mit unserer Fehlerfunktion \(E = \frac{1}{2}(\color{output}y_{output}\color{black} - \color{output}y_{target}\color{black})^2\) haben wir:
$$ \color{doutput} \frac{\partial E}{\partial y_{output}} \color{black} = \color{output} y_{output} \color{black} - \color{output} y_{target}$$

Weiterverbreitung

Wir haben jetzt \(\color{doutput} \frac{dE}{dy}\) die \(\color{dinput}\frac{dE}{dx}\) Verkettungsregel.
$$\color{dinput} \frac{\partial E}{\partial x} \color{black} = \frac{dy}{dx}\color{doutput}\frac{\partial E}{\partial y} \color{black} = \frac{d}{dx}f(\color{input}x\color{black})\color{doutput}\frac{\partial E}{\partial y}$$
Dabei ist \(\frac{d}{dx}f(\color{input}x\color{black}) = f(\color{input}x\color{black})(1 - f(\color{input}x\color{black}))\) , wenn \(f(\color{input}x\color{black})\) die Sigmoid-Aktivierungsfunktion ist.

Weiterverbreitung

Sobald wir die Fehlerableitung in Bezug auf die Gesamteingabe eines Knotens haben, können wir die Fehlerableitung in Bezug auf die Gewichtungen erhalten, die in diesen Knoten eingehen.
$$\color{dweight} \frac{\partial E}{\partial w_{ij}} \color{black} = \frac{\partial x_j}{\partial w_{ij}} \color{dinput}\frac{\partial E}{\partial x_j} \color{black} = \color{output}y_i \color{dinput} \frac{\partial E}{\partial x_j}$$

Weiterverbreitung

Und mit der Kettenregel können wir \(\frac{dE}{dy}\) auch aus der vorherigen Ebene kommen. Wir haben einen kompletten Kreis.
$$ \color{doutput} \frac{\partial E}{\partial y_i} \color{black} = \sum_{j\in out(i)} \frac{\partial x_j}{\partial y_i} \color{dinput} \frac{\partial E}{\partial x_j} \color{black} = \sum_{j\in out(i)} w_{ij} \color{dinput} \frac{\partial E}{\partial x_j}$$

Weiterverbreitung

Es müssen nur noch die drei vorherigen Formeln wiederholt werden, bis alle Fehlerableitungen berechnet sind.

Ende.

Berechnung läuft...