iT邦幫忙

2021 iThome 鐵人賽

DAY 12
0
AI & Data

時間序列分析與預測方法大全系列 第 12

[Day12] 以神經網絡進行時間序列預測 — LSTM

  • 分享至 

  • xImage
  •  

本篇詳細介紹 LSTM 及如何以 LSTM 建模預測時間序列。

本日大綱

  • LSTM 介紹
    • LSTM 元件構成
    • LSTM 的分類
  • 實作注意事項
    • 資料集介紹/目標
    • 訓練格式轉換
    • LSTM 架構參考

LSTM 介紹

長短期記憶模型(Long short-term memory,LSTM)為一特殊的 RNN 模型(遞歸神經網絡)
目的是要解決「長序列」訓練過程中的梯度消失梯度爆炸問題,因此相比普通的 RNN,LSTM 能夠在更長的序列中有較好的表現。

LSTM 元件構成

LSTM 元件與 RNN 不同的地方在於:

  • state 數量

    • RNN:1 個傳輸狀態 — hidden state https://chart.googleapis.com/chart?cht=tx&chl=h%5Et
    • LSTM:2 個傳輸狀態 — cell state https://chart.googleapis.com/chart?cht=tx&chl=c%5Et , hidden state https://chart.googleapis.com/chart?cht=tx&chl=h%5Et
  • LSTM cell state 的更新階段(門控)
    LSTM_cell_gates.png
    可以把它想成一個記憶區,由這三種門控決定什麼資料要被模型記憶並更新到 cell state 傳輸至下一層。

    1. input gate:決定前一層哪些資訊可以進到這個記憶區
    2. forget gate:決定目前記憶區中的哪些資訊不要保存(權重不高、相對不重要的)
    3. output gate:最後決定哪些資訊要離開目前記憶區,更新目前的 cell state 並傳輸到下一層 LSTM

LSTM 的分類

複習一下在 Day10 曾經列過的分類:

  • Vanilla LSTM:單一層 LSTM
  • Stacked LSTM:疊兩層以上的 LSTM,要將第一層的參數 return_sequence 設為 True
  • Bidirectional LSTM:使序列同時以順向和反向輸入模型

時間序列預測實作

資料集介紹

股價包含以下屬性:

  • Open:當日開盤價
  • Close:當日收盤價
  • High:當日最高價
  • Low:當日最低價

目標

透過神經網絡訓練捕捉時序特徵,預測未來時間點的均價(當日最高價與最低價之平均)

訓練格式轉換

基本上前處理就是看不同資料集怎麼做,在遞歸神經網絡這邊比較重點的是訓練格式的轉換。
要根據每個「要被預測的時間點 (output)」製作 input data,使用滑動視窗的概念,形成長度相同的許多訓練樣本,代表各個「要被預測的時間點」前「N 個時間點」的資訊。
因為樣本是由不同時間窗格中的序列所組成,LSTM 能夠去學習前一段時間和所需預測時間點之間的時序關係。

滑動視窗的概念,可以參考下面這張示意圖:
sliding_window.jpg

圖片來源:researchgate.net

LSTM 架構參考

def build_model():
    model = Sequential()
    model.add(LSTM(128, input_shape=(74, 30), return_sequence=True))
    model.add(Dropout(0.3))
    model.add(LSTM(32))
    model.add(Dropout(0.15))
    model.add(Dense(1, activation='sigmoid'))
    model.compile(optimizer='adam', 
                  loss='mse', 
                  metrics=['mae'])
    model.summary()
    
    return model

(還在更新中)


上一篇
[Day11] 以神經網絡進行時間序列預測 — RNN
下一篇
[Day13] 以神經網絡進行時間序列預測 — GRU
系列文
時間序列分析與預測方法大全13
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言