AI 101
Was ist Gradientenabstieg?
Was ist ein Gradientenabstieg?
Wenn Sie darüber gelesen haben, wie neuronale Netze trainiert werden, ist Ihnen der Begriff „Gradientenabstieg“ mit ziemlicher Sicherheit schon einmal begegnet. Gradientenabstieg ist die primäre Methode zur Optimierung der Leistung eines neuronalen Netzwerks und zur Reduzierung der Verlust-/Fehlerrate des Netzwerks. Allerdings kann der Gradientenabstieg für Neulinge im maschinellen Lernen etwas schwer zu verstehen sein, und dieser Artikel soll Ihnen eine gute Vorstellung davon vermitteln, wie der Gradientenabstieg funktioniert.
Der Gradientenabstieg ist ein Optimierungsalgorithmus. Es wird verwendet, um die Leistung eines neuronalen Netzwerks zu verbessern, indem die Parameter des Netzwerks so angepasst werden, dass der Unterschied zwischen den Vorhersagen des Netzwerks und den tatsächlichen/erwarteten Werten des Netzwerks (als Verlust bezeichnet) so gering wie möglich ist. Der Gradientenabstieg nimmt die Anfangswerte der Parameter und verwendet rechnerische Operationen, um ihre Werte an die Werte anzupassen, die das Netzwerk so genau wie möglich machen. Sie müssen nicht viel über Analysis wissen, um zu verstehen, wie der Gradientenabstieg funktioniert, aber Sie müssen ein Verständnis für Gradienten haben.
Was sind Farbverläufe?
Nehmen Sie an, dass es ein Diagramm gibt, das die Fehlermenge darstellt, die ein neuronales Netzwerk macht. Der untere Teil des Diagramms stellt die Punkte mit dem geringsten Fehler dar, während der obere Teil des Diagramms dort ist, wo der Fehler am höchsten ist. Wir wollen uns vom oberen Rand des Diagramms nach unten bewegen. Ein Gradient ist lediglich eine Möglichkeit, die Beziehung zwischen Fehler und den Gewichten des neuronalen Netzwerks zu quantifizieren. Die Beziehung zwischen diesen beiden Dingen kann als Steigung dargestellt werden, wobei falsche Gewichte mehr Fehler erzeugen. Die Steilheit der Steigung/des Gefälles gibt an, wie schnell das Modell lernt.
Eine steilere Steigung bedeutet, dass große Fehlerreduzierungen erzielt werden und das Modell schnell lernt. Wenn die Steigung dagegen Null ist, befindet sich das Modell auf einem Plateau und lernt nicht. Wir können uns in Richtung weniger Fehler bewegen, indem wir einen Gradienten, eine Bewegungsrichtung (Änderung der Parameter des Netzwerks) für unser Modell berechnen.
Lassen Sie uns die Metapher ein wenig verschieben und uns eine Reihe von Hügeln und Tälern vorstellen. Wir wollen zum Fuß des Hügels gelangen und den Teil des Tals finden, der den geringsten Verlust darstellt. Wenn wir oben auf dem Hügel beginnen, können wir große Schritte den Hügel hinuntergehen und sicher sein, dass wir uns dem tiefsten Punkt im Tal nähern.
Je näher wir jedoch dem tiefsten Punkt im Tal kommen, desto kleiner werden unsere Schritte, sonst könnten wir über den wahren Tiefpunkt hinausschießen. Ebenso ist es möglich, dass bei der Anpassung der Gewichte des Netzwerks die Anpassungen tatsächlich dazu führen können, dass es sich weiter vom Punkt des geringsten Verlusts entfernt, und daher müssen die Anpassungen mit der Zeit kleiner werden. Im Zusammenhang mit dem Abstieg eines Hügels zu einem Punkt mit dem geringsten Verlust ist der Gradient ein Vektor/eine Anweisung, der den Weg detailliert beschreibt, den wir nehmen sollten und wie groß unsere Schritte sein sollten.
Da wir nun wissen, dass es sich bei Gradienten um Anweisungen handelt, die uns sagen, in welche Richtung wir uns bewegen sollen (welche Koeffizienten aktualisiert werden sollen) und wie groß die Schritte sind, die wir unternehmen sollten (wie stark die Koeffizienten aktualisiert werden sollen), können wir untersuchen, wie der Gradient berechnet wird.
Berechnen von Steigungen und Steigungen

Der Gradientenabstieg beginnt an einer Stelle mit hohem Verlust und führt durch mehrere Iterationen Schritte in Richtung des geringsten Verlusts durch, mit dem Ziel, die optimale Gewichtskonfiguration zu finden. Foto: Roman Suzi über Wikimedia Commons, CCY BY SA 3.0 (https://commons.wikimedia.org/wiki/File:Gradient_descent_method.png)
Um einen Gefälleabstieg durchführen zu können, müssen zunächst die Gefälle berechnet werden. In Ordnung um den Gradienten zu berechnen, benötigen wir die Verlust-/Kostenfunktion. Wir verwenden die Kostenfunktion, um die Ableitung zu bestimmen. In der Infinitesimalrechnung bezeichnet die Ableitung lediglich die Steigung einer Funktion an einem bestimmten Punkt. Wir berechnen also im Grunde nur die Steigung des Hügels basierend auf der Verlustfunktion. Wir bestimmen den Verlust, indem wir die Koeffizienten durch die Verlustfunktion laufen lassen. Wenn wir die Verlustfunktion als „f“ darstellen, können wir die Gleichung zur Berechnung des Verlusts wie folgt angeben (wir laufen die Koeffizienten einfach durch die gewählte Kostenfunktion):
Verlust = f(Koeffizient)
Anschließend berechnen wir die Ableitung bzw. bestimmen die Steigung. Die Ableitung des Verlusts wird uns Aufschluss darüber geben, in welche Richtung die Steigung steigt oder fällt, indem sie uns das entsprechende Vorzeichen gibt, um das wir unsere Koeffizienten anpassen können. Wir werden die entsprechende Richtung als „Delta“ darstellen.
Delta = derivative_function(loss)
Wir haben nun festgestellt, in welche Richtung es bergab zum Punkt mit dem geringsten Verlust geht. Dies bedeutet, dass wir die Koeffizienten in den Parametern des neuronalen Netzwerks aktualisieren und hoffentlich den Verlust reduzieren können. Wir aktualisieren die Koeffizienten auf der Grundlage der vorherigen Koeffizienten abzüglich der entsprechenden Wertänderung, die durch die Richtung (Delta) und einem Argument bestimmt wird, das das Ausmaß der Änderung (die Größe unseres Schritts) steuert. Das Argument, das die Größe des Updates steuert, heißt „Lernrate” und wir werden es als „Alpha“ darstellen.
Koeffizient = Koeffizient – (Alpha * Delta)
Wir wiederholen diesen Vorgang dann einfach, bis sich das Netzwerk um den Punkt des geringsten Verlusts angenähert hat, der nahe Null liegen sollte.
Es ist sehr wichtig, den richtigen Wert für die Lernrate (Alpha) zu wählen. Die gewählte Lernrate darf weder zu klein noch zu groß sein. Denken Sie daran, dass unsere Schritte kleiner werden müssen, wenn wir uns dem Punkt des geringsten Verlusts nähern, sonst werden wir über den wahren Punkt des geringsten Verlusts hinausschießen und auf der anderen Seite landen. Der Punkt des kleinsten Verlusts ist klein und wenn unsere Änderungsrate zu groß ist, kann der Fehler am Ende wieder zunehmen. Wenn die Schrittgrößen zu groß sind, pendelt die Netzwerkleistung weiterhin um den Punkt des geringsten Verlusts herum und überschießt ihn auf der einen und dann auf der anderen Seite. Wenn dies geschieht, wird das Netzwerk niemals auf die wirklich optimale Gewichtskonfiguration konvergieren.
Wenn die Lernrate dagegen zu gering ist, kann es möglicherweise außerordentlich lange dauern, bis das Netzwerk die optimalen Gewichte erreicht.
Arten des Gradientenabstiegs
Nachdem wir nun verstanden haben, wie der Gradientenabstieg im Allgemeinen funktioniert, werfen wir einen Blick auf einige der Unterschiede Arten des Gefälles.
Batch-Gradientenabstieg: Diese Form des Gradientenabstiegs durchläuft alle Trainingsbeispiele, bevor die Koeffizienten aktualisiert werden. Diese Art des Gradientenabstiegs ist wahrscheinlich die recheneffizienteste Form des Gradientenabstiegs, da die Gewichte erst aktualisiert werden, wenn der gesamte Stapel verarbeitet wurde, was bedeutet, dass insgesamt weniger Aktualisierungen vorgenommen werden. Wenn der Datensatz jedoch eine große Anzahl von Trainingsbeispielen enthält, kann der Batch-Gradientenabstieg dazu führen, dass das Training lange dauert.
Stochastischer Gradientenabstieg: Beim stochastischen Gradientenabstieg wird für jede Iteration des Gradientenabstiegs und der Parameteraktualisierung nur ein einziges Trainingsbeispiel verarbeitet. Dies geschieht für jedes Trainingsbeispiel. Da nur ein Trainingsbeispiel verarbeitet wird, bevor die Parameter aktualisiert werden, konvergiert es tendenziell schneller als Batch Gradient Descent, da Aktualisierungen früher vorgenommen werden. Da der Vorgang jedoch für jedes Element im Trainingssatz durchgeführt werden muss, kann die Fertigstellung recht lange dauern, wenn der Datensatz groß ist. Daher ist die Verwendung eines der anderen Gradientenabstiegstypen vorzuziehen.
Mini-Batch-Gradientenabstieg: Beim Mini-Batch-Gradientenabstieg wird der gesamte Trainingsdatensatz in Unterabschnitte aufgeteilt. Es erstellt kleinere Mini-Batches, die durch das Netzwerk laufen, und wenn der Mini-Batch zur Berechnung des Fehlers verwendet wurde, werden die Koeffizienten aktualisiert. Der Mini-Batch-Gradientenabstieg stellt einen Mittelweg zwischen dem stochastischen Gradientenabstieg und dem Batch-Gradientenabstieg dar. Das Modell wird häufiger aktualisiert als im Fall von Batch Gradient Descent, was eine etwas schnellere und robustere Konvergenz der optimalen Parameter des Modells bedeutet. Es ist auch recheneffizienter als Stochastic Gradient Descent










