Stochastischer Gradientenabstieg. Umsetzungsmöglichkeiten. Stochastischer Gradientenabstieg wird zu glatt geglättet

SVM

Support-Vektor-Maschine(Englisch SVM, Support Vector Machine) - eine Reihe ähnlicher überwachter Lernalgorithmen, die für Klassifikationsprobleme verwendet werden und Regressionsanalyse... Gehört zur Familie der linearen Klassifikatoren und kann auch als Spezialfall der Tikhonov-Regularisierung betrachtet werden. Eine Besonderheit der Support Vector Machine besteht darin, dass der empirische Klassifikationsfehler kontinuierlich abnimmt und die Lücke zunimmt, weshalb das Verfahren auch als Maximum-Gap-Classifier-Verfahren bezeichnet wird.

Die Hauptidee der Methode besteht darin, die Anfangsvektoren in einen Raum höherer Dimension zu übertragen und nach einer trennenden Hyperebene mit einer maximalen Lücke in diesem Raum zu suchen. Zwei parallele Hyperebenen werden auf beiden Seiten der Hyperebene konstruiert, die unsere Klassen trennt. Die teilende Hyperebene ist die Hyperebene, die den Abstand zu zwei parallelen Hyperebenen maximiert. Der Algorithmus geht davon aus, dass der durchschnittliche Klassifikatorfehler umso kleiner ist, je größer die Differenz oder der Abstand zwischen diesen parallelen Hyperebenen ist.

Bei maschinellen Lernalgorithmen besteht häufig die Notwendigkeit, Daten zu klassifizieren. Jedes Datenobjekt wird als Vektor (Punkt) im -dimensionalen Raum (eine Folge von p Zahlen) dargestellt. Jeder dieser Punkte gehört nur zu einer von zwei Klassen. Uns interessiert, ob wir Punkte durch eine Hyperebene der Dimension trennen können.Dies ist ein typischer Fall linearer Trennbarkeit. Es kann viele solcher Hyperebenen geben. Daher ist es nur natürlich zu glauben, dass die Maximierung der Lücke zwischen den Klassen zu einer sichereren Klassifizierung beiträgt. Das heißt, können wir eine solche Hyperebene so finden, dass der Abstand von ihr zum nächsten Punkt maximal ist? Dies würde bedeuten, dass der Abstand zwischen zwei nächsten Punkten, die auf gegenüberliegenden Seiten der Hyperebene liegen, maximal ist. Wenn eine solche Hyperebene existiert, wird sie uns am meisten interessieren; sie wird als optimal teilende Hyperebene bezeichnet, und der entsprechende lineare Klassifikator wird als optimal teilender Klassifikator bezeichnet.

Formal lässt sich das Problem wie folgt beschreiben.

Wir nehmen an, dass die Punkte die Form haben:, wobei der Wert 1 oder 1 ist, je nachdem zu welcher Klasse der Punkt gehört. Jeder ist ein -dimensionaler reeller Vektor, normalerweise normiert durch die Werte oder. Wenn die Punkte nicht normalisiert sind, beeinflusst der Punkt mit großen Abweichungen von den Mittelwerten der Koordinaten der Punkte den Klassifikator zu stark. Wir können uns dies als eine Lernsammlung vorstellen, in der jedes Element eine vordefinierte Klasse hat, zu der es gehört. Wir möchten, dass die Support-Vektor-Maschine sie auf die gleiche Weise klassifiziert. Dazu konstruieren wir eine trennende Hyperebene, die die Form hat:

Der Vektor ist die Senkrechte zur teilenden Hyperebene. Der Parameter entspricht dem absoluten Wert des Abstands von der Hyperebene zum Ursprung. Wenn der Parameter null ist, verläuft die Hyperebene durch den Ursprung, was die Lösung einschränkt.

Da wir an der optimalen Trennung interessiert sind, interessieren uns Stützvektoren und Hyperebenen parallel zur optimalen und am nächsten zu den Stützvektoren zweier Klassen. Es kann gezeigt werden, dass diese parallelen Hyperebenen durch die folgenden Gleichungen (bis zur Normierung) beschrieben werden können.

Wenn das Trainingsmuster linear trennbar ist, können wir die Hyperebenen so wählen, dass keine Trainingsmusterpunkte dazwischen liegen und dann den Abstand zwischen den Hyperebenen maximieren. Die Breite des Streifens dazwischen ist aus geometrischen Gründen leicht zu finden, sie ist gleich, also ist es unsere Aufgabe, sie zu minimieren. Um alle Punkte vom Streifen auszuschließen, müssen wir dafür sorgen

Es kann auch geschrieben werden als:

Bei linearer Trennbarkeit von Klassen wird das Problem der Konstruktion einer optimalen trennenden Hyperebene unter Bedingung (1) auf Minimierung reduziert. Dies ist ein quadratisches Optimierungsproblem, das wie folgt aussieht:

Nach dem Satz von Kuhn-Tucker ist dieses Problem äquivalent zu Doppelaufgabe Suche Sattelpunkt Lagrange-Funktionen.


Wo ist der Vektor der dualen Variablen

Lassen Sie uns dieses Problem auf ein äquivalentes quadratisches Programmierproblem reduzieren, das nur duale Variablen enthält:


Sagen wir, wir haben uns entschieden diese Aufgabe, dann kann es durch die Formeln gefunden werden:

Als Ergebnis kann der Klassifikationsalgorithmus wie folgt geschrieben werden:

In diesem Fall erfolgt die Summation nicht über die gesamte Stichprobe, sondern nur über die Stützvektoren, für die

Im Fall der linearen Untrennbarkeit von Klassen, damit der Algorithmus funktioniert, machen wir Fehler in der Trainingsmenge. Lassen Sie uns eine Reihe zusätzlicher Variablen einführen, die die Größe des Fehlers an Objekten charakterisieren. Wir nehmen (2) als Ausgangspunkt, mildern die Ungleichungsbeschränkungen und führen in das minimierte Funktional eine Strafe für den Gesamtfehler ein:

Faktor ist ein Parameter zur Methodenoptimierung, mit dem Sie die Beziehung zwischen der Maximierung der Teilungsbandbreite und der Minimierung des Gesamtfehlers anpassen können.

In ähnlicher Weise reduzieren wir das Problem mit dem Satz von Kuhn-Tucker darauf, den Sattelpunkt der Lagrange-Funktion zu finden:


Lassen Sie uns dieses Problem analog auf ein äquivalentes reduzieren:


Um eine Support-Vektor-Maschine zu konstruieren, wird in der Praxis dieses Problem gelöst und nicht (3), da im allgemeinen Fall die lineare Trennbarkeit von Punkten in zwei Klassen nicht garantiert werden kann. Diese Variante des Algorithmus wird als Soft-Margin-SVM-Algorithmus bezeichnet, während man im linear separierbaren Fall von der Hard-Margin-SVM spricht.

Für den Klassifizierungsalgorithmus wird Formel (4) beibehalten, mit dem einzigen Unterschied, dass jetzt nicht nur unterstützende Objekte, sondern auch anstößige Objekte Werte ungleich Null haben. In gewisser Weise ist dies ein Nachteil, da Lärmemissionen häufig die Verletzer sind und die darauf aufbauende Entscheidungsregel tatsächlich auf Lärm beruht.

Die Konstante wird üblicherweise nach dem Gleitregelkriterium gewählt. Dies ist ein zeitaufwendiges Verfahren, da das Problem für jeden Wert neu gelöst werden muss.

Wenn Grund zu der Annahme besteht, dass die Stichprobe nahezu linear separierbar ist und nur Ausreißer falsch klassifiziert werden, kann eine Ausreißerfilterung angewendet werden. Zuerst wird das Problem für einige C gelöst und ein kleiner Anteil der Objekte mit dem größten Fehlerwert wird aus der Stichprobe entfernt. Danach wird das Problem wieder mit dem abgeschnittenen Beispiel gelöst. Möglicherweise müssen Sie mehrere dieser Iterationen durchlaufen, bis die verbleibenden Objekte linear trennbar sind.

Der 1963 von Vladimir Vapnik und Alexei Chervonenkis vorgeschlagene Algorithmus zur Konstruktion der optimal teilenden Hyperebene ist ein linearer Klassifikationsalgorithmus. 1992 schlugen Bernhard Boser, Isabelle Guyon und Vapnik jedoch eine Methode vor, um einen nichtlinearen Klassifikator basierend auf dem Übergang von Skalarprodukten zu beliebigen Kernels zu erstellen, den sogenannten Kernel-Trick (erstmals vorgeschlagen von M.A. Aizerman, E.M. Bravermann und L.V. Rozonoer für die Methode der Potentialfunktionen), die die Konstruktion nichtlinearer Separatoren ermöglicht. Der resultierende Algorithmus ist dem linearen Klassifikationsalgorithmus sehr ähnlich, mit dem einzigen Unterschied, dass jedes Punktprodukt in den obigen Formeln durch eine nichtlineare Kernelfunktion (ein Punktprodukt in einem Raum mit einer höheren Dimension) ersetzt wird. In diesem Raum kann bereits eine optimal teilende Hyperebene existieren. Da die Dimension des resultierenden Raums größer sein kann als die Dimension des ursprünglichen Raums, ist die Transformation, die die Skalarprodukte vergleicht, nichtlinear, was bedeutet, dass die Funktion, die der optimalen teilenden Hyperebene im ursprünglichen Raum entspricht, ebenfalls nichtlinear ist.

Es ist erwähnenswert, dass, wenn der ursprüngliche Raum eine ausreichend hohe Dimension hat, man hoffen kann, dass die Probe darin linear teilbar ist.

Die gängigsten Kernel sind:

1. Linearer Kern:

2. Polynom (homogen):

3. RBF-Funktion:

4. Sigmoid:

Im Rahmen der uns gestellten Problemstellung werden wir einen linearen homogenen Kernel verwenden. Dieser Kernel zeigte hervorragende Ergebnisse bei Dokumentenklassifizierungsaufgaben, obwohl das Training dieses Klassifikators im Vergleich zum naiven Bayes-Klassifikator relativ lange dauert. Die Arbeit aller anderen Kerne aus dieser Liste wurde ebenfalls überprüft und es wurde festgestellt, dass ihr Training viel länger dauert, ohne dass besondere Verbesserungen in der Klassifizierungsgenauigkeit eingeführt wurden.

Um das Lernen zu beschleunigen, verwenden wir eine Methode namens Stochastic Gradient Descent, mit der wir das Training des Klassifikators erheblich beschleunigen können, ohne viel von seiner Genauigkeit zu beeinträchtigen.

Stochastischer Gradientenabstieg

Gradientenmethoden sind eine breite Klasse von Optimierungsalgorithmen, die nicht nur im maschinellen Lernen verwendet werden. Hier wird der Gradientenansatz als Methode zur Anpassung des Vektors synaptischer Gewichte in einen linearen Klassifikator betrachtet. Sei die Zielabhängigkeit, die nur von den Objekten der Trainingsmenge bekannt ist:

Suchen wir einen Algorithmus, der die Abhängigkeit approximiert. Bei einem linearen Klassifikator hat der gewünschte Algorithmus die Form:

wobei die Rolle der Aktivierungsfunktion spielt (im einfachsten Fall können Sie setzen).

Nach dem Prinzip der Minimierung des empirischen Risikos genügt hierfür die Lösung des Optimierungsproblems:

Wo ist die angegebene Verlustfunktion.

Wenden Sie zur Minimierung die Gradientenabstiegsmethode an. Dies ist ein schrittweiser Algorithmus, bei dem sich der Vektor bei jeder Iteration in Richtung der größten Abnahme des Funktionals (dh in Richtung des Antigradienten) ändert:

Wo ist ein positiver Parameter, der als Lernrate bezeichnet wird.

Es gibt zwei Hauptansätze zur Implementierung des Gradientenabstiegs:

1. Batch, wenn bei jeder Iteration das Trainingsbeispiel vollständig angezeigt und erst danach geändert wird. Dies ist rechenintensiv.

2. Stochastisch (stochastisch / online), wenn bei jeder Iteration des Algorithmus nur ein Objekt auf irgendeine (zufällige) Weise aus der Trainingsstichprobe ausgewählt wird. Somit wird der Vektor für jedes neu ausgewählte Objekt angepasst.

Sie können den stochastischen Gradientenabstiegsalgorithmus in Pseudocode wie folgt darstellen:

- Trainingsbeispiel

- das Lerntempo

- Parameter der Glättung des Funktionals

1. Vektor der Gewichte

1) Gewichte initialisieren

2) Initialisieren Sie die aktuelle Bewertung der Funktionalität:

3) Wiederholen:

1. Wähle zufällig ein Objekt aus

2. Berechnen Sie den Ausgabewert des Algorithmus und den Fehler:

3. Machen Sie einen Abstiegsschritt

4. Schätzen Sie den Wert des Funktionals:

4) Bis sich der Wert stabilisiert und / oder sich die Gewichte nicht mehr ändern.

Der Hauptvorteil von SGD ist die Geschwindigkeit des Trainings mit redundant großen Daten. Dies ist für uns im Rahmen der uns gestellten Aufgabenstellung interessant, da die Menge der Eingabedaten sehr groß sein wird. Gleichzeitig ergibt der SGD-Algorithmus im Gegensatz zum klassischen Batch-Gradientenabstieg eine etwas geringere Klassifikationsgenauigkeit. Außerdem ist der SGD-Algorithmus nicht auf das Training einer Support-Vektor-Maschine mit einem nichtlinearen Kernel anwendbar.

Schlussfolgerungen

Als Teil des zu lösenden Problems müssen wir den TF-IDF-Quelverwenden, der es uns ermöglicht, das Gewicht seltener Ereignisse zu erhöhen und das Gewicht häufiger Ereignisse zu reduzieren. Die nach der Transformation erhaltenen Daten werden wir in Klassifikatoren überführen, die zur Lösung unseres Problems geeignet sind, nämlich: einen Naive Bayesian Classifier oder eine Support Vector Machine mit Linear Kernel, trainiert mit der Methode des stochastischen Gradientenabstiegs. Wir werden auch die Leistung einer Support Vector Machine mit nichtlinearen Kerneln testen, die im Batch-Gradientenabstieg trainiert wurden. Aber, gegebener Typ der Klassifikator erscheint aufgrund eines zu komplexen Kernels und einer Tendenz zur Nachtrainierbarkeit, bei der der Klassifikator nicht gut mit Daten zurechtkommt, die nicht zum Trainieren des Klassifikators verwendet wurden, für die vorliegende Aufgabe nicht geeignet.

Software Maschinenvorverarbeitung gegeben

Sie haben also die Aufgabe, einen Wert wie den Wert eines Hauses anhand seiner Größe vorherzusagen. Oder die Bearbeitungszeit einer Anfrage durch Ihr System. Aber man weiß nie was.

Sie haben sich für die lineare Regression entschieden und möchten nun die Koeffizienten ermitteln, bei denen die Differenz zwischen dem von Ihrem Modell vorhergesagten Preis und dem realen Wert der verkauften Häuser minimal ist. Dazu können Sie eine dieser Methoden verwenden:

  1. Batch-Gradientenabstieg
  2. Stochastischer Gradientenabstieg
  3. Normale Gleichungen
  4. Newtons Methode

Heute werden wir über zwei Arten des Gradientenabstiegs sprechen.

Gradientenabstieg

Was ist überhaupt Gradientenabstieg?

Stellen Sie sich eine komplexe Funktion aus einer Variablen vor. Sie hat einige Höhen und Tiefen. An jedem Punkt dieser Funktion können wir die Ableitung nehmen:

Die grüne Linie zeigt, dass die Ableitung zu diesem Zeitpunkt positiv ist, die rote - negativ.

Wählen Sie einen beliebigen Punkt der Funktion. Sie möchten bis zum nächsten Minimum "nach unten gehen". Wenn die Ableitung an Ihrem Punkt positiv ist (grüne Linie), bedeutet dies, dass das Minimum "hinter" Ihnen liegt, und um dorthin zu gelangen, müssen Sie von der Koordinate Ihres Punktes subtrahieren x den Wert Ihres Derivats.

Wenn die Ableitung an Ihrem Punkt negativ ist (rote Linie), bedeutet dies, dass das Minimum „vor“ Ihnen liegt, und um es zu erreichen, müssen Sie erneut von der Koordinate subtrahieren x den Wert Ihres Derivats. Sein Wert ist negativ, und wenn Sie einen negativen Wert subtrahieren, erhöhen Sie die Koordinate x.

Damit der Abstieg nicht unerträglich lang oder irrtümlich schnell ist, multiplizieren Sie den Wert Ihres Derivats an der ausgewählten Stelle mit einem Faktor.

Dies ist jedoch nur der Fall, wenn die Funktion von einer Koordinate abhängt. Bei unserem Modell für den Hausverkauf hängt die Kostenfunktion von zwei Variablen ab.

Sie können sich diese Funktion als "Tasse" im 3D-Raum vorstellen:

Die Ableitung von Funktionen mehrerer Variablen wird als Gradient bezeichnet. Ein Gradient ist ein Vektor mit der Dimension der Anzahl von Variablen, bei dem jedes Element des Vektors eine Ableitung einer Variablen ist.

Unsere Kostenfunktion lautet:

Sein Gradient wird als bezeichnet und wird mit der folgenden Formel berechnet:

In jeder partiellen Ableitung zählen wir es von einer Variablen. Alle anderen Variablen werden als Konstanten betrachtet, daher sind ihre Ableitungen gleich Null:

Danach aktualisieren wir jeden Wert mit der Formel:

Der Parameter wird als Lernrate bezeichnet und bestimmt, wie schnell wir zum Minimalwert der Funktion gelangen. Mit jeder Aktualisierung der Parameter gehen wir einen kleinen Schritt in Richtung Minimum. Danach wiederholen wir den Vorgang. Parallel dazu betrachten wir, wie sehr sich der Wert der Kostenfunktion im Vergleich zum vorherigen Schritt verändert hat. Wenn diese Änderung sehr klein wird (wir markieren die Zeit), können wir anhalten und davon ausgehen, dass wir das Minimum erreicht haben.

Es ist, als würde man einen Hügel zur nächsten Mulde hinabsteigen. Mit dem Gradientenabstieg können Sie das lokale Minimum finden, aber nicht das globale. Dies bedeutet, dass, wenn es mehrere Punkte gibt, an denen Ihre Funktion minimal ist, Sie der Gradientenabstieg zu einem von ihnen führt - demjenigen, der dem Startpunkt am nächsten ist, aber nicht unbedingt der tiefsten Spalte.

Vor dem allerersten Schritt bestimmen wir die Parameter zufällig, und das genaue Minimum hängt davon ab, wie wir sie definieren:


Hier in Klammern ist zu beachten, dass es sich bei den obigen Ausführungen um den Gradientenabstieg in Gesamtansicht beschäftigt sich aber nicht speziell mit Gradientenabstieg für lineare Regression... Die Kostenfunktion der linearen Regression ist konvex und hat nur ein Minimum (denken Sie an einen 3D-Cup), sodass es beim Gradientenabstieg immer gefunden wird.

Je näher Sie dem Minimum der Kostenfunktion kommen (je kleiner die Differenz zwischen dem prognostizierten Preis und dem tatsächlichen Preis), desto besser beschreibt Ihre Linie Ihre historischen Daten:

Wenn es nicht viele historische Beispiele gibt, ist alles in Ordnung, aber wenn es Millionen davon gibt, müssen wir für jeden kleinen Schritt auf ein Minimum Millionen von Berechnungen durchführen, und das kann lange dauern.

Eine Alternative dazu kann der stochastische Gradientenabstieg sein – eine Methode, bei der wir ein Beispiel nehmen und die Werte aktualisieren, wobei wir uns nur darauf konzentrieren. Dann nehmen wir das nächste Beispiel und aktualisieren die Parameter, wobei wir uns bereits darauf konzentrieren. Usw. Dies führt dazu, dass wir nicht immer vom Hügel "absteigen", manchmal machen wir einen Schritt nach oben oder zur Seite, aber früher oder später erreichen wir dieses Minimum und beginnen, es zu umkreisen. Wenn die Werte beginnen, zu uns zu passen (die erforderliche Genauigkeit erreichen), stoppen wir den Abstieg.

Im Pseudocode sieht der stochastische Gradientenabstieg so aus:

Bis die Änderung der Kostenfunktion klein ist: (

Für j: = 1 bis m (

Schließlich die Konvergenzmerkmale des Algorithmus: Der Batch-Gradientenabstieg konvergiert immer auf ein Minimum, vorausgesetzt, dass ein ausreichend kleiner Wert verwendet wird. Der stochastische Gradientenabstieg konvergiert im Allgemeinen nicht auf ein Minimum, aber es gibt Modifikationen, die eine Konvergenz ermöglichen.

Der stochastische Gradient wird durch die Formel geschätzt:

das heißt, es ist die Summe aller Zufallsvektoren mit Gewichten gleich den Inkrementen der zu minimierenden Funktion in den gegebenen Zufallsrichtungen.

Wenn wir die Einheitsvektoren als Einheitsvektoren nehmen, dh diese Schätzung für ergibt, wie aus (3.3.22) leicht ersichtlich, den genauen Wert des Gradienten.

Beide beschriebenen Gradientenschätzungen können effektiv für alle Werte angewendet werden, auch für die sie sich signifikant von der deterministischen Schätzmethode (3.3.22) unterscheiden, für die genau der gleiche Umstand bestätigt, dass die deterministischen Methoden zufällig verallgemeinert werden (siehe Ende von Unterabschnitt 3.3.1 ). Geben wir ein weiteres Beispiel für eine solche Verallgemeinerung.

Die Gradientensuche (3.3.21) ist ein Spezialfall von mindestens zwei Zufallssuchalgorithmen. Erster Algorithmus:

wobei noch ein zufälliger -dimensionaler Einheitsvektor ist. Es ist ein bekannter Gradienten-Zufallssuchalgorithmus. Der zweite Algorithmus hat die Form (3.3.23), aber die Gradientenschätzung wird durch die Formel berechnet

Wie leicht zu erkennen ist, entarten beide Algorithmen zu einem Gradientensuchalgorithmus (3.3.21).

Somit ist die Zufallssuche eine natürliche Erweiterung, Fortsetzung und Verallgemeinerung bekannter regulärer Suchmethoden.

Eine weitere zufällige Suchfunktion, die geöffnet wird reichlich möglichkeiten für seine effektive Anwendung ist die Verwendung eines Random-Step-Operators als stochastisches Modell komplexer regulärer Operatoren zum Auffinden von Suchrichtungen im Raum optimierter Parameter

Somit ist der Zufallssuchalgorithmus mit linearer Taktik (3.3.12) ein stochastisches Modell des steilsten Abstiegsalgorithmus:

in dem ein Zufallsvektor die Gradientenschätzung simuliert. Es ist merkwürdig, dass eine solche „Schätzung“ nicht einmal als grob bezeichnet werden kann, da ihre stochastischen Eigenschaften nicht einmal den Eigenschaften des geschätzten Gradienten ähneln. Wie oben gezeigt, ist der Zufallssuchalgorithmus jedoch nicht nur effizient, sondern in einigen Fällen auch effizienter als der Algorithmus für den steilsten Abstieg. Hier

der Random-Step-Operator ersetzt den umständlichen Gradientenschätzoperator beispielsweise gemäß Formel (3.3.22).

Das nächste Merkmal der Zufallssuche, das sie günstig von regulären Verfahren unterscheidet, ist die Globalität, die sich hauptsächlich in lokalen Zufallssuchalgorithmen manifestiert, die nicht darauf ausgelegt sind, ein globales Extremum zu finden. Somit kann der Zufallsabstiegsalgorithmus ein globales Extremum finden, während der reguläre steilste Abstiegsalgorithmus eine solche Möglichkeit im Prinzip nicht zulässt, da er so aufgebaut ist, dass er ein lokales Extremum findet.

Folglich ist die Globalität von Zufallssuchalgorithmen wie ein „Bonus“ für die Nutzung von Zufälligkeit und so etwas wie „ kostenlose App»Zum Algorithmus. Dieser Umstand ist besonders wichtig bei der Optimierung von Objekten mit unbekannter Struktur, wenn kein vollständiges Vertrauen in die einzelne Extremalität des Problems besteht und das Vorhandensein mehrerer Extrema möglich ist (wenn auch nicht erwartet). Die Verwendung globaler Suchmethoden wäre in diesem Fall unklug verschwenderisch. Lokale Zufallssuchverfahren sind hier am akzeptabelsten, da sie effektiv ein lokales Problem lösen und prinzipiell ein globales, wenn überhaupt, lösen können. Dadurch erhalten stichprobenartige Suchen eine Art psychologische Verlässlichkeit, die Nutzer sehr schätzen.

Die algorithmische Einfachheit der Zufallssuche macht sie vor allem für Verbraucher attraktiv. Die Erfahrung zeigt, dass bekannte Zufallssuchalgorithmen nur eine "Leinwand" sind, auf der der Benutzer im jeweiligen Einzelfall neue Algorithmen "Muster aufstickt", die nicht nur seinen nicht zu ignorierenden Geschmack und seine Neigungen, sondern auch die Besonderheiten widerspiegeln des zu optimierenden Objekts. Letzteres schafft eine günstige Grundlage für die Umsetzung des bekannten Prinzips, dass der Algorithmus „für das Objekt“ konzipiert werden soll. Schließlich bestimmt die algorithmische Einfachheit der Zufallssuche die Einfachheit ihrer Hardwareimplementierung. Damit ist es nicht nur möglich, einfache, kompakte und zuverlässige Optimierer mit einer unbegrenzten Anzahl optimierbarer Parameter zu bauen, sondern auch deren optimale Synthese ganz einfach am Computer zu organisieren.

Gradientenabstieg Ist der am häufigsten verwendete Lernalgorithmus und wird in fast jedem Modell verwendet. Der Gradientenabstieg ist im Wesentlichen die Art und Weise, wie die Modelle trainiert werden. Ohne GE wäre maschinelles Lernen nicht dort, wo es heute ist. Die Gradientenabstiegsmethode mit einigen Modifikationen wird häufig für das Training und die Tiefe verwendet und ist als Fehler bekannt.

In diesem Beitrag finden Sie eine Erklärung des Gradientenabstiegs mit ein wenig Mathematik. Zusammenfassung:

  • Der Sinn des HS besteht darin, den gesamten Algorithmus zu erklären;
  • Verschiedene Variationen des Algorithmus;
  • Codeimplementierung: Schreiben von Code in Phyton-Sprache.

Was ist Gradientenabstieg?

Der Gradientenabstieg ist ein Verfahren zum Ermitteln des Minimalwerts einer Verlustfunktion (es gibt viele Arten dieser Funktion). Das Minimieren eines Merkmals bedeutet, nach dem tiefsten Tal in diesem Merkmal zu suchen. Beachten Sie, dass die Funktion verwendet wird, um Fehler in den Vorhersagen eines Modells für maschinelles Lernen zu kontrollieren. Das Finden des Minimums bedeutet, den kleinstmöglichen Fehler zu erhalten oder die Genauigkeit des Modells zu verbessern. Wir erhöhen die Genauigkeit, indem wir über den Trainingsdatensatz iterieren, während wir die Parameter unseres Modells (Gewichte und Verzerrungen) anpassen.

Daher ist ein Gradientenabstieg erforderlich, um die Verlustfunktion zu minimieren.

Das Wesen des Algorithmus besteht darin, den kleinsten Fehlerwert zu erhalten. Ebenso kann es als Abstieg in eine Mulde angesehen werden, um Gold am Grund der Schlucht zu finden (niedrigster Fehlerwert).


Das Minimum einer Funktion finden

Um den kleinsten Fehler (tiefste Unterseite) in der Verlustfunktion (bezogen auf ein Gewicht) zu finden, müssen Sie außerdem die Modellparameter anpassen. Wie richten wir sie ein? Dies hilft bei der mathematischen Analyse. Dank der Analyse wissen wir, dass die Steigung des Graphen einer Funktion die Ableitung der Funktion nach der Variablen ist. Diese Steigung zeigt immer die nächstgelegene Mulde an!

In der Abbildung sehen wir einen Graphen der Verlustfunktion (genannt "Error" mit dem Symbol "J") mit einer Gewichtung. Wenn wir nun die Steigung (nennen wir es dJ / dw) der Verlustfunktion in Bezug auf ein Gewicht berechnen, erhalten wir die Richtung, in die wir uns bewegen müssen, um lokale Minima zu erreichen. Nehmen wir zunächst einmal an, unser Modell hätte nur ein Gewicht.

Verlustfunktion

Wichtig: Während wir über alle Trainingsdaten iterieren, fügen wir weiterhin dJ / dw-Werte für jedes Gewicht hinzu. Da der Verlust vom Trainingsbeispiel abhängt, ändert sich auch dJ / dw weiter. Dann teilen wir die gesammelten Werte durch die Anzahl der Trainingsbeispiele, um den Durchschnitt zu erhalten. Wir verwenden dann diesen Durchschnitt (jedes Gewichtes), um jedes Gewicht festzulegen.

Beachten Sie auch: Die Verlustfunktion ist dafür ausgelegt, den Fehler bei jedem Trainingsbeispiel zu verfolgen, während die Ableitung der relativen Eingewichtsfunktion dort ist, wo das Gewicht verschoben werden muss, um es für dieses Trainingsbeispiel zu minimieren. Sie können Modelle auch ohne Verwendung der Verlustfunktion erstellen. Sie müssen jedoch die Ableitung in Bezug auf jedes Gewicht (dJ / dw) verwenden.

Nachdem wir nun die Richtung identifiziert haben, in die das Gewicht gedrückt werden soll, müssen wir uns überlegen, wie es geht. Hier verwenden wir einen Lernratenfaktor, der als Hyperparameter bezeichnet wird. Ein Hyperparameter ist ein Wert, der von Ihrem Modell benötigt wird, von dem wir wirklich eine sehr vage Vorstellung haben. Normalerweise können diese Werte durch Versuch und Irrtum gelernt werden. Nicht so hier: man passt auf alle Hyperparameter. Der Lernratenfaktor kann als "Schritt in die richtige Richtung" betrachtet werden, wobei die Richtung von dJ / dw kommt.

Es war eine Gewichtsverlustfunktion. In einem realen Modell führen wir alle oben genannten Schritte für alle Gewichtungen durch und iterieren über alle Trainingsbeispiele. Selbst in einem relativ kleinen Modell für maschinelles Lernen haben Sie mehr als 1 oder 2 Gewichtungen. Dies erschwert die Visualisierung, da der Graph Dimensionen hat, die sich der Verstand nicht vorstellen kann.

Mehr zu Steigungen

Zusätzlich zur Verlustfunktion erfordert der Gradientenabstieg auch einen Gradienten, der dJ / dw ist (die Ableitung der Verlustfunktion in Bezug auf ein Gewicht, durchgeführt für alle Gewichte). dJ / dw hängt von Ihrer Wahl der Verlustfunktion ab. Die gebräuchlichste Verlustfunktion ist der quadratische Mittelwertfehler.

Die Ableitung dieser Funktion nach einem beliebigen Gewicht (diese Formel zeigt die Berechnung der Steigung für):

Dies ist die ganze Mathematik in der GE. Wenn wir dies betrachten, können wir sagen, dass der GE tatsächlich nicht viel Mathematik enthält. Die einzige Mathematik, die es enthält, ist Multiplikation und Division, zu der wir kommen werden. Dies bedeutet, dass Ihre Wahl der Funktion die Berechnung des Gradienten jedes Gewichts beeinflusst.

Lernratenverhältnis

Alles, was oben geschrieben wurde, steht im Lehrbuch. Sie können jedes Buch über den Gradientenabstieg öffnen, es wird dasselbe sagen. Gradientenformeln für jede Verlustfunktion sind im Internet zu finden, ohne zu wissen, wie man sie selbst herleitet.

Das Problem bei den meisten Modellen tritt jedoch beim Lernratenfaktor auf. Sehen wir uns den aktualisierten Ausdruck für jede Gewichtung an (j reicht von 0 bis zur Anzahl der Gewichtungen und Theta-j ist j-tes Gewicht im Gewichtungsvektor reicht k von 0 bis zur Anzahl der Offsets, wobei B-k der k-te Offset im Offsetvektor ist). Hier ist Alpha der Lernratenfaktor. Daraus können wir sagen, dass wir dJ / dTheta-j (Gewichtsgradient Theta-j) und dann den Schritt der Alpha-Größe in diese Richtung berechnen. Daher gehen wir den Gradienten hinunter. Um den Offset zu aktualisieren, ersetzen Sie Theta-j durch B-k.

Wenn diese Schrittweite alpha zu groß ist, werden wir das Minimum überwinden, d. h. das Minimum verfehlen. Wenn Alpha zu klein ist, verwenden wir zu viele Iterationen, um das Minimum zu erreichen. Alpha sollte also in Ordnung sein.

Verwenden des Gradientenabstiegs

Nun, das ist alles. Das ist alles, was Sie über den Gradientenabstieg wissen müssen. Fassen wir alles in Pseudocode zusammen.

Hinweis: Die Skalen werden hier in Vektoren dargestellt. In größeren Modellen werden sie wahrscheinlich Matrizen sein.

Von i = 0 bis "Anzahl Trainingsbeispiele"

1. Berechnen Sie den Gradienten der Verlustfunktion für das i-te Trainingsbeispiel für jedes Gewicht und jeden Bias. Sie haben jetzt einen Vektor voller Gradienten für jedes Gewicht und eine Variable, die den Offset-Gradienten enthält.

2. Addieren Sie die für einen einzelnen kumulativen Vektor berechneten Gewichtungsgradienten, der nach Durchlaufen jeder Fallstudie die Summe der Gradienten jeder Gewichtung über mehrere Iterationen enthalten sollte.

3. Fügen Sie ähnlich wie bei den Gewichtungen einen Bias-Gradienten zur kumulativen Variablen hinzu.

Nachdem Sie nun alle Trainingsbeispiele durchlaufen haben, gehen Sie wie folgt vor:

1. Dividieren Sie die kumulativen Variablen von Gewichtungen und Verzerrungen durch die Anzahl der Trainingsbeispiele. Dadurch erhalten wir die durchschnittlichen Steigungen für alle Gewichte und die durchschnittliche Steigung für den Offset. Nennen wir sie generalüberholte Akkumulatoren (OA).

2. Aktualisieren Sie dann mit der folgenden Formel alle Gewichtungen und Bias. Anstelle von dJ / dTheta-j ersetzen Sie OA für die Gewichtungen und OA für den Bias. Machen Sie dasselbe für den Offset.

Dies war nur eine Iteration des Gradientenabstiegs.

Wiederholen Sie diesen Vorgang von Anfang bis Ende für eine Reihe von Iterationen. Dies bedeutet, dass Sie für die 1. Iteration des GS über alle Trainingsbeispiele iterieren, die Gradienten berechnen und dann die Gewichtungen und Bias aktualisieren. Dann tun Sie dies für eine Reihe von GE-Iterationen.

Verschiedene Arten des Gefälleabstiegs

Es gibt 3 Möglichkeiten für den Gradientenabstieg:

1. Mini-Batch: Anstatt alle Trainingsbeispiele durchzugehen und bei jeder Iteration Berechnungen an nur einem Trainingsbeispiel durchzuführen, verarbeiten wir hier n Trainingsbeispiele gleichzeitig. Diese Wahl ist gut für sehr große Datensätze.

2.Stochastischer Gradientenabstieg: Anstatt jedes Lernbeispiel zu verwenden und zu wiederholen, verwenden wir in diesem Fall NUR EINMAL. Es gibt mehrere Dinge zu beachten:

  • Bei jeder Iteration des HS müssen Sie den Trainingssatz mischen und ein zufälliges Trainingsbeispiel auswählen.
  • Da Sie nur ein Trainingsbeispiel verwenden, wird Ihr Weg zum lokalen Minimum sehr laut sein, wie bei einer betrunkenen Person, die viel getrunken hat.

3. GS-Serie: darüber wurde in den vorherigen Abschnitten geschrieben. Gehen Sie jedes Trainingsbeispiel durch.


Bild, das 3 Treffer mit lokalen Tiefs vergleicht

Python-Beispielcode

Auf die GS-Serie angewendet, würde ein Block von Python-Tutorialcode so aussehen.

Def train (X, y, W, B, alpha, max_iters): "" "Führt GD bei allen Trainingsbeispielen durch, X: Trainingsdatensatz, y: Labels für Trainingsdaten, W: Gewichtungsvektor, B: Bias-Variable, alpha : Die Lernrate, max_iters: Maximale GD-Iterationen. "" "DW = 0 # Gewichtungsgradientenakkumulator dB = 0 # Biasgradientenakkumulator m = X.shape # Nr. Trainingsbeispiele für i im Bereich (max_iters): dW = 0 # Zurücksetzen der Akkumulatoren dB = 0 für j im Bereich (m): # 1. Iteriere über alle Beispiele, # 2. Berechne Gradienten der Gewichte und Bias in w_grad und b_grad, # 3. Aktualisieren Sie dW durch Addieren von w_grad und dB durch Addieren von b_grad, W = W - alpha * (dW / m) # Aktualisieren Sie die Gewichte B = B - alpha * (dB / m) # Aktualisieren Sie den Bias Return W, B # Gibt die aktualisierten Gewichtungen und Bias zurück.

Das ist alles. Sie sollten jetzt ein gutes Verständnis dafür haben, was Gradientenabstieg ist.

wo F i - die auf der i-ten Charge berechnete Funktion, i wird zufällig gewählt;

Der Lernschritt ist ein Hyperparameter; sind die Werte zu groß, divergiert der Lernalgorithmus, sind sie zu klein, konvergiert er langsam.

Stochastischer Gradientenabstieg mit Trägheit

Bei der Methode des stochastischen Gradientenabstiegs ist es nicht ungewöhnlich, dass sich der Gradient bei jeder Iteration stark ändert. Dies liegt daran, dass die Funktionalität auf verschiedenen Daten berechnet wird, die sich erheblich unterscheiden können. Diese Änderung kann geglättet werden, indem die bei den vorherigen Iterationen berechneten und durch den Hyperparameter der Trägheit μ skalierten Gradienten verwendet werden:

(14)
(15)

Wie Sie sich vorstellen können, hat der Hyperparameter der Trägheit μ einen solchen Namen, weil wie die sogenannte Newtonsche Trägheitskraft, d.h. Reaktionskraft, "widersteht" Veränderungen der Steigung und mildert die Veränderungen der Gewichtungskoeffizienten während des Trainings. Dieser Lernalgorithmus wird als stochastischer Gradientenabstieg mit Impuls oder SGDM bezeichnet.

Adaptive Gradientenmethode

Der adaptive Gradientenalgorithmus (Adagrad) basiert auf der Idee der Skalierung. Es wird die Lernrate für jeden abstimmbaren Parameter separat neu skalieren, während die Historie aller vergangenen Gradienten für diesen Parameter berücksichtigt wird. Dazu wird jedes Gradientenelement durch die Quadratwurzel der Summe der Quadrate der vorherigen entsprechenden Gradientenelemente dividiert. Dieser Ansatz reduziert effektiv die Lernrate für diejenigen Gewichte, die einen großen Gradientenwert haben, und verringert auch die Lernrate über die Zeit für alle Parameter, da die Summe der Quadrate für alle Parameter mit jeder Iteration stetig zunimmt. Beim Setzen eines Null-Anfangsskalierungsparameters g = 0 hat die Formel zur Neuberechnung der Gewichtungskoeffizienten die Form (Teilung wird Element für Element durchgeführt).

Fortsetzung des Themas:
Netzwerke

Wie kopiere ich Bücher auf mein Gerät? Verbinden Sie Ihr Gerät mit Ihrem Computer. Das Gerät sollte im eingeschalteten Zustand mit dem PC verbunden sein. Am unteren Rand des E-Book-Displays ...