Automatisierte Datenanalyse


Datenanalyse

Wir leben in einem Zeitalter der Daten, in welchem immer mehr Menschen freiwillig Daten an die Cloud liefern: Öffentliche Plätze werden von Kameras beobachtet, Familien lassen sich von "smarten" Lautsprechern belauschen, Fitnessbegeisterte übermitteln ihre Vitaldaten in die Cloud, Einkaufslisten werden an Lieferanten übermittelt, in Instagramm oder Facebook wird minutiös die Lebensgeschichte dokumentiert,...

Diese Daten sind heutzutage viel Wert, denn aufbauend auf einer geeigneten Analyse lassen sich Informationen herausfiltern, mit deren Hilfe Werbung gestaltet und platziert werden kann, so dass erwünschtes Konsum- oder Wahlverhalten gefördert werden kann. In diktatorischen Staatsformen können störende Individuen leicht identifiziert werden und vieles mehr.

In den letzten Jahren ist wegen immer mehr verfügbarer Daten das Problem entstanden, dass die riesigen Datenmengen nicht mehr zeitnah sinnvoll ausgewertet werden können, weswegen sie an Wert verlieren. Viele Daten-Analyse-Projekte scheitern.

Die Herausforderung für die Algorithmiker besteht darin, den Prozess der Datenanalyse weitgehend zu automatisieren. Aufgrund der riesigen Datenmengen scheitern aber viele Algorithmen daran, aus großen Datenmengen sinnvolle und nutzbare Informationen zu extrahieren. Deswegen beobachtet man zunehmend, dass erfolgreiche Datenanalyse-Projekte eine automatisierte Datenanalyse einsetzen, die maschinelles Lernen in den Analyse-Prozess einbindet.

Die Datenmengen wachsen oft so stark an, das auch mit Hilfe maschinellen Lernens Analyseprojekte nicht in der gewünschten Zeit abgeschlossen werden. Aus diesem Grund entwickelt man automatisiertes maschinelles Lernen, bei welchem sich ein Lernalgorithmus selbst weiter entwickelt.

Die Algorithmik ist inzwischen an einem Entwicklungsstadium angekommen, bei welcher die automatische Automation der Datenanalyse automatisiert wird. Oder anders ausgedrückt die Datenanalyse wird von Algorithmen ausgeführt, welche von maschinellen Lern-Algorithmen entwickelt wurden. Und die maschinellen Lern-Algorithmen werden von Algorithmen automatisiert weiterentwickelt.

Ein Beispiel:
Es gibt Computerprogramme, denen das Brettspiel Go beigebracht wurde, indem die Spielregeln einprogrammiert und Spielstrategien als Algorithmen formuliert wurden. Diese Programme hatten nie eine Chance gegen menschliche Profi-Spieler. Im März 2016 siegte das Computerprogramm AlphaGo gegen einen der besten menschlichen Spieler Lee Sedol. AlphaGo wurde mit einer riesigen Anzahl an gespielten Go-Spielen gefüttert und entwickelte selbst basierend auf Algorithmen des maschinellen Lernens Gewinn-Strategien. Im Jahr 2018 entwickelte man das Programm AlphaGo Zero, dem man lediglich die Spielregeln mitteilte und das man gegen sich selbst spielen ließ. Indem man umfangreiche neuronale Netze als grundlegende Architektur programmierte und Lernalgorithmen des verstärkenden Lernens im Zusammenspiel mit ausgefeilten Suchalgorithmen einbaute, konnte sich das Programm das spielen selbst beibringen und besiegte nach kurzer Zeit das Programm AlphaGo. Als man AlphaGo die Spielregeln von Schach beibrachte, konnte es mit nur 4 Stunden Trainingszeit, das bis dahin weltbeste Schachprogramm schlagen.


Tensorflow

Bevor wir, wie im Kerncurriculum gefordert, Chancen und Risiken der automatisierten Datenanalyse diskutieren, sollen Sie die grundlegenden Ideen anhand von Beipielprojekten kennenlernen. Der folgende Kurs in maschinellem Lernen wird Sie stark fordern, aber gerade das macht ja besonders viel Spaß. Der Kurs basiert auf dem Video-Kurs TensorFlow.js von Daniel Shiffman: Introduction to TensorFlow.js.

TensorFlow.js ist eine JavaScript-Bibliothek, welche von Google entwickelt und gepflegt wird. Mit TensorFlow.js lassen sich Projekte realisieren, bei denen maschinelles Lernen eingesetzt wird, um Daten automatisiert zu analysieren und zu modellieren.

Damit ein Computerprogramm mit Daten arbeiten kann, müssen diese geeignet gespeichert werden. Die Bibliothek TensorFlow.js erwartet, dass die von der Bibliothek zu verarbeitenden Daten als Tensoren übergeben werden. Tensoren kennen Sie bereits aus dem Unterricht der Vektorgeometrie:

  • Skalare = 0-dimensionale Tensoren (Zahlen)
  • Vektoren = 1-dimensionale Tensoren (eine Liste von Zahlen)
  • Matrizen = 2-dimensionale Tensoren (eine 2-dimensionale Anordnung von Zahlen)
  • n-dimensionale Tensoren (mehrdimensionale Anordnungen von Zahlen)

Öffnen Sie folgende Entwicklungsumgebung in einem neuen Fenster. Öffnen Sie die Konsole und vergleichen Sie den Quelltext, mit den in der Konsole ausgegebenen Daten.


Die automatisierte lineare Regression

Lineare Regression ist die wohl einfachste Anpassung einer Funktion an gegebene Daten. Mit linearen Funktionen sind Sie seit der Mittelstufe vertraut und wissen, dass eine lineare Funktion allgemein mit folgender Funktionsgleichung beschrieben werden kann:

\[ y = m \cdot x + c\]

Wenn man also zu gegebenen Daten eine lineare Funktion gefunden hat, welche die gegebenen Daten geeignet modelliert, kann man für x-Werte, die nicht gegeben sind, mit Hilfe des Funktionsterms einen möglichen y-Wert berechnen, der zu den gegebenen Daten "passt". Eine solche lineare Regression können Sie selbst mit Hilfe des GTRs durchführen. Dazu gehen wir im Unterricht so vor, dass wir die gegebenen Messdaten plotten, uns für eine geeignete Regression entscheiden und den Taschenrechner dann die Zielfunktion berechnen lassen.

Bei der Idee des maschinellen Lernens sollen die Algorithmen sehr viel flexibler werden. Im einführenden Beispiel haben Sie erfahren, dass sich das Programm AlphaGo Zero die Spiele Go, Schach und auch das japanische Shogi selbst beigebracht hat. Der vom Computer verwendete Maschinen-Lern-Algorithmus blieb unverändert, als Datenmenge bekam der Algorithmus die Regeln von Schach bzw. Shogi mitgeteilt. Das ist die Idee des maschinellen Lernens: der Computer bekommt eine bestimmte Datenmenge vorgesetzt und entscheidet selbst, aufgrund von geeigneten Regeln, wie diese Daten ausgewertet werden. Die Datenmenge könnte auch aus Messdaten von einem physikalischen Experiment stammen oder die Pixelwerte eines Katzenbilds aus dem Internet sein.

Wenn ein Algorithmus einmal soweit ist, dass die Daten selbst klassifiziert und nach der Klassifikation mit den geeigneten Sub-Algorithmen ausgewertet werden könen, dann stehen wir kurz vor der künstlichen Intelligenz. Wir Menschen tun so etwas den lieben langen Tag: wir erfassen mit unseren Sensoren (Augen, Ohren,...) Daten, die unser Gehirn klassifiziert und aus der Analyse der Daten dem Körper Handlungsanweisungen gibt. Das Auge erfasst grünes Licht, klassifiziert das Licht als Ampelsignal und gibt den Beinen die Anweisung loszugehen, um die Straße zu überqueren.

Im folgenden Programm wird also kein mathematischer Algorithmus implementiert, der zu gegebenen Daten per linearer Regression eine optimale Ausgleichsgerade findet, sondern es wird ein Regelwerk festgelegt, auf dessen Grundlage TensorFlow.js mit Methoden des maschinellen Lernens die Daten so auswertet, dass die definierte Regel: Verlustfunktion wird minimal erreicht wird. Sobald dieser optimale Zustand erreicht wurde, kann man als Anwender des Programms davon ausgehen, dass die gefundene lineare Funktion die gegebenen Daten optimal modelliert.

Lineare Regression

Anders als im Methematikunterricht schreiben wir die lineare Funktionsgleichung wie folgt:

\[ h(x) = w_0 + w_1 \cdot x\]

\(h(x)\) wird auch als Hypothese bezeichnet, denn wir behaupten, dass \(h(x)\) die gegebenen Daten geeignet modelliert. Die Frage ist nun, wann "passt" eine lineare Funktion zu den gegebenen Daten oder anders formuliert: wie gut ist die Hypothese? Für die Beurteilung der Güte der Anpassung gibt es unterschiedliche Modelle. Meist wird das Modell des minimalen Abstandsquadrats verwendet. Die Formel dafür ist:

\[ V(w) = \frac{1}{2n} \sum_{i = 1}^{n} (h(x) - y)^2 \]

Anschaulich berechnet man für jeden gegebenen Punkt die Differenz zwischen dem gegebenen y-Wert und dem y-Wert, der von der modellierten Funktionsgleichung berechnet wird und berechnet das Quadrat dieser Differenz. Wenn der Mittelwert dieser quadrierten Abstände minimal wird, dann hat man die für die gegebenen Daten ideale lineare Funktion gefunden. Die Hypothese \(h(x)\) wäre dann also eine geeignete Hypothese.

Die Funktion \(V(w)\) hat einen eigenen Namen bekommen: Verlustfunktion. Die Verlustfunktion wird im Prozess der Modellanpassung minimiert. \(V(w)\) ist ein Maß der Abweichung zwischen den gegebenen Daten und den mit der modellierten Funktion "vorhergesagten" Daten.

Das Ziel der Modellierung besteht also darin, dass der Wert der Verlustfunktion \(V(w)\) minimiert wird. Dabei geht man so vor, dass bei einer gegebenen Menge von Punkten die Werte von \(w_0\) und \(w_1\) geeignet variiert werden. Der Prozess soll automatisiert ablaufen, so dass der Algorithmus selbst feststellen kann, wann \(V(w)\) einen optimalen Wert erreicht hat.

Einen solchen Algorithmus haben Mathematiker mit Hilfe der Differenzialrechnung gefunden. Durch Variation der Parameter \(w_0\) und \(w_1\) berechnet man die Ableitungen von \(V(w)\) jeweils nach einem der beiden Parameter:

\[ w_0 = w_0 - \frac{\alpha}{n} \cdot \frac{d V(w)}{d w_0} \\ w_1 = w_1 - \frac{\alpha}{n} \cdot \frac{d V(w)}{d w_1}\]

mit

\[ V(w) = \frac{1}{2n} \sum_{i = 1}^{n} (h(x_i) - y_i)^2 \]

Der Parameter \(\alpha\) wird Lernrate genannt. Die Ableitungen \(\frac{d V(w)}{d w_0}\) und \(\frac{d V(w)}{d w_1}\) liefern:

\[ \frac{d V(w)}{d w_0} = \frac{1}{n} \sum_{i = 1}^{n} (h(x_i) - y_i) \\ \frac{d V(w)}{d w_1} = \frac{1}{n} \sum_{i = 1}^{n} \left( (h(x_i) - y_i) \cdot x_i \right)\]

Als kleine Fingerübung zur Anwendung der Kettenregel sollten Sie diese Ableitungen per Hand nachrechnen. Ein Minimum kann als Tiefpunkt mit der Steigung 0 aufgefasst werden. Mit Hilfe der Ableitungen kann man also durch Variation von \(w_0\) und \(w_1\) den Tiefpunkt der Verlustfunktion finden, um so eine optimale Funktion zu ermitteln.


Der Quellcode

Der gerade vorgestellte Ansatz der Minimierung der Verlustfunktion könnte per Hand programmiert werden. Die Fehleranfälligkeit eines eigenen Algorithmus ist groß und oft ist die Effizienz nicht besonders gut. Hier kann man mit Hilfe einer professionellen Bibliothek wie TensorFlow.js die eigenen Algorithmen optimiert werden, ohne dass man sich die mathematischen und algorithmischen Details mühsam erarbeiten muss. Ohne eine geeignete Arbeitsteilung würden viele komplexe Projekte heutzutage scheitern. Also erarbeiten Mathe/Algorithmen-Profis Bibliotheken, die Daten-Analytiker einsetzen können.

Im folgenden wird Ihnen ein Algorithmus vorgestellt, mit dem zu einer Menge gegebener Daten eine geeignete lineare Modellierung mit Hilfe der Bibliothek TensorFlow.js gesucht wird. Wir benötigen dazu:

  • die Daten (im folgenden Programm werden die x-y-Koordinaten mit der Maus eingegeben)
  • eine Verlustfunktion \(V(w)\), die misst, wie gut eine lineare Funktion \(h(x)\) zu den Daten passt
  • einen Optimizer, welcher die Verlustfunktion minimiert
  • eine Lernrate, die festlegt mit welchem Aufwand der Optimizer die Verlustfunktion optimiert (beeinflusst die Rechenzeit)

Lernen Sie das Programm kennen und beachten Sie die Kommentare im Quellcode. Versuchen Sie die Theorie des letzten Abschnitts im Quellcode wiederzufinden.

Quelle: Daniel Shiffman, Linear Regression with TensorFlow.js


Lineare Regression (Maschinen-Lernen)

Beobachten Sie das Verhalten der Verlustfunktion und die Gesamtfläche der Abweichungsquadrate. Das Programm sucht einen mimimalen Wert für die Verlustfunktion, woraus die minimale Gesamtfläche folgt und damit eine optimale Lage der Gerade.

In einem neuen Fenster starten: Lineare Regression mit TensorFlow.js


Polynom-x^3-Regression (Maschinen-Lernen)

Beobachten Sie das Verhalten der Verlustfunktion und die Gesamtfläche der Abweichungsquadrate. Das Programm sucht einen mimimalen Wert für die Verlustfunktion, woraus die minimale Gesamtfläche folgt und damit eine optimale Lage der Parabel.

In einem neuen Fenster starten: x^3-Regression mit TensorFlow.js


Polynom-x^6-Regression (Maschinen-Lernen)

Beobachten Sie das Verhalten der Verlustfunktion und die Gesamtfläche der Abweichungsquadrate. Das Programm sucht einen mimimalen Wert für die Verlustfunktion, woraus die minimale Gesamtfläche folgt und damit eine optimale Lage der Parabel.

In einem neuen Fenster starten: x^6-Regression mit TensorFlow.js


Anwendungsbeispiel 1: Autonomes Fahren

Mit den Ideen des maschinellen Lernens soll natürlich viel mehr geleistet werden als eine Gerade zu finden, das können wir auch per Hand wie im Matheunterricht leisten. Vielmehr sollen komplexere Situation, wie das autonome Fahren durch maschinelles Lernen unterstützt werden. Dass das bereits funktioniert, können Sie den entsprechenden Pressemitteilungen entnhemen.

Im folgenden können Sie virtuelle autonome Autos in einem virtuellen Parcours trainieren, sich trotz der vielen Hindernisse sicher zu bewegen. Jan Hünermann hat dieses Programm freundlicherweise mit der MIT-Lizenz zur Verfügung gestellt.

Quelle: Autonomes Fahren mit NeuroJS

Öffnen Sie die Simulation in einem neuen Fenster: Autonomes Fahren


Beispiel 2: Evolution

Im zweiten Beispiel können Sie Autonome Systeme entwerfen, die sich Fortbewegung selbst beibringen sollen.

Öffnen Sie folgende Webseite in einem neuen Fenster: Evolution

Laden Sie Modelle durch einen Mausklick auf die mittlere Schaltfläche am oberen Simulationsrand und beobachten Sie das Verhalten der autonomen Agenten. Entwerfen Sie eigenen Modelle und experimentieren Sie mit den Simulationseinstellungen.

Viel Spaß!