Machine Learning für Softwareentwickler. Paolo Perrotta
Richtung des Verlustgradienten, bis dieser Gradient sehr klein geworden ist. Um den Gradienten zu finden, berechnen wir die partiellen Ableitungen des Verlusts nach w und b.
Das Gradientenverfahren hat jedoch seine Grenzen. Da es auf Ableitungen basiert, muss die Verlustfunktion glatt und lückenlos sein, damit die Ableitung überall berechnet werden kann. Des Weiteren ist es möglich, dass das Verfahren in einem lokalen Minimum stecken bleibt und das globale Minimum nicht mehr erreicht. Um diese Probleme zu vermeiden, verwenden wir glatte Verlustfunktionen mit einem einzigen Minimum.
Das Gradientenverfahren ist nicht das Nonplusultra der Algorithmen zur Verlustminimierung. Forscher suchen nach anderen Algorithmen, die für bestimmte Umstände besser geeignet sind. Es gibt auch Variationen des regulären Verfahrens, von denen wir in diesem Buch noch einige kennenlernen werden. Nichtsdestoweniger ist das Gradientenverfahren im modernen ML von entscheidender Bedeutung und wird es auch noch lange bleiben.
Wappnen Sie sich jetzt für eine Herausforderung! Zu Beginn des Kapitels habe ich gesagt, dass es durch Anwendung des Gradientenverfahrens möglich wird, unseren Code auch auf interessantere Modelle zu übertragen und eine Annäherung an kompliziertere Datenmengen zu erreichen. Im nächsten Kapitel werden wir uns ein solches Modell ansehen.
Praktische Übung: Über das Ziel hinaus
Kommen wir noch einmal auf die Lernrate zurück. Im letzten Beispiel dieses Kapitels haben wir eine Lernrate von 0,001 verwendet. Wenn Sie die Lernrate erhöhen, werden Sie feststellen, dass der Verlust schließlich zu steigen beginnt anstatt weiter zu sinken. Können Sie sich denken, warum das so ist?
Wenn Sie den Grund durch abstraktes Nachdenken nicht herausfinden können, versuchen Sie, die Verlustfunktion aufzuzeichnen. Was geschieht bei einer sehr großen Lernrate? Die Antwort finden Sie im Verzeichnis 03_gradient/solution.
4
Hyperräume
In den beiden vorherigen Kapiteln haben wir eine Ausgabe aus einer Eingabe vorhergesagt, nämlich die Pizzaverkäufe aus der Anzahl der Reservierungen. Bei Aufgabenstellungen in der Praxis gibt es jedoch gewöhnlich mehr als nur eine Eingabe. Selbst so einfache Dinge wie Pizzaverkäufe hängen von mehr als nur einer Variablen wie hier der Anzahl der Reservierungen ab. Beispielsweise wird das Restaurant wahrscheinlich mehr Pizzas verkaufen, wenn sich Touristen in der Stadt befinden, auch wenn die Anzahl der Reservierungen gleich bleibt.
Wenn es schon bei Pizza mehrere Variablen gibt, dann versuchen Sie sich einmal vorzustellen, wie viele wir bei komplexeren Aufgaben wie der Bilderkennung abdecken müssen. Ein Lernprogramm, das nur eine Variable berücksichtigt, könnte solche kniffligen Probleme niemals lösen. Dazu müssen wir unser Programm so ausbauen, dass es mit mehreren Eingabevariablen umgehen kann.
Zum Lernen aus mehreren Eingabevariablen verwenden wir eine erweiterte Version der linearen Regression: die multiple lineare Regression. In diesem Kapitel werden wir unser Programm so umschreiben, dass es dieses Verfahren nutzt. Außerdem lernen Sie einige nützliche Fertigkeiten wie Matrixoperationen und verschiedene NumPy-Funktionen kennen. Fangen wir also gleich an!
Ein schweres Kapitel
Eine Warnung vorab: Für die meisten Leser dürfte dies das schwierigste Kapitel im ganzen Buch sein, und zwar aus zwei Gründen. Erstens sind die nächsten Seiten sehr mathematiklastig, und zweitens ist der Code zwar nicht umfangreich, hat es dafür aber in sich. An einer Stelle brauche ich fast zwei Seiten, nur um eine einzige Codezeile zu erklären.
Lassen Sie sich davon aber bitte nicht abschrecken. Die hier vorgestellten Prinzipien und Techniken sind für Machine Learning von entscheidender Bedeutung, weshalb es sich lohnt, sie zu lernen. Denken Sie auch immer daran, dass es nach diesem Kapitel leichter wird!
Noch mehr Dimensionen
Im letzten Kapitel haben wir eine Version unseres Programms geschrieben, die sich das Gradientenverfahren zunutze macht. Diese Version lässt sich auf komplexere Modelle mit mehr als einer Variablen skalieren.
In einem Anfall von Leichtsinn haben wir das auch unserem Freund Roberto gesagt. Das war ein Fehler, denn nun ist Roberto begierig darauf, bei der Vorhersage der Pizzaverkäufe neben den Reservierungen auch noch andere Eingabevariablen wie das Wetter oder die Anzahl der Touristen in der Stadt zu berücksichtigen.
Für uns bedeutet das natürlich mehr Arbeit. Dennoch können wir Roberto schon verstehen, denn je mehr Variablen wir in dem Modell berücksichtigen, umso genauer können wir die Pizzaverkäufe vorhersagen.
Als Ausgangspunkt verwenden wir eine erweiterte Version der alten Datei pizza.txt. Die ersten Zeilen dieser neuen Datenmenge sehen wie folgt aus:
04_hyperspace/pizza_2_vars.txt
Reservierungen | Temperatur | Pizzas |
13 | 26 | 44 |
2 | 14 | 23 |
14 | 20 | 28 |
Roberto vermutet, dass an wärmeren Tagen mehr Menschen seine Pizzeria besuchen, weshalb er auch die Temperatur aufgezeichnet hat. Die Labels (die Anzahl der verkauften Pizzas) befinden sich jetzt in der dritten Spalte, während die ersten beiden die Eingabevariablen enthalten.
Sehen wir uns als Erstes an, wie sich die lineare Regression ändert, wenn wir von einer zu zwei Eingabevariablen übergehen. Bei der linearen Regression werden die Beispiele bekanntlich wie folgt durch eine Gerade angenähert:
Zur Erinnerung finden Sie hier noch einmal die Formel für diese Gerade:
ŷ = x * w + b
Wenn wir eine zweite Eingabevariable hinzufügen (in unserem Fall die Temperatur), liegen die Beispiele nicht mehr auf einer Ebene, sondern sind Punkte im dreidimensionalen Raum. Zu ihrer Annäherung können wir das um eine Dimension erweiterte Äquivalent einer Geraden verwenden, nämlich eine Ebene, wie die nächste Abbildung zeigt.
Zur Berechnung von ŷ müssen wir jetzt eine Ebenengleichung verwenden. Sie ähnelt einer Geradengleichung, hat aber zwei Eingabevariablen, x1 und x2, sowie zwei Gewichte, w1 und w2:
ŷ = x1 * w1 + x2 * w2 + b
Wir brauchen getrennte Gewichte für die beiden Eingabevariablen. In Robertos Datenmenge ist x1 die Anzahl der Reservierungen und x2 die Temperatur, und es ist einleuchtend, dass diese Faktoren unterschiedliche Auswirkungen auf die Anzahl der verkauften Pizzas nehmen, weshalb sie auch mit unterschiedlichen Gewichten in die Berechnung eingehen müssen.
In der Geradengleichung hat der Bias b den Abstand vom Ursprung angegeben. Das Gleiche gilt auch für die Ebene. Ohne b würde sie durch den Ursprung verlaufen. Um das zu beweisen, setzen Sie alle Eingabevariablen auf 0. Ohne Bias wäre ŷ ebenfalls 0. Mit dem Bias aber können wir die Ebene vertikal beliebig verschieben, bis wir die Position gefunden haben, in der sie die Punkte bestmöglich annähert.
Was aber geschieht, wenn Roberto seiner Datenmenge noch eine weitere Spalte hinzufügt?
04_hyperspace/pizza_3_vars.txt
Die neue Eingabevariable gibt die Touristendichte in der Stadt an, die Roberto von der Website des örtlichen Fremdenverkehrsamts heruntergeladen hat. Die Werte reichen von 1 (»keine Seele in der Stadt«) bis 10 (»Touristeninvasion«).
Zu Anfang