Was ist ein stochastischer Gradientenabstieg?

Autor

Anna Gutowska

AI Engineer, Developer Advocate

IBM

Was ist ein stochastischer Gradientenabstieg?

Der stochastische Gradientenabstieg (SGD) ist ein Optimierungsalgorithmus, der häufig verwendet wird, um die Leistung von Modellen für maschinelles Lernen zu verbessern. Er ist eine Variante des traditionellen Gradientenabstiegs-Algorithmus mit einer wichtigen Änderung: Anstatt sich bei der Berechnung des Gradienten bei jedem Schritt auf den gesamten Datensatz zu verlassen, verwendet SGD jeweils eine einzelne Datenprobe.

Gradientenabstieg

Der Gradientenabstieg (GD) ist ein Optimierungsalgorithmus, der eine Zielfunktion iterativ minimiert. Im Zusammenhang mit dem maschinellen Lernen (ML) ist der Gradientenabstieg von grundlegender Bedeutung, um die Leistung von überwachten Lernmodellen während ihrer Trainingsphase zu verbessern. Modelle für maschinelles Lernen sind. wie neuronale Netze, komplex, nicht linear und hochdimensional. Daher gibt es für solche Modelle keine normale Gleichung, die die optimalen Gewichtungen berechnen kann, anders als bei der linearen Regression. Stattdessen können u. a. Näherungsmethoden wie die Varianten des Gradientenabstiegs, die Newton-Methoden und die Erwartungsmaximierung verwendet werden.

Jedes Modell hat eine Verlustfunktion, manchmal auch Kostenfunktion genannt. Diese Funktion misst, wie weit die Vorhersagen eines Modells von den wahren Datenpunkten entfernt sind. Dies ist als Maßstab dafür zu betrachten, wie „falsch“ die Vorhersagen des Modells sind. Beispielsweise dient der mittlere quadratische Fehler häufig als Verlustfunktion bei Regressionsproblemen. Die Modelltrainingsphase ist darauf ausgelegt, die Parameterwerte zu finden, die diesen Verlust minimieren. Der Gradientenabstieg ist aus diesem Grund oft die Optimierungstechnik, die im Training verwendet wird. Der Algorithmus berechnet den Gradienten oder die Steigung des Verlusts in Bezug auf die Parameter des Modells. Mit diesem Gradienten wird dann ein Schritt in die entgegengesetzte Richtung gemacht, um den Verlust zu verringern. Die Lernrate (auch als Schrittgröße oder Alpha bezeichnet) ist die Größe der Schritte und sie bleibt für alle Modellparameter unverändert. Dieser Vorgang wiederholt sich, bis das Modell eine Konvergenz in der Nähe eines Minimums erreicht.

Grafische Darstellung der Konvergenz Grafische Darstellung der Konvergenz

Die Konvergenz findet idealerweise auf dem globalen Minimum statt. In der folgenden Visualisierung sehen Sie, dass der Verlustwert an einem lokalen Minimum niedriger ist als in der unmittelbaren Umgebung, aber nicht unbedingt der niedrigste Wert insgesamt. Das globale Minimum ist der absolut niedrigste Wert der Verlustfunktion in ihrem gesamten Bereich und stellt die bestmögliche Lösung für das Problem dar.

Lokales und globales Minimum im 3-dimensionalen Raum Lokales und globales Minimum im 3-dimensionalen Raum

Wenn die Lernrate nicht klein genug ist, wird der Algorithmus oft bei einem lokalen Minimum konvergieren. Ein gut gewählter Zinssatz ist unerlässlich, um die Verlustfunktion zu minimieren und eine Konvergenz auf einem globalen Minimum zu erreichen.

Einfluss der Lernrate auf die Konvergenz Einfluss der Lernrate auf die Konvergenz

Diese Visualisierung zeigt die Auswirkung der Lernrate auf die Konvergenz. Eine kleine Lernrate führt zu einer langsamen, aber stabilen Konvergenz (links), während eine hohe Lernrate zu Überschreitungen und Instabilität führen kann (rechts).

Von GD zu SGD

Das Hauptunterscheidungsmerkmal zwischen dem traditionellen Gradientenabstieg und dem stochastischen Gradientenabstieg besteht darin, dass SGD die Modellgewichtungen anhand jeweils eines einzelnen Trainingsbeispiels aktualisiert. Das Beispiel wird bei jeder Iteration nach dem Zufallsprinzip ausgewählt.1 Beim Gradientenabstieg wird der gesamte Datensatz verwendet, um den Gradienten vor jeder Parameteraktualisierung zu berechnen. Dieser Unterschied in der Datennutzung macht SGD viel kostengünstiger und einfacher für große Datensätze zu skalieren. Alternativ ist das Konvergenzverhalten von SGD stärker verrauscht als das Rauschen von GD, da der eine Beispieldatenpunkt möglicherweise keine gute Repräsentation des Datensatzes ist. Diese Fehlinterpretation führt zu einer Aktualisierung der Punkte in eine leicht „falsche“ Richtung. Diese Zufälligkeit macht SGD jedoch schneller und manchmal besser für nichtkonvexe Optimierungsprobleme, weil es flachen lokalen Minima oder Sattelpunkten entgehen kann.

Genau genommen wurde SGD ursprünglich definiert, um Parameter zu aktualisieren, indem jeweils nur ein Trainingsmuster verwendet wurde. Im modernen Sprachgebrauch wird der Begriff „SGD“ allgemein für „Minibatch-Gradientenabstieg“ verwendet, eine Variante des Gradientenabstiegs, bei der jeweils kleine Mengen an Trainingsdaten verwendet werden. Der größte Vorteil bei der Verwendung von Datenteilmengen anstelle einer einzelnen Stichprobe ist ein geringerer Rauschpegel, da der Gradient dem Durchschnitt der Verluste des Minibatchs entspricht. Aus diesem Grund ist der MiniBatch-Gradientenabstieg die Standardeinstellung beim Deep Learning. Im Gegensatz dazu wird eine strenge SGD in der Praxis nur selten angewendet. Diese Begriffe werden sogar von den meisten Bibliotheken für maschinelles Lernen wie PyTorch und TensorFlow zusammengeführt. Optimierer werden oft als „SGD“ bezeichnet, obwohl sie in der Regel Minibatches verwenden.

Die folgende Abbildung veranschaulicht deutlicher, wie die Vergrößerung der Stichprobengröße der Trainingsdaten Oszillationen und „Rauschen“ reduziert.

Varianten des Gradientenabstiegs

Es gibt mehrere andere Varianten von GD, die auf dem grundlegenden Gradientenabstieg aufbauen, indem sie Mechanismen zur Verbesserung von Geschwindigkeit, Stabilität und Konvergenz hinzufügen.

Momentumbasierte Methoden:

Durch die Akkumulation von Momentum in Dimensionen mit konsistenten Gradienten und die Dämpfung von Aktualisierungen in Dimensionen mit veränderlichen Gradienten trägt das Momentum dazu bei, dass SGD schneller und mit weniger Oszillationen konvergiert.2

SGD mit und ohne Momentum
  • Momentum-Gradientenabstieg: Beinhaltet einen „Geschwindigkeits“-Term, einen Durchschnitt der vorherigen Gradienten, der den jüngsten Gradienten mehr Gewicht beimisst. Dieser Ansatz reduziert Zickzackbewegungen oder Oszillationen und hilft dem Algorithmus, sich schneller in die richtige Richtung zu verschieben.

  • NAG (Nesterov beschleunigter Gradient): Eine verbesserte Momentum-Methode, die die Konvergenz beschleunigt und glättet, indem sie vor der Berechnung des Gradienten „vorausschaut“, wohin sich die Parameter bewegen. Mit anderen Worten, sie antizipiert den zukünftigen Gradienten und nutzt diese Information, um den aktuellen Aktualisierungsschritt zu informieren.3

Methoden zur adaptiven Lernrate:

Methoden mit adaptiver Lernrate wie AdaGrad und RMSProp sind insofern einzigartig, als dass sie die Lernrate für jeden Parameter einzeln anpassen. Dieser Ansatz steht im Gegensatz zu SGD-Methoden, die eine feste Lernrate für alle Parameter verwenden.

  • AdaGrad (adaptiver Gradientenalgorithmus): Passt die Lernrate für jeden Parameter basierend auf seinen vorherigen Gradienten an. Funktionen, die seltener vorkommen, erhalten höhere Lernraten, und häufige Funktionen erhalten niedrigere Raten. Dieser Ansatz bedeutet, dass seltene Funktionen schneller erlernt werden als bei SGD. Dank dieser adaptiven Lernrate eignet sie sich hervorragend für die Verarbeitung natürlicher Sprache (NLP) und Empfehlungssysteme mit geringer Datendichte, bei denen es eine große Diskrepanz in der Funktionshäufigkeit gibt.2
     

  • RMSProp (Root Mean Square Propagation): Eine weitere Technik zur Optimierung der adaptiven Lernrate, bei der die Lernrate für jeden Parameter mithilfe eines gleitenden Durchschnitts der aktuellen quadratischen Gradienten skaliert wird. Vergangenes Wissen über den Gradienten wird verworfen und nur das aktuelle Wissen über den Gradienten bleibt erhalten.4 Die Lernrate wird für Parameter mit kleinen Gradienten größer und kleiner für solche mit großen Gradienten. Diese Methode beseitigt das Problem der abnehmenden Lernrate bei AdaGrad. RMSProp hilft dabei, das Training im Deep Learning stabil zu halten, insbesondere für Modelle wie rekurrente neuronale Netze, und es funktioniert gut bei Problemen, bei denen sich das Ziel ständig ändert, wie z. B. beim verstärkenden Lernen.

Hybride Methoden:

  • Adam (adaptive Momentenschätzung): Kombiniert impulsbasierte GD mit RMSProp, indem sowohl die vergangenen Gradienten als auch der Durchschnitt der quadrierten Gradienten verfolgt werden.4 Diese Kombination ermöglicht eine schnelle Konvergenzrate, selbst bei verrauschten und spärlichen Datensätzen.3 Außerdem funktionieren die Standard-Hyperparameter wie eine Lernrate von 0,001 in vielen Frameworks auf Anhieb gut. Bei sehr großen Datensätzen kann SGD mit Momentum jedoch zu einer besseren Generalisierung führen. Die aggressiven Anpassungen pro Parameter von Adam können zu einer Überanpassung der Trainingsdaten oder zu strengen Minima führen, die sich nicht so gut verallgemeinern lassen.

SGD und andere GD-Varianten sind nützlich, wenn die Trainingszeit der limitierende Faktor ist.5

VarianteDaten, die pro Schritt verwendet werdenHauptmerkmalHäufige Verwendung
GDAlle DatenStabil, aber langsamKleine Datensätze
SGD1 Probe für klassische SGDLaut, aber schnellOnline-Lernen
Mini-Batch GDWenige ProbenAusgewogen und skalierbarDeep Learning
DynamikBatch/Mini-BatchBeschleunigt in die richtige RichtungNeuronale Netze
NAGBatch/Mini-BatchVorausschauendes MomentumSchnellere Konvergenz
AdaGradMini-BatchAdaptive LernratenSpärliche Daten
RMSPropsMini-BatchBehebt den AdaGrad-VerfallRNNs, tiefe Netze
AdamMini-BatchMomentum + RMSPropStandardauswahl heute

Die Mathematik verstehen

Das Ziel von SGD ist es, Parameter zu finden, θwelche die Vorhersagen unseres Modells so nahe wie möglich an den wahren Werten vornehmen y . Mit anderen Worten: Wir wollen die Verlustfunktion minimieren, L(θ) .

Im Falle der linearen Regression sind diese Parameter w (Gewichtung) und b (Verzerrung). In diesem Fall ist also Minimieren L(θ) das Gleiche wie Minimieren  L(w,b) .

 yi^=w·xi+b

L(w,b)=1ni=1n(yi-yi^)2

Eine häufig verwendete Analogie beim Erklären des Gradientenabstiegs ist, dass GD wie das Bergabgehen auf einem Berg ist, bis man ein Tal erreicht (der minimale Verlust). Stellen Sie sich den Gradienten der Verlustfunktion vor, L der bergauf zeigt, und um bergab zu gehen, müssen wir den umgekehrten Weg gehen.

Die allgemeine Aktualisierungsregel für einen Parameter θ  ist:

θ:=θ-η·θL(θ)

Wo η ist die Lernrate und θL(θ) wo der Gradient des Verlusts in Bezug auf θ .

SGD verwendet nur eine einzige, zufällig ausgewählte Stichprobe, (xi,yi) um den Gradienten anzunähern:

θL(θ)θ(xi,yi;θ)

Hinweis: Kleinschreibung (xi,yi;θ) stellt den Verlust eines einzelnen Trainingsbeispiels dar. Großschreibung hingegen L(θ) ist die Gesamtverlustfunktion (der Durchschnitt aller Einzelverluste im Datensatz). Diesen globalen Fehler versuchen wir im Training wirklich zu minimieren.

Beispiel: Lineare Regression mit SGD

Lassen Sie uns das Beispiel der linearen Regression mit SGD noch durchgehen.

Für ein Beispiel (xi,yi) lautet die Vorhersage:

 yi^=w·xi+b

Der lokale Verlust ist der quadratische Fehler für eine Stichprobe:

 (xi,yi;w,b)=(yi-(wxi+b))2

Während der Backpropagation werden die Parameter des Modells nun mithilfe der Kettenregel aktualisiert, die die Gradienten der Verlustfunktion in Bezug auf jeden Parameter berechnet.5 Die Gradienten (Ableitungen) sind:

 w=-2xi(yi-(wxi+b))

 b=-2(yi-(wxi+b))

Mit SGD aktualisieren wir jeden dieser Parameter w und b mithilfe der folgenden Regeln:

 w:=w-η·(-2xi(yi-(wxi+b)))

 b:=b-η·(-2(yi-(wxi+b)))

Anstatt einen starken durchschnittlichen Gradienten über den gesamten Datensatz zu berechnen, verwendet SGD eine leichte Zufallsschätzung.

Einfache Python-Implementierung von SGD

Bei der Arbeit mit Frameworks für maschinelles Lernen gibt es integrierte SGD-Optimierungsklassen, die man verwenden kann. Zum Beispiel, torch.optim.SGD  für PyTorchtf.keras.optimizers.SGD  für Keras, das in TensorFlow integriert ist und SGDRegressor  für Scikit-learn.

Lassen Sie uns zu Lernzwecken eine einfache Python-Implementierung von SGD von Grund auf durchgehen.

Wir wiederholen es noch einmal: Unser Ziel ist es, die besten Parameter (Modellgewichtungen) zu finden, welche die Verlustfunktion minimieren (ein Maß dafür, wie falsch unsere Vorhersagen sind). Wir aktualisieren jeweils eine Stichprobe oder eine sehr kleine Batch-Größe.

Zu Beginn können wir die Parameterwerte (Gewichtungen) zufällig initialisieren. Als Nächstes können wir einen zufälligen Datenpunkt auswählen (x,y) . Von dort aus berechnen wir die Vorhersage und den Fehler. Für diese einfache Demonstration versuchen wir, eine einfache Linie anzupassen: y=mx+b . Der nächste Schritt in diesem Prozess ist die Backpropagation, bei der die Gradienten der Verlustfunktion in Bezug auf die Parameter berechnet werden. Diese Gradienten (Ableitungen) werden dann verwendet, um die Parameter während des SGD-Optimierungsprozesses zu aktualisieren. Da der Gradient auf die Zunahmerichtung der Verlustfunktion zeigt, subtrahiert SGD jeden Gradienten von seinem jeweiligen aktuellen Parameterwert. Wir können uns dies so vorstellen, dass wir uns in die entgegengesetzte Richtung des Gradienten bewegen, um die Verlustfunktion zu verringern. Daher der „Abstieg“ beim stochastischen Gradientenabstieg. Wir wiederholen diese Schritte, bis eine feste Anzahl von Epochen erreicht ist oder bis der Verlust unter der Toleranz liegt. Letzteres würde bedeuten, dass sich der Verlust kaum verändert und wir die Zielfunktion nicht mehr verbessern. Mit anderen Worten: Wir hören auf, sobald der Algorithmus konvergiert.

import numpy as np 
 
def stochastic_gradient_descent(X, y, lr=0.01, epochs=100, tol=1e-6): 
    “”” 
    Perform Stochastic Gradient Descent (SGD) to fit a line y = w*x + b 
     
    Parameters: 
        X (ndarray): Input features 
        y (ndarray): Target values 
        lr (float): Learning rate (step size for updates) 
        epochs (int): Number of iterations through the dataset 
     
    Returns: 
        w (float): Learned weight 
        b (float): Learned bias 
    “”” 
    # Initialize parameters randomly 
    w = np.random.randn() 
    b = np.random.randn() 
     
    n = len(X) 
 
    prev_loss = float(‘inf’) 
     
    for epoch in range(epochs): 
        # Shuffle the data for each epoch 
        indices = np.arange(n) 
        np.random.shuffle(indices) 
         
        for i in indices: 
            xi = X[i] 
            yi = y[i] 
             
            # Prediction 
            y_pred = w * xi + b 
             
            # Compute gradients (derivatives) 
            dw = -2 * xi * (yi - y_pred)   # derivative wrt w 
            db = -2 * (yi - y_pred)        # derivative wrt b 
             
            # Update parameters 
            w -= lr * dw 
            b -= lr * db 
         
        
        # Compute loss at the end of the epoch 
        loss = np.mean((y - (w*X + b))**2) 
         
        # Check stopping condition 
        if abs(prev_loss - loss) < tol: 
            print(f”Stopped early at epoch {epoch+1}”) 
            break 
                 
        prev_loss = loss 
             
    return w, b

Anwendungen von SGD

SGD ist die gängigste Optimierungsmethode für das Training tiefer neuronaler Netze. Beim Deep Learning, einem Teilbereich des maschinellen Lernens innerhalb des weiter gefassten Bereichs der Data Science, besteht das Ziel darin, dass Computer die komplexe Entscheidungsfindung des menschlichen Gehirns simulieren. Traditionelle ML-Modelle verwenden einfache neuronale Netze, die aus einer oder zwei Schichten bestehen. Deep-Learning-Modelle hingegen verwenden drei oder mehr Schichten. In der Regel sind Hunderte oder Tausende von Schichten erforderlich, um die Modelle zu trainieren. Da sich SGD für große Trainingssätze leicht skalieren lässt, ist es häufig der bevorzugte Ansatz für das Training von neuronalen Netzen. Weitere Anwendungsgebiete des SGD-Trainings sind Ridge-Regression, regularisierte logistische Regression und die Optimierung der Hinge-Verlustfunktion, die in Support-Vektor-Maschinen (SVM) mit einem linearen Kernel verwendet wird.

Zusammenfassung

SGD ist eine Variante von GD, welche die Verlustfunktion eines maschinellen Lernmodells minimiert, indem jeweils eine einzelne Datenprobe verwendet wird. Dieser Ansatz unterscheidet sich von GD, das bei jedem Schritt auf den gesamten Datensatz angewiesen ist, um den Gradienten zu berechnen. Es gibt mehrere andere GD-Varianten, die als momentumbasierte oder adaptive Lernmethoden eingeteilt werden können. Der Momentum-Gradientenabstieg und der beschleunigte Nesterov-Gradient sind Beispiele für ersteres. Diese Methoden nutzen das akkumulierte Momentum in Dimensionen mit konsistenten Gradienten und gedämpften Aktualisierungen in Dimensionen mit wechselnden Gradienten. Dies trägt dazu bei, dass SGD schneller und mit weniger Oszillation konvergiert. Adaptive Lernratenmethoden wie AdaGrad und RMSProp passen die Lernrate für jeden Parameter individuell an, im Gegensatz zu traditionellem SGD, das eine feste Lernrate verwendet. Darüber hinaus bieten hybride Methoden wie Adam eine leistungsstarke Alternative, indem sie die Stärken von momentumbasiertem GD und RMSProp kombinieren.

Weiterführende Lösungen
IBM watsonx.ai

Trainieren, validieren, optimieren und implementieren Sie generative KI, Foundation Models und maschinelle Lernfunktionen mit IBM watsonx.ai, einem Studio der nächsten Generation für AI Builder in Unternehmen. Erstellen Sie KI-Anwendungen mit einem Bruchteil der Zeit und Daten.

Entdecken sie watsonx.ai
Lösungen im Bereich künstlicher Intelligenz

Setzen Sie KI in Ihrem Unternehmen ein – mit branchenführendem Fachwissen im Bereich KI und dem Lösungsportfolio von IBM an Ihrer Seite.

Erkunden Sie KI-Lösungen
KI-Beratung und -Services

Erfinden Sie kritische Workflows und Abläufe neu, indem Sie KI einsetzen, um Erfahrungen, Entscheidungsfindung in Echtzeit und den geschäftlichen Nutzen zu maximieren.

KI-Services entdecken
Machen Sie den nächsten Schritt

Profitieren Sie von einem einheitlichen Zugriff auf Funktionen, die den gesamten Lebenszyklus der KI-Entwicklung abdecken. Erstellen Sie leistungsstarke KI-Lösungen mit benutzerfreundlichen Oberflächen, Workflows und Zugriff auf branchenübliche APIs und SDKs.

watsonx.ai erkunden Live-Demo buchen
Fußnoten

1 Bottou, L. (2010). Large-Scale Machine Learning with Stochastic Gradient DescentLechevallier, Y., Saporta, G. (eds) Proceedings of COMPSTAT’2010. Physica-Verlag HD. 

Ruder, S. (2016). An overview of gradient descent optimization algorithms

Tian, Y., Zhang, Y., & Zhang, H. (2023). Recent Advances in Stochastic Gradient Descent in Deep LearningMathematics, 11(3), 682. 

Haji, S. H., & Abdulazeez, A. M. (2021). Comparison of optimization techniques based on gradient descent algorithm: A review. PalArch’s Journal of Archaeology of Egypt/Egyptology, 18(4), 2715-2743.

Bottou, L. (2012). Stochastic Gradient Descent TricksMontavon, G., Orr, G.B., Müller, KR. (eds) Neural Networks: Tricks of the Trade. Lecture Notes in Computer Science, Band 7700. Springer, Berlin, Heidelberg.