Werfen Sie einen umfassenden Blick auf den gradient descent – einen der beliebtesten Algorithmen des maschinellen Lernens.
Gradient descent ist derzeit die bei weitem beliebteste Optimierungsstrategie im Bereich maschinelles Lernen und Deep Learning . Sie wird beim Trainieren von Datenmodellen verwendet, kann mit jedem Algorithmus kombiniert werden und ist leicht zu verstehen und umzusetzen. Jeder, der mit maschinellem Lernen arbeitet, sollte das Konzept verstehen. Wir gehen durch, wie der gradient descent salgorithmus funktioniert, welche Typen davon heute verwendet werden und welche Vorteile und Nachteile er bietet.
Einführung in den gradient descent
Gradient descent ist ein Optimierungsalgorithmus , der beim Trainieren eines maschinellen Lernmodells verwendet wird. Er basiert auf einer konvexen Funktion und optimiert ihre Parameter iterativ, um eine gegebene Funktion auf ihr lokales Minimum zu minimieren.
Sie beginnen mit der Definition der Werte des Anfangsparameters. Von dort aus verwendet der gradient descent salgorithmus die Infinitesimalrechnung, um die Werte iterativ so anzupassen, dass sie die gegebene Kostenfunktion minimieren. Um dieses Konzept vollständig zu verstehen, ist es wichtig, über Gradienten Bescheid zu wissen.
Was ist ein Farbverlauf?
Ein Gradient misst einfach die Änderung aller Gewichte im Hinblick auf die Änderung des Fehlers. Sie können sich einen Gradienten auch als die Steigung einer Funktion vorstellen. Je höher der Gradient, desto steiler die Steigung und desto schneller kann ein Modell lernen. Wenn die Steigung jedoch Null ist, hört das Modell auf zu lernen. Mathematisch ausgedrückt ist ein Gradient eine partielle Ableitung in Bezug auf seine Eingaben.
Stellen Sie sich einen Mann mit verbundenen Augen vor, der mit möglichst wenigen Schritten auf die Spitze eines Hügels klettern möchte. Er könnte den Aufstieg mit sehr großen Schritten in die steilste Richtung beginnen, was er tun kann, solange er sich noch nicht in der Nähe des Gipfels befindet. Je näher er dem Gipfel kommt, desto kleiner werden seine Schritte, um ein Überschreiten des Gipfels zu vermeiden. Dieser Prozess kann mathematisch mithilfe des Gradienten beschrieben werden.
Stellen Sie sich vor, das Bild unten zeigt unseren Hügel von oben und die roten Pfeile sind die Schritte unseres Bergsteigers. Stellen Sie sich einen Gradienten in diesem Zusammenhang als einen Vektor vor, der die Richtung des steilsten Schrittes angibt, den der Mann mit der Augenbinde machen kann, und auch, wie lang dieser Schritt sein sollte.
Beachten Sie, dass der Gradient von X0 bis X1 viel länger ist als der von X3 bis X4. Dies liegt daran, dass die Steilheit/Neigung des Hügels, die die Länge des Vektors bestimmt, geringer ist. Dies stellt das Beispiel des Hügels perfekt dar, da der Hügel weniger steil wird, je höher er steigt. Daher geht ein reduzierter Gradient mit einer reduzierten Steigung und einer reduzierten Schrittweite für den Bergsteiger einher.
So funktioniert Gradient descent
Anstatt einen Hügel hinaufzuklettern, können Sie sich gradient descent als eine Wanderung in den Talgrund vorstellen. Dies ist eine bessere Analogie, da es sich um einen Minimierungsalgorithmus handelt, der eine gegebene Funktion minimiert.
Die folgende Gleichung beschreibt, was der gradient descent salgorithmus macht: b ist die nächste Position unseres Bergsteigers, während a seine aktuelle Position darstellt. Das Minuszeichen bezieht sich auf den Minimierungsteil des gradient descent salgorithmus. Das Gamma in der Mitte ist ein Wartefaktor und der Gradiententerm ( Δf(a) ) ist einfach die Richtung des steilsten Abstiegs.
Diese Formel verrät uns also im Grunde, zu welcher Position wir als nächstes gehen müssen, also in die Richtung des steilsten Abstiegs. Um das Konzept noch deutlicher zu machen, sehen wir uns ein weiteres Beispiel an.
Stellen Sie sich vor, Sie haben ein maschinelles Lernproblem und möchten Ihren Algorithmus mit gradient descent trainieren, um Ihre Kostenfunktion J ( w , b ) zu minimieren und ihr lokales Minimum durch Anpassen ihrer Parameter ( w und b ) zu erreichen. Das Bild unten zeigt die horizontalen Achsen, die die Parameter ( w und b ) darstellen, während die Kostenfunktion J ( w , b ) auf den vertikalen Achsen dargestellt ist. Der gradient descent ist eine konvexe Funktion .
Wir wissen, dass wir die Werte von w und b finden wollen , die dem Minimum der Kostenfunktion entsprechen (mit dem roten Pfeil markiert). Um mit der Suche nach den richtigen Werten zu beginnen, initialisieren wir w und b mit einigen Zufallszahlen. Der gradient descent beginnt dann an diesem Punkt (irgendwo oben in unserer Abbildung) und geht einen Schritt nach dem anderen in die steilste Abwärtsrichtung (d. h. von oben nach unten in der Abbildung), bis er den Punkt erreicht, an dem die Kostenfunktion so klein wie möglich ist.
gradient descent-Lernrate
Wie groß die Schritte des gradient descent in Richtung des lokalen Minimums sind, wird durch die Lernrate bestimmt, die wiederum ausmacht, wie schnell oder langsam wir uns den optimalen Gewichten nähern.
Damit der gradient descent salgorithmus das lokale Minimum erreicht, müssen wir die Lernrate auf einen geeigneten Wert einstellen, der weder zu niedrig noch zu hoch ist. Dies ist wichtig, denn wenn die erforderlichen Schritte zu groß sind, erreicht er möglicherweise nicht das lokale Minimum, da er zwischen der konvexen Funktion des gradient descent hin- und herspringt (siehe linkes Bild unten). Wenn wir die Lernrate auf einen sehr kleinen Wert einstellen, erreicht der gradient descent schließlich das lokale Minimum, aber das kann eine Weile dauern (siehe rechtes Bild).
Aus diesem Grund sollte die Lernrate nie zu hoch oder zu niedrig sein. Sie können überprüfen, ob Ihre Lernrate gut ist, indem Sie sie in einem Diagramm darstellen.
So lösen Sie Herausforderungen beim gradient descent
Eine gute Möglichkeit, um sicherzustellen, dass der gradient descent salgorithmus ordnungsgemäß ausgeführt wird, besteht darin, die Kostenfunktion während der Optimierung aufzuzeichnen. Tragen Sie die Anzahl der Iterationen auf der X-Achse und den Wert der Kostenfunktion auf der Y-Achse ein. Auf diese Weise können Sie den Wert Ihrer Kostenfunktion nach jeder Iteration des gradient descent sehen und leicht feststellen, wie angemessen Ihre Lernrate ist. Sie können einfach verschiedene Werte dafür ausprobieren und sie alle zusammen aufzeichnen. Das linke Bild unten zeigt ein solches Diagramm, während das Bild rechts den Unterschied zwischen guten und schlechten Lernraten veranschaulicht.
Wenn der gradient descent salgorithmus ordnungsgemäß funktioniert, sollte die Kostenfunktion nach jeder Iteration abnehmen.
Wenn der gradient descent die Kostenfunktion nicht mehr senken kann und mehr oder weniger auf demselben Niveau bleibt, ist er konvergiert. Die Anzahl der Iterationen, die der gradient descent zur Konvergenz benötigt, kann manchmal sehr unterschiedlich sein. Es können 50 Iterationen, 60.000 oder vielleicht sogar 3 Millionen erforderlich sein, wodurch die Anzahl der Iterationen bis zur Konvergenz im Voraus schwer abzuschätzen ist.
Es gibt einige Algorithmen, die automatisch feststellen können, ob der gradient descent konvergiert ist. Sie müssen jedoch vorher einen Schwellenwert für die Konvergenz definieren, der ebenfalls schwer abzuschätzen ist. Aus diesem Grund sind einfache Diagramme der bevorzugte Konvergenztest.
Ein weiterer Vorteil der Überwachung des gradient descent über Diagramme besteht darin, dass wir leicht erkennen können, wenn er nicht richtig funktioniert, beispielsweise wenn die Kostenfunktion zunimmt. In den meisten Fällen ist der Grund für eine zunehmende Kostenfunktion beim gradient descent eine zu hohe Lernrate.
Wenn die Lernkurve im Diagramm nur auf und ab geht, ohne wirklich einen niedrigeren Punkt zu erreichen, versuchen Sie, die Lernrate zu verringern. Wenn Sie mit dem gradient descent bei einem bestimmten Problem beginnen, versuchen Sie es einfach mit 0,001, 0,003, 0,01, 0,03, 0,1, 0,3, 1 usw. als Lernraten und schauen Sie, welche die beste Leistung bringt micromanagement.
Arten des gradient descent
Es gibt drei gängige Arten des gradient descent, die sich hauptsächlich in der verwendeten Datenmenge unterscheiden:
Batch-gradient descent
Beim Batch-gradient descent, auch Vanilla-gradient descents genannt, wird der Fehler für jedes Beispiel im Trainingsdatensatz berechnet, aber erst nachdem alle Trainingsbeispiele ausgewertet wurden, wird das Modell aktualisiert. Dieser gesamte Prozess ist wie ein Zyklus und wird als Trainingsepoche bezeichnet.
Einige Vorteile des Batch-gradient descents sind seine Rechenleistung: Er erzeugt einen stabilen Fehlergradienten und eine stabile Konvergenz. Einige Nachteile sind, dass der stabile Fehlergradient manchmal zu einem Konvergenzzustand führen kann, der nicht der beste ist, den das Modell erreichen kann. Außerdem muss der gesamte Trainingsdatensatz im Speicher vorhanden und für den Algorithmus verfügbar sein.
Stochastischer gradient descents
Im Gegensatz dazu führt der stochastische gradient descents (SGD) dies für jedes Trainingsbeispiel innerhalb des Datensatzes aus, d. h. er aktualisiert die Parameter für jedes Trainingsbeispiel einzeln. Je nach Problem kann SGD dadurch schneller sein als der Batch-gradient descents. Ein Vorteil ist, dass die häufigen Aktualisierungen uns eine ziemlich detaillierte Verbesserungsrate ermöglichen.
Die häufigen Aktualisierungen sind jedoch rechenintensiver als der Batch-gradients descent sansatz. Darüber hinaus kann die Häufigkeit dieser Aktualisierungen zu verrauschten Gradienten führen, was dazu führen kann, dass die Fehlerrate schwankt, anstatt langsam zu sinken.
Mini-Batch-gradients descent
Mini-Batch-gradient descents ist die bevorzugte Methode, da es sich dabei um eine Kombination der Konzepte von SGD und Batch-gradient descents handelt. Dabei wird der Trainingsdatensatz einfach in kleine Batches aufgeteilt und für jeden dieser Batches eine Aktualisierung durchgeführt. Dadurch wird ein Gleichgewicht zwischen der Robustheit des stochastischen gradient descents und der Effizienz des Batch-gradient descents geschaffen.
Übliche Mini-Batch-Größen liegen zwischen 50 und 256, aber wie bei jeder anderen Technik des maschinellen Lernens gibt es keine klare Regel, da sie je nach Anwendung unterschiedlich ist. Dies ist der Standardalgorithmus beim Trainieren eines neuronalen Netzwerks und die häufigste Art des gradient descents im Deep Learning .