Gefälleabstieg

Aktualisiert am September 24, 2024 Lesedauer: 4 Minuten


Einführung

Stellen Sie sich vor, wir haben eine Funktion f(x)f(x) und möchten ihr Minimum ermitteln. Was würden Sie tun?

Einfach, oder? Wir müssen nur die folgende Gleichung lösen:

f(x)=0f'(x) = 0

Die Sache ist, dass es nicht immer einfach ist, die Formel von ff' zu finden, da sie insbesondere beim Deep Learning, wo wir mit komplexen Funktionen arbeiten, extrem kompliziert ist. Wir müssen also eine andere Methode finden, die uns das Minimum einer Funktion liefern kann, ohne die Formel der Ableitung ff' finden zu müssen.

Lassen Sie uns etwas Intuition aufbauen

Nehmen wir an, wir haben eine Funktion f mit dem entsprechenden Graphen:

Graph 1

Beginnen wir mit einem zufälligen Punkt x0x_{0}. Das Ziel besteht darin, diesen Punkt zu verschieben und ihn immer näher an xx* heranzuführen, sodass f(f'(x*)=0) = 0 ist. Das Problem lässt sich also in zwei Teile unterteilen:

  • In welche Richtung sollen wir den Punkt xx verschieben? Links oder rechts?

  • Wie weit sollten wir es bewegen?

Die Richtung

Lassen Sie uns etwas Intuition aufbauen, um die erste Frage zu beantworten. Schauen Sie sich den folgenden Punkt an:

Graph 2

Graph 3

Beachten Sie, dass:

  • Wenn der Punkt x0x_{0} rechts vom optimalen Punkt xx* liegt, steigt seine Tangente an.

  • Wenn der Punkt x0x_{0} rechts vom optimalen Punkt xx* liegt, verläuft seine Tangente nach unten.

Die Richtung einer Geraden wird durch das Vorzeichen ihrer Steigung bestimmt:

  • Eine Linie geht nach oben \impliziert\impliziert, dass die Steigung aa positiv ist.

  • Eine Linie geht nach unten \impliziert\impliziert, dass die Steigung aa negativ ist.

Beachten Sie Folgendes: \

Die Steigung der Tangente einer Funktion in einem bestimmten Punkt x0x_{0} ist nicht größer als die Ableitung in diesem Punkt f(x0)f'(x_{0}):

tangent(x0):g(x)=f(x0).(xx0)+f(x0)tangent(x*{0}): g(x) = f'(x*{0}).(x-x*{0}) + f(x*{0})

Als Antwort auf die Frage "Wohin sollen wir x0x_{0} verschieben?":

  • f(x0)<0f'(x_{0}) < 0     \implies x0x_{0} rechts von xx*     \implies Wir müssen x0x_{0} nach links verschieben.

  • f(x0)>0f'(x_{0}) > 0     \implies x0x_{0} links von xx*     \implies Wir müssen x0x_{0} nach rechts verschieben.

Die Schritte

Nun zur zweiten Frage: Um wie viel sollten wir x0x_{0} bewegen?

Schauen Sie sich die folgenden Beispiele an:

Graph 4

Graph 5

Wir können daraus schließen:

  • x0x_{0} liegt nahe bei xx* => Die Steigung der Tangente ist klein => f(x0)f'(x_{0}) ist klein.

  • x0x_{0} ist von xx* entfernt => Die Steigung der Tangente ist groß => f(x0)f'(x_{0}) ist groß.

Durch die Beantwortung beider Fragen kamen wir zu dem Schluss, dass nur die Kenntnis der Ableitung im Punkt x0x_{0} uns viele Erkenntnisse über die Richtung und den Abstand des optimalen Punkts x0x_{0} geben kann.

Gefälleabstieg

Der Gradientenabstieg ist die Formulierung der Antworten auf die beiden vorherigen Fragen. Es handelt sich um einen iterativen Optimierungsalgorithmus, der das Minimum xx* der Funktion ausgehend von einem zufälligen Anfangspunkt x0x_{0} annähert. Der Algorithmus wird wie folgt angegeben:

xn+1=xnlr×dfdx_nx*{n+1} = x*{n} - lr \times \frac{\mathrm{d} f}{\mathrm{d} x\_{n}}

Wo:

  • dfdxn\frac{\mathrm{d} f}{\mathrm{d} x*{n}} ist nicht mehr als die Ableitung von ff im Punkt xnx*{n}.

  • lrlr ist eine positive Konstante, die bestimmt, wie groß die Schritte sein werden.

Beachten Sie Folgendes:

  • xnx_{n} liegt rechts von xx* => dfdxn>0\frac{\mathrm{d} f}{\mathrm{d} x_{n}} > 0 => xn+1=xnpositivx_{n+ 1} = x_{n} - positiv => xnx_{n} bewegt sich nach links.

  • xnx_{n} liegt links von xx* => dfdxn<0\frac{\mathrm{d} f}{\mathrm{d} x_{n}} < 0 => xn+1=xn+positivesx*{n +1} = x*{n} + positives => xnx_{n} bewegt sich nach rechts.

  • xnx_{n} nahe bei xx* => dfdxn\frac{\mathrm{d} f}{\mathrm{d} x_{n}} nahe bei 00 => Kleine Aktualisierung von xnx_{ n}.

Quizz

  • Wann hört der Gradientenabstieg auf zu iterieren:

  • Wenn xnx_{n} klein genug ist.

  • Wenn xnx_{n} nahe an x0x_{0} liegt.

  • Wenn dfdx_n=0\frac{\mathrm{d} f}{\mathrm{d} x\_{n}} = 0 . XXX

  • Wie wählen wir x0x_{0} aus:

  • Wir wählen es zufällig aus. XXX

  • Wir nehmen es in der Nähe von xnx{n} an.

  • Es kommt auf das Problem an.

  • Warum brauchen wir einen Gradientenabstieg:

  • Weil Computer nicht leistungsfähig genug sind, um Ableitungen zu berechnen.

  • Weil es extrem schwierig ist, die Ableitungsformeln von Deep-Learning-Modellen zu finden. XXX

  • Weil Funktionen mehr als ein lokales Minimum haben.