如何在多個時間序列數據上訓練 LSTM 模型?
如何在多個時間序列數據上訓練 LSTM 模型?
用例:過去 5 年,我每週銷售 20,000 名代理。需要為每個代理預測即將到來的每週銷售量。
我是否需要遵循批處理技術 - 一次使用一個代理,訓練 LSTM 模型然後進行預測?還有更好的方法嗎?
將代理的身份作為特徵之一,並在所有數據上進行訓練。可能一次訓練一個小批量(例如 128 個代理):從頭到尾運行這 128 個代理的時間序列,然後選擇一個新的小批量代理。對於每個小批量,運行 50 個時間步的切片,然後進行反向傳播。保留該切片的結束狀態,並從這些結束狀態開始運行接下來的 50 個時間步。對於大約 128 個代理的小批量,沖洗並重複直到時間步長結束。
通過將每個代理的身份作為特徵之一,您可以使網絡:
- 從您的所有數據中學習,從而最大限度地利用您的數據,以及
- 學習每個智能體的獨特特徵,這樣它就不會只是將所有智能體平均在一起
- 當您預測特定代理的未來時,請確保使用其相應的代理 id 特徵,網絡將相應地調整預測。
編輯:阿爾波·何塞寫道:
好的,我需要使用 one-hot 編碼來製作代理的身份嗎?
哦,那是真的。其中有 20,000 個。這有點多。我認為您可能想要做的是“嵌入”它們。有一個查找層,它接受一個代理 id(表示為一個整數,一個索引),並輸出一個高維向量,比如一個 50-300 長度的向量,可能是一個長度與隱藏大小近似匹配的向量你的 LSTM。
從數學上講,查找表,也稱為“嵌入層”,相當於將代理 id 製成單熱向量,然後通過線性(全連接)層。然而,嵌入層的內存需求大大降低。
就嵌入層將學習的內容而言,當你訓練它時,嵌入層將形成每個代理的某種潛在表示。潛在表示不太可能以任何方式可讀/可解釋,但將允許模型學習諸如“好吧,這個代理,1524,相對有效,但不是在周末;而1526每天都很棒;等等 ….'。嵌入向量的潛在維度實際上可能意味著一些東西,但沒有人試圖弄清楚它們的含義(我認為這很難/不可能)。然而,每個代理的高維嵌入允許模型了解每個代理的行為,並在時間序列預測中對此進行建模。