Die Backward Propagation künstlicher neuronaler Netze – Eine Schritt für Schritt Einführung

August 1, 2021
12 min
Machine Learning
Credits to afiq fatah from unsplash.com

In den vorherigen Artikeln haben wir uns die zwei ersten der vier Bausteine eines künstlichen neuronalen Netzes angeschaut: Hier haben wir erklärt, was für Berechnungen innerhalb eines einzelnen Neurons während der Forward Propagation stattfinden. Danach haben wir betrachtet was die Verlustfunktion ist und uns die, bei binären Klassifikationen, häufig eingesetzte Verlustfunktion des Binary Cross Entropy Loss angeschaut. Im letzten Artikel sind wir auf das am häufigsten verwendete Optimierungsverfahren künstlicher neuronaler Netze eingegangen: Das Gradientenverfahren. Und an diesem wollen wir nun anknüpfen. Grundsätzliches Ziel des Gradientenverfahrens ist es die Verlustfunktion zu minimieren. Hierzu werden unsere Parameter aktualisiert, und zwar in der entgegengesetzten Richtung der Gradienten der Verlustfunktion in Bezug auf ihre Parameter. Die Essenz des Artikels war, dass wir hierfür die Ableitungen der Verlustfunktion benötigen. Und genau dazu wird die Backward Propagation (Backpropagation) verwendet. Mittels der Backward Propagation werden diese Ableitungen gebildet.

Um es zu Beginn einfach zu halten verwenden wir zunächst ein neuronales Netz ohne Hidden Layer. Dies ist dann zwar kein neuronales Netz in dem Sinne, doch eignet sich besser zur Erläuterung der Ableitungen. Zunächst schauen wir uns noch einmal an welche Berechnungen wir bei der Forward Propagation und der Verlustberechnung bei einem Netz ohne Hidden Layer haben, dargestellt in der folgenden Abbildung.

Computation Graph eines künstlichen neuronalen Netzes

Wir führen also insgesamt drei Berechnungen für die Forward Propagation und Verlustberechnung durch. Zunächst berechnen wir den linearen Teil z des Output Neurons. In diesem Beispiel haben wir nur einen Eingang x, also auch nur einen Paramater w. Im Anschluss wenden wir eine Aktivierungsfunktion auf unser z an. Da wir uns im Output Layer befinden und eine binäre Klassifikation durchführen ist dies die sigmoid Funktion. Hierfür verwenden wir die folgende Formel:

Formel der sigmoid funktion

Dies sind die beiden Berechnungen des Output Layers. Nun folgt noch die Berechnung des Binary Cross Entropy Loss nach dieser Formel:

Formel des Binary Cross Entropy Loss

Die Parameter, die wir nun beim Gradientenverfahren optimieren können, sind w und b. Hierzu haben wir im vorherigen Artikel folgende Formeln kennen gelernt, angepasst auf ein einzelnes Trainingsbeispiel x:

Formeln zur Optimierung von w und b

Die Formeln sagen aus, dass wir für die aktualisierten w bzw. b, die alten w und b benötigen, und von diesen die Ableitungen der Verlustfunktion in Bezug auf w bzw. b benötigen. Zusätzlich multiplizieren wir diese Ableitungen mit der Lernrate (learning rate), die wir frei wählen können. Da die Parameter w und b in der Forward Propagation das Ergebnis der weiteren Berechnungen (sigmoid und Verlustfunktion) beeinflussen, müssen auch deren Ableitungen gebildet werden, um so beim Aktualisieren der Parameter mit einbezogen zu werden. Wir müssen nun also Schritt für Schritt die Ableitungen bilden und miteinander verketten.

Jetzt wird’s mathematisch - Die Ableitungen der Backpropagation

Mathematisch sieht die grundsätzliche Formel für „die Ableitung der Verlustfunktion in Bezug auf w bzw.  b“ so aus.

Dargestellt ist hier die sogenannte leibnizsche Schreibweise, da wir finden, dass diese sehr gut darstellt, wie die Kettenregel angewandt wird. Die erste Ableitung, die wir also bilden ist die der Verlustfunktion in Bezug auf a. Durch Vereinfachen der Lösung erhalten wir:

Ableitung der Verlustfunktion

Als nächstes müssen wir die Ableitung der sigmoid Funktion bestimmen. Diese Ableitung führt zu diesem Ergebnis:

Ableitung der sigmoid Funktion

Um zu diesem Ergebnis zu kommen sind einige Vereinfachungen notwendig, auf die wir nicht weiter eingehen. Wer mehr hierüber erfahren möchte, kann dies hier nachlesen.

Im Anschluss müssen die beiden gebildeten Ableitungen verkettet werden. Dies führt zu folgendem Ergebnis.

Verkettung von verlustfunktion und sigmoid

Nun müssen wir noch die Ableitungen des linearen Teils in Bezug auf w bzw. b durchführen. Die Formel des linearen Teils war:

Berechnung des linearen Teils

Die Ableitung des linearen Teils in Bezug auf w hat folgendes Ergebnis:

Ableitung in Bezug auf w

In Bezug auf b kommt das heraus:

Ableitung in Bezug auf b

Multiplizieren wir nun alle unsere Ableitungen erhalten wir folgendes Ergebnis für w bzw. b:

Dies sind also die zwei Formeln, die wir benötigen, um unsere Gewichte im nächsten Schritt zu aktualisieren. Setzen wir diese in unsere Formeln zur Aktualisierung der Gewichte ein, erhalten wir:

Aktualisieren von w und b

Bisher haben wir uns angeschaut, wie die Backward Propagation für ein Trainingsbeispiel aussieht. Normalerweise haben wir natürlich mehr als ein Beispiel. Deswegen betrachten wir nun den Fall mit m Trainingsbeispielen.

Die Backward Propagation mit mehreren Trainingsbeispielen

Im Artikel zur Berechnung der Verlustfunktion haben wir uns ebenfalls angeschaut wie wir die Verlustfunktion für ein Trainingsbeispiel i und für mehrere Trainingsbeispiele berechnen. Die Gesamtheit aller Verlustfunktionen wurde dann als Kostenfunktion bezeichnet und folgt folgender Gleichung:

die formel der kostenfunktion

Die Kostenfunktion war also der Durchschnitt aller Verlustfunktionen. Hierzu wurde die Summe aller Verlustfunktionen (von i=1 bis m) gebildet und im Anschluss mit dem Faktor 1/m multipliziert. Hieraus ergibt sich der Durchschnitt aller Verlustfunktionen.

Bei der Backward Propagation gehen wir genauso vor. Wir berechnen die einzelnen Ableitungen für w bzw. b für jedes Trainingsbeispiel, addieren diese dann und multiplizieren sie dann mit dem Faktor 1/m. Die Gleichungen, die wir erhalten sehen dann, allgemein, so aus:

Backpropagation allgemein für mehrere Trainingsbeispiele

Schreiben wir die Formeln für unseren konkreten Fall aus, sehen die Gleichungen folgendermaßen aus:

Nun wissen wir wie die Backward Propagation für mehrere Trainingsbeispiele berechnet wird. Im nächsten Artikel schauen wir uns dann ein letztes theoretisches Konzept an, bevor wir mit einem Programmierbeispiel in Python starten: Die Vektorisierung. Diese ist für eine effiziente Berechnung und einen schnell ausführbaren Code notwendig.

Referenzen
Portrait of Blogger
Maximilian Both
<  Previous
Das Gradientenverfahren (Gradient Descent) – Eine einfache Erklärung für das am häufigsten verwendete Optimierungsverfahren künstlicher neuronaler Netze
Next  >

Kommentare