Hallo, wir schauen uns jetzt noch eine Variante an, die besonders in Machine Learning extrem beliebt und effektiv geworden ist, nämlich den Stochastischen Gradientenanstieg.
Das nennen wir meistens SGED, Stochastic Gradient Descent.
Die Zielfunktionen, die wir uns hier anschauen, nehmen wir an, dass sie eine ganz spezielle Form hat, nämlich dass sie sich zerlegen lässt, additiv in mehrere Einzelfunktionen.
Wobei diese Is sind typisch Daten.
Also zum Beispiel ist es im normalen Netzkontext, wenn man was mit Bildern macht, dann wären diese ganzen Is verschiedene Bilder. Also I1 wäre das erste Bild, I2 wäre das zweite Bild.
Das heißt, diese Simulation wäre über alle Trainingsdaten, die man hat.
Das heißt, dieses Setting ist gerade in Machine Learning typisch, wenn man hier eine sehr große Anzahl von Daten hat.
Dann ist unsere Zielfunktion, die hängt von allen Trainingsdaten ab, weil wir, also ich weiß nicht, wie viele Erfahrungen wir mit Machine Learning schon haben.
Aber die Idee ist quasi, dass man ganz viele Daten auf einmal reinschmeißt und irgendwas versucht damit zu machen.
Das heißt, das, was man garantieren möchte, hängt von allen Daten ab.
Das ist ganz grob, worum es denn geht.
Aber das hatten wir auch schon hier in der Vorlesung, nämlich bei der Linienregression.
Das Zielfunktional bei der Linienregression war, das waren diese Bilddaten und diese XI waren die Positionen.
Und, wie war das nochmal? Hier hatten wir diese, also hier war irgendwie X1, Y1, das ist dieser Punkt hier.
Und das hier ist X2, Y2 und das ist vielleicht X3, Y3.
Und wir haben versucht hier so eine Funktion durchzulegen, als Beispiel so eine Gerade, die hier so durchgeht.
Und diese Gerade, die war eine Funktion, die hing ab von jetzt in dem Fall der Konstanten und der Steigung, also W0 und W1, die gehen jetzt hier so ein.
Das ist die Regressionsfunktion. Diese Regressionsfunktion, die haben wir so gewählt, dass wir diese Gewichte W0 und W1 so gesetzt haben, dass sie zu den Daten XI, YI gut passen.
Und wie haben wir das gemacht? Wir haben diesen Zielfunktional aufgeschrieben.
Das ist also eine Funktion von W und wir haben W so gesetzt, dass f von B minimiert wurde und das waren diese Federquadrate, also die Summe der quadratischen Abweichungen der YI von der Response,
von den Daten zu der Response von den XI gegeben, W eingesetzt. Das ist die Zielfunktion hier.
Und das ist in dieser Form, man muss jetzt ein bisschen aufpassen mit der Notation, das X hier ist nicht das XI hier, sondern wir können dieses f von B schreiben als 1 durch m mal eine Summe über die I, das ist klar.
Jetzt GI von W.
Erstens, also W ist hier die Variable, nach der wir minimieren wollen. Diese XI und YI sind feste Sachen, die wir nicht anrühren. Und diese Therme, also diese, sag ich es mal, Komponentenzielfunktionale,
GI von W, das ist in dem Fall numerisch n halbe mal YI minus fB von XI zum Quadrat. Also hier kommt das W rein und hier steckt das W drin.
Das heißt, die Variable, die wir minimieren, ist hier dieses W und nicht das X.
Aber das ist ein bisschen ein Setting, wenn wir jetzt eben darauf verzichten, das X nennen zu wollen, sondern W nennen zu wollen, dann zerlegt sich dieses Regressionsfunktional tatsächlich in eine Summe von n vielen einzelnen Komponentenfunktionen.
Und das ist immer nur abhängig vom Datenpunkt XI und YI. Das sehen wir auch hier. GI von W hängt nur von XI, YI ab, aber nicht von den ganzen anderen X1, X2 bis Xn.
Das heißt, das Zielfunktional, das der linearen Regression zugrunde liegt, lässt sich zerlegen in lauter kleine Zielfunktionale, die immer nur den I-Datenpunkt berücksichtigen.
Ok, was bringt diese Sichtweise? Jetzt erstmal nicht besonders viel. Man kann ja einfach Gradientenabstieg machen. Also jetzt ignorieren wir den Newton, wir starten einfach nur an. Was macht man mit dem Gradientenabstieg?
Je nachdem, ob wir es hier X oder W nennen, gehen wir wieder zurück in dieses Setting. Das war jetzt nur dieses Beispiel. Wir betrachten X als die Variable, nach der wir minimieren wollen.
Dann ist der Gradientenabstieg Xn plus 1, Xn minus alpha n, mal den Gradient von unserem Zielfunktional f in Xn. Und das zerlegt sich jetzt in diese einzelnen Komponenten.
Richtig viel dabei gelernt haben wir eigentlich auch nicht. Das ist natürlich möglich, das kann man so machen. Und so kann man dieses Zielfunktional minimieren, völlig egal, ob es diese Komponenten-Darstellung hat oder nicht, indem man einfach den Gradientenabstieg macht.
Es funktioniert, es liegt falsch dran. Die Sache ist nur die, dass in manchen Settings, gerade jetzt bei Machine Learning, bei neuronalen Netzen, ist es so, dass die Auswertung von diesen ganzen Gradienten GI kostenintensiv ist. Also rechnerisch kostenintensiv. Das dauert lange Zeit.
Und wenn n eine sehr große Zahl, sagen wir mal 10 Millionen oder so, man hat extrem viele sehr hoch aufgelöste Bilder, bei denen man irgendwas machen möchte, dann muss man jetzt hier für jeden winzig kleinen Iterationsschritt, und man braucht ja beim Gradientenabstieg typischerweise wirklich viele Iterationen, muss man jetzt wirklich alle Gradienten ausrechnen und alle hier einsetzen und dann diesen Abstieg hier machen.
Das heißt, das ist lästig, dass man das in jedem Schritt machen muss. Und was man jetzt stattdessen macht, ist das sogenannte stochastische Gradientenabstiegsverfahren.
Die Idee ist super billig. Es ist genauso wie normaler Gradientenabstieg, aber man geht nicht in die Richtung des vollen Gradienten, dieses Zielfunktionales F, also in alle Richtungen sozusagen, in die Summe der einzelnen Gradienten, sondern man geht nur in eine einzige Gradientenrichtung.
Man sucht sich eine Komponente, eine Datenkomponente aus, einen zufälligen Index I und geht nur in Richtung von den Gradienten, von der Itenkomponente dieses Zielfunktionales.
Und dann, nachdem man diesen Schritt gemacht hat, zieht man einen neuen Index, das ist dann wieder eine andere Komponente, geht entlang von dem Gradient dieser Komponente, dann wieder einen anderen Index, wieder einen anderen Index, wieder einen anderen Index.
Das heißt, man cycle hier quasi durch diese ganzen Komponenten durch und berücksichtigt die Daten nacheinander anstelle von in jedem Schritt, all auf einmal.
Das ist eine ganz schlaue Idee, weil es bedeutet, dass wir in einem Schritt eben nicht diese ganzen Gradienten bestimmen müssen, sondern in jedem Schritt nur eines.
Es gibt da Varianten dazu. Erstens, man kann es so machen, dass man nicht einen zufälligen Index nimmt. Also zufällig ist sozusagen der Grund, warum das stochastisches Gradientenabstiegsverfahren heißt, wenn man hier eben stochastisch, also Wahrscheinlichkeit hineinbringt und das Ganze hier so ein bisschen zufällig passiert.
Man kann aber auch einfach durch diese I hier durchcyclen, also man stafft bei 1 und geht dann durch bis N. Wenn man ganz auf Ende angekommen ist, dann würde man typischerweise diese Daten einmal durchwirbeln, die Reihenfolge ändern und dann mit der Moin-Reihenfolge von vorne bis hinten durchgehen.
Oder man macht das Ganze batchweise, also man macht mehr auf einmal, man geht nicht durch alle N, das ist nicht durch alle 10 Millionen auf einmal, sondern man wählt eine Teilmenge aus von sagen wir mal 100 Daten und man nimmt immer 100 Daten auf einmal.
Das heißt, man macht den Gradientenabstieg unter Berücksichtigung von nur zum Beispiel 100, also M vielen von diesen Komponentenfunktionen. Das heißt, man wählt hier eine zufällige Menge von Indizes i1 bis iM, das was deutlich kleiner sein soll als N.
Eine Batchgröße von M und dann geht man entlang des Gradienten von der Batch von diesem Zielfunktionen.
Das ist auch schon das Verfahren. Da gibt es nicht viel Theorie dazu, die man sich das hier anschauen muss. Das funktioniert genauso wie das Gradientenverfahren, aber es gibt natürlich einen Vorteil und einen Nachteil.
Der klare Vorteil ist, man muss nicht alle Gradienten auf einmal bestimmen und nicht in Geliteration alle Gradienten bestimmen, sondern nur so viele wie man hier eben in diesem Batch drin hat, also zum Beispiel nur eine einzige.
Der Nachteil ist natürlich der, dass weil man nur einen Datenpunkt, sagen wir in diesem Fall hier bei Batchgröße 1, weil man nur einen einzelnen Datenpunkt berücksichtigt, kann es sein, dass man lokal optimiert in eine Richtung, die zwar für diesen speziellen Datenpunkt gut ist, aber für alle Datenpunkte extrem schlecht ist.
Das heißt, zum Beispiel in diesem Regressionsbeispiel, da würde man jetzt vielleicht die Regressionsfunktion so anpassen, dass sie perfekt zu diesem einen Datenpunkt passt, aber dabei den Fit zu den anderen Datenpunkten völlig zerstört.
Presenters
Zugänglich über
Offener Zugang
Dauer
00:11:09 Min
Aufnahmedatum
2021-06-16
Hochgeladen am
2021-06-16 22:56:57
Sprache
de-DE