Zeitliche Abfolgen lernen mit LSTM (Long Short-Term Memory)

Standardneurale Netze analysieren jeden Datensatz unabhängig voneinander und berücksichtigen keine zeitlichen Zusammenhänge. Im Gegensatz dazu können Rekurrente Neuronale Netze (RNNs) Sequenzen von Daten verarbeiten und Muster erkennen, die über die Zeit verteilt sind.

Definition und Beschreibung von RNN

  • Die Rekurrente Neuronale Netze (RNN) sind neuronale Netze mit Rückkopplungen.
  • RNN können Datensequenzen analysieren und zeitmäßig Muster erkennen.
  • RNN verfügen über ein internes Gedächtnis und gehören somit zu ML-Algorithmen.
  • RNN haben im Vergleich zu ML-Algorithmen ein Verständnis für Abfolgen und deren Kontext.

Ziel

  • Dem Netz eine zeitliche Struktur beibringen, um Abfolgen und Sequenzen zu erkennen.
  • Vergleichbar mit Convolutional Neuroal Networks (CNNs)
  • Netze können zeitliche Zusammenhängezwischen einzelnen Handlungen verstehen und somit eine Prognose treffen

Anwendungsbereiche

  • Natural Language Processing (NLP)
    • Textgenerierung
    • Chatbots und Sprachassistensystemen
  • Zeitreihenanalyse
    • Finanzmarkvorhersagen
    • Wetterprognose
  • Sprachverarbeitung und Spracherkennung
    • Spracherkennungssysteme
    • Echtzeit-Übersetzung
    • Sprachegesteuerte Anwendungen und Assistenten wie Siri, Alexa
  • Bild- und Videoverarbeitung
    • Videosegmentierung und Bildunterschriftengenerierung
    • Bewegungsanalse in Sport und Überwachung
    • Aktionsvorhersagen
  • Medizin und Bilogie
    • Erkennung von Mustern in DNA-Sequenzen

Anforderungen an zeitliche Modelle

Zum Modellieren zeitlicher Verläufe bei unbekannten Daten, benötigen neuronale Netze zwei Eigenschaften:

  • Flexibile Menge an Ein- und Ausgängen
    • z.B. Übersetzung (Anzahl der Eingabeworte nicht vorhersehbar)
    • deshalb muss das Netz flexibel auf unterschiedliche lange Ein-und Ausgaben reagieren
  • Wiedereinschleusung von Zwischenergebnissen
    • keine Unabhängigkeit der Datenpunkte
    • nur Speichern und Wiederverwendung von Informationen

Warum ist die Wiedereinschleusung von Zwischenergebnissen wichtig?

Kontextabhängige Bedeutung z.B. Absatz wird je nach Kontext anders übersetzt.

  • Ohne Rückführung von Zwischenergebnissen kann das Netz den richtigen Kontext nicht erkennen und somit falsche Ausgabe liefern.

Vorteile von RNNs

  • Durch Rückkopplung können sich RNNS Infos aus früheren Eingaben merken
  • Gemerkte Infos können als Kontext für Vorhersagen über kommende Datenpunkte genutzt werden
  • daher ist das ideal für sequenzielle Daten wie Zeitreihen, Sprache, Text, Finanzdaten, Audio, Video, Wetter und vieles mehr

Grundtypen von RNNs

  • One-to-One (Ein Eingang, ein Ausgang) z.B. Bildklassifikation
  • One-to-Many (Ein Eingang, mehrere Ausgänge) z.B. Bildbeschreibung oder Musikgenerierung Wort als Input und Satz als Output
  • Many-to-One (Mehrer Eingänge, ein Ausgang) z.B. Stimmungsanalyse oder Textklassifikation Satz als Eingabe und Falsch/Richtig als Ausgabe
  • Many-to-Many (Mehrere Eingänge, mehrere Ausgänge) z.B. maschineller Übersetzung und Named Entity Recognition Sequenzen in andere Sprachstrukturen umwandeln

Rückkoppelung

  • Rückkopplung der Ausgabe eines Neurones auf dessen Eingang
  • z.B. neuronale Netz mit Eingaben zu zwei Zeitpunkten und

Ausgabe des Neurones zum Zeitpunkt wird zur zusätzlichen Eingabe des Neurons zum Zeitpunkt

Merken

Beide Neuronen und sind die gleiche Neuronen jedoch nur zu anderen Zeitpunkten Neuronen haben eine Verbindung zu sich selbst

Beispiel

Eingabesequenzen und Zielwerte für LSTM-Training

Zur Vorhersage von Aktienkursen mit einem LSTM wird die Zeitreihe in Eingabesequenzen und Zielwerte (Labels) aufgeteilt. Hierbei soll der Schlusskurs des nächsten Tages basierend auf den Schlusskursen der letzten fünf Tage vorhergesagt werden.

Gegebene Zeitreihe:

100, 102, 101, 105, 107, 110, 108, 111, 112, 115

Eingabesequenzen und Zielwerte:

  • Eingabe: 100, 102, 101, 105, 107Ziel: 110
  • Eingabe: 102, 101, 105, 107, 110Ziel: 108
  • Eingabe: 101, 105, 107, 110, 108Ziel: 111
  • Eingabe: 105, 107, 110, 108, 111Ziel: 112
  • Eingabe: 107, 110, 108, 111, 112Ziel: 115

Erläuterung:

  • Jede Eingabesequenz umfasst fünf aufeinanderfolgende Tagesschlusskurse.
  • Der Zielwert ist der Schlusskurs am darauffolgenden Tag.
  • Das LSTM lernt aus diesen Sequenzen und Zielwerten, Muster in Kursverläufen zu erkennen, um den nächsten Schlusskurs vorherzusagen.

Aufbau des LSTM:

  • Dieses Vorgehen folgt einem Many-to-One-Ansatz von RNNs: Mehrere Eingaben (hier: 5 Tage) führen zu einer einzelnen Ausgabe (nächster Tagesschlusskurs).
  • Die Rückkopplungen im LSTM erlauben es dem Netzwerk, frühere Zeitschritte für die Vorhersage zu berücksichtigen.

Aktivierungsfunktion

Die Aktivierungsfunktion eines Neurons zum Zeitpunkt in einem RNN ist abhängig vom vorherigen Zustand:

  • Aktivierungsfunktion zum Zeitpunt
  • Wert von vorherigem Zustand
  • Gewichte der Feed-Forward-Verbindung
  • Gewichte der rekurrenten Verbindungen
  • Eingangsgröße zum Zeitpunkt
  • Gewählte Aktivierungsfunktion

Probleme mit Gradienten

  • Gradient Problems (Fehler) treten bei RNNs auf, wenn diese für lange Sequenzen trainiert werden.

Gradienten treten während des Trainings durch Backpropagation Through Time (BPTT) und werden exponenziell kleiner oder größer, je weiter sie zurück in der Zeit gehen.

Zwei Arten der Gradienten

Diminishing Gradients Problem

diese entstehen, wenn die Multiplikationen bei der Backpropagation mit kleinen Werten (Gewichten) erfolgt

  • Gradienten werden immer kleiner, je weiter man in der Zeit zurückgeht
  • Frühere Eingabe in der Sequenz erhalten sehr schwache Rückmeldungen über den Fehler
  • Somit ist schwerig, wichtige Infos aus der Vergangenheit zu erlernen
Folge
  • Langfristige Abhängigkeiten werden nicht erlernt
    • Netzwerk keine Fokus auf relevante in der Vergangenheit liegende Informationen
  • Schwerigkeiten beim Training
    • Lernrate wird immer geringer
    • Netzwerk kann nicht effektiv auf frühere Eingaben reagieren

Merken

Bei Gewichten kleiner 1 wird der Fehler durch Backpropagation immer weiter gedämpft

Exploding Gradients Problem

diese entstehen, wenn die Gewichten größer 1 sind

  • in diesem Fall wachsen die Gradienten exponenziell je weiter man in der Zeit zurückgeht

Merken

Bei Gewichten grösser 1 explodiert der Fehler bei der Backpropagation

Long Short-Term Memory (LSTM)

LSTM ist eine speziele Art von RNN, welche langfristige Abbhängigkeiten in Daten lernt und speichert.

Funktionsweise

  • Speicherzellen: LSTM hat Speicherzellen, die relevante Infos über längere Zeiträume speichern können
  • Gates: drei spezielle “Gates” steuern, wleche Infos gepsiechert, gelöscht oder weitergegeben werden.

Vorteile

  • Dminishing und Exploding Gradient Probleme umgeben, das klassische RNNs einschräntk
  • Besonders geeignet für sequeznielle Daten wie Text, Sprache und Zeitreihen

Aufbau von LSTM-Module 🥵

Konstante Fehlerflüsse ermöglichen langfristiges Lernen

LSTM-Module gewährleisten einen stabilen Fehlerfluss, der eine Anpassung über längere Zeiträume erlaubt.

Struktur

im Gegensatz zu klassischen RNNs besitzen LSTMs eine innere Zelle und drei Gates:

  • Input Gate: regelt, wie stark ein neuer Wert in die Zelle einfließt.
  • Forget Gate:: bestimmt, wie viel eines Wertes in der Zelle verbleibt oder vergessen wird
  • Output Gate: kontrolliert, wie stark der Zellwert für die nächsten Berechnung verwendet wird

LSTMs kombinieren vier Funktionen sigmoide Funktionen und Vektor- sowie Matrixoperationen zur präzisen Kontrolle über den Informationsfluss

Aufbau einer LSTM-Zelle

Dies lässt sich wie eine Speicherzelle mit Zugriffssteuerung verstehen

  • Input Gate: Daten in die Zelle schreiben
  • Internal State: Daten intern modifizieren
  • Forget Gate: Daten löschen
  • Output Gate: Daten ausgeben
Gate-Steuerung
  • Alle Gates werden durch die Eingangsdaten aktiviert oder deaktiviert
  • Gewichte, die das Netzwerk während des Trainings anpasst, berechnet, ob ein Gate aktiv oder nicht ist.

Implementierung von LSTM in Keras

Daten als Zeitreihe aufbereiten

Wir gestalten die Daten so, dass wir immer die letzen 20 Einträge betrachten.

changes = df["Open_changes"]
 
X = []
Y = []
 
# i ist genau der vorherzusagende Datensatz, deshalb i+1 unten
for i in range(0, len(changes)-20):
    Y.append(changes[i]) # i-te Wert wird vorhergesagt
    X.append(np.array(changes[i+1:i+21][::-1])) # von Stelle 1 : bis Stelle 21  [Am weitesten zürckliegende am ersten platznen
 
# Anzahl der Samples, Kenngrößen pro Datensätze
X = np.array(X).reshape(-1, 20, 1)
Y = np.array(Y)

LSTM-Modell erstellen und trainieren

from keras.models import Sequential
from keras.layers import LSTM
 
model = Sequential()
# Sequenz der Länge 20 und zu jedem Zeitschritt 1 Attribut
model.add(LSTM(1, input_shape=(20, 1)))
 
model.compile(optimizer="rmsprop", loss="mse")
model.fit(X, Y, batch_size=32, epochs=10)

Vorhersage

predicitons = model.predict(X)

Quitz