paint-brush
Warum quadratische Kostenfunktionen beim Training neuronaler Netze unwirksam sindvon@varunnakra1
2,637 Lesungen
2,637 Lesungen

Warum quadratische Kostenfunktionen beim Training neuronaler Netze unwirksam sind

von Varun Nakra6m2024/06/03
Read on Terminal Reader

Zu lang; Lesen

Eine der am häufigsten gestellten Fragen bei Wissensinterviews zum Thema Deep Learning ist: „Warum können wir keine quadratische Kostenfunktion verwenden, um ein neuronales Netzwerk zu trainieren?**“ Wir werden uns eingehend mit der Antwort darauf befassen. Es wird viel Mathematik erforderlich sein, aber nichts Verrücktes! Und ich werde die Dinge einfach, aber präzise halten.
featured image - Warum quadratische Kostenfunktionen beim Training neuronaler Netze unwirksam sind
Varun Nakra HackerNoon profile picture
0-item

Eine der am häufigsten gestellten Fragen bei Wissensinterviews zum Thema Deep Learning lautet: „ Warum können wir keine quadratische Kostenfunktion verwenden, um ein neuronales Netzwerk zu trainieren? “ In diesem Artikel besprechen wir die Antwort auf diese Frage. Es wird viel Mathematik erforderlich sein, aber nichts Verrücktes! Ich werde die Dinge einfach und präzise halten.


Beginnen wir mit der Betrachtung der allgemeinen Architektur eines neuronalen Netzwerks


Die allgemeine Architektur eines neuronalen Netzwerks

Neuronale Netzwerkarchitektur für die binäre Klassifizierung


Wir haben eine Reihe von Eingaben, die eine „Eingabeschicht“ bilden, eine Reihe von Neuronen in der „versteckten Schicht“ und ein Neuron, das eine „Ausgabeschicht“ für ein binäres Klassifizierungsproblem bildet. Für diese Frage gehen wir davon aus, dass wir es mit einem binären Klassifikator zu tun haben, sodass wir nur einen Ausgabewert aus dem Netzwerk haben.


Betrachten Sie nun die folgende Abbildung, in der wir die Eingabeebene grün, das Ausgabeneuron rot und ein Neuron der verborgenen Ebene orange hervorgehoben haben. Von allen Grüntönen bis hin zu Orange sehen wir, dass alle Eingaben mit dem orangefarbenen Neuron verbunden sind. Mit anderen Worten: Die „Aktivierung“ des orangefarbenen Neurons erfolgt durch die „Aggregation“ aller grünen Neuronen in der Eingabeebene. Dieser Prozess wird über alle Neuronen in allen Ebenen repliziert, bis wir das letzte rote Ausgabeneuron erreichen.



Was wäre, wenn wir das orange Neuron durch das rote Neuron ersetzen, d. h. die verborgene Schicht entfernen und das rote Neuron direkt mit den grünen Neuronen verbinden?



Wir erhalten Folgendes:

Für diese Frage gehen wir von der oben genannten „vereinfachten Architektur“ aus und das Ergebnis kann auch auf die vollständige Architektur verallgemeinert werden.


Lassen Sie uns nun Schritt für Schritt in die Mathematik einführen.


Was wir oben sehen, ist die grundlegende Gleichung zur „Gewichtsaktualisierung“ für ein neuronales Netzwerk. Ich habe die zusätzlichen Hyperparameter wie den Lernfaktor und die Unterabtastung (Min-Batch) usw. entfernt. w_k ist der Vektor der Gewichte und die Gewichte sind die „Parameter“ unseres neuronalen Netzwerkmodells. w_k umfasst einzelne Gewichte, die in einem Spaltenvektor zusammengefasst sind. Diese Gewichte sind mit den Eingaben des Modells verknüpft (das sind die grünen Neuronen in unserer Architektur). Wir haben eine Kostenfunktion C_i, wobei i = 1 bis n die Anzahl der Dateninstanzen in unserer Stichprobe ist. Die Kostenfunktion C ist der „Fehler“ zwischen der tatsächlichen Ausgabe y und der Ausgabe des neuronalen Netzwerks (rotes Neuron). Jede Dateninstanz erzeugt eine vorhergesagte Ausgabe im Gegensatz zu einer tatsächlichen Ausgabe, daher gibt es für jede Dateninstanz Kosten oder Fehler. Das Ziel des Modells besteht darin, diese Kostenfunktion im Durchschnitt über den gesamten Datensatz zu minimieren. Und wie wir wissen, beinhaltet der Minimierungsschritt die Bildung einer Ableitung in Bezug auf die Modellparameter (Gewichte). Dies tun wir mithilfe der partiellen Ableitung des Vektors w_k. Das bedeutet nur, dass die Kosten C ein Ausdruck/eine Aggregation der Gewichte w_1 bis w_q sind und wir zu jedem Gewicht w differenzieren und das in einem Vektor sammeln. Dies wird als negativer „Gradientenvektor“ bezeichnet. Er wird verwendet, um den Gewichtsvektor von der k-ten Iteration bis zur (k+1)-ten Iteration zu aktualisieren. Die Methode ist der stochastische Gradientenabstieg, aber das lassen wir in diesem Artikel weg.


Kurz gesagt lernt das neuronale Netzwerk durch eine Aktualisierung der Gewichte über den negativen Gradientenvektor, der über alle Stichproben gemittelt und für w_k berechnet wird. Dies hilft uns, die Kostenfunktion zu minimieren, und hilft dem Netzwerk, zu lernen und seine Genauigkeit zu verbessern. Es ist offensichtlich, dass das Lernen beendet ist, wenn die Aktualisierungen der Gewichte nicht stattfinden, weil der negative Gradient gegen Null geht. Dies bedeutet nicht unbedingt, dass wir das Minimum erreicht haben! Denn unsere Kostenfunktion ist hochkompliziert und wir müssen ein Minimum in einem mehrdimensionalen Raum finden. Daher könnte es viele lokale Minima geben, bei denen der Gradient Null ist und das Netzwerk mit dem Lernen aufhört. Darüber müssen wir uns bei diesem Problem jedoch keine Gedanken machen.


Schauen wir uns den folgenden Ausdruck an:


Dieser Ausdruck definiert z_i als gewichtete Summe der Eingaben x_ji. Beachten Sie, dass diese Eingaben die grünen Neuronen in unserer Architektur sind. Da wir keine versteckte Schicht haben, kombinieren wir die Eingaben x_ji und die Gewichte w_j und fügen einen Bias-Term hinzu, um z_i zu erhalten, was durch die Verbindungspfeile von den grünen Neuronen zum roten Neuron in unserer Architektur dargestellt wird. Da wir q Eingaben haben, haben wir x_j und w_j, wobei j = 1 bis q

Aber wir übergeben z_i nicht an das rote Neuron. Wir wenden eine „Aktivierungsfunktion“ darauf an. Diese Aktivierungsfunktion kann für verschiedene neuronale Netzwerke unterschiedlich sein. Für die Zwecke dieses Problems nehmen wir an, dass die Aktivierungsfunktion „Sigmoid“ oder „logistisch“ ist. Ich gehe hier davon aus, dass der Leser diese Funktion kennt, und fahre fort.


Als nächstes kommt unsere Hauptproblemstellung: Wie definieren wir die Kostenfunktion (C)? Es ist bekannt, dass die Kostenfunktion für die binäre Klassifizierung „Kreuzentropie“ ist, aber die Frage hier ist, warum sie nicht „quadratisch“ sein kann.


Definieren wir die Ausdrücke beider Kostenfunktionen:


Quadratische Kostenfunktion – Cross Entropy Kostenfunktion –


Während die quadratische Kostenfunktion unkompliziert ist (denken Sie an die Minimierung der kleinsten Quadrate zwischen der tatsächlichen Ausgabe y_i und der vorhergesagten Ausgabe a_i), können wir einige Erklärungen für die Kreuzentropie-Kostenfunktion anbieten. Dies ist vergleichbar mit der negativen Log-Likelihood in unseren Regressionsmodellen. Beachten Sie, dass außerhalb der Klammern ein negatives Vorzeichen steht, das verwendet wird, um die Kosten positiv zu halten (da a_i zwischen 0 und 1 liegt – eine Ausgabe von Sigmoid, daher ist der Term innerhalb der Klammern immer negativ). Beachten Sie auch, dass die Kosten sehr nahe an Null kommen, wenn a_i sehr nahe an y_i herankommt. Dies liegt daran, dass ln(a_i) ungefähr 0 ist, wenn y_i = 1 und a_i ~ 1. Ebenso ist ln(1-a_i) ungefähr 0, wenn y_i = 0 und a_i ~ 0. Daher hält diese Funktion die Kosten positiv und minimal, wenn das Modell gute Vorhersagen liefert. Dasselbe gilt jedoch auch für die quadratische Kostenfunktion. Wir verwenden sie jedoch nicht. Warum? Hier kommt die Erklärung


Wir kehren zur grundlegenden Gewichtsaktualisierungsgleichung zurück, die wir zuvor gesehen haben, und geben die quadratische Kostenfunktion ein. Wir erhalten das Folgende

Um die Dinge einfach zu halten, betrachten wir nur einen Datenpunkt, d. h. i = 1 und n = 1. Und wir differenzieren teilweise für jedes Gewicht w_j. Wir erhalten Folgendes:

Denken Sie daran, dass wir, da i = 1,

Wenn wir den Wert von z ersetzen, erhalten wir

Das heißt, unser Gradientenvektor, der für die Aktualisierung der Gewichte des Netzwerks verantwortlich ist, wird eine Ableitung der Sigmoidfunktion haben, wenn wir eine quadratische Kostenfunktion verwenden.


Schauen wir uns nun das Verhalten der Ableitung der Sigmoidfunktion an:


Aus der obigen Darstellung ist ersichtlich, dass die Ableitung, die die Steigung der Sigmoidfunktion darstellt, sich 0 nähert, sobald der Input z groß wird! Was bedeutet das? Das bedeutet, dass der Gradientenvektor Null ist, wenn der Aktivierungs-Input z groß ist. Daher wird das Netzwerk mit dem Lernen aufhören, da die Gewichte nicht aktualisiert werden. Denken Sie daran, dass dies nicht bedeutet, dass wir ein Minimum erreicht haben. Das bedeutet, dass wir an einem unerwünschten Punkt und in einem Funktionsraum feststecken, der weit vom Minimalwert entfernt sein könnte. Dies wird als „Lernverlangsamung“ bezeichnet. Dies tritt jedoch NICHT bei einer Kreuzentropie-Kostenfunktion auf.


Wir führen die gleiche Substitution mithilfe der Kreuzentropie-Kostenfunktion durch und erhalten Folgendes:

Es ist interessant festzustellen, dass der Begriff:

tritt auch im Gradienten für quadratische Kosten auf. Es gibt jedoch einen Trick, mit dem wir es vereinfachen werden. Der Gradient der Sigmoidfunktion kann wie folgt ausgedrückt werden

Wir setzen das in unseren ursprünglichen Ausdruck ein und erhalten Folgendes:

Das heißt, unser Gradientenvektor, der für die Aktualisierung der Gewichte des Netzwerks verantwortlich ist, hat keine Ableitung der Sigmoidfunktion, wenn wir eine Kreuzentropie-Kostenfunktion verwenden. Daher gibt es mit dieser Kostenfunktion keine Verlangsamung beim Lernen.


Zur besseren Darstellung stellen wir die Farbverläufe noch einmal nebeneinander:

Dies beantwortet unsere ursprüngliche Frage – wir verwenden nicht die quadratische Kostenfunktion, da dies zu einer Verlangsamung des Lernens führt.


Beachten Sie, dass die obige Analyse nur auf der Ausgabeebene (eines Neurons) durchgeführt wurde, sie kann jedoch auch auf ein allgemeines neuronales Netzwerk verallgemeinert werden!