Die trügerische Einfachheit des Deep Learning: die Verbreitung von Frameworks.

Dieser Beitrag ist der zweite in einer Reihe von Beiträgen über die „trügerische Einfachheit des tiefen Lernens“. Ich habe zu viele Kommentare von Nichtpraktikern gesehen, die Maschinelles Lernen (ML) und Deep Learning (DL) für einfach halten. Dass jeder Computerprogrammierer nach ein paar Stunden Training in der Lage sein sollte, jedes Problem anzugehen, denn heutzutage gibt es doch viele Bibliotheken… (oder andere solche Ausreden). Diese Reihe von Beiträgen basiert auf einem Vortrag, den ich am 5. Dezember auf dem Technologietag der Ericsson Business Area Digital Services halten werde. Wenn Sie also an diesem Tag in Kista sind, zögern Sie nicht, meine Ericsson-Kollegen zu besuchen!

Im letzten Beitrag haben wir gesehen, dass die erste Komplexität in der Größe der maschinellen Lern- und Deep-Learning-Community liegt. Es gibt nicht genug qualifizierte und sachkundige Leute auf dem Gebiet. Um die anderen Komplexitäten zu veranschaulichen, zeige ich ein Beispiel für Deep Learning mit Keras. Machen Sie sich keine Sorgen, wenn Sie nicht daran gewöhnt sind, und selbst wenn Sie eine Weile nicht programmiert haben, oder überhaupt, ich werde es einfach halten. Im Folgenden finden Sie einen der Software-Stacks, mit denen Sie vertiefendes Lernen durchführen können. Dieser kann sowohl auf der CPU als auch auf Ihrem normalen Computer oder Computerserver bereitgestellt werden. Es kann aber auch auf Grafikprozessoren oder GPUs eingesetzt werden. Grundsätzlich ist die Grafikkarte in Ihrem Computer.

Den Stack werden wir zur Demonstration verwenden.

Um die Grafikkarte für die für Deep Learning erforderlichen Berechnungen zu verwenden, hat einer der GPU-Hersteller, Nvidia, eine Softwareschicht zum Programmieren dieser GPU erstellt. CUDA ist die Compute Unified Device Architecture und ermöglicht es jemandem, die GPU für hochgradig parallelisierbare Aufgaben zu programmieren. Auf dieser Ebene hat Nvidia noch eine weitere Ebene erstellt, die auf die Aufgabe abzielt, ein tiefes neuronales Netzwerk zu betreiben. Dies ist die cuDNN-Schicht oder die CUDA Deep Neural Network-Bibliothek. In meinem Beispiel verwende ich zusätzlich zu cuDNN das Google-Framework für die Grafikberechnung Tensorflow. Um meine Aufgabe zu vereinfachen, benutze ich Google Keras Librairy, um ein tiefes neuronales Netzwerk zu definieren, zu implementieren, zu trainieren und zu testen . Zur Vereinfachung haben wir bereits 5 Ebenen von Bibliotheken, und ich erwähne nicht einmal die Sprache, die ich verwenden werde, und die Bibliotheken, die dafür benötigt werden (beachten Sie, dass in der neuesten Version von TensorFlow Keras integriert wurde). Aber kein Problem, in der Softwareentwicklung sind wir es gewohnt, dass sich viele Softwareschichten häufen.

Der Software-Stack, den ich für dieses Beispiel verwende, ist nur einer der möglichen. Nur für die nVidia-GPU gibt es bereits mehr als ein Dutzend Frameworks, die auf cuDNN aufbauen. Darüber hinaus stellen Intel, AMD und Google ihren Hardwarebeschleuniger für tiefe neuronale Netze vor. Viele andere Unternehmen tun dasselbe und entwickeln beschleunigte Hardware für tiefe neuronale Netze. All diese neue Hardware wird mit CUDA und cuDNN geliefert und Frameworks werden sich für eine Weile vermehren.

Einige der cuDNN-beschleunigten Frameworks.

Ich werde nicht einmal über die nächste Gerüstschicht sprechen (z. B. Tensorflow und Keras). Hoffentlich werden sie sich an die neue Hardware anpassen … ansonsten werden wir noch mehr Frameworks haben. Das gleiche gilt für die nächste Schicht, z. B., wenn Keras auf Tensorflow aufbaut (oder Theano oder CNTK, aber lassen Sie uns diese Tür jetzt nicht öffnen). Daher können wir unsere nächste Komplexität sehen.

Zweitens Komplexität, das Stapeln von Frameworks (einschließlich spezialisierter Hardware) und die Verbreitung von Frameworks. Welches soll man lernen? Welches wird irrelevant werden?

Das maschinelle Lernen, insbesondere aber die Deep-Learning-Landschaft, entwickelt sich rasant weiter. Um effizient zu sein, ist eine neue Art von Hardware erforderlich, die bei industriellen Servern noch vor einigen Jahren nicht üblich war. Dies bedeutet, dass sich der gesamte Entwicklungsstapel von der Hardware bis zum freigegebenen Datenprodukt schnell entwickelt. Das Ändern von Anforderungen ist ein bekanntes Problem in der Softwareentwicklung. Es unterscheidet sich nicht in der Datenproduktentwicklung.

In meinem nächsten Beitrag gehe ich anhand eines Beispiels auf die nächste Komplexität ein: Hyper-Parameter-Tuning, etwas, das Sie in der Softwareentwicklung nicht sehen, das aber für die Entwicklung eines Datenprodukts erforderlich ist.