Zum Inhalt springen

Backpropagation Algorithmus verstehen

Der Backpropagation Algorithmus ist ein Werkzeug zur Verbesserung des Neuronalen Netzwerkes während des Trainingsprozesses. Mit Hilfe dieses Algorithmus werden die Parameter der einzelnen Neuronen so abgeändert, dass die Vorhersage des Modells und der tatsächliche Wert möglichst schnell übereinstimmen. Dadurch kann ein Neuronales Netzwerk auch schon nach einer verhältnismäßig kurzen Trainingszeit gute Ergebnisse liefern.

Dieser Beitrag reiht sich in die anderen Beiträge zu Künstliche Intelligenz Grundlagen ein. Wenn Du noch keinen Background zum Thema Neural Networks und Gradientenverfahren hast, solltest Du bevor Du weiterliest, die verlinkten Beiträge anschauen. Wir werden auf diese Konzepte nur noch kurz eingehen können. Machine Learning im Allgemeinen ist ein sehr mathelastiges Themengebiet. Für diese Erläuterung von Backpropagation versuchen wir soweit wie möglich auf mathematische Herleitungen zu verzichten und lediglich ein Grundverständnis für die Vorgehensweise zu vermitteln.

Neuronale Netzwerke

Neuronale Netze bestehen aus vielen Neuronen, die in verschiedenen Schichten organisiert sind und miteinander kommunizieren und verknüpft sind. In der Eingabeschicht werden den Neuronen verschiedene Inputs zur Berechnung gegeben. Das Netzwerk soll darauf trainiert werden, dass die Ausgabeschicht, die letzte Schicht, eine möglichst genaue Vorhersage auf Basis des Inputs macht, das dem tatsächlichen Ergebnis so nahe wie möglich kommt.

Das Bild zeigt den Grundaufbau eines Künstlichen Neuronalen Netzwerkes mit den verschiedenen Schichten.
Aufbau eines Neuronalen Netzwerkes

Dazu werden die sogenannten Hidden Layers genutzt. Diese Schichten enthalten auch viele Neuronen, die mit der vorherigen und der darauffolgenden Schicht kommunizieren. Während des Trainings werden die Gewichtungsparameter jedes Neurons so verändert, dass die Vorhersage sich der Realität so weit wie möglich annähert. Der Backpropagation Algorithmus hilft uns bei der Entscheidung, welchen Parameter wir wie abändern müssen, damit sich die Verlustfunktion minimiert.

Gradientenverfahren

Das Gradientenverfahren ist ein Algorithmus aus den mathematischen Optimierungsproblemen, der hilft, sich dem Minimum einer Funktion so schnell wie möglich zu nähern. Mathematisch berechnet man dazu die Ableitung einer Funktion, den sogenannten Gradienten, und geht in die entgegengesetzte Richtung dieses Vektors, weil dort der steilste Abstieg der Funktion ist.

Wem das zu mathematisch ist, der kennt diese Vorgehensweise vielleicht vom Wandern in den Bergen. Man hat schweiß gebadet endlich den Gipfel erklommen, die obligatorischen Bilder gemacht und die Aussicht ausreichend genossen und möchte nun auf schnellstem Wege wieder ins Tal und zurück nach Hause. Man sucht also den schnellsten Weg vom Berg hinunter ins Tal, also das Minimum der Funktion. Intuitiv wird man dazu einfach den Weg gehen der für das Auge den steilsten Abstieg hat, weil man davon ausgeht, dass man so am schnellsten wieder bergab kommt. Das ist natürlich nur bildlich gesprochen, da sich keiner die steilste Klippe am Berg hinunter trauen wird.

Dasselbe macht das Gradientenverfahren mit der Funktion. Wir befinden uns irgendwo im Funktionsgraphen und versuchen das Minimum der Funktion zu finden. Entgegen dem Beispiel haben wir in dieser Situation nur zwei Möglichkeiten uns fortzubewegen. Entweder in die positive oder die negative x-Richtung (bei mehr als einer Variablen, also einem mehrdimensionalen Raum, sind es natürlich entsprechend mehr Richtungen). Der Gradient hilft uns dabei, indem wir wissen, dass die negative Richtung des Gradienten der steilste Funktionsabstieg ist.

Gradientenverfahren im Machine Learning

Die Funktion, welche uns beim Machine Learning interessiert, ist die Verlustfunktion. Sie misst den Unterschied zwischen der Vorhersage des Neuronalen Netzwerkes und dem tatsächlichen Ergebnis des Trainingsdatenpunktes. Auch diese Funktion wollen wir minimieren, da wir dann eine Differenz von 0 haben. Dann kann unser Modell exakt die Ergebnisse des Datensatzes vorhersagen. Die Stellschrauben um dort hinzukommen, sind die Gewichtungen der Neuronen, die wir ändern können, um dem Ziel näher zu kommen.

In Kurzform: Während des Trainings erhalten wir die Verlustfunktion, deren Minimum wir versuchen zu finden. Dazu berechnen wir nach jeder Wiederholung den Gradienten der Funktion und gehen in die Richtung des steilsten Abstiegs der Funktion. Leider wissen wir nun noch nicht, welchen Parameter wir wie stark abändern müssen, um die Verlustfunktion zu minimieren. Das Problem dabei ist, dass das Gradientenverfahren immer nur für die vorhergegangene Layer und deren Parameter durchgeführt werden kann. Ein tiefes Neuronales Netzwerk besteht jedoch aus vielen verschiedenen Hidden Layern, deren Parameter theoretisch alle für den Fehler verantwortlich sein können.

In großen Netzwerken müssen wir also auch feststellen, wie groß der Einfluss der einzelnen Parameter auf den schlussendlichen Fehler waren und wie stark wir sie abändern müssen. Das ist die zweite Säule der Backpropagation, woher auch der Name kommt.

Backpropagation Algorithmus

Wir versuchen diesen Beitrag so unmathematisch wie möglich zu halten, aber ganz ohne geht es leider nicht. Jede Schicht in unserem Netzwerk ist definiert durch einen Input, entweder aus der vorangegangenen Layer oder aus dem Trainingsdatensatz, und über einen Ouput, der an die nächsten Schicht weitergegeben wird. Der Unterschied zwischen Input und Output entsteht durch die Gewichtungen und die Aktivierungsfunktionen der Neuronen.

Das Problematische daran ist, dass der Einfluss den eine Schicht auf den schlussendlichen Fehler hat auch davon abhängig ist, wie die nachfolgende Schicht diesen Fehler weitergibt. Selbst wenn sich ein Neuron „verrechnet“ fällt das nicht so stark ins Gewicht, wenn das Neuron in der nächsten Schicht diesen Input einfach ignoriert, also dessen Gewichtung auf 0 setzt. Dies zeigt sich mathematisch daran, dass der Gradient einer Schicht auch die Parameter der nachfolgenden Schicht enthält. Deshalb müssen wir die Backpropagation in der letzten Schicht, der Ausgabeschicht, beginnen und dann Schicht für Schicht mit dem Gradientenverfahren die Parameter optimieren.

Von daher kommt auch der Name Backpropagation, oder auch Fehlerrückführung, da wir den Fehler von hinten durch das Netzwerk propagieren und die Parameter optimieren.

Das solltest Du mitnehmen

  • Backpropagation ist ein Algorithmus zum Training von Neuronalen Netzwerken.
  • Er ist unter anderem die Anwendung des Gradientenverfahrens auf die Verlustfunktion des Netzwerkes.
  • Der Name kommt daher, dass der Fehler vom Ende des Modells Schicht für Schicht nach vorne propagiert wird.

Andere Beiträge zum Thema Backpropagation

  • Tensorflow bietet eine ausführliche Erklärung zu Gradienten und Backpropagation und zeigt auch direkt, wie sich das Ganze in Python umsetzen lässt.
close
Das Logo zeigt einen weißen Hintergrund den Namen "Data Basecamp" mit blauer Schrift. Im rechten unteren Eck wird eine Bergsilhouette in Blau gezeigt.

Verpass keine neuen Beiträge!

Wir versenden keinen Spam! Lies die Details gerne in unserer Datenschutzrichtlinie nach.

Cookie Consent mit Real Cookie Banner