Maschinelles Lernen: Ein Erfahrungsbericht von Merkle

Maschinelles Lernen war das Thema beim Innovations Lab 2017. Unseren Erfahrungsbericht finden Sie hier

Maschinelles Lernen (ML) gewinnt im Alltag mehr und mehr an Bedeutung, indem es z.B. das Nutzerverhalten erlernen kann, um Vorschläge zu unterbreiten – siehe Google’s Suchmaschine, Amazons Produktvorschläge, etc.  – oder für die Erkennung von Objekten, wie es beispielsweise in der iOS 10 Foto-App vorkommt.

Damit war ML ein ideales Thema für unser Innovations-Lab 2017, in dem es gerade darum geht, neue Technologien kennenzulernen und unser Know-how auszubauen.

ML ist immer dann sinnvoll, wenn Daten oder Informationen aus der Vergangenheit vorliegen und Voraussagen für unbekannte Daten getroffen werden müssen. Die vorhandenen Daten werden dabei benutzt um ein Modell zu trainieren, das dann für die Voraussagen zuständig ist.

Wie so üblich, erfindet man in der Software Entwicklung das Rad nicht ständig neu, und so gibt es bereits zahlreiche Bibliotheken, die mit relativ wenig Aufwand ML in das eigene Projekt einbinden und nutzen lassen. Die Herausforderung ist zunächst die Analyse des Problems, das es mit ML zu lösen gilt, und die Entscheidung für den richtigen Algorithmus. Zwei Algorithmen haben wir uns näher angeschaut: Support Vector Machine (SVM) & Neuronale Netze (NN).

Support Vector Machine

SVMs lösen das Problem der Klassifizierung, d.h. für Eingabedaten gibt diese die zugehörige Klasse zurück. Das definierte Ziel war die Entwicklung einer App, die das Alter einer Fotografierten Person zurückgibt. Die Bild-Pixelwerte dienten somit als Eingabedaten und das Alter als zu ermittelte Klasse.

Bevor die SVM verwendet werden kann, wird die Anzahl der möglichen Klassen definiert und ein Modell trainiert, indem Beispiel-Daten (Bild) und erwartete Klasse (Alter) hinzugefügt werden:

svm.train(image, age)

SVM findet fĂĽr die trainierten Daten eine optimale Trennlinie/Vektor A (siehe Abbildung). Werden unbekannte Daten eingegeben, so prĂĽft die SVM ob diese Daten oberhalb oder unterhalb des Vektors liegen und bestimmt damit die Klasse.

age = svm.predict(image)

Grafik Schaubild

Letztendlich bestand während unseres Labs die eigentliche Herausforderung darin, Trainingsdaten ausfindig zu machen, um akkurate Ergebnisse zu erzielen. Für eine App, die das Alter anhand eines Bildes erkennen soll, wären >100.000 Trainingsbilder inkl. Alter erforderlich.

Neuronale Netzwerke

Neurale Netzwerke sind ein noch mächtigeres, aber sehr viel aufwändigeres Werkzeug als SVMs. Wie einfach ist es eigentlich ein Neuronales Netzwerk auf einem modernen Smartphone einzusetzen? Überraschenderweise, einfacher und schneller als man denkt, aber nicht so flexibel wie man hofft.

Es gibt viele Deep Learning Frameworks um Neuronale Netzwerke zu trainieren. Wer Kompatibilität mit Android wünscht, der landet schnell bei Deeplearning4j, MXNet oder Tensorflow, zumindest wenn er Kopfschmerzen vermeiden möchte. Bei Apple lassen sich Caffe und Keras Modelle ins hauseigene CoreML umwandeln. Diese lassen sich u.A. auch für Tensorflow konvertieren, so dass man beide Plattformen bedienen kann. Tensorflow und CoreML erlauben es allerdings nicht Modelle auf dem Gerät zu verfeinern bzw. zu ändern. Hier sollte man mal einen Blick auf Deeplearning4j riskieren.

Schnelle Erfolge konnten wir mit Tensorflows Android Beispielen erzielen. Innerhalb von einer Stunde kann damit auch ein ML Neuling auf einem Telefon Objekte erkennen oder Bilder kĂĽnstlerisch anpassen. Im Grunde kopiert man nur die .pb Modell Datei und ruft sie mit einer Zeile Code auf. Die Geschwindigkeit mit der Objekte erkannt werden ist dabei auch fĂĽr Echtzeit-Anwendungen geeignet.

Am Ende haben wir auch noch ein ein Modell trainiert, das werdenden Eltern eine Einschätzung geben soll wie ungewöhnlich der selbst ausgedachte Name ist im Vergleich zu den Namen, die in Berlin in den letzten Jahren vergeben wurden. Es zeigte sich: Mit dem Namen Kevin kann man praktisch nichts falsch machen.

Zusammenfassend lässt sich sagen, dass ML auf mobilen Geräten nicht mehr die Zukunft ist, sondern die Gegenwart. Die Modelle laufen selbst für Echtzeit-Anwendungen schnell genug und vorhandene Modelle lassen sich sehr einfach einsetzen.

Bei RĂĽckfragen oder Anregungen zum Thema freuen wir uns ĂĽber eure Kommentare!