Benutzer:O.tacke/2015/Machine Learning
Dies sind meine Notizen zum Online-Kurs Machine Learning, an dem ich teilnehme.
Woche 1: Introduction
BearbeitenDer Einstieg in den Kurs empfinde ich sehr sanft. Als Einführung wird der Unterschied zwischen Supervised Learning und Unsupervised Learning erklärt. Während beim Supervised Learning darum geht, aufgrund von gegebenen Werten eine Hypothese zu entwickeln, mit der für bekannte Zielgrößen gute Voraussagen über die Zukunft getroffen werden können, sollen beim Unsupervised Learning Strukturen bzw. Muster in einer (großen) Menge von Daten erkannt werden. Im Anschluss gab es eine kurze Einführung in das Thema (Univariate) Lineare Regression (Supervised Learning), die ich noch aus der Schule kenne. Statt eine Regressionsgerade durch gegebene Datenpunkte über partielles Ableiten und das Lösen eines linearen Gleichungssystems zu finden, wird hier der Ansatz des Gradient Descent genutzt. Dabei wird iterativ eine numerische Lösung bestimmt. Dieses Verfahren ist dem geschlossenen Weg wohl bei großen Datenmengen überlegen. Auch kein Problem, das Prinzip ist ja sehr intuitiv. Am Schluss wurde noch kurz erklärt, wie man elementare Operationen mit Matrizen und Vektoren ausführt, also auch Mathe-Schulstoff der Oberstufe.
Die Quizzes in den Videos sind leider eher auf dem Niveau "nicht einschlafen" denn "nachdenken", das finde ich etwas schade. Bei den kurzen Tests am Ende von Abschnitten sind aber erfreulicherweise auch Verständnisfragen dabei, bei denen es nicht lediglich um Reproduktion der Inhalte geht. War in dieser Woche wirklich noch kein Problem, aber mal abwarten, was noch kommt.
Auch erfreulich: Ich habe mich mit einem Studenten aus Indien zusammengetan, um gemeinsam zu lernen. Wir haben schon ein paar E-Mails ausgetauscht. Wird sicher ein netter Kurs.
Woche 2: Linear Regression with Multiple Variables, Octave Tutorial
BearbeitenIn dieser Woche wurde zunächst verallgemeinert fortgeführt, was in der ersten Woche zur Linearen Regression (mittels Gradient Descent) besprochen wurde -- letztlich nur der Umgang mit einer Matrix statt eines Vektors. Als ergänzender Kniff wurde auf das Skalieren und Normalisieren von Optimierungsfaktoren eingegangen, um damit den Gradient-Descent-Algorithmus zu beschleunigen. Ebenso wurde kurz der Einfluss der Lernrate auf Geschwindigkeit und Tauglichkeit des Gradient-Descent-Algorithmus besprochen, bevor um Schluss des Abschnitts alternativ auf das Lösen des Problems mittels Normalengleichungen eingegangen wurde. Letzgenannter Weg eigne sich aber nicht bei vielen Variablen, da er dann bedeutend langsamer sei als eine numerische Lösung mittels Gradient Descent. Teil zwei der Woche dreht sich um Octave, bestand aber von Inputseite lediglich daraus, Befehle vorzuführen und zu zeigen, was diese machen.
Die Fragen in den Quizzes sind bunt gemischt, von einfachen Aufgaben bis hin zu Verständnisfragen, die so nicht in den Videos thematisiert wurden. Hinzugekommen sind ab dieser Woche Programmieraufgaben in Octave, die aber sehr kleinteilig sind und bei denen in Funktionen meist nur ein oder zwei Zeilen eingetragen werden müssen, etwa mathematische Formeln aus den Videos. Ich hoffe, das wird noch herausfordernder.
Woche 3: Logistic Regression, Regularization
BearbeitenWoche drei begann mit einer Einführung in das Klassifizieren von Datensätzen (supervised learning). Ausgangspunkt war die lineare Regression aus den Vorwochen, deren Untauglichkeit aber für das neue Problem gezeigt wurde. Die Hypothesenfunktion wurde durch eine Sigmoidfunktion (speziell die logistische Funktion) ausgetauscht, um besser als mit einer lineare Funktion zwischen "an" und "aus" unterscheiden zu können -- anders gesagt, um eine Entscheidungsgrenze zu ziehen. Wegen der Einführung einer Sigmoidfunktion als Hypothese musste die Kostenfunktion angepasst werden, um sie konvex zu halten. Andernfalls würde der Gradient-Descent-Algorithmus möglicherweise in einem lokalen Minimum stoppen, nicht im globalen. Gezeigt wurde anschließend auch, wie bei mehr als zwei Klassen vorgegangen werden kann: mit der One-vs-all-Klassifizierung.
Als Folgeblock schloss sich das Problem des Overfitting an, bei dem durch Nutzung zu vieler Variablen bei zu kleinen Trainingsdatensätzen zwar diese prima in Klassen getrennt werden, aber weitere Testdaten nicht zuverlässig. Gelöst werden kann das Dilemma durch Regularisierung, bei der für die Variablen mit großen Werten Pönale eingeführt werden. Der Parameter für die Pönale muss sinnvoll eingestellt werden, da er sonst entweder keine Wirkung hat oder gar zu Underfitting führen kann.
Woche 4: Neural Networks: Representation
BearbeitenKünstliche Neuronale Netze -- Spannendes Thema. Ich bin während meiner Studiumszeit (nicht in meinem Studium) schon einmal kurz drüber gestolpert, aber habe ich mich nie wirklich mit beschäftigt. In der vierten Woche wurde kurz darauf eingegangen, welche Parallelen es zu echten neuronalen Netzen gibt und was so ein Gehirn alles anstellen kann, ohne dass es spezielle Algorithmen für verschiedene Aufgaben gäbe, sondern lediglich einen allgemeinen Lernalgorithmus. So die Theorie. Im Anschluss wurde die mathematische Repräsentation eines künstlichen Neuronalen Netzwerks vorgestellt und gezeigt, wie über Eingangsneuronen (über Zwischenschichten) am Ende an einem oder mehreren Ausgangsneuronen ein Ergebnis ankommt (forward propagation). Als einfache Beispiele für mögliche Algorithmen, die man damit bewusst modellieren könnte, wurden logische Funktionen wie AND, NOT oder XOR implementiert, auch wenn das natürlich nicht der Einsatzzweck für künstliche neuronale Netze ist. Es geht eher um Klassifikation von Daten.
Woche 5: Neural Networks: Learning
BearbeitenWoche Nummer fünf drehte sich darum, wie künstliche neuronale Netze lernen bzw. trainiert werden. Es gibt noch mehr Möglichkeiten, das weiß ich, aber im Kurs wurde nur die "normale" Backward Propagation mathematisch vorgestellt. Der Rest drehte sich eher um Praxistipps für die Implementierung: Aus- und Einrollen von Matrizen, Überprüfen von Gradienten zu Testzwecken über eine numerische Annäherung und der notwendigen Randomisierung der Startwerte für das Netz.
Die Implementierung in Octave war durchaus nett. Es mussten nicht bloß Einzeiler in vorbereitete Funktionen geschrieben werden, und bei dem ganzen Matrizenumgeforme und -herumgeschiebe muss man schon ziemlich aufpassen, dass man sich nicht vertut.