Seit November 2017 nehme ich am Deep Learning Nanodegree von Udacity teil. Deep Learning ist ein Machine Learning Ansatz, der auf künstlichen neuronalen Netzwerken (KNN) aufbaut. Inspiriert wurde dieser Ansatz von natürlichen Neuronensystemen, aus denen Nervengewebe und vor allem das Gehirn besteht. Im Gegensatz zum “Shallow Learning”, in dem nur eine Schicht künstlicher Neuronen zur Datenanalyse verwendet werde, verwenden “Deep Nets” (“tiefe oder besser: vielschichte Netzwerke) mehrere übereinander gestapelte Schichten aus Neuronen. So können, die Informationen – z.B. die eines Bildes, dessen Inhalt erkannt werden soll – auf der einen Seite als Pixel in das Netzwerk eingegeben werden und von Schicht so zu Schicht können so aus abstrakteren Einheiten konkreter Bildelemente erkannt werden. Im Beispiel können das z.B. in der ersten Ebene die groben Pixel, in der zweiten Ebene, Kanten und Ecken sein, in der zweiten Ebene einfache Formen wie Kreise, Ovale, Rechtecke und Trapeze und noch eine Ebene höher konkrete Bildeinheiten wie Haare, Stuhllehnen, Knöpfe, Wangen und Nasen und noch eine ebene höher, dann z.B. ein Hund von einem Huhn unterschieden werden. Die Vielschichtigkeit ist das Geheimnis und die Innovation von Deep Learning.
Heute gehören die diversten KNN-Verfahren – darunter Convolutional neural networks, rekurrente neuronale Netzwerke, Generative adversarial networks oder Deep reinforcement learning zu den Go-To-Methoden für die Lösung verschiedenster Probleme: darunter Spracherkennung, Spracherzeugung, Texterkennung, automatische Textübersetzung, Bilderkennung, Computer-KI-Systeme für Computerspiele, selbstfahrende Autos u.v.m. – konkret sind das Sprachassistenten wie Googles Assistent oder Amazons Echo oder die automatische Erkennung von Stimmungen in Chattexten oder Rezensionen (sog. Sentiment Analyse), in Bildern können Hunde, Hunderassen erkannt aber auch bösartige Tumore entdeckt werden, in Computerspielen haben zunehmend die Computer die Hosen an: die Schachtrophäe ging ja bereits 1998 von Kasparov an Deep Blue über, seit 2015 triumphieren aber auch Computer im intuitiven Spiel Go über Fähigkeiten menschlicher Weltmeister, auch sind autonome Fahrzeuge auf den Vormarsch – z.B. in den Logistikzentren und Lagerhallen großer Online-Versandhäuser.
Die Theorie neuronaler Netzwerke (KNN) beginnt im Jahr 1943 mit Warren McCulloch und Walter Pitts. Sie berschreiben, das KNN theoretisch beliebige Berechnungen anstellen könnten. Trotz erster Erfolge – beispielsweise die kommerzielle Anwendung erster KNN zur automatischen Echofilterung in Telefonaten im Jahr 1960, die auf Arbeiten von Bernard Widrow und Marcian E. Hoff das ADALINE (ADAptive LInear NEuron) zurückgingen, geriet die Forschung um KNN zunächst in Stocken. Grund dafür waren mathematische Probleme, die Seymour Papert und Marvin Minsky 1969 identifizierten: darunter die Unmöglichkeit der damals zur Verfügung stehenden Netzkwerke, den recht einfachen logischen Operator XOR abzubilden. Infolgedessen wurden zunächst die meisten Forschungsgelder gestrichen. Wenn auch gebremst, ging die Forschung weiter. 1974 beschrieb Paul Werbos das heute wichtige Backpropagation oder Fehlerrückführungsverfahren. Seine Renaissance erlebten die KNN jedoch erst wieder ab 1985, als man entdeckte, dass mehrschichtige KNN, paralell via Backprogation trainiert werden konnten, und mit diesen das Problem der linearen Separierbarkeit gelöst und das XOR- Gatter simuliert konnte. Damit waren Papert und Minsky wiederlegt.
Als Data Scientist bin ich zwar ebenfalls diverse Male mit neuronalen Netzwerken in Berührung gekommen, aber einen umfassenden Überblick konnte ich mir noch nicht verschaffen. Das ist mein Ziel für die Teilnahme am Deep Learning Kurs von Udacity. Der Kurs ist mit 600 EUR zwar nicht billig, ich versprach und verspreche mir davon aber eine Aktualisierung und Erweiterung meines aktuellen Wissens zum Thema Deep Learning sowie eine vertiefte Anwendung in meinen Arbeitskontext. Ich habe mittlerweile den ersten Teil abgeschlossen. Neu waren für mich in dem Zusammenhang u.a. die beiden Python Bibliotheken Keras und Tensorflow, die den Bau von mehrlagigen neuronalen Netzwerken (=deep neural nets) ermöglichen. Ich habe bislang mit der MLLIB von Scala neuronale Netzwerke trainiert. Auch habe ich bisher keine Regression mit KNNs gemacht, das hat sich im Wege der ersten Projekts im Rahmen des Kurs geändert. Dafür mussten wir Daten eines Jahres analysieren und den Bedarf eines bestimmten Produktes an bestimmten Standorten in Abhängigkeit diverster Faktoren vorhersagen. Das hat mit wenigen Ausnahmen sehr gut geklappt. Ein weitere schöne Sache war die Sentiment-Analyes in Texten mit NLTK. Das ist auch ein sehr schönes Kit, um Texte zu minen. Im nächsten Teil, an dem ich bereits arbeite geht es um convoluted neuronale Netzwerke und hauptsächlich Bilderkennung. Ich bin schon sehr gespannt!