Shownotes & Links
- Boston Dynamics Roboter, der Türen öffnet
- deepl.com
- Linguee
- Paperspace
- PyTorch
- TensorFlow
- Open Neural Network Exchange
- fast.ai
- Deeplearning4J
- TensorFlow.js
- The Microsoft Cognitive Toolkit (früher bekannt als CNTK)
- kaggle.com
Transkript
Lucas Dohmen: Hallo und herzlich willkommen zu einer neuen Folge des INNOQ Podcast. Heute haben wir als Thema Deep Learning und dafür habe ich mir den Michael eingeladen. Hallo Michael.
Michael Perlin: Hallo Lucas.
Lucas Dohmen: Wie geht es dir?
Michael Perlin: Dankeschön. Sehr gut.
Lucas Dohmen: Okay, magst du dich kurz vorstellen für die Hörerinnen und Hörer, die dich noch nicht kennen?
Michael Perlin: Sehr gerne. Mein Name ist Michael Perlin. Ich bin Senior-Consultant bei INNOQ. Komme ursprünglich aus der Entwicklerecke. Beschäftige mich gerne mit DevOps-Themen und seit Kurzem auch mit dem Thema Deep Learning.
Lucas Dohmen: Okay. Also Ops ist ja jetzt eigentlich was ganz Anderes. Wie bist du denn auf das Thema Deep Learning gekommen?
Michael Perlin: Bei INNOQ hat jeder Mitarbeiter nach zehn Jahren Betriebszugehörigkeit eine Option, ein sogenanntes Sabbatical zu nehmen - sich für ein paar Monate aus dem aktuellen Projekt zurückzuziehen und sich mit dem Thema seiner Wahl auseinanderzusetzen – und das habe ich getan.
Lucas Dohmen: Das heißt also, du hast dich da jetzt eine Zeit lang mit beschäftigt und möchtest da jetzt ein bisschen was vorstellen?
Michael Perlin: Sehr gerne.
Lucas Dohmen: Wenn ich Deep Learning höre, dann gibt es auch zwei andere Begriffe, die in dem Zusammenhang eine Rolle spielen: Machine Learning und Artificial Intelligence. Wo grenzt das ab? Ist es das Gleiche? Sind das verschiedene Sachen? Magst du das kurz erklären?
Michael Perlin: Ja, also die Künstliche Intelligenz ist für mich eher eine Vision ohne Bezug auf die Technologie. Eine Vision, die man eher aus Science-Fiction-Romanen kennt. Dass der Mensch Systeme erschafft, die nicht weniger smart werden als der Mensch selbst und die komplexere Entscheidungen treffen können. Dabei muss man nicht unbedingt sagen, mit welchen Technologien man diese Vision erreicht. Die Vision existiert mittlerweile seit über 100 Jahren. In den 50er, 60er Jahren wurde es etwas konkreter. Da wurde der Begriff Machine Learning geprägt - von der Firma IBM oder von einem Wissenschaftler, der dort arbeitete. Und hinter dem Begriff verstecken sich schon gewisse Technologien - vor allem mathematischer und statistischer Natur, die zur Wissensgewinnung eingesetzt werden. Deep Learning ist ein Ansatz - eher eine Spezialisierung von Machine Learning - der darauf fokussiert ist, quasi das menschliche Gehirn nachzubauen - wenn man das plakativ so sagen kann. Die Idee, wenn man etwas bauen sollte, was genauso smart ist wie ein Mensch, hat natürlich dazu geführt, dass man versucht Prozesse im menschlichen Gehirn mit Computermitteln nachzubauen. Und diese Neuronalen Netze basieren ursprünglich auf der Idee von Neuronen, die im menschlichen Gehirn Signale austauschen, auf Signale reagieren, dann weitere Signale erzeugen. Und so kommen sie zum Wissen oder zur Insight.
Lucas Dohmen: Okay. Und einen anderen Begriff, den man in dem Zusammenhang oft hört, ist noch der Data Scientist. Was ist ein Data Scientist?
Michael Perlin: Um das ganz allgemein zu formulieren ist das jemand, der Daten systematisch auswertet und Wissen extrahiert. Im Kontext eines Unternehmens ist das normalerweise jemand, der beauftragt ist geschäftsrelevante Daten zu extrahieren.
Lucas Dohmen: Okay, bevor wir jetzt eintauchen in das Thema um zu verstehen wie das funktioniert, wozu kann ich denn Deep Learning einsetzen? Also wo ist es besonders sinnvoll das zu benutzen?
Michael Perlin: Man kann eine ganz lange Liste aufstellen. Zu den Gebieten, wo Deep Learning schon für signifikanten Fortschritt sorgte, kann man vor allem Natural Language Processing zählen. Also, das ist Sprachverarbeitung, Spracherkennung, Sprachgenerierung und vor allem die Übersetzung. Sprich, ich sage oder schreibe etwas auf Deutsch und ein schlaues System übersetzt das ins Englische, Chinesisch oder eine weitere Sprache. Ein weiteres Gebiet, wo Deep Learning sehr erfolgreich ist, ist die Klassifizierung. Man kann jetzt Bilder von Katzen und Hunden klassifizieren; ob das auf dem Bild eine Katze oder ein Hund ist. Man kann auch Musikstücke nach Genre klassifizieren. Man kann Texte klassifizieren, ob sie gut gemeint oder eher kritisch sind. Bei Klassifizierung existieren keine Grenzen, was man klassifizieren kann, angenommen man hat einen Satz an Trainingsdaten. Darüber reden wir eventuell später.
Ein weiteres Gebiet für Deep Learning sind die Empfehlungen. Ganz klassisch, Netflix empfiehlt mir einen Film, basierend darauf, was die anderen Benutzer bereits geschaut haben und wie sie das bewertet haben. Oder ich kriege ein Buch empfohlen oder ich kriege als Vielreisender ein Hotel empfohlen, die Algorithmen sind sehr ähnlich. Ein sehr geschäftsrelevantes Gebiet für viele Firmen sind die Vorhersagen. Also etwa, ich betreibe eine Handelskette, ich möchte vorhersagen, wie viel meine Filiale jetzt die nächsten zwei Wochen an Umsatz generieren kann oder ich möchte Ergebnisse eines Fußballspiels voraussagen oder ich möchte Aktienkurse vorhersagen. Das geht alles mit dem Deep Learning mittlerweile auch. Ein Gebiet eher aus der Unterhaltung ist es, Bilder zu generieren. Und zwar zum Beispiel, ich fotografiere bei mir zuhause meine Katze auf der Couch und ich möchte das so dargestellt bekommen wie Picasso oder Van Gogh das malen würde. Und ein sehr interessantes Gebiet, wo man Deep Learning ebenfalls einsetzt, ist das sogenannte Reinforcement Learning. Da geht es darum, dass Maschinen, zum Beispiel Roboter, die Umwelt mit Trial und Error kennen lernen und mit jedem Versuch können sie aus den eigenen Fehlern lernen und dementsprechend besser werden. Man kennt ja eventuell diese Videos von der Firma Boston Dynamics, wo ein Roboter eine Tür aufmacht, oder diverse andere Videos, wo Roboter Fußball spielen oder sehr, sehr präzise Fließbandarbeiten erledigen. Das kann man auch mittlerweile mit Deep Learning besser machen.
Lucas Dohmen: Und bist du dem Thema Deep Learning auch schon im Projektalltag begegnet?
Michael Perlin: Erstaunlicherweise ja. In einem Projekt betreut INNOQ eine Produktionsanlage, die ganz gewöhnlich mit acht Tonnen Druck Metallblech in irgendwas Nützliches quetscht. Und dementsprechend gibt es in dieser Produktionsanlage Teile, die ab und zu wegen Abnutzung ersetzt werden müssen. Und der Produktionsleiter hätte es so gerne, dass er unmittelbar vor der Abnutzung ein Signal bekommt: “Hör mal, da muss was gemacht werden.” Und dementsprechend kann man auf der Anlage ein paar Sensoren installieren, die diverse Messwerte liefern. Anhand dieser Messwerte kann man dementsprechend vorhersagen, wann ein Austausch fällig ist. Interessant ist dabei folgender Aspekt: Vor etwa zehn Jahren, wenn man ganz mit dem klassischen Machine Learning Ansatz das Problem lösen wollen würde, dann hätte man sich diese Zeitreihen an Messwerten angeguckt, dann hätten sich zwei, drei Ingenieure wahrscheinlich zusammengesetzt und daraus ein Regelwerk erstellt. “Okay, wenn fünf Mal der Messwert unter dem Threshold x ist und der andere Messwert über dem Threshold y ist, dann sende ein Signal aus.” Deep Learning macht das Domänenwissen der Ingenieure eigentlich obsolet - zumindest in diesem Fall, weil das Netz aus den Daten und dem Sample - also wann ist der Austausch tatsächlich fällig geworden - selber lernt welche Muster, welche Patterns, jetzt die richtigen sind, um das Austauschsignal zu senden. Das hatten wir in einem laufenden Projekt. Und das wäre zum Beispiel ein Gebiet, wo ein Enterprise-Entwickler sehr wohl Deep Learning ansetzen könnte.
Lucas Dohmen: Ist ja cool. Wenn man sich jetzt mit dem Thema beschäftigt, dann hört man oft gerade die Namen von größeren Firmen wie Facebook und Google. Kommt denn so ein Thema wie Deep Learning auch für eine kleinere Firma in Frage oder muss man dafür eine große Firma sein mit vielen Ressourcen und großen Teams?
Michael Perlin: Es sind nicht wenige Ergebnisse im Deep-Learning-Umfeld, die von Start-ups und Start-up-ähnlichen Firmen kommen. Ich möchte an der Stelle die Geschichte einer Kölner Firma erzählen, die für das berühmte Produkt “Linguee” verantwortlich ist und die man schon seit ein paar Jahren kennt. Diese Firma beschäftigt ungefähr 20 Mitarbeiter und trotzdem hat die Firma es geschafft, den aktuell weltbesten Übersetzer zu bauen – und zwar für die Sprachen Englisch, Spanisch, Deutsch, Italienisch, Französisch und noch ein paar. Dieser Übersetzer ist, nach fast einstimmiger Meinung, besser als der von Google. Und zwar hat die Firma das folgender Maßen erreicht: der Übersetzer ist unter der URL www.deepl.de verfügbar. Ich mache gerade keine Werbung, ich bin nur begeistert von diesem Produkt. Aber das eigentliche Produkt der Firma ist der berühmte Service “Linguee”, was ein Wörterbuch für Sprachausdrücke darstellt. Also, die Firma hat sich spezialisiert, um nicht nur ein Wörterbuch zu bauen, wo „cat gleich Katze“ ist, sondern das in Kontext zu bringen, damit man wirklich für einen Ausdruck, der mehrere Wörter bis ein paar Zeilen groß ist, die richtige Übersetzung findet. Dieses Wörterbuch funktionierte eigentlich ganz gut und irgendwann kam dieser Deep-Learning-Ansatz. Und beim Deep-Learning-Ansatz ist es wichtig, dass man einen guten und großen Satz von Samples zum Trainieren des Neuronalen Netzes zur Verfügung stellt. Die Architektur des Neuronalen Netzes ist nicht weniger interessant, aber das sind mehr oder weniger bekannte Prinzipien, die ein paar Data Scientists der Firma ohne Probleme realisieren würden. Was der Firma wirklich den Vorsprung verschafft hat, ist das Vorhandensein der Samples der vorhandenen Ausdrücke. Und damit hat die Firma ein Neuronales Netz gebaut, dieses Netz mit dem Satz von Samples trainiert und dementsprechenden irgendwann den weltbesten Übersetzer zur Verfügung gestellt.
Lucas Dohmen: Wow! Okay, wie funktioniert dieses Deep Learning jetzt? Also was bedeutet das überhaupt?
Michael Perlin: Ich habe schon mal von Samples geredet. Samples sind ganz allgemein im einfachen Fall gelabelte Daten. Sprich: ich habe ein Foto und ich weiß auf diesem Foto ist eine Katze, ein Hund oder ein Mensch. Ich versuche, das gerade mit Katze und Hund zu erklären. Man stelle sich vor, man baue ein Neuronales Netz, was Fotos von Katzen mit Hunden unterscheiden sollte. Ich stelle einen Satz zur Verfügung, wo die Bilder schon automatisch markiert sind. Also, einer Katze ist ein Label, eine Eins oder eine Null, zugewiesen und dieses kleine Array, Eins oder Null, ist mein Output. Mein Input ist mein Bild. Mein Bild, wenn man zum Beispiel PNG nimmt, ist ein dreidimensionales Array. Sagen wir, wenn das Foto 200 x 200 ist, dann ist das 200 x 200 x 4 Kanäle. Dann baue ich eine Funktion, die meinen Input in meinen Output überführt. Genauer gesagt ist das keine einfache Funktion. Das ist eine Pipeline, die aus mehreren Bausteinen besteht. In dieser Pipeline kann ich mein mehrdimensionales Array, den nennt man in der Disziplin auch Tensor, ich kann den mit einem anderen mehrdimensionalen Array multiplizieren. Ich kann zum Beispiel 20 Prozent meiner Werte durch 0 ersetzen. Ich kann zum Beispiel samplen, also von jeden vier Werten den Mittelwert nehmen und die anderen vier Werte verwerfen. Ich kann auch andere Operationen anwenden. Wichtig ist, dass ich eine Funktion baue, die mein Foto auf meine Eins oder Null abbildet.
Dann belege ich diese Tensoren, mit denen ich multipliziere, mit erst mal zufälligen Werten. Dann nehme ich ein Batch von Bildern, zum Beispiel 32, und berechne mit diesem Input den Output, gucke mir den Fehler an, ändere diese zufälligen Werte um ein wenig, berechne den Output wieder und schaue, ob sich mein Fehler vergrößerte oder verkleinerte. So ermittelt ich die Richtung in die ich meine Koeffizienten anpasse. Dann jage ich noch einen weiteren Batch durch diese Pipeline und passe die Koeffizienten wieder an. Und so findet sich irgendwann ein Optimum in meinem Netzwerk, was meine Bilder zuverlässig in Wahrscheinlichkeiten überführt - ob das eine Katze oder ein Hund ist. Das ist jetzt etwas vereinfacht erklärt. Ich habe einige Aspekte ausgelassen. Zum Beispiel wie dieser Optimierer funktioniert, der aus der Abweichung wirklich die Anpassung berechnet. Aber das muss man auch nicht unbedingt wissen.
Lucas Dohmen: Das klingt jetzt alles sehr nach Mathematik. Muss ich jetzt Data Scientist sein oder einen großen mathematischen Background haben um damit anzufangen oder brauche ich das nicht?
Michael Perlin: Ich habe mehrmals von anderen Leuten gehört, um Machine Learning zu betreiben, muss man am besten Mathematiker sein und am besten noch in Statistik oder einem ähnlichen Gebiet promoviert haben. Möglicherweise war das so vor zehn Jahren, aber mittlerweile hat sich das wesentlich geändert. Ich sehe dafür drei Gründe. Grund Nummer Eins: Es sind mittlerweile sehr viele Best Practices bekannt, wie ich das eine oder andere Problem löse. Und zwar wenn ich zum Beispiel Bilder erkennen möchte, dann baue ich am besten das Convolutional Network. Und wenn ich zum Beispiel mit Zeitreihen agieren möchte, dann kann ich ein Recurrent Network bauen. Und wenn ich mein Network davor bewahren möchte, sich zu viel auf Details zu konzentrieren als auf das Ganze - also eher Katzenfell zu sehen als die ganze Katze - dann kann ich einen Layer für Dropout einbauen, der 20 Prozent meiner Werte bei jedem Durchlauf auf 0 setzt. Und so weiter und so fort. Es gibt ganz viele Best Practices, um erfolgreiche Netze zu entwickeln, die man nur intuitiv verstehen kann, aber nicht in Details.
Ein weiterer Grund: mittlerweile sind die Frameworks sehr weit, sodass man wirklich diese Bausteine „out of the box“ verwenden kann. Diese Frameworks bieten ein High-Level API an, um ein Deep-Learning-Netzwerk zu bauen: mit 30 Zeilen Code, mit 50 Zeilen Code, aber jetzt nicht mit 1000 Zeilen Code. Sprich man muss jetzt nicht unbedingt verstehen, zumindest für einfache Probleme, was dahinter steckt. Und Grund Nummer Drei, was ich noch sehe – und das ist wirklich für mich so ein Killer Feature von Deep Learning – ist das sogenannte Transfer Learning. Das funktioniert folgendermaßen: ich darf nicht verschweigen, dass manche Deep-Learning-Probleme wirklich hartnäckig sind. Also sprich, Problem “Verkäufe vorherzusagen” kann man eventuell mit ganz überschaulichem Aufwand lösen. Aber so ein Netzwerk zu bauen, was Bilder klassifiziert - daran basteln mehrere Teams aus Google Wissenschaftlern, also sprich aus sehr schlauen Leuten, mit sehr viel Trial und Error. Die nehmen sich auch die aktuellsten Papers zur Hand, um tatsächlich die besten Algorithmen anzusetzen. Also, das schafft ein Einsteiger mit einem Laptop eventuell doch nicht. Aber sobald Google ihr Modell entwickelt hat, wird so ein Modell normalerweise veröffentlicht.
So ein Berechnungsmodell besteht normalerweise aus einem Berechnungsgraphen und den Koeffizienten, mit ich denen meine Tensoren multipliziere. So ein Modell kann man normalerweise runterladen, und dann ist das erstaunlicherweise so, dass man mit sehr kleiner Änderung mit diesem Modell ähnliche Probleme lösen kann. Um jetzt konkret zu werden, es gibt ein sehr berühmtes ImageNet-Problem, das heißt, es existiert ein ImageNet-Datensatz von 1,5 Millionen Bildern. Zu jedem Bild gibt es ein Label - ob das ein Mensch, eine Flasche oder ein Stück Kreide oder ein Buch ist und so weiter und so fort, das sind insgesamt 1000 Kategorien. Und es ist ein recht berühmter Wettbewerb im Deep Learning Bereich jedes Mal so ein Neuronales Netz einzureichen, was mit noch kleinerer Fehlerquote die 1,5 Millionen Images zuordnen kann. Mit demselben Netzwerk habe ich irgendwann versucht, Fotos meiner Verwandten zu unterscheiden. Also, ich habe fünf Verwandten genommen, von jedem einen Gesicht-Snapshot, beziehungsweise 100 Snapshots gemacht, und dann habe ich bei jedem Snapshot die Namen vergeben - das waren meine gelabelten Daten. Und dann habe ich weitere Fotos gemacht, die dann nicht gelabelt waren und die dann dementsprechend von dem Neuronalen Netzwerk erkannt werden mussten. Diesen Satz an 5 x 100 Fotos habe ich einmal durch dieses Google-Netzwerk durchgejagt, und dann war dieses Netzwerk fähig Fotos von meinen Verwandten zu identifizieren. Also sprich, Transfer Learning ist, man nimmt ein bereits ausgereiftes Modell und bringt dem bei geringer Anpassung bei, verwandte Probleme zu lösen.
Lucas Dohmen: Das bedeutet, dass in diesem Deep Learning Bereich viel geteilt wird? Also wie im Open Source Bereich, dass man dann halt einfach viel wiederverwenden kann und abschauen kann wie andere das machen?
Michael Perlin: Erstaunlicherweise ja. Es wird viel veröffentlicht. Damit meine ich echte Papers. Sowohl Wissenschaftler von Google als auch Wissenschaftler, die bei Facebook arbeiten, als auch Wissenschaftler, die bei Baidu, dem chinesischen Google, arbeiten – die teilen ihre neusten Erkenntnisse sehr, sehr gerne und davon profitiert natürlich die ganze Branche enorm.
Lucas Dohmen: Und wenn ich das jetzt ausführen möchte, kann ich dafür mein Notebook benutzen oder brauche ich dafür irgendwelche spezielle Hardware?
Michael Perlin: Mit dem Notebook wird das, für überschaubare Datensätze, auch funktionieren. Ich würde schätzen, für 500 Fotos oder eine CSV Datei von 10000 Zeilen wird das noch reichen, aber für größere Datensätze braucht man eine GPU, und zwar eine GPU von der Firma Nvidia. Was wir schon erwähnt haben, dass Deep-Learning-Netzwerke eigentlich nur damit beschäftigt sind, Tensoren zu multiplizieren - also mehrdimensionale Arrays. Und das ist das, was GPU sehr gut kann und CPU nur mittelgut. Und vor allem sind GPUs von der Firma Nvidia auf die parallele Verarbeitung spezialisiert, und das passt genau zu dem Konzept von Deep Learning: dass man immer nicht einzelne Bilder oder Datensätze verarbeitet, sondern Batches von Bildern und Datensätzen, weil man eher bei der Fehlerberechnung einen Mittelwert bildet. Das heißt, wenn du ein Notebook mit Grafikkarte von der Firma Nvidia hast, dann ist das schon gut. Wenn du das nicht hast und trotzdem auf dem Notebook das betreiben möchtest, dann sorg dafür, dass deine Konfiguration stimmt und die Berechnung auf dem GPU deiner aktuellen Grafikkarte ausgeführt wird. Ansonsten kann man sich einen Deep-Learning-Server zusammenbauen lassen - da sind wir ungefähr im drei/vierstelligen Euro Bereich - oder in die Cloud gehen. In die Cloud gehen betrachte ich momentan als bessere Option. Zumindest für den Einsteiger. Erstens, sobald man in die Cloud geht – und Cloud Angebote gibt es davon genug: von Google, von Amazon, von kleinen Anbietern – kann man nicht eine bloße Betriebssysteminstanz als Image nehmen, sondern man kann eine spezialisierte Instanz nehmen, wo die Werkzeuge für Maschinelles Lernen bereits installiert und konfiguriert sind. Das spart einiges an Aufwand. Wir benutzen zum Beispiel das Cloud-Angebot von der Firma Paperspace. Das ist jetzt keine Werbung, ich finde sie nur gut. Da dauert es wirklich weniger als 10 Minuten von Eingabe deiner Kreditkartendaten bis Du-kannst-damit-irgendwas-Programmieren. So viel, glaube ich, zur Hardware.
Lucas Dohmen: Okay. Und mit welcher Programmiersprache würde ich da jetzt zum Beispiel loslegen können?
Michael Perlin: Die zweitpopulärste Sprache für Deep Learning ist nach meiner Einschätzung “R”. Das kommt aus dem mathematischen Bereich - Mathematik und Statistik. Die populärste Sprache, beziehungsweise das populärste Ökosystem, ist mit Abstand Python. Also, erst mal ist Python eine sehr ausgereifte Sprache. Zweitens, es existiert ein mächtiges Ökosystem mit Debugger, mit Visualisierungs-Tools, mit Entwicklungsumgebung, mit diversen anderen Dingen, die schon seit Langem im Data-Science-Bereich etabliert sind. Und Deep-Learning-Spezialisten, das sind eigentlich normalerweise Leute, die seit ewig mit Data Science beschäftigt sind, und für die ist das eigentlich ganz vertraut. Also sprich, Python ist wirklich empfehlenswert in diesem Bereich und alle Tools, die in diesem Bereich existieren, erhalten vor allem APIs in Python. Dann sollten wir wahrscheinlich zu den Bibliotheken und Frameworks kommen.
Lucas Dohmen: Mhm.
Michael Perlin: Jetzt will ich zwei davon vorstellen. Das eine ist PyTorch, das kommt von Facebook, beziehungsweise nicht direkt von Facebook, aber wird von Facebook mächtig unterstützt. Das ist eine Python-Bibliothek, die sehr gut in das Python Ökosystem passt. Also, wenn man mit PyTorch Deep-Learning-Netzwerke entwickelt, dann kann man Standardwerkzeuge von Python benutzen: Entwicklungsumgebung, Debugger, Visualisierungs-Tools und so weiter und so fort. Das Konkurrenzprodukt zu PyTorch ist TensorFlow von Google. Da haben die Entwickler sich was anderes gedacht. Da sind sie nicht den Python Idiomen gefolgt, da haben sie eigene Debugger geschaffen, ein eigenes Visualisierungs-Board - funktioniert aber sehr gut. Es existieren zahlreiche Beispiele und sehr viele von beeindruckenden Deep-Learning-Ergebnissen. Zum Beispiel das beste Speech-Recognition-System oder die guten Übersetzungs-Tools, die sind gerade mit TensorFlow umgesetzt.
Lucas Dohmen: Was man in dem Bereich ja auch irgendwie noch hat, sind vielleicht auch größere Datenmengen und da denken jetzt vielleicht manche Leute an Hadoop oder Spark. Spielt das da auch eine Rolle oder braucht man so was gar nicht?
Michael Perlin: Es kann eine Rolle spielen, muss aber nicht. Wenn man von Big Data einfach als von einem großen Datenvolumen redet, dann kommt das schon mal vor, dass auch Deep-Learning-Netzwerke vor allem zum Trainieren sehr viele Daten durchjagen, weil, je mehr Samples ich durch mein Netzwerk jage und je besser deren Qualität, desto weniger ist die Fehlerrate und desto besser funktioniert mein System dann in Produktion. Wenn man Big Data eher als Technologie versteht also eher an Produkte wie Hadoop und Spark denkt, dann kann es für Deep Learning eingesetzt werden. Also, zumindest existieren Lösungen, die mit Hadoop und Spark für Verteilung sorgen. Das muss aber nicht. Weil zumindest TensorFlow und auch ein paar andere Frameworks eine Verteilung out of the box zur Verfügung stellen, und was ich eher jetzt in der Praxis gesehen habe, wäre so ein großer Deep Learning Rack mit 64 oder 200 GPU Einheiten in einem Rack. Und die Verteilung auf diese GPU Einheiten macht dann TensorFlow out of the box.
Lucas Dohmen: Und wenn ich das ganze jetzt im Projekt einsetzten und beispielsweise in meine Webanwendung einbinden möchte, wie integriere ich das miteinander?
Michael Perlin: Das erste Problem ist, dass die Entwickler der Enterprise-Anwendung und das Data-Science-Team normalerweise zwei unterschiedliche Einheiten sind, die auch auf ganz unterschiedlichen Gebieten spezialisiert sind. Ich möchte als Entwickler jetzt nicht unbedingt Deep-Learning-Spezialist werden, ich möchte einfach mein trainiertes Netz nehmen und in meine Spring-Boot-Applikation einbinden - ohne jetzt viel darüber zu wissen, was sie im Hintergrund macht. Die eine Lösung wäre jetzt, ich stelle irgendwo in meiner Applikationslandschaft ein Python Web Framework zur Verfügung und alle Aufrufe gehen dann an diesen Python Web Framework, der dann Deep-Learning-Wissen besitzt. Das wird in vielen Kontexten wahrscheinlich nicht funktionieren, weil Python jetzt nicht betrieben werden kann oder als nicht sicher gilt oder noch eine Technologie ist, was nicht unbedingt den Aufwand rechtfertigt und so weiter und so fort. Deswegen greift man zu einem anderen Ansatz. Sobald ich mein Netzwerk trainiert habe, kann ich mein Modell samt meiner Koeffizienten exportieren und irgendwo importieren. Also exportiere ich mein Modell in ein programmiersprachenunabhängiges Format – sprich: ich kann mein Modell in Python trainieren und ich kann es dann in eine Java-Umgebung einbinden. Oder in eine C#-Umgebung. Oder sogar in eine JavaScript-Umgebung, wo das zu 100 Prozent im Browser funktionieren wird und den WebGL-Accelerator von meinem Webbrowser benutzt. Genau, der gängige Ansatz ist: Modell trainieren, Modell exportieren, Modell wieder importieren. Dabei kann man zwei Fälle unterscheiden. Entweder ich habe das in TensorFlow trainiert und ich kann es ausschließlich in TensorFlow ausführen - das ist der Ansatz, den momentan zum Beispiel Google fährt - oder ich kann es mit einem beliebigen Framework trainieren und in einem anderen beliebigen Framework ausführen. Dafür gibt es eine Initiative. Die nennt sich Open Neural Network Exchange. Das heißt, mein Modell ist dann technologieneutral oder herstellerneutral. Allerdings ist dieser Bereich, insbesondere dieser Open-Ansatz, sehr stark work-in-progress nach meiner Einschätzung. Da muss schon einiges passieren bis man wirklich diese Interoperativität zwischen diversen Frameworks erreicht. Momentan würde ich das einfach zu 100 Prozent TensorFlow machen, weil das ein von Google sichergestellter Weg ist.
Lucas Dohmen: Okay. Wenn jetzt eine Zuhörerin oder ein Zuhörer sich dafür interessiert und einfach loslegen will, hast du da Ressourcen, die besonders gut zum Starten sind?
Michael Perlin: Erst mal, wenn sie Python sprechen und das Python-Ökosystem kennen, würde ich die Seite fast.ai empfehlen. Das ist von einem Deep-Learning-Spezialisten der ersten Stunde, der irgendwann auf die Idee gekommen ist “make Deep Learning uncool again”. Damit man Deep Learning nicht als Magie sieht, sondern auch versteht. Ich finde das von ihm sehr gut erklärt, und vor allem ist das für Entwickler geeignet, die sich schon bereits in anderen Programmiersprachen ausgetobt haben und jetzt noch ein bisschen Deep Learning lernen wollen. Sprich, das ist von der ersten Stunde praxisorientiert: Wie löse ich das Problem? Was ist das Netzwerk? Dann wird Vorlesung für Vorlesung eine Hülle fallen gelassen. So lernt man sukzessiv, was in einem Neuronalen Netz passiert und wie man damit die gängigen Probleme löst. Der gute Mensch Jeremy Howard macht das alles mit PyTorch und wenn sie mit Python vertraut sind, dann ist PyTorch wirklich eine sehr gute Wahl, um jetzt in Deep Learning einzusteigen.
Ansonsten, wenn sie TensorFlow kennenlernen wollen - sehr gutes Tooling, sehr beeindruckende Ergebnisse - da lohnt es sich einfach die Videos von Google anzuschauen. Und jetzt kommen wir vielleicht zu dem Fall, wenn sie mit Python vielleicht doch nicht vertraut sind und auf einmal Python plus Python-Ökosystem plus Deep-Learning-Grundlagen für zu viel finden. Es existieren auch Frameworks, die in Java funktionieren. Das ist vor allem Deeplearning4J. Mit dem kann ein Java-Entwickler einsteigen. Für JavaScript-Entwickler tensorflow.js - das werden wir alles in den Shownotes verlinken. Das ist 100 Prozent im Browser und das ist großartig für Visualisierung und für Lerneffekte – schauen Sie sich das einfach an. Ansonsten, wenn Sie aus der .NET Ecke kommen, wäre vielleicht CNTK für Sie interessant, weil es von Microsoft kommt und natürlich die .NET Welt sehr gut bedient.
Lucas Dohmen: Super!
Michael Perlin: Als Nächstes - also da haben wir von den Ressourcen gesprochen, wo man wirklich sich Grundlagen von Deep Learning aneignen kann - brauchen Sie noch Daten. Da empfehle ich kaggle.com. kaggle.com ist eine Community um diverse Machine Learning competitions. Also sprich, eine Firma, die ein Problem mit Machine-Learning-Mitteln gelöst haben möchte, kann ein Datenset bei kaggle.com einreichen, was dann für alle verfügbar ist, und das dann jeder herunterladen kann und Machine-Learning-Algorithmen dafür entwickeln kann. Und wenn Sie Deep Learning machen möchten, dann auch Deep Learning Algorithmen. Was an diesen Datensätzen gut ist, die sind schon zum großen Teil aufbereitet. Ich kann aus eigener Erfahrung sagen, über die Hälfte der Zeit ist man nicht mit interessanten Problemen beschäftigt, sondern damit, Daten irgendwie dafür tauglich zu machen, damit man damit überhaupt etwas anfangen kann. Und zwar Whitespaces bereinigen, diverse komische Encodings fixen und so weiter und so fort. Und wenn man die Datensets von kaggle herunterlädt, dann sind diese Probleme zum großen Teil gelöst.
Lucas Dohmen: Gut. Das werden wir auch alles in den Shownotes verlinken - wer sich dafür interessiert. Dann braucht man sich das nicht alles zu ergooglen. Dann danke ich dir für den tollen Überblick.
Michael Perlin: Sehr gerne!
Lucas Dohmen: Und den Zuhörerinnen und Zuhörern bis zum nächsten Mal. Tschüs!
Michael Perlin: Ciao!