本篇詳細介紹 LSTM 及如何以 LSTM 建模預測時間序列。
長短期記憶模型(Long short-term memory,LSTM)為一特殊的 RNN 模型(遞歸神經網絡)
目的是要解決「長序列」訓練過程中的梯度消失和梯度爆炸問題,因此相比普通的 RNN,LSTM 能夠在更長的序列中有較好的表現。
LSTM 元件與 RNN 不同的地方在於:
state 數量
LSTM cell state 的更新階段(門控)
可以把它想成一個記憶區,由這三種門控決定什麼資料要被模型記憶並更新到 cell state 傳輸至下一層。
複習一下在 Day10 曾經列過的分類:
return_sequence
設為 True
股價包含以下屬性:
透過神經網絡訓練捕捉時序特徵,預測未來時間點的均價(當日最高價與最低價之平均)
基本上前處理就是看不同資料集怎麼做,在遞歸神經網絡這邊比較重點的是訓練格式的轉換。
要根據每個「要被預測的時間點 (output)」製作 input data,使用滑動視窗的概念,形成長度相同的許多訓練樣本,代表各個「要被預測的時間點」前「N 個時間點」的資訊。
因為樣本是由不同時間窗格中的序列所組成,LSTM 能夠去學習前一段時間和所需預測時間點之間的時序關係。
滑動視窗的概念,可以參考下面這張示意圖:
圖片來源:researchgate.net
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
(還在更新中)