Deep Learning hat große Auswirkungen in Bereichen wie Computer Vision und Natural Language Processing. Es ist essentiell sowohl für autonomes Fahren als auch für Spracherkennung und -steuerung in Endgeräten wie Telefonen und Freisprech-
einrichtungen. Dabei ist Deep Learning längst nicht mehr nur Zukunftsmusik und wird bereits in einigen Bereichen eingesetzt, wie zum Beispiel bei Übersetzungsprogrammen. Bei Deep Learning lernt ein Computermodell, Klassifizierungsaufgaben direkt aus Bildern, Texten oder Tönen auszuführen. Deep-Learning-Modelle erreichen eine hohe Genauigkeit und übertreffen in manchen Fällen bereits die menschliche Erkennungsleistung. Die meisten Methoden des Deep Learning verwenden neuronale Netzwerkarchitekturen, weshalb Deep-Learning-Modelle oft als Deep Neural Networks bezeichnet werden.
Der Begriff „tief“ bezieht sich in der Regel auf die Anzahl der verborgenen Schichten im neuronalen Netz. Traditionelle neuronale Netze enthalten nur zwei bis drei verborgene Schichten, während tiefe Netze bis zu 150 Schichten aufweisen können. Eine der populärsten Arten von tiefen neuronalen Netzen ist bekannt als faltende neuronale Netze (CNN oder Convnet, Convolutional Neural Network). Ein CNN führt die Faltung von erlernten Merkmalen mit Eingabedaten aus und verwendet 2D-Faltungsschichten, wodurch sich diese Architektur gut für die Verarbeitung von 2D-Daten wie Bildern, eignet. Anhand eines Bildbeispiels kann ein vollständig trainiertes Deep-Learning-Modell Objekte in Bildern automatisch identifizieren, auch wenn es diese noch nie zuvor gesehen hat.
Deep Learning scheint für Laien oft unzugänglich zu sein, aber mit gängigen Workflows können Ingenieure und Wissenschaftler bereits schnell und einfach Deep Learning für ihre Anwendungen einsetzen. Heute fördern eine Vielzahl von Tools die Einführung von Deep Learning, indem sie die Konfiguration und das Trainieren von Modellen vereinfachen, ihre Struktur visualisieren, vortrainierte Modelle für Transfer Learning einsetzen und die Vorteile der GPU-Beschleunigung nutzen. Je mehr Deep Learning zu einem allgegenwärtigen Tool in unseren Arbeitsabläufen wird, umso weiter werden sich auch die Anwendungen in diesem Bereich entwickeln und zum Beispiel bei Computer Vision, Natural Language Processing oder in der Robotik ganz neue Entwicklungsmethoden eröffnen.
Ein Deep-Learning-Modell erstellen
Eine der aufwendigsten Arbeiten bei der Erstellung neuer Deep-Learning-Modelle ist die Klassifizierung von Bildern zum Trainieren des Programms. Vortrainierte Netze verringern die Anzahl der dazu benötigten Bilder erheblich. Mit Matlab und der Deep Learning Toolbox können Software-Ingenieure und Wissenschaftler ohne besondere Vorkenntnisse Deep-
Learning-Lösungen erstellen und sich auf vortrainierte Netzwerke stützen. Das folgende Beispiel zeigt die Bilderkennung von Objekten in Echtzeit mit einer Webcam. Der Code dazu ist lediglich elf Zeilen lang und kann schnell implementiert werden, um die Technik auszuprobieren.
Im ersten Schritt muss man zunächst für einen freien Arbeitsplatz sorgen, eine Verbindung zur Kamera herstellen und ein Bild machen. Dieses Foto soll dann auf einem Computer-Bildschirm gezeigt werden. Mit einer Loop (über den „while“-Befehl) und dem „drawnow“-Befehl wird das Bild kontinuierlich aktualisiert und man erhält ein Video. Der nächste Schritt ist die Integration des neuronalen Netzes. In diesem Fall wird Alexnet als ein vortrainiertes Netz verwendet. Es ist ein großes Faltungsnetzwerk, das mit über einer Million verschiedener Bilder trainiert wurde und etwa 1.000 verschiedene Gegenstände identifizieren kann. Nach dem Download kann man es mit einer Codezeile instanziieren. Damit das Netzwerk die Bilder des Videos verarbeiten kann, müssen die Bilder zuerst in der Größe angepasst werden, denn Alexnet wurde nur auf das Verarbeiten von Bildern in einer bestimmten Größe trainiert. Sobald dies geschehen ist, kann das neuronale Netz die Bilder der Kamera klassifizieren. Mit einem weiteren Befehl wird diese Klassifizierung sofort im Bild angezeigt. Dazu muss der Titel mit dem
(char(label))-Befehl zu einem String umgewandelt werden.
Transfer Learning: Vortrainierte Netzwerke nutzen
Der nächste Schritt, um eine Applikation zu erstellen, die eine bestimmte Aufgabe erfüllt – zum Beispiel die Erkennung einer festgelegten Anzahl an bestimmten Lebensmitteln – ist das Transfer Learning. Diese Methode ermöglicht es, vortrainierte Modelle durch zusätzliche Spezifizierungen an das eigene Projekt anzupassen. Bei der Auswahl des vortrainierten Netzwerks sollte man unbedingt auf die Genauigkeit der Ergebnisse achten. Wenn ein Netzwerk bereits bei seiner ursprünglichen Aufgabe nur eine Genauigkeit von 50 Prozent erreicht, ist es unwahrscheinlich, dass es eine neu antrainierte Aufgabe besser erledigt. Zudem kann man sich die Arbeit vereinfachen, indem man ein Netzwerk wählt, das ähnliche Merkmale hat. so wurde beispielsweise ein Netzwerk darauf trainiert, Hunde zu erkennen, auch die Erkennung von anderen Tieren relativ schnell erlernen.
Im folgenden Beispiel wird ein vortrainiertes Netzwerk modifiziert und mittels Transfer-Lernen für eine neue Klassifikationsaufgabe trainiert. Die Feinabstimmung eines vorab trainierten Netzwerks ist viel schneller und einfacher als der Aufbau und das Trainieren eines neuen Netzwerks: Mit einer geringen Anzahl von Trainingsbildern kann das Deep Learning schnell auf eine neue Aufgabe übertragen werden. Hinzu kommt, dass das vortrainierte Netzwerk aufgrund der großen Anzahl von Bildern, auf denen es trainiert wurde, bereits einen reichen Funktionsumfang erlernt hat. Ziel ist es das Googlenet so umzutrainieren, dass es fünf Kategorien von Lebensmitteln zuordnen kann: Caesar Salad, Hamburger, Pizza, Sushi und Pommes Frites. Dafür werden folgende Schritte benötigt:
Import des vortrainierten Netzwerks,
Konfiguration der letzten drei Schichten, um eine neue Klassifikationsaufgabe auszuführen,
Trainieren des Netzwerks auf neuen Daten und
Test des Ergebnisses.
Das Googlenet-Netzwerk kann mit nur einer einzigen Zeile Code importiert werden. Da bei diesem vortrainierten Netzwerk der größte Teil der Arbeit beim Aufbau des Netzwerks (Auswahl und Organisation der Layer) bereits erfolgt ist, kann es sofort in den Kategorien, auf denen das Netzwerk ursprünglich trainiert wurde, getestet werden.
Um Googlenet für die Klassifizierung neuer Bilder zu trainieren, konfiguriert man die letzten drei Ebenen des Netzwerks neu. Diese Schichten enthalten die Informationen, die benötigt werden, um die Features, die das Netzwerk extrahiert, in Klassifikationswahrscheinlichkeiten und Labels zusammenzuführen. Googlenet hat 144 Schichten. Mit dem einfachen Befehl >>net.Layers(end-4:end) lassen sich die letzten fünf Schichten anzeigen.
Im nächsten Schritt werden die Schichten 143 und 144 – eine Softmax-Schicht und eine Klassifizierungsausgabeschicht – zurückgesetzt. Diese Ebenen sind dafür verantwortlich, den Eingabebildern die richtigen Kategorien zuzuordnen. Diese Schichten sollen nach der Bearbeitung neuen Kategorien entsprechen, nicht denen, die das ursprüngliche Netzwerk gelernt hat. Nun wird die letzte Fully-Connected-Schicht auf die gleiche Größe wie die Anzahl der Klassen im neuen Datensatz – in diesem Beispiel fünf – gesetzt. Mit diesen Angaben kann das Netzwerk die neuen Aufgaben lernen.
Nun benötigt das Netzwerk einige Testdurchläufe, um die neue Aufgabe zu erlernen. Durch die Anpassung einiger Trainingsoptionen, etwa der Batch-Größe und den Validierungsdaten, kann man die Genauigkeit des Netzwerks steigern. Eine weitere wichtige Rolle spielt die Hardware. Eine einzige Tesla P100 Grafikkarte könnte dieses Modell in rund 20 Minuten trainieren.
Zum Visualisieren der Genauigkeit des Netzwerks kann auf eine Konfusionsmatrix zurückgegriffen werden. Der Test aus dem beschriebenen Beispiel zeigt etwa eine Genauigkeit von 83 Prozent an. Während das für das gewählte Beispiel ausreicht, wäre es natürlich für eine reale Anwendung nicht akzeptabel. Um die Genauigkeit des Modells in einer realen Anwendung zu erhöhen, kann man weitere Iterationen durchführen, die Trainingsoptionen sowie die Daten überprüfen. Auch eine Neukonfiguration des Netzwerks kann die Genauigkeit erhöhen. Ist man mit dieser zufrieden, wird in einem letzten Schritt die Leistung des Netzwerks anhand von neuen Bildern verifiziert.
Die beiden gezeigten Beispiele konzentrieren sich auf die Bilderkennung. Aber auch für andere Anwendungen wie Sprach-
erkennung und Textanalyse wird Deep Learning zunehmend eingesetzt. Beispielsweise können unter Verwendung eines Long-Short-Term-Memory-Netzwerks (LSTM) Signaldaten, die auf einem Smartphone erfasst wurden, klassifiziert und so menschliche Bewegungsmuster erkannt werden. Ziel ist es, die von einem Smartphone erfassten Daten zu verwenden, um sechs Aktivitäten zu klassifizieren: gehen auf ebenem Boden, aufwärts Gehen, abwärts Gehen, Sitzen, Stehen und Liegen.
Gut geeignet für die Klassifikation von Zeitreihen ist ein LSTM-Netzwerk. Dabei handelt es sich um eine Art rekurrierendes neuronales Netzwerk (RNN). Dieses ist ein der Lage langfristige Abhängigkeiten zwischen Zeitabschnitten innerhalb von Zeitreihen zu erkennen. Im Gegensatz zu einem herkömmlichen CNN kann sich ein LSTM auch den Zustand des Netzwerks zwischen den Vorhersagen merken. Dadurch lassen sich mit einem LSTM Vorhersagen auf Basis einzelner Zeitabschnitte in Zeitreihen treffen.
Deep Learning ist mehr als nur Bildanalyse
Ein LSTM-Netzwerk wird durch eine Folge von Eingangsschichten definiert – jeweils eine für jeden Datenkanal. Die erste LSTM-Einheit verwendet den anfänglichen Zustand des Netzwerks sowie den ersten Zeitabschnitt der Sequenz, um daraus eine Vorhersage zu treffen. Zudem sendet sie den nun veränderten Zustand des Netzwerks an die nachfolgende Einheit des LSTM. Die Kernkomponenten eines LSTM-Netzwerks sind die Sequenz-Eingabeschicht und die LSTM-Schicht. Eine Sequenz-Eingabeschicht gibt Daten zu einer Sequenz oder einer Zeitreihe in das Netzwerk ein. Eine LSTM-Schicht erlernt hingegen die langfristigen Abhängigkeiten zwischen Zeitabschnitten von Zeit-
reihen.
Das Netzwerk beginnt mit einer Sequenz-Eingabeschicht, gefolgt von einer LSTM-Schicht. Die übrigen Schichten sind identisch mit den in den vorherigen Beispielen erstellten Bildklassifizierungsmodellen. Um Klassenbezeichnungen vorherzusagen, endet das Netzwerk mit einer Fully-Connected-Schicht, einer Softmax-Schicht und einer Klassifizierungsausgabeschicht. Mit der Integration der beiden neuen Schichten (eine Sequenz-Eingabeschicht und eine LSTM-Schicht) können die Signaldaten verwendet werden, um ein Modell zu trainieren, das neue Aktivitätssignale klassifizieren kann. Wenn das trainierte Netzwerk mit neuen Daten betrieben wird, erreicht es eine Genauigkeit von
95 Prozent.