“I always wondered how it would be if a superior species landed on earth and showed us how they played chess”, liess der dänische Schachmeister Peter Heine Nielsen kürzlich in einem Interview mit der BBC verlauten. “Now I know.”
Was er damit ansprach war Googles künstliche Intelligenz Alpha Zero, die sich in nur vier Stunden und mit der blossen Kenntnis der grundlegenden Schachregeln selbständig zu einem der besten Schachspieler der Welt coachte und anschliessend der etablierten Schachsoftware Stockfish 8 in 100 Partien den Meister zeigte. Alpha Zeros Spiel ist faszinierend. Die künstliche Intelligenz scheint sehr viel Wert auf aussichtsreiche Stellungen zu legen und nimmt dafür auch grosse Material-Verluste in Kauf, sprich opfert wichtige Figuren. Auf dem Youtube-Channel Agmador’s Chess Channel sind Analysen der Spiele zwischen Alpha Zero und Stockfish 8 zu finden, die ich sehr interessant finde (ich habe ein Video aus dieser Serie unten angehängt).
Das obige Beispiel ist nur eines von vielen, das die heutigen Möglichkeiten im Bereich der künstlichen Intelligenz eindrücklich aufzeigt. Doch wie genau funktioniert künstliche Intelligenz? Was sind die grundlegenden Ideen? Um der Beantwortung dieser Fragen näher zu kommen, werde ich in diesem Beitrag ein Klassifikations-Problem aus dem Gebiet Supervised Machine Learning und mehrere Lösungsansätze dazu vorstellen. Der Inhalt des Beitrags basiert sowohl auf der Vorlesung Introduction to Machine Learning, die ich im letzten Semester an der ETH Zürich besucht habe, als auch auf der Website A Neural Network Playground von Googles Machine Learning Framework Tensorflow.
Ein häufig vorkommendes Problem in (Supervised) Machine Learning ist die Klassifikation von Daten. Ausgehend von einem Trainings-Datenset mit Input-Vektoren
(z.B. medizinische Angaben wie das Alter, das Gewicht, der Blutdruck, etc. eines Patienten) und Labels
(z.B. ob der Patient eine gewisse Krankheit hat oder nicht) soll ein Modell trainiert werden, das anschliessend neuen Input-Vektoren
ein geschätztes Label
zuordnen kann, das möglichst genau mit dem echten (eventuell unbekannten) Label
übereinstimmt.
Um quantifizieren zu können, wie gut die Vorhersagen eines Modells sind, muss eine sogenannte Loss-Funktion definiert werden. Die Argumente dieser Funktion sind das wahre Label
und das geschätzte Label
. Der Funktionswert der Loss-Funktion wird grösser, je weiter entfernt das wahre Label vom geschätzten liegt. Um ein Modell dem Trainings-Datenset anzupassen, müssen die Parameter des Modells also so gewählt werden, dass
minimal wird (dann sind nämlich die Vorhersagen des Modells optimal).
Lineare Modelle
Die einfachsten Modelle liefern geschätzte Labels , die linear von den Input-Vektoren
abhängen:
wobei die Parameter des Modells sind. Dieses Modell kann dem Trainings-Datenset angepasst werden, indem
als Parameter gewählt werden. Obige Optimierung wird numerisch mit dem Algorithmus Gradient Descent durchgeführt. Die sogenannten Decision Boundaries linearer Modelle, sprich die Grenzen im Raum der Input-Vektoren zwischen verschiedenen “Label-Gebieten”, sind natürlich linear in
(siehe Abbildung).

Dies wird zu einem Problem, sobald das Problem nicht mehr mit einer linearen Decision Boundary gelöst werden kann.


Nicht-lineare Modelle (Feature-Transformation)
Mit dem Trick der Feature-Transformation kann man im Grunde lineare Modelle zu nicht-linearen erweitern. Die Idee dabei ist, dass eine nicht-lineare Feature-Transformation auf die Input-Vektoren angewendet wird.
Beispiel: Für :
.
Auf den transformierten Input-Vektoren kann dann ein lineares Modell trainiert werden:
wobei wiederum die Parameter des Modells sind. Dieses Modell kann analog zu oben dem Trainings-Datenset angepasst werden, indem
als Parameter gewählt werden. Dadurch kann die Vielfalt der Datenmengen, die durch das Modell klassifiziert werden können, stark vergrössert werden.


Neuronale Netze
Obwohl man durch den oben beschriebenen Trick der Feature-Transformation eine Vielzahl von Datensets sinnvoll klassifizieren kann, hat diese Herangehensweise einen entscheidenen Nachteil: die Feature-Transformationen müssen quasi “von Hand” ausgewählt werden, d.h. es muss im Vornherein klar sein, welche transformierten Input-Vektoren sinnvoll zur Klassifizierung eines Datensets sind. Wie oben gezeigt ist die Feature-Transformation aus dem Beispiel nicht sinnvoll, um das Datenset mit der Spirale zu klassifizieren. Es wäre also raffiniert, wenn die Auswahl der “sinnvollen” Feature-Transformationen auch Teil des Trainings-Prozesses wären, also anhand des Trainings-Datensets optimiert werden würde. Genau dies ist die Idee von Neuronalen Netzen.
Neuronale Netze sind meist aus mehreren Layers aufgebaut. Das heisst, dass aus dem Input-Vektor zuerst Werte für die Knoten (Neuronen) der nachfolgenden Schichten berechnet werden, aus denen dann schlussendlich das geschätzte Label
folgt. In der Folge werden die Schichten mit Subskripts
notiert, wobei die Schicht
dem Input-Vektor
entspricht und die Schicht
dem geschätzten Label
. Die Anzahl Knoten in den jeweiligen Schichten wird mit
für
notiert, sprich für das Beispiel im Bild unten gilt:
Die Werte der l-ten Schicht werden mit
für
notiert.

Aus den Werten der
Knoten der l-ten Schicht folgen die Werte
der
Knoten der nächsten Schicht folgendermassen:
Die Bedeutung der Funktion und der Gewichts-Matrix
werden weiter unten diskutiert. Die nullte Schicht des Neuronalen Netzes besteht ganz einfach aus dem Input-Vektor, sprich
Aus den Werten der Knoten der zweitletzten Schicht
kann dann das geschätzte Label
folgendermassen berechnet werden:
Beachte, dass die Input-Parameter wie oben beschrieben in den Werten der Knoten der zweitletzten Schicht
“verarbeitet” sind.
Das beschriebene Prinzip, dass ausgehend von den Werten der Knoten der einen Schicht die Werte der Knoten der folgenden Schicht berechnet werden, bis man schlussendlich das geschätzte Label erhält, wird Forward Propagation genannt. Es ist im Grunde ganz einfach, sieht aber in voller Notation zugegebenermassen etwas komplex aus.
Es bleiben zwei Konzepte zu diskutieren, die in obigen Formeln zur Forward Propagation auftauchen, ohne genauer erläutert worden zu sein. Ersteres ist die sogenannte Activation Function . Es handelt sich dabei um eine fest gewählte nicht-lineare Funktion. Die gängigsten Activation Functions sind:
Sigmoid:
Tanh:
ReLU:
deren Plots folgendermassen aussehen:

Die Funktion der Activation Function lässt sich am besten anhand einer Analogie aus der Biologie verdeutlichen: Neuronen im menschlichen Gehirn besitzen eine Activation Function in Form einer Stufenfunktion. Liegt das Potential aller einlaufenden Stimuli unter dem sogenannten Schwellpotential des Neurons, so wird kein Puls weitergegeben (Wert 0), wird das Schwellpotential erreicht, so feuert das Neuron einen Puls ab (Wert 1). Die Knoten in den künstlichen Neuronalen Netzen funktionieren auf eine ähnliche Weise: die (gewichtete) Summe aller Stimuli (Werte der Knoten in der vorangehenden Schicht) werden der Activation Function als Input übergeben, welche dann den Wert des Knotens in der neuen Schicht bestimmt. Die Sigmoid- und die Tanh-Funktion stellen kontinuierliche (und insbesondere stetig differenzierbare) Versionen der Stufenfunktion dar. Die ReLU-Funktion ist nicht mehr wirklich eine Stufenfunktion und auch nicht in allen Punkten differenzierbar, hat aber gegenüber den anderen Activation Functions gewisse Vorteile, weshalb sie in der Praxis häufig eingesetzt wird. Wie im menschlichen Gehirn sind auch die Activation Functions in künstlichen Neuronalen Netzen fest programmiert, das heisst sie werden zu Beginn festgelegt und können im Lernprozess des Netzwerks nicht verändert werden.
Den durch das Lernen veränderlichen Teil des Netzwerkes stellen die Gewichts-Matrizen dar, womit wir beim zweiten der beiden noch zu diskutierenden Konzepte angelangt wären. Die Matrix
ist ein Element von
Der Koeffizient
gibt den Einfluss (bzw. das Gewicht) des Wertes des
-ten Knoten
der Schicht
auf den Wert des
-ten Knoten
der Schicht
an. Falls der Koeffizient positiv ist, so bewirkt ein hoher Wert des Knotens
einen höheren Wert des Knotens
. Ist der Koeffizient dagegen negativ, so verkleinert ein hoher Wert des Knotens
den Wert des Knotens
. Im Bild oben sind positive Koeffizienten als blaue Verbindungslinien dargestellt, negative dagegen als orange Verbindungslinien. Die optimalen Gewichts-Matrizen werden wiederum über das Trainings-Datenset
bestimmt. Es muss das Optimierungs-Problem
gelöst werden, was mithilfe der sogenannten Backpropagation und Gradient Descent umgesetzt werden kann.
Der Vorteil von Neuronalen Netzen ist nun, dass die Auswahl der “sinnvollen” Feature-Transformationen Teil der Optimisierung ist, die basierend auf dem Trainings-Datenset durchgeführt wird. Durch die Wahl der Gewichts-Matrizen werden für die Klassifikation relevante Features bestimmt. Diese sind in obigem Bild auf den Knoten des Neuronalen Netzes dargestellt.
Wie schlagen sich Neuronale Netze nun in der Praxis? Nach einminütigem Training ist das Neuronale Netz mit zwei Zwischenschichten à 5 Knoten imstande, das Klassifikationsproblem mit der Spirale zu lösen. Als Activation Function habe ich die ReLU-Funktion gewählt. Da die ReLU-Funktion keine negativen Werte annehmen kann, nehmen die unten dargestellten Features auf den Knoten nur die Farben weiss (0) und blau (positiv), nicht jedoch orange (negativ) an.

Die beiden anderen vorgestellten Klassifikationsprobleme werden von diesem Neuronalen Netzwerk nach kurzem Training ebenfalls mit Leichtigkeit gelöst.
A Neural Network Playground
Die obigen Illustrationen und Beispiele basieren auf dem Neural Network Playground, der von Googles Machine Learning Framework Tensorflow zur Verfügung gestellt wurde. Meiner Meinung nach ist die Seite extrem übersichtlich gemacht und illustriert die Aspekte von Neural Networks auf eine intuitive Art und Weise. Ein Besuch lohnt sich auf alle Fälle!
Quellen
- A Neural Network Playground, Tensorflow.
- Introduction to Machine Learning, Prof. Andreas Krause, LAS ETH Zürich.
- Google’s ‘superhuman’ DeepMind AI claims chess crown, BBC News, 6. Dezember 2017.
Quellen Bilder
- Screenshots von A Neural Network Playground, Tensorflow
- researchgate.net