Rekurrente Neuronale Netze (RNN)

Was versteht man unter einem rekurrenten neuronalen Netz?

3 Dinge, die Sie wissen sollten

Ein rekurrentes neuronales Netz (RNN) ist eine Netzarchitektur für das Deep Learning, die Vorhersagen anhand von Zeitreihen oder sequenziellen Daten trifft.

RNNs eignen sich besonders für die Arbeit mit unterschiedlich langen, sequentiellen Daten und zur Problemlösung in den Bereichen Klassifizierung natürlicher Signale, Sprachverarbeitung und Videoanalyse.

Die Funktionsweise von RNNs

Ein rekurrentes neuronales Netz (RNN) ist eine Deep-Learning-Struktur, die anhand vorhandener Informationen die Leistung eines Netzes für aktuelle und zukünftige Eingaben verbessert. Das Besondere an einem RNN ist, dass das Netz einen verborgenen Zustand und Schleifen enthält. Die Schleifenstruktur ermöglicht es dem Netz, vorhandene Informationen im verborgenen Zustand zu speichern und Sequenzen zu verarbeiten.

Woher aber weiß ein RNN, welche vorhandenen Informationen auf die aktuelle Eingabe anwendbar sind? Das Netz verfügt über zwei Gewichtungen: eine Gewichtung für den Vektor des verborgenen Zustands und eine für die Eingaben. Beim Trainieren erlernt das Netz sowohl Gewichtungen für die Eingaben als auch für den verborgenen Zustand. Nach erfolgter Anwendung basiert die Ausgabe sowohl auf der aktuellen Eingabe als auch auf dem verborgenen Zustand, der wiederum auf vorherigen Eingaben basiert.

Ein Diagramm der Entfaltung einer einzelnen Zelle eines RNN zeigt, wie die Informationen für eine Datensequenz das Netz durchlaufen. Der verborgene Zustand der Zelle wirkt auf Eingaben ein und erzeugt die Ausgabe, worauf der verborgene Zustand an den nächsten Zeitschritt übergeben wird.

Die Entfaltung einer einzelnen Zelle eines RNN zeigt, wie die Informationen für eine Datensequenz das Netz durchlaufen. Der verborgene Zustand der Zelle wirkt auf Eingaben ein und erzeugt die Ausgabe, worauf der verborgene Zustand an den nächsten Zeitschritt übergeben wird.

LSTM

In der Praxis haben einfache RNNs Probleme mit dem Erlernen langfristiger Abhängigkeiten. RNNs werden gewöhnlich durch Backpropagation trainiert, wobei das Problem eines „verschwindenden“ oder eines „explodierenden“ Gradienten auftreten kann. Diese Probleme führen dazu, dass die Gewichtungen des Netzes entweder sehr klein oder sehr groß werden und somit die Wirksamkeit des Lernens langfristiger Abhängigkeiten einschränken.

Eine RNN-Sonderform ist das Long Short-Term Memory-Netz (LSTM). LSTM-Netze nutzen zusätzliche Gates, um zu steuern, welche Informationen in der verborgenen Zelle weiter zur Ausgabe und zum nächsten verborgenen Zustand gelangen. Auf diese Weise kann das Netz langfristige Abhängigkeiten in den Daten wirksamer erlernen. LSTM sind häufig verwendete Formen von RNN.

Grafische Gegenüberstellung eines RNN und eines LSTM-Netzes. Das RNN verwendet einen versteckten Zustand bei der Eingabe, der auch als zusätzliche Eingabe für das RNN beim nächsten Zeitschritt verwendet wird. Das LSTM verwendet zusätzliche Einheiten wie ein Forget Gate und eine Speicherzelle, die verhindern, dass es zu Problemen mit verschwindenden und explodierenden Gradienten kommt.

RNN (links) und LSTM-Netz (rechts) im Vergleich.

Ein bidirektionales LSTM erlernt bidirektionale Abhängigkeiten zwischen Zeitschritten von Zeitreihen oder Sequenzdaten. Diese Abhängigkeiten können nützlich sein, wenn das Netz bei jedem Zeitschritt aus der gesamten Zeitreihe lernen soll. Eine weitere RNN-Variante, die längerfristige Abhängigkeiten erlernt, ist das Gated RNN. Sie können bidirektionale LSTMs und Gated RNNs in MATLAB® trainieren und damit arbeiten.

Erste Schritte mit RNN-Beispielen in MATLAB

Die Bedeutung von RNNs

Der Einsatz von RNNs ist eine Schlüsseltechnologie für Anwendungen wie beispielsweise:

Signalverarbeitung

Signale sind natürliche sequenzielle Daten, weil sie oft über längere Zeiträume hinweg von Sensoren erfasst werden. Durch die automatische Klassifizierung und Regression bei großen Signaldatensätzen sind Vorhersagen in Echtzeit möglich. Rohsignaldaten können in tiefe Netze eingespeist oder aufbereitet werden, um sich auf spezielle Merkmale wie Frequenz-Komponenten zu konzentrieren. Die Merkmalsextraktion kann dabei zu einer signifikanten Verbesserung der Netzleistung führen.

Textanalysen

Sprache ist naturgemäß sequenziell und einzelne Texte haben unterschiedliche Längen. RNNs sind ein nützliches Tool für die Verarbeitung natürlicher Sprache, wie z. B. die Klassifizierung von Texten, die Texterstellung, die maschinelle Übersetzung und die Sentiment-Analyse (Kategorisierung der Bedeutung von Wörtern und Sätzen), da sie in der Lage sind, Wörter in einem Satz zu kontextualisieren.

Die Verwendung von RNNs

Bei der Arbeit mit Sequenz- und Zeitreihen für Klassifizierungs- und Regressionsaufgaben empfiehlt sich der Einsatz von RNNs. Darüber hinaus eignen sich RNNs auch hervorragend für Videos, da diese im Grunde eine Abfolge von Bildern darstellen. Wie auch bei der Arbeit mit Signalen ist es hilfreich, Merkmale vor der Einspeisung der Sequenz in das RNN zu extrahieren. Ebenso können CNNs (z. B. GoogLeNet) für die Merkmalsextraktion in jedem Frame eingesetzt werden.

Diagramm der RNN-Netzwerkarchitektur mit den verwendeten Schichten zum Aufbau eines RNN für Klassifikations-, Regressions- und Videoklassifizierungsaufgaben.

RNN-Netzwerkarchitektur für Klassifizierungs-, Regressions- und Videoklassifizierungsaufgaben.

Entdecken Sie MATLAB-Beispiele für RNNs mit Text, Signalen und Videos.

RNNs mit MATLAB

Mithilfe von MATLAB und der Deep Learning Toolbox™ können Sie RNNs entwickeln, trainieren und bereitstellen. Mithilfe der Text Analytics Toolbox™ oder der Signal Processing Toolbox™ können Sie die RNNs auch auf Text- oder Signalanalysen anwenden.

Entwicklung und Training von Netzen

Mit nur wenigen Zeilen MATLAB Programmcode lassen sich RNNs programmatisch erstellen und trainieren. Verwenden Sie rekurrente Schichten (LSTM-Schicht, bidirektionale LSTM-Schicht, geschlossene (gated) rekurrente Schicht und LSTM-projizierte Schicht), um RNNs aufzubauen. Nutzen Sie eine Worteinbettungsschicht in einem RNN-Netz, um Wörter in numerische Sequenzen umzuwandeln.

Sie können RNNs auch interaktiv mithilfe der Deep Network Designer-App erstellen und trainieren. Überwachen Sie das Training mit Diagrammen hinsichtlich Genauigkeit, Verlust und Validierungsmetriken.

Bereitstellung von Netzwerken

Sie können Ihr trainiertes RNN auf Embedded Systems, FPGA-Geräten, in Unternehmenssystemen oder in der Cloud bereitstellen. Ebenfalls ist es möglich, Code aus Intel®-, NVIDIA®- und ARM®-Bibliotheken zu generieren, um einsatzbereite RNNs mit leistungsstarker Inferenzgeschwindigkeit zu erstellen.

Screenshot eines einfachen BiLST-Netzwerks, das mit der Deep Network Designer-App interaktiv erstellt wurde.

Deep Network Designer-App zur interaktiven Erstellung, Visualisierung und Bearbeitung von RNN-Netzwerken.

Diagramm, das Deep-Learning-Netzwerke über Coder-Produkte mit eingebetteten Zielen wie Intel, NVIDIA und ARM verbindet.

Stellen Sie trainierte Deep-Learning-Netzwerke innerhalb kürzester Zeit für die Produktion bereit