iX 9/2017
S. 42
Titel
Künstliche Intelligenz
Aufmacherbild

Python-Tutorial, Teil 1: Maschinelles Lernen mit TensorFlow

Wie Programme lernen

Meldungen über wesentliche Verbesserungen in der automatischen Spracherkennung, beim Übersetzen von Texten oder dem Erkennen von Bildinhalten lassen aufhorchen. Das Buzzword in diesem Zusammenhang heißt „maschinelles Lernen“. Was steckt hinter dieser Technik und wie kann man sie mit Python und Googles TensorFlow-Bibliothek nutzen?

Ob Facebook automatisch Personen auf hochgeladenen Fotos identifiziert, Salesforce Einstein selbstständig neue Zusammenhänge in Kundendaten entdeckt oder Computer Patientendaten analysieren und Diagnosen stellen: Konzepte wie Deep Learning, neuronale Netze und maschinelles Lernen scheinen derzeit hinter vielen Fortschritten in der IT zu stehen.

Die einen sehen maschinelles Lernen als Allheilmittel, mit dem sich Programme alles selbstständig aneignen können – vom Übersetzen in beliebige Sprachen bis hin zum Autofahren –, ohne jemals einen Programmierer gesehen zu haben. Andere diskutieren über die negativen Auswirkungen der maschinellen Allmacht bis hin zum direkten Anschluss ans menschliche Gehirn. Wieder andere interessiert nicht nur, was maschinelles Lernen bewirken kann, sondern vor allem auch, wie es funktioniert.

Daher liegt der Schwerpunkt dieser Artikelreihe über maschinelles Lernen mit Python und TensorFlow darauf, fachliche Informationen über diese Technik zu liefern und Anregungen zu geben, sie in eigenen Python-Programmen auszuprobieren. Ein erster Schritt, um besser einschätzen zu können, was mit maschinellem Lernen möglich ist.

Da dieses Thema ein weites Feld ist, konzentrieren sich die Artikel auf die grundsätzliche Vorgehensweise und neuere Verfahren aus dem Bereich der neuronalen Netze, die mitverantwortlich für den Hype sind. Als Programmbibliothek kommt TensorFlow von Google zum Einsatz, da sie diverse Werkzeuge mitbringt und im Netz viele Informationen dazu zu finden sind. Ein Jupyter Notebook, das Interessierte über den iX-Listing-Service herunterladen und nachvollziehen können, enthält alle im Tutorial vorgestellten Beispiele (hierzu und zu weiteren Quellen im Web siehe „Alle Links“ am Ende des Artikels).

Auf den Algorithmus kommt es an

Im Zentrum der Programmierung steht immer das Problem, das die neue Software lösen soll – beispielsweise die Anfrage aus der Buchhaltung, alle Einkäufe im Bereich Bürobedarf zusammenzurechnen. Das ist eine relativ einfache Sache: Die Eingaben sind irgendwelche Zahlen aus den Rechnungen, herauskommen soll die Summe daraus. Wie man Zahlen zusammenzählt, ist ein einfacher, bereits in der Grundschule gelernter Algorithmus.

Nächstes Beispiel: Eine Mitarbeiterin der Gebäudeverwaltung eines großen Konzerns möchte ein Programm, das ihr ermittelt, was der Verkauf jeder Firmenimmobilie einbringen könnte. Als Eingabegrößen dienen die Wohnfläche in Quadratmetern und die Größe des bebauten Grundstücks, das gewünschte Ergebnis ist der Verkaufswert. Dieses Mal ist es nicht so einfach wie im ersten Fall. Es geht zwar wieder nur um Zahlen. Aber mit welchem Algorithmus man von der Eingabe zum gewünschten Ergebnis kommt, ist nicht bekannt.

def was_kostet_ein_Haus(flaeche, 
                   grundstuecksgroesse):
    # ??
    return ergebnis

Optimale Formel finden

Selbstlernende Algorithmen haben in den Bereichen Erfolg, in denen kein einfaches Rechenverfahren zum gewünschten Ziel führt (Abb. 1).

Aus den in der Vergangenheit durchgeführten Verkäufen ist bekannt, welche Häuser wie viel eingebracht haben. Über eine Formel kann man den Verkaufspreis in Abhängigkeit von Wohnfläche und Grundstücksgröße ausdrücken. Beim maschinellen Lernen findet der Computer eine optimale Formel, indem eine Software aus den vorgegebenen Daten lernt, welche Ausgabe bei welchen Eingabedaten erwartet wird. Damit justiert sie ihre internen Einstellungen, sodass sie sich den gewünschten Ergebnissen immer mehr annähert. Nach diesem Lernvorgang sollte die Software in der Lage sein, für noch nie gesehene Eingaben ein brauchbares Ergebnis auszuwerfen (Abbildung 1).

Die Computerwissenschaft hat über die Jahre unzählige Verfahren im Bereich maschinelles Lernen entwickelt. Zu den bekannteren zählen Entscheidungsbäume, Nearest-Neighbor-Methode, lineare Regression und neuronale Netze. Da sich Python zu der am häufigsten verwendeten Programmiersprache im maschinellen Lernen gemausert hat, gibt es dafür viele unterschiedliche Module wie scikit-learn oder Theano.

Die TensorFlow-API gibt es außer für Python für immer mehr Programmiersprachen auf unterschiedlichen Plattformen (Abb. 2).

Dieses Tutorial verwendet Googles TensorFlow-Bibliothek, da sie eine umfangreiche, skalierbare Umgebung mitbringt und in vielen Projekten Anwendung findet – auch in anderen Programmiersprachen. Eins der Tools ist das nützliche Visualisierungswerkzeug TensorBoard, mit dem man einen Blick in die Verarbeitung werfen kann.

Darüber hinaus gibt es beispielsweise TensorFlow Serving, eine Plattformlösung mit einem Server, auf dem fertige Anwendungen laufen und durch Client-Programme genutzt werden können. Zurzeit gibt es TensorFlow für Arbeitsplatzrechner unter Linux, macOS und Windows sowie Varianten für mobile Geräte mit Android oder iOS. Die TensorFlow-API lässt sich grob in drei Ebenen einteilen (siehe Abbildung 2):

 Core bietet Zugriff auf alle einzelnen Bestandteile, aus denen TensorFlow besteht.

 Layer sind Module, die aus den einzelnen Bestandteilen entstanden sind.

 Estimators sind fertige Komponenten, die man einsetzen kann.

TensorFlow für unterschiedliche Hardware

Dass Google TensorFlow direkt auf GitHub für alle frei unter der Apache-2.0-Lizenz veröffentlicht hat, ist ein kleines Novum. Entweder man lädt sich von dort die notwendigen Dateien oder verwendet, wie in Python üblich, den Python Packet Manager pip:

pip install tensorflow

Dieses Installationspaket enthält eine Version von TensorFlow, die mit der CPU arbeitet und keinerlei sonstige Hardware benötigt. Wer mehr Geschwindigkeit braucht und eine entsprechende Grafikkarte besitzt, kann sich eine spezielle TensorFlow-Version laden: