深度學習量化交易---0.2.基於長短時記憶網路預測股票價格1

最老程式設計師閆濤發表於2018-11-27

在這一節中,我們將先向大家介紹長短時記憶網路(LSTM),然後詳細講解怎樣使用長短時記憶網路(LSTM)來預測股票價格,為了避免人為因素幹攏,我們還以上證綜指為例來進行說明。
長短時記憶網路(LSTM)
股票交易資料是一種典型的時序訊號,需要處理較長的時間序列,有時為了準確的進行股票價格預測,可能會需要看幾周甚至幾個月的歷史資料,如果採用普通的多層感知器模型的話,那麼要求輸入層維度就非常大,整個網路的引數就要求非常多,就非常難以訓練,並且容易出現過擬合(Over Fitting)。採用長短時記憶網路(LSTM),每次僅需要輸入一個時間點的資料,輸入層維度低,同時網路引數少,雖然比較難以訓練,但是一旦網路訓練成功,就不容易出現過擬合(OverFitting)。
要理解長短時記憶網路,我們先來看普通的神經網路,如下所示:
在這裡插入圖片描述
如上圖所示,輸入訊號從輸入層經過中間的隱藏層,到達輸出層,中間沒有迴路。
而遞迴神經網路(RNN)則與此不同,隱藏層除了向輸出層輸出外,還將自己的輸出重新作為輸入傳輸給自己,如下圖所示:
在這裡插入圖片描述
如上圖所示,隱藏層的輸出訊號,會重新作為輸入訊號輸入給自己。為了能更好的表示這種網路,我們通常採用展開的形式,如下所示:
在這裡插入圖片描述
t=1t=1時刻,隱藏層的狀態為h0h_0,加上t=1t=1時刻的輸入x1x_1,一起作為隱藏層在t=1t=1時刻的輸入,計算出隱藏層的輸出值h1h_1,其一方面輸出給上一層網路(如輸出層),另一方面也會作為在t=2t=2時刻的輸入,與在t=2t=2時刻輸入訊號x2x_2一起,作為隱藏層輸入,這時又會產生在t=2t=2時刻隱藏層的輸出,依此類推下去,這就是普通的遞迴神經網路。
我們假設輸入層到隱藏層的連線權值為WiW^i,而隱藏層到隱藏層的連線權值為WhW^h,在tt時刻,遞迴神經網路可以表示為:
ht=fh(Whht1+Wixt)yt=fo(Woht) h_t=f_h(W^h \cdot h_{t-1} + W^i \cdot x_t) \\ y_t=f_o(W^o \cdot h_t)
在普通遞迴神經網路的基礎上,可以形成深層遞迴網路和雙向遞迴網路,原現與普通遞迴神經網路類似,這裡就不再具體介紹了。
但是普通遞迴神經網路在具體使用過程中,由於只能具有短時記憶,並用會出現梯度爆炸等問題,所以在實際應用中,人們一般很少直接使用遞迴神經網路(RNN),而一般都使用長短時記憶網路(LSTM)或GRU,我們在量化投資中,採用長短時記憶網路。
長短時記憶網路(LSTM)
長短時記憶網路(LSTM)網路結構圖如下所示:
在這裡插入圖片描述
網路由變化很慢的c和變化很快的h組成,在t=1t=1時刻,隱藏層狀態為c0c_0h0h_0,與t=1t=1時刻輸入訊號x1x_1一起,輸入到隱藏層,隱藏層產生輸出c1c_1h1h_1。在t=2t=2時刻,隱藏層狀態為c1c_1h1h_1,與t=2t=2時刻輸入訊號一起,輸入到隱藏層,產生輸出為c2c_2h2h_2,如此迴圈往復下去。
長短時記憶網路的邏輯圖如下所示:
在這裡插入圖片描述
這是在原始Paper中畫出的邏輯結構,為了更好的理解長短時記憶網路,我們通常採用一種不同的方式來表示:
在這裡插入圖片描述
長短時記憶網路(LSTM)中間層如上圖所示,下面我們分步來看長短時記憶網路(LSTM)的原理:
1.由遺忘門決定丟棄資訊
在這裡插入圖片描述
假設在tt時刻隱藏層狀態為ht1\boldsymbol{h}_{t-1},輸入訊號為xt\boldsymbol{x}_t,遺忘門的連線權值為WfW_f[ht1,xt][\boldsymbol{h}_{t-1},\boldsymbol{x}_t]表示將向量ht1\boldsymbol{h}_{t-1}xt\boldsymbol{x}_t連線在一起,形成一個新的向量,遺忘門的輸出為一個0~1之間的數字,代表需要忘記多少以前的記憶,如下所示:
ft=σ(Wf[ht1,xt]+bf) \boldsymbol{f}_t=\sigma (W^f \cdot [\boldsymbol{h}_{t-1}, \boldsymbol{x}_t]+\boldsymbol{b}_f)
2.輸入門決定輸入訊號
在這裡插入圖片描述
it=σ(Wi[ht1,xt]+bi)c~t=tanh(Wc[ht,xt]+bc) \boldsymbol{i}_t=\sigma(W_i \cdot [\boldsymbol{h}_{t-1}, \boldsymbol{x}_t] + \boldsymbol{b}_i) \\ \tilde{\boldsymbol{c}}_t=\tanh{(W_c \cdot [\boldsymbol{h}_t, \boldsymbol{x}_t] + \boldsymbol{b}_c)}
3.更新長期記憶細胞狀態
在這裡插入圖片描述
ct=ftct1+itc~t \boldsymbol{c}_t=\boldsymbol{f}_t \otimes \boldsymbol{c}_{t-1}+\boldsymbol{i}_t \otimes \boldsymbol{\tilde{c}}_t
4.通過輸出門產生輸出訊號
在這裡插入圖片描述
ot=σ(Wo[ht1,xt]+bo)ht=ottanh(ct) \boldsymbol{o}_t=\sigma(W_o \cdot [\boldsymbol{h}_{t-1}, \boldsymbol{x}_t] + \boldsymbol{b}_o) \\ \boldsymbol{h}_t=\boldsymbol{o}_t \cdot \tanh{(\boldsymbol{c}_t)}
通過上述步聚,就產生了tt時刻的狀態,會傳到下一個時刻,一直執行下去。
股票LSTM
上面我們詳細講解了長短時記憶網路的結構和演算法,下面我們將用長短時記憶網路(LSTM)來處理股票資料。我們要實現的任務就是根據前一天某支股票的開盤價、最高價、最低價、收盤價預測第二天的價格,用預測價格與第二天實際價格的最小平方和作為代價函式。

相關文章