Wie trainiere ich das LSTM-Modell anhand mehrerer Zeitreihendaten?

13

Wie trainiere ich das LSTM-Modell anhand mehrerer Zeitreihendaten?

Anwendungsfall: Ich habe in den letzten 5 Jahren einen wöchentlichen Umsatz von 20.000 Agenten. Sie müssen die bevorstehenden wöchentlichen Verkäufe für jeden Agenten prognostizieren.

Muss ich einer Stapelverarbeitungstechnik folgen - jeweils einen Agenten nehmen, das LSTM-Modell trainieren und dann prognostizieren? Irgendwelche besseren Wege?

Aljo Jose
quelle
Hast du das herausgefunden? Ich sehe ein ähnliches Problem.
Vishnu Viswanath
@vishnuviswanath Wir arbeiten an der Entwicklung eines neuronalen Netzes (RNN), das ein Modell für alle Agenten sein kann.
Aljo Jose
Vielen Dank. Wie trainierst du das Modell für mehrere Agenten? Trainieren Sie einen Agenten pro Charge?
Vishnu Viswanath
Wir sind noch in der Bauphase. kaggle.com/c/web-traffic-time-series-forecasting/discussion/… kann helfen.
Aljo Jose

Antworten:

11

Machen Sie die Identität des Agenten zu einer der Funktionen und trainieren Sie alle Daten. Trainieren Sie wahrscheinlich auf einer Mini-Charge von z. B. 128 Agenten gleichzeitig: Durchlaufen Sie die Zeitreihen von Anfang bis Ende für diese 128 Agenten und wählen Sie dann eine neue Mini-Charge von Agenten aus. Führen Sie für jeden Mini-Batch einen Slice mit beispielsweise 50 Zeitschritten aus und wiederholen Sie den Vorgang. Behalten Sie die Endzustände von diesem Slice bei und führen Sie die nächsten 50 Zeitschritte aus, beginnend mit diesen Endzuständen. Spülen und wiederholen Sie den Vorgang, bis Sie das Ende der Zeitschritte erreicht haben, für diese Mini-Charge von ~ 128 Agenten.

Indem Sie die Identität jedes Agenten als eine der Funktionen festlegen, ermöglichen Sie dem Netzwerk Folgendes:

  • Lernen Sie aus all Ihren Daten und maximieren Sie so die Nutzung Ihrer Daten
  • Lernen Sie die einzigartigen Eigenschaften jedes Agenten kennen, damit nicht alle Agenten zusammen gemittelt werden
  • Wenn Sie die Zukunft für einen bestimmten Agenten vorhersagen, stellen Sie sicher, dass Sie die entsprechenden Agenten-ID-Funktionen verwenden. Das Netzwerk passt die Vorhersagen dann entsprechend an.

Edit: Alpo Jose schrieb:

OK, muss ich eine Hot-Codierung verwenden, um die Identität des Agenten zu ermitteln?

Ooo, das stimmt. Es gibt 20.000 von ihnen. Das ist ziemlich viel. Ich denke, Sie möchten sie vielleicht "einbetten". Haben Sie eine Nachschlagebene, die eine Agenten-ID (ausgedrückt als Ganzzahl, Index) aufnimmt und einen hochdimensionalen Vektor ausgibt, wie etwa einen Vektor mit einer Länge von 50 bis 300, wahrscheinlich einen Vektor, dessen Länge ungefähr der verborgenen Größe von entspricht Ihr LSTM.

Mathematisch gesehen entspricht eine Nachschlagetabelle, die auch als "Einbettungsschicht" bezeichnet wird, der Umwandlung der Agenten-IDs in One-Hot-Vektoren und dem anschließenden Durchlaufen einer linearen (vollständig verbundenen) Schicht. Die Anforderungen an den Speicher für die Einbettungsschicht sind jedoch stark reduziert.

In Bezug auf das, was die Einbettungsschicht lernt, während Sie sie trainieren, bildet die Einbettungsschicht eine Art latente Darstellung jedes Agenten. Die latente Darstellung ist wahrscheinlich in keiner Weise lesbar / interpretierbar, ermöglicht es dem Modell jedoch, Dinge wie „ok, dieser Agent, 1524, ist relativ effektiv, aber nicht an Wochenenden; wo als 1526 ist jeden Tag groß; usw ....'. Die latenten Dimensionen des Einbettungsvektors könnten tatsächlich etwas bedeuten, aber niemand versucht jemals herauszufinden, was sie bedeuten (ich denke, das wäre schwer / unmöglich). Die hochdimensionalen Einbettungen pro Agent ermöglichen es dem Modell jedoch, etwas über das Verhalten jedes Agenten zu lernen und dies in den Zeitreihenvorhersagen zu modellieren.

Hugh Perkins
quelle
OK, muss ich eine Hot-Codierung verwenden, um die Identität des Agenten zu ermitteln?
Aljo Jose
@ AljoJose hat die Antwort aktualisiert, um diese Frage zu berücksichtigen
Hugh Perkins
Ich verstehe jetzt, werde es versuchen. Danke Hugh.
Aljo Jose
Ich habe ein ähnliches Problem, aber im Gegensatz zu den Agenten hier habe ich mehrere Zeitreihen als Instanzen desselben Prozesses, aber jede mit variabler Länge. Daher benötige ich den Agenten (in meinem Fall den Prozess) nicht als Feature. Irgendwelche Vorschläge, wie man damit umgeht?
Anakin