Das Gradientenverfahren ist eine Lösungsanleitung für Optimierungsprobleme mithilfe dessen man das Minimum oder Maximum einer Funktion finden kann. Dieses Verfahren wird im Bereich des Machine Learnings für das Trainieren von Modellen genutzt und ist dort unter dem Namen Gradientenabstiegsverfahren (Englisch: Gradient Descent Method) bekannt.
Wofür nutzt man das Gradientenabstiegsverfahren?
Das Ziel von Künstlicher Intelligenz ist es ganz allgemein einen Algorithmus zu erschaffen, der mit hilfe von Eingabewerten möglichst genau eine Vorhersage treffen kann, also dem tatsächlichen Ergebnis sehr nahe kommt. Die Differenz zwischen der Vorhersage und der Realität wird von der sogenannten Verlustfunktion in einen mathematischen Wert gewandelt. Das Gradientenverfahren wird genutzt, um das Minimum der Verlustfunktion zu finden, denn dann ist der optimale Trainingszustand des Modells gefunden.
Das Training des KI Algorithmus dient dann dazu, die Verlustfunktion so weit wie möglich zu minimieren, um eine gute Vorhersagequalität zu haben. Das Künstliche Neuronale Netzwerk beispielsweise ändert in jedem Trainingsschritt die Gewichtung der einzelnen Neuronen, um sich so dem tatsächlichen Wert anzunähern. Um das Minimierungsproblem der Verlustfunktion gezielt angehen zu können und nicht zufällig die Werte der einzelnen Gewichte zu ändern, werden spezielle Optimierungsverfahren genutzt. Im Bereich von Künstlicher Intelligenz kommt am Häufigsten das sogenannte Gradientenabstiegsverfahren zum Einsatz.
Warum nähern wir uns dem Minimum und berechnen es nicht einfach?
Aus dem mathematischen Teilbereich Analysis wissen wir, dass ein Minimum oder Maximum bestimmt werden kann, indem wir die erste Ableitung gleich null setzen und dann prüfen, ob an dieser Stelle die zweite Ableitung ungleich 0 ist. Theoretisch könnten wir dieses Verfahren auch für die Verlustfunktion des Künstlichen Neuronalen Netzwerkes anwenden und das Minimum damit genau berechnen.
In höheren mathematischen Dimensionen mit vielen Variablen ist die genaue Berechnung jedoch sehr aufwendig und würde viel Rechenzeit und vor allem Ressourcen in Anspruch nehmen. In einem Neuronalen Netzwerk können wir schnell mehrere Millionen Neuronen haben und somit auch entsprechend mehrere Millionen Variablen in der Funktion.
Deshalb verwenden wir Näherungsverfahren, um uns dem Minimum schnell annähern zu können und uns nach einigen Wiederholungen sicher sein können, einen Punkt nahe dem Minimum gefunden zu haben.
Was ist die Grundidee von Gradient Descent?
Hinter dem Gradientenverfahren steht ein mathematisches Prinzip, das besagt, dass der Gradient einer Funktion (die Ableitung einer Funktion mit mehr als einer unabhängigen Variablen) in die Richtung zeigt, in die die Funktion am stärksten steigt. Entsprechend gilt auch das Gegenteil, also, dass die Funktion in die entgegengesetzte Richtung des Gradienten am stärksten abfällt.
Beim Gradient Descent Verfahren versuchen wir, möglichst schnell das Minimum der Funktion finden zu können. Im Fall von Künstlicher Intelligenz suchen wir das Minimum der Verlustfunktion und wollen diesem sehr schnell nahe kommen. Wenn wir also in die negative Richtung des Gradienten gehen, wissen wir, dass die Funktion am stärksten abfällt und wir somit auch dem Minimum am schnellsten näher kommen.
Für die Funktion f(x) = x² haben wir an einigen Stellen die Tangenten mit der Steigung f’(x) gezeichnet. In diesem Beispiel liegt das Minimum an der Stelle x = 0. An der Stelle x = -3 hat die Tangente eine Steigung von -6. Laut dem Gradientenverfahren sollten wir uns in die negative Richtung des Gradienten bewegen, um dem Minimum näher zu kommen, also – (- 6) = 6. Das bedeutet, der x-Wert des Minimum ist größer als -3. An der Stelle x = 1 hingegen hat die Ableitung f’(1) einen Wert von 2. Die entgegengesetzte Richtung des Gradienten wäre also -2, das heißt der x-Wert des Minimums ist kleiner als x = 1. Dadurch kommen wir schrittweise dem Minimum näher.
In Kurzform besagt das Gradientenverfahren:
- Ist die Ableitung der Funktion an der Stelle x negativ, gehen wir vorwärts in x-Richtung, um das Minimum zu finden.
- Ist die Ableitung der Funktion an der Stelle x positiv, gehen wir rückwärts in x-Richtung, um das Minimum zu finden.
Bei einer Funktion mit mehr als einer Variablen, betrachten wir dann nicht nur die Ableitung, sondern den Gradienten. Dieser ist im mehrdimensionalen Raum das Äquivalent zur Ableitung im zweidimensionalen Raum.
Wofür benötigen wir die Learning Rate?
Das Gradientenverfahren gibt uns für jede Stelle die entsprechende Richtung vor. Sie sagt uns jedoch nicht, wie weit wir die entsprechende Richtung gehen sollen. In unserem Beispiel können wir mit Hilfe des Gradientenverfahrens nicht wissen, ob wir an der Stelle x = -3 einen, zwei oder sogar drei Schritte in die positive x-Richtung gehen sollen.
Mit Hilfe der Learning Rate können wir einstellen, wie groß jeder Schritt sein soll. Es gibt dabei Ansätze in denen sich der Wert der Learning Rate in jedem Schritt ändern kann, in den meisten Fällen ist er jedoch stetig und beträgt beispielsweise 0,001.
Wie finden wir die optimale Lernrate?
Die Entscheidung für die Größe der Lernrate scheint eigentlich einfach. Mit einer kleinen Lernrate nähern wir uns nur sehr langsam dem Minimum an, vor allem dann wenn unser Ausgangspunkt sehr weit vom Extrempunkt entfernt ist. Wenn wir hingegen eine größere Lernrate nutzen, bewegen wir uns möglicherweise schneller auf das Minimum zu. Leider ist es nicht so einfach.
Es kann beispielsweise der Fall eintreten, dass der Ausgangspunkt bereits sehr nahe am Minimum ist, ohne dass wir davon wissen. Dann ist eine große Lernrate möglicherweise zu groß, sodass wir nie am Minimum ankommen. Wenn wir bei der Funktion f(x) = x² beim Punkt x=1 starten und eine Lernrate > 1 nutzen, werden wir nie beim Minimum x = 0 ankommen können, da der Abstand zum Minimum nur 1 beträgt.
Somit ist die Wahl einer geeigneten Lernrate nicht sehr einfach zu beantworten und es gibt keinen optimalen Wert, den wir nutzen können. Im Machine Learning gibt es für solche Parameter einen Namen: Hyperparameter. Das sind Parameter innerhalb des Modells deren Wert für den Erfolg oder Misserfolg ausschlaggebend ist. Das heißt es kann passieren, dass ein schlecht performendes Modell durch Veränderung eines Hyperparameters deutlich besser wird und umgekehrt. Die Lernrate ist einer von vielen Hyperparametern und sollte in verschiedenen Trainingsdurchläufen einfach variiert werden, bis man beim optimalen Wert für das Modell angekommen ist.
Welche Probleme können bein Gradient Descent Verfahren auftreten?
Es gibt zwei große Problemfelder mit denen wir bei der Nutzung des Gradientenverfahrens möglicherweise umgehen müssen:
- Wir landen bei einem lokalen Minimum der Funktion statt bei einem globalen: Funktionen mit vielen Variablen haben sehr wahrscheinlich nicht nur ein Minimum. Wenn eine Funktion mehrere Extremwerte, wie beispielsweise Minima hat, sprechen wir bei dem Mininum mit dem niedrigsten Funktionswert vom globalen Minimum. Die anderen Minima sind sogenannte lokale Minima. Das Gradientenverfahren bewahrt uns nicht automatisch davor ein lokales Minimum zu finden statt des globalen. Um diesem Problem zu entgehen können wir jedoch viele verschiedene Startpunkte testen, um zu sehen, ob alle in Richtung desselben Minimums konvergieren.
- Ein weiteres Problem kann auftreten, wenn wir das Gradient Descent Verfahren im Zusammenhang mit Neuronalen Netzwerken und deren Verlustfunktion nutzen. In speziellen Fällen, bspw. bei der Nutzung von Feedforward Netzwerken, kann es dazu kommen, dass der Gradient instabil ist, also entweder sehr groß oder sehr klein wird und gegen 0 tendiert. Mit Hilfe anderer Aktivierungsfunktionen der Neuronen oder bestimmten initialen Werten der Gewichte kann man diesen Effekten vorbeugen. Dies sprengt jedoch den Rahmen dieses Beitrags.
Wie funktionert das Gradientenverfahren im mehrdimensionalen Raum?
Für unser anfängliches Beispiel f(x) = x² war die Extremstelle sehr einfach errechenbar und auch ohne Gradientenverfahren bestimmbar. Mit mehr als einer Variablen ist das schon nicht mehr so einfach möglich. Nehmen wir beispielsweise die Funktion f(x,y) = x² + y² und versuchen uns dem Minimum in wenigen Schritten anzunähern.
1. Bestimmung des Startpunktes: Wenn wir das Gradientenverfahren anwenden wollen, benötigen wir einen Startpunkt. Es gibt viele Methoden, um einen optimalen Startpunkt zu finden, darum soll es aber in diesem Beitrag nicht im Detail gehen. Wir starten unsere Suche einfach beim Punkt P(2,1).
2. Errechnen der Ableitung / Gradient: Als nächstes müssen wir die erste Ableitung der Funktion errechnen. Im mehrdimensionalen Raum spricht man von einem Gradienten. Das ist der Vektor aus allen Ableitungen der Variablen. In unserem Fall besteht die Funktion aus zwei Variablen, weshalb wir zwei Ableitungen bilden müssen. Zum einen die erste Ableitung mit x als Variable und zum anderen die erste Ableitung mit y als Variable:
\(\) \[f_x(x,y) = 2x \\ f_y(x,y) = 2y \]
Der Gradient ist dann einfach der Vektor mit der Ableitung nach x als ersten Eintrag und der Ableitung nach y als zweiten Eintrag:
\(\) \[\nabla f(x,y) = \begin{bmatrix}
2x \\
2y \end{bmatrix} \]
3. Einsetzen des Ausgangspunktes: Nun setzen wir unseren Startpunkt in den Gradienten ein:
\(\) \[\nabla f(2,1) = \begin{bmatrix}
2*2 \\
2*1 \end{bmatrix} =
\begin{bmatrix}
4 \\
2 \end{bmatrix}
\]
4. Negativen Gradienten mit Schrittweite zum Startpunkt addieren: Im letzten Schritt gehen wir nun in die negative Richtung des Gradienten von unserem Startpunkt aus. Das heißt wir ziehen den Gradienten multipliziert mit der Lernrate von unserem Ausgangspunkt ab. Bei einer Lernrate von 0,01 bedeutet das:
\(\) \[ P_2(x,y) = \begin{bmatrix}
2 \\
1 \end{bmatrix} – 0,01 *
\begin{bmatrix}
4 \\
2 \end{bmatrix} =
\begin{bmatrix}
1,96 \\
0,98 \end{bmatrix}
\]
Somit haben wir nun unseren neuen Punkt P₂(1,96; 0.98) mit dem wir das Verfahren wieder von neuem beginnen können, um sich mit dem Minimum weiter anzunähern.
Das solltest Du mitnehmen
- Das Gradientenverfahren wird genutzt, um sich dem Minimum einer Funktion so schnell wie möglich zu nähern.
- Dazu wird geht man iterativ an einer Stelle immer in die negative Richtung des Gradienten. Die Schrittweite wird von der Learning Rate bestimmt.
- Das Gradientenverfahren kann verschiedene Probleme aufweisen, die jedoch mit hilfe von verschiedener Aktivierungsfunktionen oder initialen Gewichten behoben werden können.
Was ist blockchain-based AI?
Entdecken Sie das Potenzial der blockchain-based AI in diesem aufschlussreichen Artikel über Künstliche Intelligenz und Blockchain.
Was ist Boosting im Machine Learning?
Boosting: Eine Ensemble-Technik zur Modellverbesserung. Lernen Sie in unserem Artikel Algorithmen wie AdaBoost, XGBoost, uvm. kennen.
Was ist Feature Engineering?
Meistern Sie die Kunst des Feature Engineering: Steigern Sie die Modellleistung und -genauigkeit mit der Datentransformationen!
Was sind N-grams?
Die Macht des NLP: Erforschen Sie n-Grams in der Textanalyse, Sprachmodellierung und verstehen Sie deren Bedeutung im NLP.
Was ist das No-Free-Lunch Theorem (NFLT)?
Entschlüsselung des No-Free-Lunch-Theorems: Implikationen und Anwendungen in ML und Optimierung.
Was ist Automated Data Labeling?
Erschließen Sie die Effizienz des maschinellen Lernens mit Automated Data Labeling. Entdecken Sie die Vorteile, Techniken und Tools.
Andere Beiträge zu dem Thema Gradient Descent
- Eine mathematischere Herleitung des Gradientenverfahrens findet ihr hier.
- Der Gradient Descent Algorithmus wird hier erklärt am Beispiel eines Neuronalen Netzwerkes bei den Kollegen des Data Science Blogs.
Niklas Lang
Seit 2020 bin ich als Machine Learning Engineer und Softwareentwickler tätig und beschäftige mich leidenschaftlich mit der Welt der Daten, Algorithmen und Softwareentwicklung. Neben meiner Arbeit in der Praxis unterrichte ich an mehreren deutschen Hochschulen, darunter die IU International University of Applied Sciences und die Duale Hochschule Baden-Württemberg, in den Bereichen Data Science, Mathematik und Business Analytics.
Mein Ziel ist es, komplexe Themen wie Statistik und maschinelles Lernen so aufzubereiten, dass sie nicht nur verständlich, sondern auch spannend und greifbar werden. Dabei kombiniere ich praktische Erfahrungen aus der Industrie mit fundierten theoretischen Grundlagen, um meine Studierenden bestmöglich auf die Herausforderungen der Datenwelt vorzubereiten.