Förderjahr 2018 / Project Call #13 / ProjektID: 3881 / Projekt: SharedMobility.ai
JavaScript kennt man vor allem aus der Web Entwicklung. Im Bereich der Künstlichen Intelligenz / AI wurde die Sprache bisher kaum wahrgenommen. TensorFlow.js soll das nun ändern und wir setzen das Framework bereits produktiv ein.
Der Begriff Artificial Intelligence (AI) bzw. Künstlicher Intelligenz (KI) umspannt viele unterschiedliche Themenfelder, die teils auf eine jahrzehntelange Historie verweisen können. So ist maschinelles Lernen schon für viele Generationen von InformatikerInnen ein Begriff und im Studium behandelt worden. Neuronale Netze und Deep Learning sind hingegen erst in letzter Zeit populär gewordene Begriffe. Das ist auch auf die enorme Entwicklung ab 2010 in diesen Bereichen zurückzuführen, u.a. durch die direkte Ausführung der Algorithmen auf Grafikkarten (GPUs) und die damit enorm gesteigerte Leistungsfähigkeit. So sank durch verbesserte Algorithmen die Fehlerrate bei der Bildklassifikation von ~ 25 Prozent auf gerade einmal 5 Prozent [1]. Das kommt schon sehr nahe an eine menschliche Leistung in diesem Bereich heran. Durch das gestiegene Interesse in dem Feld gibt es auch eine immer breitere Sprachfamilie, die sich für die Lösung von Problemstellungen im Bereich des Maschinellen Lernens und AI eignet. Die bisherige Dominanz von Python oder R ist damit zwar nicht gebrochen, aber es gibt mit TensorFlow.js seit kurzer Zeit auch eine gute Einstiegsmöglichkeit auch für JavaScript-EntwicklerInnen.
TensorFlow.js wurde im Frühjahr 2018 im Rahmen des TensorFlow Developer Summit vorgestellt, im März 2019 wurde die erste stabile Version 1.0 veröffentlicht. Seitdem hat sich TensorFlow.js zu der führenden Deep-Learning-Library für JavaScript entwickelt. Die Gründe dafür sind recht einfach gefunden:
- Implementierung der High-Level Keras-Schnittstelle, die diverse aufwändige Low-Level-Schnittstellen abstrahiert und das erstellen von Deep Learning Layern deutlich vereinfacht.
- Direktes Aufsetzen auf TensorFlow inkl. GPU-Beschleunigung in Node.js bzw. auf WebGL-basierte Berechnungen im Browser. Es benötigt jedoch keine speziellen Treiber oder andere Spezialhardware, sondern läuft auch in einem CPU-only-Modus. Damit können auch mit Python oder anderen Sprachen erstellte TensorFlow-Modelle gelesen und ausgeführt werden. Außerdem können mit TensorFlow.js erstellte Modelle ebenfalls serialisiert abgespeichert werden und stehen somit anderen TensorFlow-Umgebungen zur Verfügung.
- Die API ist an die Python-API und Keras angelehnt und somit ist auch die Dokumentation entsprechend umfassend.
- Umfassende Unterstützung von Google, das die Entwicklung weiter voran treibt und laufende Verbesserungen vornimmt.
- Durch die Ausführbarkeit im Browser können Deep-Learning-Modelle direkt am Gerät ausgeführt werden. Gerade bei Privacy-relavanten Anwendungsfällen ist dies ein enormer Vorteil, da Daten lokal und nicht in einem zentralen Cloud-Service verarbeitet werden.
Eine interessante Anwendungsmöglichkeit ist auch die direkte Verwendung von Pre-Trained-Models. So können Image Segmentation Modelle, die von Google vorab trainiert wurden, direkt im Browser geladen werden. So können Anwendungen direkt im Browser ausgeführt werden, die davor noch über eine Cloud-Schnittstelle personenbezogene Daten in die Cloud hochgeladen haben. Außerdem sind nun Anwendungen möglich, wo die Anforderungen an die Bandbreite ein externes Verarbeiten der Daten nicht sinnvoll einsetzen lässt. Ein Beispiel hierfür ist die direkte Verarbeitung von Webcam-Daten in einer hohen Framerate, die nur lokal im Browser sinnvoll umsetzbar ist, da ansonsten zu hohe Datenmengen transferiert würden. Da die Webcam-Daten nie den lokalen Computer oder Smartphone verlassen müssen, verbessert der Einsatz von TensorFlow.js auch die Einhaltung der Privatsphäre.
Bei SharedMobility.ai verwenden wir TensorFlow.js unter anderem zur Erstellung von Modellen für die Citybike Wien Stationen. Dafür verwenden wir die Dataset-APIs für das Einlesen der Daten und die Layer-APIs für das Modell. Die Berechnungen selbst führen wir auf der Google Cloud Platform auf High Memory Maschinen aus, auf optionale GPUs verzichten wir. Der Grund dafür ist einfach: Unsere relativ einfachen neuronalen Netze lassen sich auf den CPUs mit deutlich weniger Overhead ausführen.
[1] Shanqing Cai, Stanley Bileschi, und Eric Nielsen: „Deep Learning with JavaScript“, Manning 2019, S. 2.
Foto: © Google, Inc. Press Photos