Was istLong short-term memory: Hintergründe und Best-Practice-Ansätze für LSTM

Nachdem wir im ersten Beitrag zum Thema Long short-team memory Anwendungsbeispiele für LSTM-Zellen basierte rekurrente neuronale Netzwerke gezeigt haben, erklären wir an dieser Stelle mehr zu den Hintergründen und der Realisierung von LSTMs.

Auf LSTM Zellen basierte rekurrente neuronale Netzwerke sind vereinfacht gesagt Weiterentwicklungen von einfachen rekurrenten neuronalen Netzwerken (RNNs). LSTM basierte RNNs verfügen über die besondere Eigenschaft vergangene Informationen in sequenziellen Daten zu selektieren. So kann aus den Trainingsdaten gelernt werden, welche Informationen aus der Vergangenheit für den aktuellen Output wichtig sind und welche eliminiert bzw. vergessen werden können.

Die Entwicklung der LSTM – Zelle geht u.a. auf ein Trainingsproblem von simplen RNNs zurück und ist das Ergebnis jahrelanger Forschung und Entwicklung. In der praktischen Anwendung sind simple RNNs aufgrund des häufig auftretenden verschwindenden und explodierenden Gradienten nur sehr schwer zu trainieren. Entsprechend können viele Modelparameter – insbesondere bei langen Zeitreihen oder Sequenzen – nicht richtig angepasst werden. Demnach sind die erzielten Prognosen enttäuschend. Erst die Einführung einer komplizierteren Architektur des Hidden Layers bzw. der rekurrenten Zelle verhalf (fortgeschrittenen) RNNs zu ihrem beispiellosen Siegeszug. Hier sind vor allem die von Hochreiter, Schmidhuber, Gers und Cummins geleisteten Meilensteine wie die Einführung eines internen Zustandes, die konstante Fehlerrückgewinnung sowie die Einführung von Informationsteuerungstoren zu nennen. Diese Komponenten ermöglichen dem LSTM basierten RNN die effektive Selektion von Informationen. Selektieren bedeutet im Detail, dass die LSTM-Zelle, mittels eines stetig aktualisierten internen Zellzustands Informationen aus der Sequenz mit einer 0 versieht, um diese zu eliminieren. Eine 1 impliziert vollständiges Erinnern und dazwischenliegende Zahlen können als partielles Vergessen interpretiert werden.

Das Data Pre-Processing

Jedes Modell ist nur so gut wie die Daten, die es bekommt. Das Data Pre-Processing steht somit an erster Stelle jeder LSTM basierten Zeitreihenanalyse.

Liegen beispielsweise sequenzielle Textdaten wie Kundenrezessionen oder Reden vor, ist zu entscheiden ob ggf. unnötige Stoppwörter zu entfernen sind und ob die Textdokumente mit einem Stemmer oder einer Lemmatisierung weiterverarbeitet werden sollen. Eine Umwandlung der Tokens in n-dimensionale Vektoren ist ebenfalls denkbar und je nach Ziel der Analyse empfehlenswert. In diesem Fall sollte ein Embedding Layer als Input und ein Softmax Layer als finaler Output Layer des LSTM basierten RNNs in Betracht gezogen werden.

Liegen hingegen numerische (multivariate) Zeitreihendaten für Features und Targets vor, ist es häufig empfehlenswert Ausreißer zu entfernen (bspw. durch einen Isolation Forest oder eine Clusteranalyse). Der Hauptgrund hierfür liegt weniger in der informationstheoretischen Betrachtung als in dem Umstand, dass Stochastic Gradient Descent basierte Optimierungsalgorithmen dazu neigen sehr anfällig gegenüber Ausreißern zu sein. Dementsprechend ist das Auffinden eines globalen Minimums der Verlustfunktion (die bspw. als Mean Squared Error, Mean Absolute Percentage Error oder als Mean Absolute Error spezifiziert werden kann) stark beeinträchtigt. Demnach würde das zu trainierende LSTM basierte RNN versuchen, die Ausreißer in den Daten so gut wie möglich abzubilden und die Generalisierbarkeit des trainierten Models wäre nicht mehr gegeben. Dies gilt insbesondere für quadratische Gewichtungen von Fehlern, wie es beim MSE der Fall ist. Extreme Beobachtungen kommen relativ häufig in E-Commerce und ähnlichen Datensätzen vor. Konkret bedeutet dies, dass Kunden, die ein roboterhaftes Verhalten zeigen (z.B. extrem schnelle Webseitenwechsel, viele Artikel im Einkaufswagen, die entfernt und neue wieder hinzugefügt werden, ohne einen einzigen Kauf zu tätigen) sollten aus den Daten entfernt werden. Die Beibehaltung dieser Merkmalsträger führt dazu, dass die Prognosen für ebendiese roboterhaften Kunden sehr exakt sind. Alle anderen Prognosen schießen jedoch weit über das Target hinaus, sodass letztlich Modelparameter mit systematischen Bias geschätzt wurden.

Sind die Zeitreihen bereinigt, ist die Frage zu beantworten, welche Art der Skalierung gewählt werden soll. Normalisierung transformiert die Daten auf das Intervall 0 bis 1 und ist dann zu empfehlen, wenn die Zeitreihen eine natürliche obere und untere Grenze aufweisen. Schwingungen mit konstanter Amplitude und Sprachaufnahmen, Temperaturen von Maschinenteilen oder Transaktionen wie Käufe und Verkäufe gehören zu dieser Art von Daten. Standardisierung hingegen subtrahiert den Mittelwert der jeweiligen Feature und Target Zeitreihe und teilt jeden Wert in der Sequenz durch die entsprechende Standardabweichung. Die praktische Erfahrung zeigt, dass die Wahl der Skalierungsart zum Teil drastische Auswirkungen auf die Prognosekraft von LSTMs haben kann. Die Daten sollten daher in Einklang mit den Aktivierungsfunktionen der Netzwerkneuronen gebracht werden. Dabei kann auch der Output Layer entscheidend sein. Liegen bspw. skalierte Targets vor die negative und positive Werte aufweisen, ist die Wahl einer Sigmoid Aktivierungsfunktion – Wertebereich zwischen 0 und 1 – kontraproduktiv, da das RNN mit dieser Output Spezifikation nicht in der Lage ist negative Werte zu prognostizieren. An dieser Stelle soll aber nicht ausgeschlossen werden, dass es einen Use Case geben kann, in welchem negative Targets mit einem Nullwert prognostiziert werden sollen.

Die Konzentration auf den Wertebereich kann jedoch irreführend sein, da die Verteilung der Features und Targets immer der erste Anhaltspunkt sein sollte. Sind die Features und Targets annähernd normalverteilt (zu testen mit einem Kolmogorov-Smirnov, Shapiro-Wilk oder Cox-Small und Friedman-Rafsky Test) sollte die Standardisierung angewendet werden. Es kann zuweilen dennoch vorkommen, dass eine Normalisierung bessere Prognoseergebnisse liefert. Daher empfiehlt es sich immer, nachdem ein initiales LSTM basiertes RNN implementiert wurde, die Schätzung mehrerer Modellspezifikationen. Dies kann je nach Anwendungsfall und Größe des Datensatzes jedoch zu hohen (Zeit) Kosten führen.

Das Feature Engineering kann zum Schritt des Data Pre-Processing gezählt werden und ist mitunter der erfolgskritische Aspekt jeder Analyse. Hier gibt es – so umständlich es klingen mag – nur einen richtigen Weg. Es wird oftmals Expertenwissen auf dem jeweiligen Gebiet benötigt, um geeignete komprimierte Informationen aus den Daten zu extrahieren.

Vom 2D Dataframe zum 3D Array

Ist der Data Pre-Processing Schritt einmal durchlaufen und die Daten in Test, Validation und Training Datensatz aufgeteilt worden, müssen alle Datensätze in ein drei dimensionales Array überführt werden. Bei sequenziellen Daten, die nicht als Zeitreihe im engeren Sinne klassifiziert werden können (z.B. aufgrund nicht äquidistanter Abstände zwischen zwei Beobachtungen oder Irrelevanz des Erhebungszeitpunkts), ist eine Transformation auf eine einheitliche Frequenz vorzunehmen. Für die initiale Implementierung von fortgeschrittenen RNN Architekturen wie LSTMs oder GRUs ist die high-level API Keras mit dem TensorFlow Back-End empfehlenswert.

Die Dimensionen des benötigten 3D Arrays sind: Anzahl der Batches, Anzahl der Perioden einer Zeitreihe und die Anzahl der Features. An diesem Punkt wird es kritisch und ein kleiner Umweg ist auf sich zu nehmen, um zu verstehen was Batches sind. LSTMs werden zudem in mehreren Durchläufen, sog. Epochen, trainiert.

Pro Epoche kann dabei der gesamte Trainingsdatensatz in gleichen Stücken in das Model gegeben werden, um sukzessive Fehler zu berechnen und mithilfe des Backpropagating-Algorithmus die Parameter bzw. Gewichte des Modells zu adjustieren. Dieser Prozess wird auch als „lernen“ angesehen. Die Stücke bzw. Subdatensätze des gesamten Trainingsdatensatzes werden Batches genannt. Die Größe des jeweiligen Batchs dividiert den Trainingsdatensatz zur Anzahl der Subdatensätze bzw. Anzahl der Batches. Dabei kann die Größe des einzelnen Batchs, welcher ein Hyperparameter ist, variiert werden. Je mehr Trainingsdaten die Batches enthalten, desto weniger Anzahl an Batches werden pro Epoche verarbeitet. Dies wird auch als Steps-per-Epoch bezeichnet. Entsprechend erfährt das LSTM basierte RNN bei großen Batches weniger Adjustierungen seiner Parameter pro Epoche und mehr Trainingsepochen sind notwendig, um die Modelparameter zu optimieren. Die Größe der Batches (Batch Size) und die Anzahl der Adjustierungsschritte pro Epoche (Steps-per-Epoch) bilden daher einen Trade-Off. Es hat sich in einer Vielzahl von praktischen Anwendungen gezeigt, dass LSTM oder GRU (Gated Recurrent Unit) basierte RNNs, welche mit großen Batch Size trainiert worden sind, eine schlechtere Performance gegenüber Modellen zeigen, die mit geringerer Batch Size, dafür aber mehr Adjustierungen pro Epoche trainiert worden sind. Je nach Komplexität der Daten bietet sich eine Batch Size von 32 bis 512 an.

Diese abstrakten Ausführungen können anhand eines einfachen praktischen Beispiels verdeutlicht werden. Stellt man sich einen Kundendatensatz aus dem E-Commerce vor. Jeder Kunden-ID können diverse Zeitreihen zugeordnet werden. Hierzu zählen bspw. Features wie die Kaufhistorie, die Sekunden, die eine Kunden-ID auf einer bestimmten Webseite verbracht hat oder der Moving Average des Bestellwertes. Targets wären bspw. der bestellte Warenwert in einem späteren Zeitpunkt, der nicht bestellte (liegengelassene) Warenwert oder der zurückgeschickte Warenwert. Mit dieser Art von Prognosen lassen sich schnell wertvolle Kunden und Kunden, die das Unternehmen durch Rücksendungen wahrscheinlich belasten werden, identifizieren. Kumuliert über alle Kunden kann dadurch auch eine automatisierte Umsatzprognose generiert werden. Es bietet sich an diese Art von Daten so umzuformen, dass die Batch Size zu der Kunden-ID korrespondiert. Die Anzahl an Perioden der Zeitreihe sollte bei solchen Datensätzen variable gelassen werden, da nicht alle Kunden dieselben Aktivitäten vollführen und nicht im gleichen Ausmaß aktiv sind. Diese Einstellungsmöglichkeit ist dabei unter vielen Praktikern nicht bekannt, jedoch oft gewünscht.

Die Anzahl der Features ist hingegen abhängig vom Ergebnis des Feature Engineerings. Im Detail bedeutet dies, dass wenn bspw. 60.000 Kunden-IDs vorliegen, 5 Feature-Zeitreihen und 3 Targets je Kunde gebildet worden sind, ein 3D Array welches als erste Dimension 60.000 und als dritte 5 hat zu bilden ist. Die zweite Dimension dieses Arrays kann dabei variabel gelassen werden, um den unterschiedlichen Aktivitäten der Kunden Rechnung zu tragen. Alternativ kann jede ID-spezifische Zeitreihe auf eine einheitliche Länge gestreckt werden. Fehlende Aktivitätszeitpunkte müssen hierbei mit einem Platzhalter gefüllt werden und ein Masking Layer, welcher diese Platzhalter herausfiltert, ist dem LSTM basierten RNN vorzustellen.

Spezifikationen von fortgeschrittenen rekurrenten neuronalen Netzwerken

Neue Anwender neigen dazu, LSTM oder GRU basierte RNNs zu konstruieren, die hunderttausende von zu optimierenden Parametern besitzen und aus mehreren aufeinandergestapelten LSTM Einheiten bestehen. In der Praxis zeigt sich dann häufig, dass ein kleineres Netzwerk, in Relation zu dem eines komplexen, bessere Prognosen erzeugt. Der Grund hierfür liegt in einem häufigen Missverständnis der Begriffe Datenumfang und Datenkomplexität. Im obig genannten E-Commerce Use Case bedeutet dies, dass das Kaufverhalten von Kunden relativ einfachen ökonomischen Regeln und Annahmen folgen kann, unabhängig davon wie viele Kunden-IDs der Datensatz beinhaltet. Die Analyse von MRT Schnittbildern, komplexeren menschlichen Verhaltens, wie Beendigungen von Geschäftsbeziehungen oder auf Indikatoren basiertes Trading-Verhalten sowie die Übersetzung von Sprache hingegen, benötigt komplexere rekurrente neuronale Netzwerke. Es empfiehlt sich auch hier eine Kombination von verschiedenen Machine-Learning-Modellen dem Ausweiten eines Verfahrens vorzuziehen. Ein grundlegendes Verständnis für die Daten ist jedoch immer empfehlenswert. In den meisten Fällen kann es ausreichen, ein LSTM basiertes RNN mit einer Einheit, bzw. einem Hidden Layer zu spezifizieren und ggf. mit Inputs aus anderen Machine-Learning-Modellen (bspw. CNNs oder Clusteranalysen) anzureichern.

Die Komplexität der LSTM Einheit hingegen hängt maßgeblich davon ab, wie viele Features vorliegen und wie komplex diese sind. Um anfängliche Ergebnisse zu erzielen, wird häufig die Anzahl der Nodes in der LSTM-Einheit zwischen die einfache und dreifache Anzahl der Features gesetzt. Liegen bspw. 5 Features vor, lohnt es sich die anfängliche Anzahl der Nodes zwischen 5 und 15 zu setzten. Es kommt jedoch auch vor, dass bspw. 24 Nodes die besten Prognoseergebnisse liefern. In diesem Falle waren die generierten Features komplexer und es musste ein LSTM basiertes RNN konstruiert werden, welches eine größere Lernkapazität besitzt.

Ein weiterer wichtiger Parameter, welcher Häufig übersehen wird, ist die Art der Initialisierung der Netzwerkgewichte. Es hat sich gezeigt, dass bei der Wahl von Sigmoid als Aktivierungsfunktion die Xavier (zuweilen auch Glorot genannt) Initialisierung vorzuziehen ist. Ist die Aktivierungsfunktion hingegen linear, wie die (leaky) Rectified Linear Unit (abgekürzt (leaky) ReLU), sollte die Initialisierung nach He gewählt werden. Aus der Erfahrung heraus kann jedoch festgehalten werden, dass beide Initialisierungsansätze unabhängig von den Aktivierungsfunktionen ausprobiert werden sollten. Ein weiterer – bereits bekannter – Hyperparameter ist die Anzahl der Epochen, d.h. die Anzahl wie oft das LSTM bzw. GRU basierte RNN die Trainingsdaten zu sehen bekommt und anhand der Batches seine Modelparameter aktualisieren kann. Dabei gilt der Grundsatz: “Mehr ist nicht immer besser.”. Je mehr Batches pro Epoche verarbeitet werden, desto weniger Epochen sollten angesetzt werden. Es sollte dabei beachtet werden, dass pro verarbeiteten Batch Adjustierungen der Gewichte vorgenommen wurden. Liegen also sehr viele Adjustierungen pro Epoche vor, kann der Optimierungsalgorithmus ein Minimum bereits in einer Handvoll Epochen erreicht haben. Aufgrund zufälliger Initialisierung der Parameter kommt es vor, dass bei Neuberechnungen bereits optimierter LSTMs Variationen vorliegen. Es empfiehlt sich daher bereits geschätzte Netzwerke abzuspeichern bzw. den Optimierungsprozess mit Checkpoints zu versehen.

Hier kommt die Relevanz des Validationsdatensatzes zum Tragen, welcher sehr häufig vernachlässigt oder mit den Testdaten gleichgesetzt wird. Dies kann dazu führen, dass inferiore neuronale Netze zu Prognosezwecken ausgewählt werden. Während der Fehler mit fortschreitender Epochenanzahl auf den Trainingsdaten immer kleiner wird, sollte der Fehler auf dem Validationsdatensatz, bei geeigneter Modelspezifikation, ab einer gewissen Epochenanzahl wieder ansteigen. Am Tiefpunkt des Validierungsfehlers kann davon ausgegangen werden, dass das beste LSTM basierte RNN in seiner jeweiligen Spezifikation gefunden wurde, welches im Sinne der Generalisierbarkeit ausgewählt werden sollte. Keras bietet eine sehr komfortable Funktionalität, um dieses Model – während der Trainingsprozess noch läuft – zu extrahieren: Checkpoints. Diese Einstellung bietet nicht nur den Vorteil, dass das beste Model automatisch extrahiert wird, sondern beugt auch das Abstürzen vor.

In immer mehr Unternehmen laufen LSTM-basierte Prognosesysteme oder Softwaremodule, in welchem das gesamte zugrundeliegende RNN in regelmäßigen Abständen neu und auf aktuelleren Daten trainiert wird, um dadurch veraltete Informationen (welche als Strukturbrücke bzw. Regimewechsel in Zeitreihen interpretiert werden können) nicht mehr zu berücksichtigen. Sollte einmal ein Systemabsturz vorliegen, kann es vorteilhaft sein ein, inferiores, aber aktuelleres neuronales Netzwerk aus einem aktuelleren Trainingszyklus nutzen zu können.

Fazit

In diesem Blogbeitrag wurden drei zentrale Aspekte beleuchtet, die jeden neuen Anwender von fortgeschrittenen rekurrenten neuronalen Netzwerken erwarten. Das Data Pre-Processing, welches zeitintensiv und überaus erfolgskritisch sein kann, die Transformation von einfachen Dataframes in 3D Arrays und die Spezifikation und ggf. Anreicherung von LSTMs bzw. GRU basierten rekurrenten neuronalen Netzwerken sind die drei Hauptbestandteile jeder auf Keras/TensorFlow basierten Analyse.

Zum Abschluss kann festgehalten werden, dass die Einstiegshürden – besonders für nicht erfahrene Anwender – groß sein können. Nicht zuletzt ist festzuhalten, dass LSTMs mit einem enormen Potenzial verbunden sind.

Sie möchten von Lösungen mit LSTM-Komponenten profitieren? Sehr gerne unterstützen wir Sie bei der Entwicklung. Sprechen Sie uns an.

Informationen zum Autor: Dennis Herle

Dennis Herle hat sich im Rahmen seiner Tätigkeit bei eoda vorrangig mit der Durchführung von Data-Science-Projekten beschäftigt. Der thematische Fokus dabei: Die Anwendung von fortgeschrittenen Zeitreihenmethoden und Machine-Learning-Modellen.