Verteiltes Lernen mit TensorFlow

TensorFlow: Der Weg des maschinellen Lernens

Bernd Fondermann

(c) Shutterstock/Vector Goddess

Mit TensorFlow hat Google ein Tool für verteilte Systeme, die Basis der für maschinelles Lernen so wichtigen neuronalen Netze, in die Open-Source-Welt entlassen. Es ist ein weiteres Zeichen, dass maschinelles Lernen den Schritt von den Listen der Technologientrends in die Wirklichkeit macht.

Zwei Disziplinen waren lange Zeit die Außenseiter in ihrer Domäne: In der Informatik die „Künstliche Intelligenz“ (KI), das aufgekratzte Kind mit den Flausen im Kopf, das am Ende nichts zustande brachte. In der Mathematik die Stochastik und Statistik, missverstanden als per Definition ungenaue, mit Restfehlern behaftete und damit minderwertige Betrachtung von Zahlen. In den letzten Jahrzehnten hat in der IT stattdessen der konkrete, hochgenaue, vermeintlich exakte Blick auf die Welt vorgeherrscht. Uns hat interessiert, wie viel Zeilen genau in der Datenbanktabelle sind und exakt wie viele Kunden welches Produkt gekauft haben. Kurz: Es war die Sicht, die eine Bank auf die Welt hat.

Dann trat Amazon auf den Plan und machte sich Machine Learning zunutze, um mir als Kunden neue Dinge zu empfehlen, die andere Kunden mit ähnlichen Warenkörben wie dem meinen bereits gekauft hatten. Und dabei war es nicht entscheidend, dass diese Kunden sich exakt genauso verhalten wie ich, sondern so ähnlich wie möglich, mit einer Toleranz. Machine Learning funktioniert mit Näherungen, mit Häufungen, mit Fehlertoleranzen, also mit Stochastik und Statistik. Mathematisch war man damit zu neuen Ufern aufgebrochen, algorithmisch aber noch nicht. Jede Machine-Learning-Anwendung brauchte seine eigenen Verfahren und Implementierungen und ist damit heute mehr als damals ein recht unübersichtlicher und Know-how-intensiver Bereich der Softwareentwicklung.

Machine Learning löst nicht alle Probleme

Manche Problemstellung lässt sich mit Machine Learning nur mehr schlecht als recht verwirklichen, wie Bilderkennung oder das Verstehen gesprochener Sprache, zumindest nicht soweit, dass man den gewünschten Nutzen daraus zieht. Beispiel Sprache: Die klassischen Verfahren wie HMM (Hidden Markov Models) erlauben das Erkennen von Phonemen, also den Grundlauten, aus denen gesprochene Sprache besteht. Statistische Häufigkeiten von aufeinanderfolgenden Phonemen weisen den Computer auf Silben und Wörter hin. Doch manche ähnlich- oder sogar gleichklingende Wörter sind auf der Lautebene nur schlecht, also mit großer Fehlerhäufigkeit, auseinanderzuhalten. Wir Menschen schaffen das meist, weil wir gleichzeitig auf einer höheren Ebene durch den Wort- und Satzzusammenhang oder den Kontext einer ganzen Unterhaltung Verständnis herstellen und Mehrdeutigkeiten aus der Lautebene auflösen können. Doch für diese Ebenen müssen wiederum andere Machine-Learning-Verfahren zum Einsatz kommen. Es passt alles nicht recht zusammen.

Aus neuronalen Netzen entwickelt sich Deep Learning

An dieser Stelle tritt die KI in Form von neuronalen Netzen (NN) auf den Plan. Neuronale Netze orientieren sich an der – teilweise noch nicht vollständig verstandenen – Funktionsweise des menschlichen Gehirns. Dort sind Unmengen von Knotenpunkten, die Neuronen, mit ihren Nachbarn über Leitungen, den Synapsen, verbunden. Jedes Neuron bekommt über mehrere Synapsen elektrische Eingangssignale, die es zu einem Ausgangssignal verrechnet und an die angeschlossenen Neuronen weiterleitet.

Lange Zeit haben neuronale Netze nicht besser als spezialisierte klassische Verfahren funktioniert. Bei statistischen Verfahren ist die Effektivität höher je mehr Eingangsdaten man hat. Fällt man unter die eine kritische Grenze, funktionieren sie nicht mehr. Neuronale Netze müssen groß sein, um große Eingaben verarbeiten zu können. Doch Rechenressourcen für Statistik und neuronale Netze sind heute billiger denn je jederzeit zu haben. Damit kommen die ehemaligen Außenseiter wieder ins Spiel.

Heutige neuronale Netze haben einen weiteren Vorteil: Sie können in Reihe hintereinandergeschaltet werden und damit verschiedenen Ebenen der Wahrnehmung und des Verstehens abbilden. Beschäftigt sich die erste Ebene eines NNs bei der Bilderkennung mit den einzelnen Pixeln und deren Helligkeit und Farbe, so kann die nächste Ebene die Ausgabe der ersten Ebene zum Erkennen von Linien, Kanten, Flächen oder Kurven verwenden. Mit jedem Schritt wird also die vorherige Information abstrahiert, und aus Linien werden geometrische Gebilde und daraus wiederum Gesichter – im Internet natürlich bevorzugt von Katzen. Für die Anwendung solcher mehrschichtigen neuronalen Netze hat sich der Begriff Deep Learning etabliert.

In einer Unterhaltung stehen aufeinanderfolgende Sätze in einem Zusammenhang. Informationen referenzieren früher Gesagtes und manchmal auch Dinge, die erst später gesagt werden: „Er kam auf mich zu. Er war klein, hieß Felix und bellte laut.“ In diesen beiden Sätzen wird erst am Ende aufgelöst, dass es sich vermutlich um einen Hund handelt. Folglich wandelt sich nachträglich unser Verständnis von „Er kam auf mich zu.“. Das Verstehen von Konversation steht im Mittelpunkt von digitalen Assistenten wie Apples Siri, Cortana von Microsoft oder Google Now. Deep Learning ist die Basis für diese Systeme, die eine recht hohe Abstraktion erreichen müssen.

Deep Learning braucht verteilte Systeme: die Geburt von TensorFlow

Deep Learning funktioniert umso besser, je mehr Daten zum Lernen ins neuronale Netz eingespeist werden. Aus entsprechend vielen künstlichen Neuronen und Synapsen muss dieses Netz dann bestehen. Zu viele, um auf einen einzelnen Rechner zu passen. Es muss also ein verteiltes System her. Open-Source-Projekte wie Theano sind länger etabliert, aber ihnen fehlt die Möglichkeit zur Verteilung. Google hat zu diesem Zweck seit 2011 ein Framework namens DistBelief entwickelt [1].

Der Mehrzwecknachfolger von DistBelief ist nun das Projekt TensorFlow, das von Google im Quelltext auf GitHub veröffentlicht wurde. Es löst Google-intern DistBelief nach und nach ab und wird dort über alle Produktsparten eingesetzt, sei es Search, AdWords, YouTube oder Gmail.

TensorFlow erlaubt es, beliebige neuronale Netze durch gerichtete zyklenfreie Graphen zu repräsentieren. Die Kanten bilden Eingabe und Ausgabe der einzelnen Rechenschritte ab, die Knoten die Verarbeitung aller Eingaben zur Ausgabe. Ein Programm, das auf TensorFlow basiert, muss einen solchen Graphen aufbauen. Dieser ist anwendungsspezifisch und hängt von der Art des Inputs ab. Innerhalb von TensorFlow werden die verarbeiteten Daten als multidimensionale Arrays gespeichert. Solche Gebilde fasst die Mathematik unter dem Begriff „Tensor“ zusammen. Um Input zu erzeugen, lässt sich beispielsweise die gesprochene Sprache über Sampling, also dem Abgreifen von Klangwerten in kurzen Abständen, in einen Eingangsvektor (Tensor 1. Ordnung) überführen, ein Schwarz-Weiß-Bildausschnitt als Pixelmatrix (Tensor 2. Ordnung) oder ein Farbbild als drei solcher Pixelmatrizen, mit den Komponenten rot, grün und blau (Tensor 3. Ordnung). Tensoren sind insbesondere interessant, weil Grafikkarten darauf optimiert sind, sehr schnell unglaublich viele Berechnungen auf ihnen durchführen zu können. Insofern ist es nicht verwunderlich, dass TensorFlow GPU-Computing unterstützt und davon in besonderer Weise profitiert.

Ist der gewünschte Graph aufgebaut, so ist er selbstverständlich keineswegs ohne Weiteres in der Lage, Bilderkennung oder Ähnliches durchzuführen. Auf seine Aufgabe muss er zuerst trainiert werden. Die Trainingsdaten füttert man ihm in Iterationen immer wieder zu und verändert dabei Gewichte innerhalb des Graphen, die den Output so verändern, dass dieser sich dem erwarteten Ausgabewert annähert. Die richtige Strategie bei der Annäherung an den richtigen Output ist einer der wichtigen Durchbrüche der letzten Jahre. Auch hier spielt Stochastik eine wichtige Rolle.

Außerdem nimmt man in regelmäßigen Abständen separate Testdaten her, anhand derer man überprüft, ob das Training des neuronalen Netzes auch für beliebige Inputdaten wirkungsvoll war. Verbessert sich das Ergebnis auf den Testdaten nicht mehr, beendet man das Training. Die Gewichte sind der Zustand des Graphen und werden natürlich – neben seiner Struktur – beibehalten, sobald das neuronale Netz gut funktioniert.

Die besondere Leistung von TensorFlow besteht darin, den Graph des neuronalen Netzwerks über Rechnergrenzen hinweg abzubilden und darauf effizient zu rechnen. Hier leistet Google Pionierarbeit. Aber die Suchmaschinenfirma aus Kalifornien ist hier nicht alleine. Im universitären Umfeld entstand SINGA, das mittlerweile als Inkubatorprojekt bei der Apache Software Foundation gelandet ist. Andere Firmen wie Facebook und Amazon haben eigene Entwicklungen von Deep-Learning-Systemen.

Da die Knoten eines Graphen über ihre Verbindungskanten miteinander kommunizieren, ist es im TensorFlow-Verbund notwendig, ständig über das Netzwerk Information auszutauschen. Diese Problemstellung eines verteilten Systems beherrscht TensorFlow laut Google maßgeschneidert für neuronale Netze. Hauseigene Methoden wie MapReduce und andere haben in diesem Fall nicht so gut funktioniert. Damit rechtfertigt TensorFlow seine Existenz.

Fazit

Deep-Learning-Netzwerke stehen heute noch am Anfang. Sie sind jedoch bereits teilweise in der Lage, ohne Training, also selbsttätig und ohne Aufsicht zu lernen. Es lassen sich beeindruckende und teilweise auch verstörende Ergebnisse erzielen, die über das reine Erkennen hinaus in den Bereich der Erzeugung von neuen Informationen vordringen. Ein Beispiel ist das Hinzufügen oder Entfernen von Brillen aus Gesichtern oder das Generieren von Schlafzimmerbildern.

Mit Theano oder TensorFlow (beide Python-basiert) und SINGA (C++) wird Deep Learning immer mehr Programmierern einfach zugänglich und kann in den nächsten Jahren viele Felder des Machine Learnings dominieren. Damit werden KI und Stochastik endgültig ganz oben bei den wichtigen Technologien stehen.

Aufmacherbild: Flat design colorful vector illustration concept for distance education von Shutterstock / Urheberrecht: Vector Goddess

Verwandte Themen:

Geschrieben von
Bernd Fondermann
Bernd Fondermann
Bernd Fondermann (bernd.fondermann@brainlounge.de) ist freiberuflicher Softwarearchitekt und Consultant in Frankfurt a. M. Er hat eine Schwäche für verteilte Systeme und Datenspeicher, die ohne SQL abgefragt werden können. Als Member der Apache Software Foundation versucht er, mit der Vielzahl der Incubator-Projekte dort schrittzuhalten.
Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.