Long Short-Term Memory (LSTM)

Was ist ein Long Short-Term Memory (LSTM)?

Mehr über Funktionsweise, Anwendungen und Entwurf von LSTMs erfahren

Ein LSTM-Netz (Long Short-term Memory) ist eine Form des rekurrenten neuronalen Netzes (RNN). LSTMs werden überwiegend zum Erlernen, Verarbeiten und Klassifizieren sequenzieller Daten verwendet, da sie langfristige Abhängigkeiten zwischen Zeitschritten der Daten erlernen können.

Funktionsweise von LSTMs

LSTMs und RNNs

LSTM-Netze sind eine spezielle Form der RNN-Architektur. RNNs nutzen vergangene Information, um die die Leistung eines neuronalen Netzes zu aktuellen und zukünftigen Eingaben verbessern. Sie enthalten einen verborgenen Zustand und Schleifen, durch die das Netz vorhandene Informationen im verborgenen Zustand speichern und Sequenzen verarbeiten kann. RNNs verfügen ü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.

In der Praxis können einfache RNNs nur begrenzt längerfristige Abhängigkeiten erlernen. RNNs werden gewöhnlich durch Backpropagation trainiert, wobei das Problem eines „verschwindenden“ oder eines „explodierenden“ Gradienten auftreten kann. Durch diese Probleme werden die Netzgewichtungen entweder sehr klein oder sehr groß, was die Wirksamkeit bei Anwendungen begrenzt, für die das Netz langfristige Beziehungen erlernen muss.

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.

Datenfluss bei einem Zeitschritt t für ein herkömmliches RNN.

Architektur der LSTM-Ebenen

LSTM-Ebenen nutzen zusätzliche Gates, um zu steuern, welche Informationen im verborgenen Zustand als Ausgabe und zum nächsten verborgenen Zustand exportiert werden. Diese zusätzlichen Gates überwinden Probleme, die RNNs beim Erlernen langfristiger Abhängigkeiten häufig haben. Zusätzlich zum verborgenen Zustand in herkömmlichen RNNs verfügt die Architektur für einen LSTM-Block üblicherweise über eine Speicherzelle, ein Eingabe- und ein Ausgabe-Gate und Forget Gate. Durch die zusätzlichen Gates kann das Netz langfristige Beziehungen in den Daten effektiver zu erlernen. Durch die geringere Empfindlichkeit gegenüber der Zeitlücke sind LSTM-Netze besser zum Analysieren sequenzieller Daten geeignet als einfache RNNs. In der unten stehenden Abbildung sehen Sie die LSTM-Architektur und den Datenfluss im Zeitschritt t.

Ein LSTM-Netz verwendet zusätzliche Einheiten wie ein Forget Gate und eine Speicherzelle, die verhindern, dass es zu Problemen mit verschwindenden und explodierenden Gradienten kommt.

Datenfluss im Zeitschritt t für eine LSTM-Einheit. Forget Gate und Speicherzelle verhindern Probleme mit verschwindenden und explodierenden Gradienten.

Die Gewichtungen und Verzerrungen zum Eingabe-Gate steuern, inwieweit ein neuer Wert in die LSTM-Einheit fließt. Entsprechend steuern die Gewichtungen und Verzerrungen zum Forget Gate und zum Ausgabe-Gate, inwieweit ein Wert in der Einheit bleibt und jeweils zur Berechnung der Ausgabeaktivierung des LSTM-Blocks herangezogen wird.

Das folgende Diagramm veranschaulicht den Datenfluss durch eine LSTM-Ebene mit mehreren Zeitschritten. Die Anzahl der Kanäle in der Ausgabe entspricht der Anzahl der verborgenen Einheiten in der LSTM-Ebene.

Diagramm dazu, wie Informationen durch mehrere Schritte einer LSTM-Ebene propagiert werden.

Datenfluss für ein LSTM mit mehreren Zeitschritten. Jede LSTM-Operation erhält den verborgenen Zustand und den Zellenzustand aus der vorhergehenden Operation und gibt einen aktualisierten Zustand und Zellenzustand an die nächste Operation weiter.

LSTM-Netzarchitekturen

LSTMs funktionieren gut mit Sequenz- und Zeitreihendaten bei Klassifizierungs- und Regressionsaufgaben. Außerdem eignen sich RNNs 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 Bilderabfolge in die RNN-Ebene zu extrahieren. Ebenso können Convolutional Neural Networks (CNNs) (z. B. GoogLeNet) zur Merkmalsextraktion in jedem Frame eingesetzt werden. Die folgende Abbildung zeigt, wie ein LSTM-Netz für verschiedene Aufgaben entworfen wird.

Diagramm der LSTM-Netzarchitektur mit Ebenen zum Aufbau eines RNN für verschiedene Aufgaben.

LSTM-Netzarchitektur für Klassifizierungs-, Regressions- und Videoklassifizierungsaufgaben.

Bidirektionales LSTM

Ein bidirektionales LSTM (BiLSTM) 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. BiLSTM-Netze ermöglichen ein zusätzliches Training, da die Eingabedaten die LSTM-Ebene zwei Mal passieren, was die Netzleistung steigern kann.

Ein BiLSTM besteht aus zwei LSTM-Komponenten: dem Vorwärts-LSTM und dem Rückwärts-LSTM. Das Vorwärts-LSTM ist vom ersten bis zum letzten Zeitschritt im Einsatz, das Rückwärts-LSTM vom letzten bis zum ersten. Nachdem die Daten die beiden LSTM-Komponenten passiert haben, werden die Ausgaben entlang der Kanaldimension konkateniert.

Diagramm mit den Vorwärts- bzw. Rückwärts-Operationen eines BiLSTM.

Architektur eines BiLSTM mit mehreren Zeitschritten.

Erste Schritte mit LSTM-Beispielen in MATLAB

LSTM-Anwendungen

LSTMs sind besonders bei der Arbeit mit sequenziellen Daten effektiv, die unterschiedlich lang sein können, und beim Erlernen langfristiger Abhängigkeiten zwischen Zeitschritten dieser Daten. Gängige LSTM-Anwendungen beinhalten eine Sentiment-Analyse, Sprachmodellierung, Spracherkennung und Videoanalyse.

Horizontale LSTM-Anwendungen

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.
  • Verarbeitung natürlicher Sprache (NLP). Sprache ist naturgemäß sequenziell und einzelne Texte haben unterschiedliche Längen. LSTMs 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, da sie in der Lage sind, Wörter in einem Satz zu kontextualisieren.

Probieren Sie folgende Beispiele aus, um LSTMs bei der Signalverarbeitung und der Verarbeitung natürlicher Sprache anzuwenden.

Vertikale LSTM-Anwendungen

Mit den sich erweiternden Deep-Learning-Anwendungen werden LSTMs in vertikalen Anwendungen wie den folgenden eingesetzt:

Einsatz von LSTM-Netzen zur Abschätzung von NOx-Emissionen

Renault-Konstruktionsteams verwenden LSTMs beim Entwickeln von Technologie der nächsten Generation für emissionsfreie Fahrzeuge (ZEVs).

Sie erhielten ihre Trainingsdaten von Tests, die an einem echten Motor ausgeführt wurden. Bei diesen Tests durchlief der Motor gängige Fahrzyklen. Die erfassten Daten, darunter Drehmoment und Drehzahl des Motors, Kühlmitteltemperatur und Emissionen je nach Gangzahl waren die Eingabe in das LSTM-Netz. Nach Iterationen am Entwurf der LSTM-Architektur erzielte die endgültige Version des LSTM eine Genauigkeit von 85–90 % bei der Prognose der NOx-Werte.

LSTMs mit MATLAB

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

Entwicklung und Training von Netzen

Sie können LSTMs programmatisch mit nur wenigen Zeilen Code entwerfen und trainieren. Nutzen Sie LSTM-Ebenen, bidirektionale LSTM-Ebenen und LSTM-projizierte Ebenen, um LSTMs zu erstellen. Außerdem können Sie LSTMs interaktiv mit der Deep Network Designer-App entwerfen, analysieren und modifizieren.

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

Verwendung der Deep Network Designer-App zur interaktiven Erstellung, Visualisierung und Bearbeitung von LSTM-Netzen.

Import und Export von Netzen

Sie können LSTM-Netze durch Python®-basierten Deep-Learning-Frameworks auswechseln:

  • Importieren Sie PyTorch®-, TensorFlow™- und ONNX™-Modelle mit einer einzigen Zeile Code.
  • Importieren Sie PyTorch- und TensorFlow-Modelle interaktiv mit Deep Network Designer.
  • Exportieren Sie LSTM-Netze nach TensorFlow und ONNX mit einer einzigen Zeile Code.
Diagramm zur Interoperabilität für LSTMs und andere tiefe neuronale Netze zwischen MATLAB, TensorFlow, ONNX und PyTorch.

Konvertieren Sie LSTM-Netze zwischen MATLAB, TensorFlow, ONNX und PyTorch.

Bereitstellung von Netzwerken

Stellen Sie Ihr trainiertes LSTM auf Embedded Systems, in Unternehmenssystemen oder in der Cloud bereit:

  • Generieren Sie automatisch optimiertem C/C++ Code und CUDA-Code zur Bereitstellung auf Prozessoren und Grafikprozessoren.
  • Generieren Sie synthetisierbaren Verilog® - und VHDL® -Code zur Bereitstellung von FPGAs und SoCs.
Diagramm zur Generierung von MATLAB- und Simulink-Code zur Bereitstellung tiefer neuronaler Netze auf CPUs, GPUs, Mikrocontrollern und FPGAs.

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