Wikipedia · einfach zusammengefasst · Stand
Backpropagation
Fehlerrückführung bzw. Rückpropagierung ist ein verbreitetes Verfahren zum Einlernen künstlicher neuronaler Netze. Es gehört in der einfachen Form zur Gruppe …
Inhalt5 Abschnitte
Grundidee und Ablauf
Backpropagation (auch „Backpropagation of Error“, Fehlerrückführung oder Rückpropagierung) ist ein verbreitetes Verfahren zum Einlernen künstlicher neuronaler Netze. In seiner einfachen Form gehört es zu den überwachten Lernverfahren und ist eine Verallgemeinerung der Delta-Regel auf mehrschichtige Netze. Mathematisch ist es ein Spezialfall eines allgemeinen Gradientenverfahrens der Optimierung, das auf dem mittleren quadratischen Fehler basiert.
Ein neuronales Netz erhält numerische Eingabedaten und bildet sie auf einen Ausgabewert oder Ausgabevektor ab. In jeder Schicht werden die Eingaben mit einer Matrix von Gewichten multipliziert. Diese Gewichte sind die Parameter des Netzes. Beim Training wird die Ausgabe des Netzes mit einem Zielwert eines externen Lehrers verglichen. Der dabei entstehende Fehler wird rückwärts durch die Schichten propagiert. Dadurch lässt sich bestimmen, welche Verbindungen besonders stark zum Fehler beitragen. Ihre Gewichte werden anschließend verstärkt oder abgeschwächt, damit sich die Ausgabe bei einer erneuten Eingabe der gewünschten Ausgabe annähert.
Der Ablauf besteht aus drei Grundphasen: Ein Eingabemuster wird vorwärts durch das Netz propagiert, die Netzausgabe wird mit der gewünschten Ausgabe verglichen, und der Fehler wird von der Ausgabe- zurück zur Eingabeschicht propagiert. Die Gewichte werden abhängig von ihrem Einfluss auf den Fehler verändert. In weiterentwickelten Architekturen, etwa bei AlphaGo, kann der Zielwert auch aus anderen Teilen der Architektur stammen; ein menschlicher externer Lehrer ist dann nicht unbedingt erforderlich.
Fehlerfunktion und Ziel der Anpassung
Die Qualität der Abbildung von Eingabevektoren auf Ausgabevektoren wird durch eine Fehlerfunktion beschrieben. Im Artikel wird der quadratische Fehler verwendet:
E = ½ · ∑ᵢ₌₁ⁿ (tᵢ − oᵢ)².
Dabei bezeichnet E den Fehler, n die Anzahl der Ausgabe-Neuronen, tᵢ die gewünschte Soll-Ausgabe beziehungsweise den Zielwert (target) und oᵢ die errechnete Ist-Ausgabe (output). Der Faktor ½ dient lediglich der Vereinfachung der Ableitung.
Ziel des Lernens ist die Minimierung dieser Fehlerfunktion. Im Allgemeinen wird dabei nur ein lokales Minimum gefunden. Da die Netzausgabe – abgesehen von der Aktivierungsfunktion – direkt von den Gewichten abhängt, erfolgt das Einlernen durch deren Änderung. Das Gradientenverfahren bewegt sich auf der Fehleroberfläche in Richtung des stärksten Abfalls der Fehlerfunktion. Bei einem Neuron mit zwei Eingaben x₁ und x₂ und den Gewichten w₁ und w₂ kann diese Fehleroberfläche Minima besitzen, die durch diesen Abstieg gesucht werden.
Neuron, Kettenregel und Fehlersignale
Für ein künstliches Neuron j wird die Ausgabe durch oⱼ = φ(netⱼ) bestimmt. Die Netzeingabe lautet netⱼ = ∑ᵢ₌₁ⁿ xᵢwᵢⱼ. Dabei ist φ eine differenzierbare Aktivierungsfunktion, deren Ableitung nicht überall gleich null ist; n ist die Anzahl der Eingaben; xᵢ ist die Eingabe i; und wᵢⱼ ist die Gewichtung der Verbindung von Eingabe i zu Neuron j. Ein separater Schwellwert θⱼ wird nicht verwendet. Er kann durch ein stets „feuerndes“ on-Neuron mit dem konstanten Ausgangswert 1 realisiert werden.
Die partielle Ableitung des Fehlers nach einem Gewicht wird mithilfe der Kettenregel berechnet:
∂E/∂wᵢⱼ = (∂E/∂oⱼ) · (∂oⱼ/∂netⱼ) · (∂netⱼ/∂wᵢⱼ).
Die Gewichtsänderung ist
Δwᵢⱼ = −η · (∂E/∂wᵢⱼ) = −ηδⱼoᵢ.
η ist die feste Lernrate und bestimmt die Stärke der Gewichtsänderung. δⱼ ist das Fehlersignal des Neurons j und entspricht ∂E/∂netⱼ. Für ein Neuron der Ausgabeschicht gilt:
δⱼ = φ′(netⱼ)(oⱼ − tⱼ).
Für ein Neuron einer verdeckten Schicht, also einer nicht direkt sichtbaren Zwischenschicht, gilt:
δⱼ = φ′(netⱼ) · ∑ₖ δₖwⱼₖ.
Das Fehlersignal eines verdeckten Neurons wird somit aus den Fehlersignalen der nachfolgenden Neuronen berechnet. Bei einem einschichtigen Netzwerk gilt oᵢ = xᵢ. Die Gewichte werden schließlich aktualisiert mit
wᵢⱼⁿᵉᵘ = wᵢⱼᵃˡᵗ + Δwᵢⱼ.
Die Kettenregel erklärt das Rückwärtsarbeiten: Man beginnt beim Fehler, geht jeweils ein Neuron zurück und bildet die partielle Ableitung des aktuellen Neurons nach dem Neuron der vorhergehenden Schicht. Die einzelnen Ableitungen werden miteinander verkettet. Für Matrizen und Vektoren lautet die entsprechende Form ∂E/∂W = (∂E/∂O)(∂O/∂Net)(∂Net/∂W). Bei der umgekehrten Differentiation werden Ableitungssignale durch einen Berechnungsgraphen zurückpropagiert. Obwohl eine allgemeine Matrixformel Summen über viele Indizes enthält, müssen wegen der Struktur von Matrixfunktionen normalerweise nicht alle möglichen Terme einzeln berechnet werden.
Aktivierungsfunktionen
Für das Gradientenverfahren muss die Fehlerfunktion stetig und differenzierbar sein. Deshalb benötigt ein Backpropagation-Netz eine geeignete differenzierbare Aktivierungsfunktion. Eine der beliebtesten Funktionen ist die Sigmoidfunktion
s_c(x) = 1/(1 + e^(−cx)).
Die Konstante c ist frei wählbar; ihr Kehrwert 1/c wird in stochastischen neuronalen Netzen Temperaturparameter genannt. Mit zunehmendem c nähert sich die Form des Sigmoids der Heaviside-Funktion an. Für c → ∞ konvergiert das Sigmoid gegen eine Heaviside-Funktion. Seine Ableitung lautet
∂s_c(x)/∂x = c · e^(−cx)/(1 + e^(−cx))² = c · s_c(x) · (1 − s_c(x)).
Eine Alternative ist das symmetrische Sigmoid:
S(x) = 2s(x) − 1 = (1 − e^(−x))/(1 + e^(−x)) = tanh(x/2).
Der Backpropagation-Algorithmus kann auch mit anderen Aktivierungsfunktionen verwendet werden, sofern die von der Netzstruktur berechnete Funktion differenzierbar bleibt. Das gilt, weil ein neuronales Netz aus zusammengesetzten Funktionen besteht und die Netzeingabe an jedem Knoten als Summe der Eingaben gebildet wird.
Lernrate und Erweiterungen
Die Wahl der Lernrate η ist entscheidend. Ein zu hoher Wert kann zu starken Änderungen führen, sodass das Minimum verfehlt wird. Ein zu kleiner Wert verlangsamt das Einlernen unnötig. Optimierungen wie Quickprop sollen vor allem die Fehlerminimierung beschleunigen; andere Erweiterungen zielen auf eine höhere Zuverlässigkeit.
Bei einer variablen Lernrate wird versucht, Oszillationen des Netzes zu vermeiden, bei denen die Verbindungsgewichte abwechselnd in verschiedene Richtungen verändert werden.
Eine weitere Erweiterung ist der Trägheitsterm (Momentum) mit dem Parameter α. Er macht die aktuelle Gewichtsänderung zusätzlich von der vorherigen Änderung abhängig:
Δwᵢⱼ(t + 1) = (1 − α)ηδⱼxᵢ + αΔwᵢⱼ(t).
Der erste Summand berücksichtigt den aktuellen Gradienten der Fehlerfunktion, der zweite die Gewichtsänderung zum vorherigen Zeitpunkt. Für α = 0 hängt die Änderung allein vom Gradienten ab, für α = 1 lediglich von der letzten Änderung. Der Trägheitsterm kann Probleme in steilen Schluchten und auf flachen Plateaus der Fehleroberfläche verringern. Auf einem flachen Plateau ist der Gradient sehr klein; ohne Momentum würde der Abstieg daher unmittelbar abbremsen. Die zusätzliche Berücksichtigung der vorherigen Änderung kann dieses Abbremsen verzögern.
Zusammengefasst werden die Fehlersignale in einer Ausgabeschicht mit δⱼᴸ = (∂E/∂oⱼᴸ)φ′(netⱼᴸ) und in einer verdeckten Schicht mit δⱼˡ = ((wˡ⁺¹)ᵀδˡ⁺¹) ∘ φ′(netⱼˡ) berechnet. Danach ergeben sich die Gradienten der Gewichte und Schwellenwerte aus ∂E/∂wᵢⱼᴸ = oⱼˡ⁻¹δᵢˡ und ∂E/∂tⱼᴸ = δⱼˡ. Der vollständige Rechengang setzt zunächst die Aktivierung der Eingabeschicht, berechnet anschließend die Vorwärtsaktivierungen für l = 2, 3, …, L und bestimmt danach die Fehlersignale rückwärts für l = L − 1, L − 2, …, 2. Sobald der Fehler minimal ist, kann das Einlernen beendet werden; das mehrschichtige Netz ist dann bereit, die erlernten Muster zu klassifizieren.
Lernvideos zu Backpropagation
17:34
Neural Networks Pt. 2: Backpropagation Main Ideas
StatQuest with Josh Starmer · 804.693 Aufrufe
18:32
Backpropagation Details Pt. 1: Optimizing 3 parameters simultaneously.
StatQuest with Josh Starmer · 310.367 Aufrufe
13:13
PyTorch Tutorial 04 - Backpropagation - Theory With Example
Patrick Loeber · 146.216 Aufrufe