Die Verlustfunktion künstlicher neuronaler Netze – Die Basis für ein erfolgreiches Training und die Initialzündung der Backpropagation

March 28, 2021
6 min
Machine Learning
Credits to Gerd Altmann from pixabay.com

Im letzten Artikel haben wir uns angeschaut, was sich im Kern von neuronalen Netzen, den Neuronen, abspielt. Hierzu haben wir ein ganz einfaches neuronales Netz, ohne Hidden Layer, betrachtet. Mit Hilfe dieses Netzes wollten wir vorhersagen, ob eine Pumpe ausfallen wird oder nicht. Da wir keine Hidden Layer hatten, haben wir nur den Output Layer mit einem einzigen Neuron gehabt. Dieses Neuron hatte die Aufgabe entweder True (Pumpe fällt aus) oder False (Pumpe fällt nicht aus) auszugeben, es handelt sich also um eine Binäre Klassifikation, die mit Hilfe einer logistischen Regression gelöst werden kann. Für das Training unseres Netzes benötigen wir folgende Parameter:

  • Eingänge x, in unserem Beispiel die Leistungsaufnahme und Drehzahl einer Pumpe
  • Gewichte w und b, die unser Modell während des Trainings anpassen kann
  • Vorhersage a, die unser Modell nach jedem Trainingsdurchlauf abgibt, in unserem Beispiel ob die Pumpe ausfällt oder nicht
  • Ausgang y, der wahre Wert, also die Aussage, ob die Pumpe tatsächlich ausgefallen ist oder nicht

In unserem Beispiel im vorherigen Artikel haben wir gezeigt, wie wir durch die Sigmoidfunktion das a berechnen konnten. Wir haben also eine erste Aussage unseres Modells erhalten. Im nächsten Schritt müssen wir bewerten, ob unser Modell eine gute Aussage getroffen hat, oder nicht. Bei uns bedeutet dies konkret: Hat das Modell richtig vorhergesagt, ob die Pumpe ausfällt oder nicht. Hierzu müssen wir unsere Vorhersage a mit unserem Ausgang y vergleichen, um so evaluieren zu können, ob unser Modell eine gute oder schlechte Vorhersage getroffen hat. Um diese Evaluierung durchführen zu können müssen wir den sogenannten Verlust (Loss) berechnen. Dieser Verlust bildet die Basis für das weitere Training unseres neuronalen Netzes. Konkret werden auf Basis des Verlustes unsere Gewichte w und b angepasst, sodass unser Modell im nächsten Durchgang eine bessere Vorhersage treffen kann. Das Ziel beim Training künstlicher neuronaler Netze besteht darin, den Verlust im Verlauf des Trainings zu minimieren. Je niedriger der Verlust am Ende unseres Trainings, desto besser sind die Vorhersagen unseres Netzes. Wie die Berechnung des Verlusts durch eine Verlustfunktion funktioniert, schauen wir uns im weiteren Verlauf an.

Die Verlustfunktion

Grundsätzlich gibt es viele unterschiedliche Verlustfunktionen, die für verschiedene Anwendungsfälle besonders geeignet sind. In unserem Beispiel haben wir eine binäre Klassifikation, Ausfall ja oder nein, betrachtet. Die Verlustfunktion, die für diesen Anwendungsfall häufig eingesetzt wird, ist der Binary Cross Entropy Loss [1]. Dieser basiert auf folgender Formel:

Gleichung des Cross Entropy Loss: L = -(y * log(a)+(1-y)*log(1-a))
Die Gleichung des Binary Cross Entropy Loss

Das tiefergestellte i steht hierbei immer für das Trainingsbeispiel i. Angenommen wir haben in unserem Trainingsdatensatz 10.000 Beispiele, dann steht i für das jeweilige dieser 10.000 Beispiele, welches gerade betrachtet wird bspw. 4.756. Wie immer sieht eine solche Formel etwas komplizierter aus als sie eigentlich ist. Die Formel lässt sich sehr gut in zwei Teile gliedern: Der erste Teil, markiert in grün, ist der relevante Teil, wenn wir ein y von 1 haben. Wir erinnern uns, dass bei einer binären Klassifikation y nur zwei Werte annehmen kann: 0 oder 1. Bei einem y von 0 würde der grüne Teil der Gleichung wegfallen, da unser Logarithmus mit 0 multipliziert wird und somit dieser Teil der Gleichung gleich 0 ist. Ist y hingegen gleich 1, fällt der hintere rote Teil der Gleichung weg (1-1), da nun dieser Logarithmus mit 0 multipliziert wird. Wir sehen also, dass in Abhängigkeit unseres tatsächlichen y immer nur ein Teil der Gleichung relevant ist. Setzen wir einmal Werte für y und a ein, wird dies noch deutlicher. Betrachten wir zunächst den Fall, dass unser Modell für das Trainingsbeispiel 4.756 einen Wert für a von 0,83 herausbekommen hat (Erinnerung: Die Sigmoidfunktion ergibt immer Werte zwischen 0 und 1), obwohl die Pumpe in Wahrheit nicht ausgefallen ist (y = 0). Setzen wir die beiden Werte ein erhalten wir:

Nehmen wir nun an für unser Trainingsbeispiel 3.178 hätte unser Modell ein a von 0,79 herausbekommen, wobei wir ein y von 1 haben.

Die beiden Beispiele zeigen anschaulich, dass immer ein Teil wegfällt, je nachdem was wir für ein y haben. Dies ist der Grund warum der Binary Cross Entropy Loss so häufig als Verlustfunktion für binäre Klassifikationen verwendet wird. Außerdem wird deutlich, dass unser Verlust größer wird, je mehr unsere Vorhersage a von unserem wahren Ausgang y abweicht. Im ersten Beispiel hatten wir ein a von 0,83 und ein y von 0. Unser Modell hat also eine sehr schlechte Vorhersage getroffen, wenn man bedenkt, dass maximal ein Wert von 1 möglich gewesen wäre. Im zweiten Beispiel haben wir bei einem y von 1 ein a von 0,79 vorhergesagt, was eine deutlich bessere Vorhersage ist. Dies wird auch durch den jeweiligen Verlust (0,77 im ersten Beispiel, zu 0,10 im zweiten Beispiel) widergespiegelt. Je näher die Vorhersage unseres Modells an dem tatsächlichen Ausgang y liegt, desto geringer ist unser Verlust. Rufen wir uns nun in Erinnerung, dass das Ziel unseres neuronalen Netzes ist am Ende des Trainings einen möglichst geringen Verlust zu haben, zeigt sich wiederum, dass diese Verlustfunktion gut für binäre Klassifikationen geeignet ist.

Die Kostenfunktion

Bisher haben wir den Verlust für ein einzelnes Trainingsbeispiel berechnet. Bei einem normalen Datensatz haben wir immer mehr als ein Beispiel, bspw. die 10.000 von denen wir weiter oben gesprochen haben. Deshalb müssen wir nach jedem Durchgang den Verlust für die Gesamtheit unserer Trainingsbeispiel berechnen. Dies machen wir mit der sogenannten Kostenfunktion (bezeichnet als J), welche die einzelnen Verlustfunktionen aller Beispiele beinhaltet. In anderer Literatur werden die Begriffe der Verlustfunktion und Kostenfunktion als Synonyme verwendet. Wir werden im weiteren Verlauf jedoch die Definition nach Andrew Ng verwenden: Die Verlustfunktion (Loss Function) bezeichnet den Verlust eines einzelnen Trainingsbeispiels, während die Kostenfunktion (Cost Function) die Verluste der gesamten Trainingsbeispiele widerspiegelt. Die Gleichung der Kostenfunktion sieht folgendermaßen aus:

Das Ergebnis unserer Kostenfunktion ist also der Durchschnitt der einzelnen Verlustfunktionen. Die einzelnen Verlustfunktionen werden addiert und dann mit dem Faktor 1/m (m gleich Anzahl der Trainingsbeispiele) multipliziert, sodass sich so der Durchschnitt der einzelnen Verlustfunktionen ergibt. Mit der berechneten Kostenfunktion können wir die sogenannte Backpropagation starten, dies betrachten wir in den weiteren Artikeln.

In diesem Artikel haben wir uns angeschaut wie wir die Verlust- und Kostenfunktion eines neuronalen Netzes für die binäre Klassifikation berechnen. Diese benötigen wir, um die Gewichte unseres Modells im weiteren Verlauf aktualisieren zu können, um so bessere Ergebnisse zu erzielen. Ziel unseres Algorithmus ist es, am Ende des Trainings eine möglichst geringe Kostenfunktion zu haben. Wie das Aktualisieren dieser Gewichte funktioniert, bzw. was die Basis für diese Aktualisierungen ist, betrachten wir im nächsten Artikel.

Referenzen
Portrait of Blogger
Maximilian Both
<  Previous
Der Kern künstlicher neuronaler Netze – Was sich innerhalb eines einzelnen Neurons abspielt
Next  >
Das Gradientenverfahren (Gradient Descent) – Eine einfache Erklärung für das am häufigsten verwendete Optimierungsverfahren künstlicher neuronaler Netze

Kommentare