In diesem Blog wird die Lernerfahrung beschrieben aus dem Online-Kurs „Machine Learning A-Z™: Hands-On Python & R In Data Science”. Ich gehe in diesem Blog der Frage nach, inwieweit sich dieser Kurs für IT Projektleiter und Product Owner eignet, um ein besseres Verständnis für Maschinenlernen / Künstliche Intelligenz zu bekommen – und zwar ohne tiefere Vorkenntnisse. Denn: Maschinenlernen bzw. Künstliche Intelligenz wird in der Softwareentwicklung eine wachsende Bedeutung einnehmen; in absehbarer Zeit dürfte es nur noch wenige Softwareprojekte geben, die gänzlich ohne Maschinenlernen auskommen. In den Worten von Google-Chef Sundar Pichai: „Wir werden uns von einer Mobile-first-Welt in eine KI-first-Welt bewegen“, wo der Computer ein mit Künstlicher Intelligenz (KI) ausgestatteter Sprachassistent sein wird.

In dieser Artikelserie zum udemy Academy-Kurs vermittele ich einige ausgewählte, wesentliche Knowledge Nuggets, die ein gutes Verständnis von der inhaltlichen Ausrichtung des Online-Kurses und gleichzeitig einige wesentliche Lerninhalte vermitteln. Dieser Überblick ist ein Appetizer und soll den Online-Kurs selbstverständlich nicht ersetzen.

Hier geht’s zu den ersten sieben Teilen der Serie:

Maschinenlernen / Künstliche Intelligenz – Deep Learning

Der achte Teil des Online-Kurses zum Maschinenlernen ist der faszinierendste Teil des Kurses, der mir einen überwältigenden Aha-Effekt beschert hat. In diesem Kurs bauen wir als Teilnehmer tatsächlich in Python ein Künstliches Neuronales Netzwerk auf, mit dem wir ein gängiges Business Problem lösen. Toll. Einfach toll.

Die Grundidee von Künstlichen Neuronalen Netzwerken ist bekannt: Hier wird die Funktionsweise des menschlichen Gehirns nachgebildet, jene Vernetzung von Abermilliarden Neuronen, die über Synapsen miteinander kommunizieren.

Maschinenlernen. Deep Learning. Künstliche Neuronale Netzwerke. Einführung Schritt 1Abbildung: Künstliche Neuronale Netzwerke. Die Synapse in biologischen neuronalen Netzwerken.

Jedes Neuron im menschlichen Gehirn ist mit Hunderten anderer Neuronen verknüpft, die Kommunikation erfolgt über Synapsen. Hier werden keineswegs komplexe Informationen weitergegeben, sondern lediglich mehr oder minder starke Signale. Die Bedeutung steckt in der Stärke des Signals, das empfangende Neuron erhält also ein schwaches oder ein starkes Signal. Eben dies lässt sich in einem Künstlichen Neuronalen Netz gut nachbilden; die Stärke des Signals in einem biologischen Neuronalen Netzwerk wird dabei über sogenannte Gewichtungen (oder: Gewichtungsfaktoren) nachgebildet, die im Rahmen des Lernprozesses sukzessive angepasst werden.

Der einfachste Fall ist ein neuronales Netzwerk, das aus nur zwei Schichten besteht: der Input-Schicht und einer Output-Schicht. Hier gewinnen die Gewichtungen / Gewichtungsfaktoren bei der Signalübertragung eine konkretere, besser nachvollziehbare Bedeutung: Nehmen wir an, das unten abgebildete, sehr simple neuronale Netzwerk soll trainiert werden, um mit einigen Inputfaktoren den Wert einer Immobilie zu bestimmen (unabhängige Variablen, hier: Fläche, Anzahl Zimmer, Entfernung zur Großstadt, Baujahr). Dieses Neuronale Netzwerk bildet dann im Grunde eine Funktion der Mehrfachen Regression ab (vgl. Kursteil 2), wobei die Gewichte bei der Signalübertragung zwischen den (künstlichen) Neuronen den Koeffizienten (w1, w2, w3, w4) der Regressionsfunktion entsprechen.

Maschinenlernen. Deep Learning. Künstliche Neuronale Netzwerke. Einführung Schritt 7Abbildung: Künstliche neuronale Netzwerke. Ein sehr simples neuronales Netzwerk – Prinzip der Multiplen Regression

Und wenn Sie nun zwischen die Input-Schicht und die Output-Schicht eine weitere Schicht (ein sogenanntes hidden layer) einziehen, dann haben Sie bereits ein Deep Learning Netzwerk.

Maschinenlernen. Deep Learning. Künstliche Neuronale Netzwerke. Einführung Schritt 2Abbildung: Ein sehr simples neuronales Netzwerk.

Eine der zentralen Gestaltungsparameter beim Aufbau von Künstlichen Neuronalen Netzwerken ist die sogenannte Activation Function des Neurons. Diese Activation Function bestimmt, wie die Input-Signale verarbeitet werden zum Ausgangs-Signal.

Maschinenlernen. Deep Learning. Künstliche Neuronale Netzwerke. Einführung Schritt 3Abbildung: Künstliche neuronale Netzwerke. Die Activation Function.

Die bekanntesten Funktionen sind hierbei Threshold Function, Sigmoid Function und Rectifier Function. Die Threshold Function funktioniert vollkommen binär: Sobald ein bestimmter Schwellwert überschritten wird, wird ein (immer gleich hohes) Signal ausgesendet – und zwar unabhängig von der Stärke des Eingangssignals, sofern nur der Schwellwert überschritten ist.

Maschinenlernen. Deep Learning. Künstliche Neuronale Netzwerke. Einführung Schritt 4Abbildung: Künstliche neuronale Netzwerke. Die Threshold Function als Activation Function.

Die Sigmoid Function ist bereits aus der Logistischen Regression bekannt (Vgl. Teil 2 des Kurses).

Maschinenlernen. Deep Learning. Künstliche Neuronale Netzwerke. Einführung Schritt 5Abbildung: Künstliche neuronale Netzwerke. Die Sigmoid Function als Activation Function.

Die Rectifier Function ist die am häufigsten genutzte Funktion. Hier gilt auch ein Schwellwert für das Eingangssignal, ab diesem Schwellwert wird das Eingangssignal nach einer (linearen) Funktion in ein Ausgangssignal gewandelt.

Maschinenlernen. Deep Learning. Künstliche Neuronale Netzwerke. Einführung Schritt 6Abbildung: Künstliche neuronale Netzwerke. Die Rectifier Function als Activation Function.

Betrachten wir nun am bereits eingeführten Beispiel der Immobilienpreisbewertung den Vorteil von Deep Learning Netzwerken, also Netzwerken mit Tiefenschichten. Hier nochmals als Ausgangspunkt: Das einfache Netzwerk ohne Tiefenschichten. Jede Variable kann in diesem Netzwerk mit einem Gewichtung / Gewichtungsfaktor (bzw. Koeffizienten) versehen werden, es wird die Genauigkeit eines Modells auf Basis der Mehrfachen Regression erreicht:

Maschinenlernen. Deep Learning. Künstliche Neuronale Netzwerke. Einführung Schritt 7Abbildung: Künstliche neuronale Netzwerke. Vorteile von Deep Learning – Schritt 1.

Sobald in den Tiefenschichten (oder: hidden layers) zusätzliche Neuronen bereit stehen, können diese Neuronen Spezialisierungen übernehmen. Ein Neuron etwa identifiziert ein Muster in einem umfangreiche Set von Daten, das darauf hindeutet, dass eine bestimmte Käufergruppe (zum Beispiel Pendler) vor allem auf „Fläche“ und „Distanz der Immobilie zur Großstadt“ achtet; eben dieses Bewertungsmuster greift ab einer bestimmen Distanz oder ab einer bestimmten Flächengröße (Schwellwert!). Ein solcher differenzierter Zusammenhang lässt sich eben in einer Formel der Mehrfachen Regression nicht abbilden, wohl aber in einem Künstlichen Neuronalen Netzwerk.

Maschinenlernen. Deep Learning. Künstliche Neuronale Netzwerke. Einführung Schritt 8Abbildung: Künstliche neuronale Netzwerke. Vorteile von Deep Learning – Schritt 2.

Andere Neuronen erkennen wiederum andere Zusammenhänge zwischen Immobilienwert und den Immobilieneigenschaften. Im Endergebnis erhalten wir damit in der Tiefenschicht (diese Neuronalen Netzwerke werden auch Tiefschichter genannt) eine Reihe von spezialisierten Neuronen, womit auch differenzierte Korrelationen der Daten abgebildet werden können.

Maschinenlernen. Deep Learning. Künstliche Neuronale Netzwerke. Einführung Schritt 9Abbildung: Künstliche neuronale Netzwerke. Vorteile von Deep Learning – Schritt 3.

Selbstverständlich kann nicht nur eine Tiefenschicht aufgebaut werden, sondern zahlreiche Tiefenschichten:

Maschinenlernen. Deep Learning. Künstliche Neuronale Netzwerke. Künstliche Neuronale Netzwerke. Einführung Schritt 10Abbildung: Künstliche neuronale Netzwerke. Umfangreiche Küntliche Neuronale Netzwerke.

Maschinenlernen / Künstliche Intelligenz – Gradient Descent

Wie funktioniert nun der Lernprozess in einem Künstlichen Neuronalen Netzwerk? – Tatsächlich gibt es zahlreiche Parameter in einem Neuronalen Netzwerk, die sich verändern lassen: Die Activation Function der künstlichen Neuronen kann angepasst werden (Threshold Function, Sigmoid Function, Rectifier Function), die Gewichtungen können verändert werden, die Architektur des Netzwerkes an sich kann verändert werden (Anzahl Tiefenschichten, etc.). Typischerweise bezieht sich der Lernprozess eines Künstlichen Neuronalen Netzwerks auf die Veränderung der Gewichtungen, das heißt: Die Stärke der übertragenen Signale zwischen den künstlichen Neuronen wird verändert.

Dies geschieht wie folgt. Über eine sogenannte Cost Function wird bestimmt, wie gut die Vorhersage eines Künstlichen Netzwerks ist; dies wird gemessen als Abweichung des Vorhersagewertes von dem tatsächlichen Wert. Hierbei wird diese Abweichung quadriert, anschließend mit dem Faktor 0,5 multipliziert. Diese Information über die Güte der Vorhersage wird als Information an das Künstliche Netzwerk zurückgegeben. Man spricht hier von Back-Propagation. Auf dieser Basis werden die Gewichtungen (weights) angepasst.

Maschinenlernen. Deep Learning. Künstliche Neuronale Netzwerke. Cost FunctionAbbildung: Künstliche neuronale Netzwerke. Cost Function.

Die Kostenfunktion könnte etwa folgende Form annehmen, nämlich eine Parabelfunktion. Da es gilt, diese Kostenfunktion zu minimieren, liegt das absolute Minimum hier im Scheitelpunkt:

Maschinenlernen. Deep Learning. Künstliche Neuronale Netzwerke. Optimierung der Cost FunctionAbbildung: Künstliche neuronale Netzwerke. Optimierung der Cost Function.

Die Frage ist nun: Wie gelangt man zu diesem Scheitelpunkt?

Betrachten wir nochmals unser Künstliches Neuronales Netzwerk zur Bestimmung der Immobilienpreise. Es ist – im Vergleich zu den Neuronalen Netzen in der Praxis – ein sehr, sehr kleines Netzwerk. Es hat 25 Verbindungen zwischen künstlichen Neuronen, das heißt: Wir haben 25 Gewichtungen. Die Kombination all dieser Gewichtungen muss optimiert werden. Um die optimale Kombination von Gewichten für diese 25 Gewichtungen zu finden, muss man für jede dieser Kombinationen die Kostenfunktion bestimmen. Wie viele Kombinationen sind das? – Gehen wir davon aus, dass wir je Gewichtungsfaktor 50 verschiedene Werte ausprobieren wollen (was nicht sehr viel ist), dann erhalten wir dennoch bereits für dieses sehr kleine Netzwerk die unvorstellbar große Zahl von: 50 X 50 X 50 … 50 X 50 = 2.980.232.238.769.530.000.000.000.000.000.000.000.000.000.

Es dürfte Sie nicht überraschen, wenn ich sage, dass selbst der leistungsfähigste Supercomputer für diese Berechnung Jahrzehnte benötigen würde. Diese Holzhammermethode ist also keine praktikable Lösung.
Stattdessen bedient man sich des sogenannten Gradient Descent: Vorausgesetzt, dass die Kostenfunktion eine solche Parabelfunktion ist, kann man für einen Punkt auf der Kostenfunktion die Steigerung (Gradient Descent) bestimmen und erhält somit Hinweise darauf, in welche Richtung man sich bewegen muss, um zum Minimalpunkt zu kommen.

Maschinenlernen. Deep Learning. Künstliche Neuronale Netzwerke. Der Gradient DescentAbbildung: Künstliche neuronale Netzwerke. Der Gradient Descent.

Die Cost Function muss allerdings nicht zwingend eine konvexe Form aufweisen (wie die Parabelfunktion). Die Cost Function kann auch nachfolgende Form aufweisen, mit mehreren lokalen Minima, aber nur einem absoluten Minimum. Wenn man ein Minimum über den Ansatz des Gradient Descent identifiziert hat, stellt sich die Frage: Handelt es sich hierbei nur um ein lokales Minimum, oder um das absolute Minimum?

Maschinenlernen. Deep Learning. Künstliche Neuronale Netzwerke. Die Kostenfunktion mit lokalen und absoluten MinimaAbbildung: Künstliche neuronale Netzwerke. Die Kostenfunktion mit lokalen und absoluten Minima.

Ohne an dieser Stelle tiefer auf den mathematischen Lösungsansatz einzugehen, gilt hier: Diese Herausforderung lässt sich mit dem Ansatz des Stochastic Gradient Descent adäquat beantworten. Es geht hier nur darum, dass man diesen Begriff einordnen kann.

Maschinenlernen / Künstliche Intelligenz – Deep Learning in Python

Wir kommen nun zum aufregendsten Teil dieses Kurses: Der Aufbau eines Künstlichen Neuronalen Netzwerkes in Python. Ausgangspunkt ist ein häufiges Business Problem: Eine Bank stellt 10.000 Datensätze von Bankkunden zur Verfügung, von denen ein Teil in den vergangenen sechs Monaten als Kunde die Bank verlassen hat. Die Aufgabe besteht nun darin, einen Zusammenhang (Korrelation) zwischen den Kundenparametern (Matrix of Features bzw. unabhängige Variablen wie Geschlecht, Alter, Kontostand, Gehalt undsoweiter) und dem Wechselverhalten zu analysieren.

Maschinenlernen. Deep Learning. Künstliche Neuronale Netzwerke. Die Umsetzung von Deep Learning in Python – Schritt 1Abbildung: Künstliche neuronale Netzwerke. Die Umsetzung in Python. Die Ausgangsdaten.

Das hier aufgebaute Künstliche Neuronale Netzwerk in Python basiert auf den beiden Bibliotheken Tensorflow und Keras. Tensorflow ist hierbei die Basis, auf der Keras aufsetzt; Tensorflow wird im Forschungsbereich genutzt, um (mit umfangreichem Programmieraufwand) Netzwerke aufzubauen und zu parametrisieren – Keras wiederum ist anwenderorientiert und erlaubt den schnellen Aufbau von Netzwerken.

Da es bei dem Lernprozess von Künstlichen Neuronalen Netzwerken darum geht, die Gewichtungsfaktoren zu optimieren, werden häufig Graphical Processing Units (GPU) im Bereich Künstliche Intelligenz eingesetzt. Denn diese GPUs sind darauf ausgerichtet, viele Berechnungen simultan durchzuführen, was in der KI für die simultane Berechnung von Gewichtungsfaktoren genutzt wird. Bibliotheken wie Theano etwa unterstützen die Nutzung der GPU eines Rechners.

Auch in das Künstliche Neuronale Netzwerk müssen normalisierte oder standardisierte Inputdaten eingespeist werden, die Datenaufbereitung ist darum ein wichtiger, erster Schritt (wie bei allen bisher betrachteten Methoden).

Anschließend laden wir die erforderlichen Klassen herunter (Sequential, Dense) und erstellen ein Objekt eines Netzwerkes (Sequential). Schritt für Schritt definieren wir nun zuerst die Anzahl der Input-Faktoren (unabhängigen Variablen), die Anzahl der Tiefenschichten, dann wählen wir die Activation Function aus für die künstlichen Neuronen der Tiefenschichten (meistgenutzt: Rectifier). Für das Output-Neuron benötigen wir ebenfalls eine Activation Function, und zwar einen binären Output (Bankkunde bleibt vs Bankkunde wechselt), hier wählen wir die Sigmoid Function.

Die Festlegung der Anzahl von Neuronen (auch genannt: node) in der Tiefenschicht ist im Übrigen eine Kunst. Hier zählt viel Erfahrung, zu Beginn der Karriere eines Datenwissenschaftlers steht viel Error&Trial. Für einen Anfänger kann man zunächst einmal mit folgender Daumenregel arbeiten: Summe aus Input-Neuronen (vorangehende Schicht) und Output-Neuronen (nachfolgende Schicht), hiervon die Hälfte. Für unser Beispiel kreieren wir im Übrigen zwei (2) Tiefenschichten.

Es werden noch diverse Parametrisierungen vorgenommen, etwa zum Stochastic Gradient Descent (Choose = “Adam”) und zur Cost-Function (“binary_crossentropy”, entspricht einer logarithmischen Funktion für binären Output, Logarithmic Loss).

Im Endergebnis haben wir Python-Code, der sich auf wenige Zeilen beschränkt – was durchaus überrascht angesichts der Mächtigkeit dieser Methode der Künstlichen Intelligenz:

Maschinenlernen. Deep Learning. Künstliche Neuronale Netzwerke. Die Umsetzung von Deep Learning in Python – Schritt 2Abbildung: Künstliche neuronale Netzwerke. Die Umsetzung in Python. Der Code.

Der Aufbau des Künstlichen Neuronalen Netzwerks ist nun abgeschlossen. Der nächste Schritte besteht darin, dieses Netzwerk zu trainieren; hierzu haben wir ja die Cost Function und den Stochastic Gradient Descent definiert. Sobald man diesen Trainingsprozess angestoßen hat, lässt sich das Training selbst sehr gut in der Konsole beobachten.

Bei diesem Training werden alle Trainingsdatensätze (hier: 8.000 Datensätze) mit den initialen Gewichtungsfaktoren einmal durchlaufen lassen und dann die Gewichtungsfaktoren angepasst. Dabei gibt es zwei Vorgehensweisen: Entweder nach JEDEM einzelnen Datensatz werden die Gewichtungsfaktoren angepasst (Stochastic Gradient Descent) oder aber die Anpassung der Gewichtungsfaktoren erfolgt erst nach Durchlauf ALLER Datensätze (Batch Gradient Descent). Für unser Beispiel haben wir den Stochastic Gradient Descent ausgewählt.

Jeder vollständige Durchlauf der gesamten Trainings-Datensätze wird als Epoch bezeichnet. Wir haben für unser Beispiel 100 Epochs definiert; irgendwann konvergiert ein Modell, dann gibt es auch nach weiteren Durchläufen (Epochs) keine weitere (signifikante) Verbesserung des Modells mehr.

Man sieht nun in der Konsole sehr gut, wie die Ergebnisse am Ende jeder Epoch aussehen: Nach der Epoch Nummer 80/100 etwa: Die Loss Function weist einen Wert von 0.3378 aus, die Accuracy (Genauigkeit) beträgt 0,8599 (also: ca. 86%).

Maschinenlernen. Deep Learning. Künstliche Neuronale Netzwerke. Die Umsetzung von Deep Learning in Python – Schritt 3Abbildung: Künstliche neuronale Netzwerke. Die Umsetzung in Python. Der Backpropagation Prozess in der Konsole.

Herzlichen Glückwünsch! An diesem Punkt haben Sie ein gutes Grundverständnis jener Technologie gewonnen, die in den nächsten Jahrzehnten unser Wirtschafts- und Gesellschaftsleben stark bestimmen wird. Im nächsten Teil geht es um eine Variante von Künstlichen Neuronalen Netzwerken, nämlich: Convolutional Neural Networks. Diese werden für die Bildanalyse eingesetzt, von der Objekterkennung (Hund oder Katze) bis hin zu Gesichtserkennung.

Sebastian Zang
Author

Der Autor ist Manager in der Softwareindustrie mit internationaler Expertise: Prokurist bei einem der großen Beratungshäuser - Verantwortung für den Aufbau eines IT Entwicklungszentrums am Offshore-Standort Bangalore - Director M&A bei einem Softwarehaus in Berlin.