Wie erstelle ich ein Deep-Learning-Modell?
Drei praktische Anwendungsbeispiele für den einfachen Einstieg in Deep-Learning-Anwendungen
Wie erstelle ich ein Deep-Learning-Modell?
Drei praktische Anwendungsbeispiele für den einfachen Einstieg in Deep-Learning-Anwendungen
Deep Learning ist eine der Schlüssel-Technologien des Industrial IoT (Internet of Things). So hat Deep Learning grosse Auswirkungen in Bereichen wie Computer Vision und Natural Language Processing. Es ist essentiell für Autonomes Fahren und Spracherkennung und -steuerung in Endgeräten wie Telefonen und Freisprecheinrichtungen. Dabei ist Deep Learning längst nicht mehr nur Zukunftsmusik und wird bereits in einigen Bereichen wie zum Beispiel bei Übersetzungsprogrammen eingesetzt.
Was ist Deep Learning?
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 manchmal sogar 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 2-3 verborgene Schichten, während tiefe Netze bis zu 150 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 z.B. 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.
Wie erstelle ich ein Deep-Learning-Modell?
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 Neural Network Toolbox können Software-Ingenieure und Wissenschaftler ohne besondere Vorkenntnisse Deep-Learning-Lösungen erstellen und sich dabei 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 ein vortrainiertes Netz, AlexNet, verwendet. Es ist ein grosses 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össe angepasst werden, denn AlexNet wurde nur auf das Verarbeiten von Bildern in einer bestimmten Grösse 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
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. Zum Beispiel wird ein Netzwerk, das bereits darauf trainiert wurde, 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 grossen 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 Frittes. 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
- Test des Ergebnisses
Das GoogleNet-Netzwerk kann mit nur einer einzigen Zeile Code importiert werden:
Da bei diesem vortrainierten Netzwerk der grösste 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 einem einfachen Befehl kann man sich die letzten fünf Schichten anzeigen lassen:
>>net.Layers(end-4:end)
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össe 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 Trainings-Optionen wie etwa bei der Batch-Grösse, dem Lerntempo und den Validierungsdaten, kann man die Genauigkeit des Netzwerkes steigern.
Eine weitere wichtige Rolle spielt die Hardware. Eine einzige Tesla P100 Grafikkarte könnte dieses Modell in ca. 20 Minuten trainieren.
Zum Visualisieren der Genauigkeit des Netzwerkes kann eine Konfusionsmatrix angewendet werden. Der Test aus dem beschriebenen Beispiel zeigt eine Genauigkeit von 83% an. Während dies für unser Beispiel ausreicht, wäre es für eine reale Anwendung inakzeptabel. Um die Genauigkeit des Modells für eine reale Anwendung zu erhöhen, kann man weitere Iterationen durchführen, die Trainingsoptionen sowie die Daten überprüfen und das Netzwerk neu konfigurieren.
In einem letzten Schritt wird die Leistung des Netzwerks anhand von neuen Bildern verifiziert.
Mehr als nur Bildanalyse
Die beiden gezeigten Beispiele konzentrieren sich auf die Bilderkennung. Aber auch für andere Anwendungen wie Spracherkennung und Textanalyse, die Signaldaten statt Bilddaten verwenden, wird Deep Learning zunehmend eingesetzt. Im Folgenden wird ein Beispiel vorgestellt, das unter Verwendung eines Long Short Term Memory (LSTM)-Netzwerks Signaldaten, die auf einem Smartphone erfasst wurden, klassifiziert und so menschliche Bewegungsmuster erkennt:
Ziel ist es, die von einem Smartphone erfassten Signaldaten 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. Ein LSTM-Netzwerk ist eine Art rekurrierendes neuronales Netzwerk (RNN), das langfristige Abhängigkeiten zwischen Zeitabschnitten innerhalb von Zeitreihen erkennen kann. Im Gegensatz zu einem herkömmlichen CNN kann sich ein LSTM den Zustand des Netzwerks zwischen den Vorhersagen merken. So kann man mit einem LSTM Vorhersagen auf Basis einzelner Zeitabschnitte in Zeitreihen treffen.
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 eine Vorhersage zu treffen. Zudem sendet sie den nun veränderten Zustand des Netzwerks an die nächste 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 Zeitreihe in das Netzwerk ein. Eine LSTM-Schicht erlernt langfristige Abhängigkeiten zwischen Zeitabschnitten von Zeitreihen.
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%. Dieses Ergebnis ist für unsere Anwendung zur Aktivitätsverfolgung zufriedenstellend.
Impressum
Textquelle: Mathworks
Bildquelle: Mathworks
Publiziert von Technik und Wissen
Informationen
Weitere Artikel
Veröffentlicht am: