劉 絮 鄭建國
(東華大學 上海 200051)
時間序列目前的分析方法可以分為兩類:基于統計學的時間序列分析和基于數據驅動的時間序列挖掘。基于統計學的時間序列分析方法是比較早期的研究方向,主要思想是將整個時間序列看做為一個整體,采用統計的方法構建一個全局的模型。基于數據驅動的時間序列挖掘方法是著重于提取數據的序列關系,不需要滿足統計學中的某些前提假設。
基于數據驅動的時間序列挖掘方法中,機器學習訓練模型過程中最需要解決兩個問題:參數可以學習到當前數據和歷史數據之間的關系;訓練出來的模型有較強的泛化能力。其中,循環神經網絡(RNN)的隱藏層內神經元之間互相連接,隱藏層內上一次迭代的輸出為下一次迭代的輸入,使其適用于處理有短期序列相關的數據。但是,在使用隨機梯度下降學習模型參數時,多次迭代中參數容易出現梯度消失,這就使得距當前時間點較遠的歷史信息很難被網絡捕捉到。該問題的改進方法有長短期記憶網絡(LSTM)[1]、使用二階梯度優化,例如Hessian Free(HF)[2]、在一階梯度優化訓練過程中加入動量并恰當地設計初始化果[3]、Clockwork RNN(CW-RNN)[4]等。
單獨來源的數據訓練的模型具有局限性,當對預測需要考慮更多與其相關的變量時,可采用分析模型中的向量自回歸(VAR)。并使用集成算法將多個來源的數據模型結果融合,使模型包含更多信息,提高其泛化能力。在集成算法中,stacking集成算法可以融合不同類模型,并實證其在預測準確度上較其他算法更加優秀[5~6]。
基于以上,本文提出一種適用于多維度時間序列的預測模型。采用stacking 算法,將CW-RNN 提取的時間序列自回歸信息,與VAR 擬合的相關變量信息融合。本文的主要貢獻是:將CW-RNN 模型用于時間序列預測問題,提高自回歸的預測準確度,并使用stacking集成算法融合多個模型結果,有效提高泛化能力,使預測的整體準確度更高。
Clock-work Recurrent Neural Network(CWRNN)是一種循環神經網絡,其結構包含輸入層、隱藏層和輸出層。獨特之處為隱藏層的神經元之間并不是標準RNN 的全連接。而隱藏層神經元被分成了g 個模塊,每一個模塊中有hn∈{h1,…,hg}個神經元,并且每個模塊有不同的驅動間隔Tn∈{T1,…,Tg}。在每一個模塊內部,kn個神經元之間是全連接,但是在不同模塊之間的神經元的連接只是從驅動間隔大的模塊到驅動間隔小的模塊。將模塊按照驅動間隔從小到大,從左往右的順序排列,可以得到只有一層隱藏層的CW-RNN 結構如圖1所示。

圖1 一層隱藏層的CW-RNN結構示意圖
CW-RNN 的正向傳播計算和標準RNN 相似,只是增加了時間t 對隱藏層信息傳遞的影響。在CW-RNN 中,輸入層權重矩陣WI,和隱藏層權重矩陣WH都被分成了g 行,每一行分別對應一個模塊。


其中,WO為輸出層的權重矩陣,bO是輸出層的偏差,fO(·)為輸出層神經元的激活函數,為隱藏層在時刻t的輸出,其計算公式為

其中輸入層權重矩陣WI和隱藏層權重矩陣WH都被分成了g 行,見式(1)。 x(t)為在t 時刻的輸入,bH是隱藏層的偏差,和分別是隱藏神經元在t 時刻和t-1 時刻的狀態值,同時也是輸出層的輸入,見式(2)。
CW-RNN 的隱藏神經元與標準RNN 相比不同點在于:1)CW-RNN 隱藏層模塊之間的連接只存在于大時間間隔模塊到小時間間隔模塊之間,所以隱藏層權重WH就是一個上三角矩陣,WHi可以表示為

2)在不同時刻t 隱藏層內激活的神經元不同,在t 時刻時只有滿足時間驅動間隔Ti∈{T1,…,Tg}可以被t整除(t mod Ti=0)的模塊才有輸出。在實際計算式(3)時,只有與可以激活的模塊相對應的WH和WI會使用。即可將權重WH看做為分段函數:

CW-RNN 獨特的隱藏層結構使其既能存貯長期記憶,又能捕捉到高頻信息。時間驅動間隔較大模塊的權重更新次數較少,能存儲距運行時刻t 較遠的信息。并且模塊之間的連接只是從驅動間隔較大的模塊到間隔較小的模塊,所以間隔較大的模塊的權重參數不會受到頻繁輸入數據的影響,可以較好地保存長期信息。時間驅動間隔較小模塊的輸入不僅包括輸入層傳遞的新數據,還包括了較大時間間隔隱藏層模塊的輸出,等于接收到高頻序列關系信息。CW-RNN 的最終輸出共同取決于所有隱藏層神經元,可以將所有長期和短期信息都考慮在內。
在訓練CW-RNN的參數時,與標準RNN相似,參數學習算法是Backpropagation through time(BPTT)[7]。對于CW-RNN 來說,其反向傳播僅作用于在時刻t 激活的模塊。和前向傳播相似,未激活的模塊依舊使用t-1 時刻的值,且其權重不會更新。
本部分將簡單概述RNN 相關的模型配置和算法理論,其中包括參數學習算法和參數初始化方法,為后文的實驗提供理論支持。
2.2.1 常用的梯度優化方法
1)隨機梯度下降(SGD)在更新梯度時引入了動量[9],通過負梯度和上一時刻權重更新值vt-1的線性組合來更新當前的參數θt,C 為整體的損失,定義見式(6),該方法參數更新Δθt的公式為

其中,? 為學習率,α 為上一時刻梯度的權重,表示之前的梯度對當前時刻梯度下降方向的影[3]。動量的作用是盡量排除掉異常數據對梯度方向的誤導。
2)適應性梯度算法(AdaGrad)中學習率依據累計平方梯度,獨立適應所有模型參數。其更新過程如下:

其中,? 為學習率,一開始較大,用于快速梯度下降。隨著優化過程的進行,對于已經下降很多梯度的參數或者有較小偏導的參數,減小學習率;對于還沒怎么下降的參數或者是具有較大偏導的參數,保持一個較大的學習率。這就可以根據式(7)中的rt來衡量該參數梯度歷史下降的程度。故該方法適用于稀疏樣本的問題,即每次梯度下降的方向和涉及的參數會存在較大的差異[9],或者說在參數空間中更為平緩的傾斜方向效果會更好[10]。
3)均方根傳播(RMSprop)對式(7)中的rt的更新增加了一個衰減系數γ 控制歷史梯度對學習率的影響比重,即將梯度累計改為指數加權的移動平均。

其中,? 為學習率,γ 為衰減系數,用于控制移動平均的長度范圍。RMSprop 中式(10)使學習率衰減的幅度依賴于當前梯度和歷史梯度的大小。動量結合了自動調節學習率和梯度方向,RMSprop 具有較強的魯棒性,能夠很好的處理隨機問題[11]。
4)適應性矩估計(Adam)通過計算梯度的一階矩估計和二階矩估計,為不同的參數設置獨立的自適應學習率。

其中,? 為學習率,式(12)和式(13)計算了梯度的指數移動均值st和平方梯度γt,并且ρ1和ρ2表示矩估計的指數衰減速率。此時為了抵消初始化的偏差,使用式(14)和式(15)對偏差進行修正,得到偏差修正的估計和[12]。Adam 算法的計算比較高效,可以較快地收斂,對超參數的選擇有較強的魯棒性。
2.2.2 網絡權重初始化算法
在深度學習過程中,權重初始化的設置對模型收斂速度和學習的效果有十分重要的影響。目前比較常用的權重初始化的方法有標準初始化和Xavier初始化。標準初始化使得有n個節點的神經網絡的初始化權重W滿足均勻分布為

使用深層的神經網絡,隨機數初始化一旦隨機分布選擇不當,會導致參數很難被更新[13]。
Xavier 初始化方法的基本思想是保持輸入和輸出的方差一致,可以有效地避免梯度消失,使得信息可以持續的傳遞。在有n 個節點的網絡中,初始化權重W滿足均勻分布:

Xavier 初始化權重系數后,正向傳播的激活函數值和反向傳播的梯度值明顯比標準初始化的要穩定,網絡訓練會更快,更容易收斂到局部最優。
本文中的集成CW-RNN 模型分為三部分:CW-RNN 自回歸部分、VAR 模型部分和stacking 集成部分。將神經網絡靈活的預測能力和時間序列統計模型嚴謹的態度相結合,并用集成方法將兩者的預測結果組合,嘗試具有更強泛化能力的預測方法。
CW-RNN為時間序列因變量Y的自回歸,可根據Y 的客觀特征設定其滯后階數,并保證滯后階數為輸入層的神經元個數。CW-RNN 的模型復雜度依據數據量和模型訓練的擬合度進行調整。
在本文中,CW-RNN的激活函數使用tanh[4,13]。并在權重初始化時,嘗試使用標準初始化和Xaiver初始化[14]。理論上隱藏層每一個模塊內神經元的個數可以任意,但方便起見,模塊內使用相同的神經元個數。第i個模塊的驅動間隔采用Ti=2i-1[4]。在參數訓練過程中實驗使用較為穩定的RMSprop算法和Adam算法[12]。
為了將因變量Y 預測值中考慮到與其相關的自變量X 的影響,本文引入VAR 模型。在變量數大于樣本數的情況下,可采用偏最小二乘估計對模型的參數進行估計。VAR 模型的的一般數學表達式為

式中,Y 為內生變量,取p 階滯后項,X 為外生變量,取r 階滯后項。 A1…Ap和B1…Br為待估計的參數。 εt為隨機干擾項,不與自身滯后項和式(19)中等號右邊的變量相關[14]。
為了得到平穩的時間序列,將時間序列差分直到可通過ADF 單位根檢驗。并使用格蘭杰因果檢驗為平穩時間序列選擇滯后階數[15]。
傳統標準化方法通常是全局標準化,即利用全局范圍的數據的最大值xmax和最小值xmin對數據做約束:
但是因為時間序列相鄰時刻之間存在相關性,且在時間維度上數據是不斷產生的,如果要使用式(20)來進行標準化,在較長的且有趨勢的時間序列上不利于不同時段數據的比較。在此基礎上,引用信號處理中歸一化的方法[16],結合傅里葉變換中加窗的思想,對于時間序列的歸一化可采用加窗歸一化。將時間序列S 加窗分成長度為L 的n 段窗口,si∈{s1,…,sn} 。歸一化公式為


歸一化后得到的序列為R={r1,…,rn} 。該歸一化時考慮了相鄰時間序列的相關性,由參數α 和β 控制。
集成學習是將許多模型的預測結果,以不同的方式組合起來,共同決定最終結果的方法。集成學習方法主要有stacking、bagging和boosting。后兩者均是通過隨機和重采樣的方法組合多個同一種模型,stacking 是一種可以將多個不同類的模型組合起來的方法,且已被證實效果要好于其他兩種集成方式[5]。本文將把CW-RNN 和VAR 模型的預測結果通過stacking的方法,采用線性函數,將兩者的預測結果組合起來,并得到最終的預測結果。
本文的研究目的是檢驗預測模型的效果,根據時間序列數據的可獲得性,選取某上市公司的股票成交均價作為因變量,取該上市公司的資產負債信息和宏觀經濟指標作為自變量。VAR 部分采用季度成交價,CW-RNN采用每日成交價,stacking部分將自回歸結果轉化成季度后,再集成VAR 模型得到最后的季度預測價格。
數據依據時間維度被劃分為三部分,其中前1/2 部分用于CW-RNN 和VAR 兩個初級學習器的參數訓練;中間1/4 部分作為初級學習器的驗證數據集,并用于生成集成用于訓練stacking 集成次級學習器部分的訓練數據集;最后1/4 部分用于驗證次級學習器的泛化效果。數據這樣設置是為了減少整體模型產生過擬合的風險,且較為全面地反映模型的整體效果。
時間序列的自回歸部分將先對CW-RNN 的訓練方法進行調整與比較,再將其與相同配置的LSTM 和標準RNN 進行比較,衡量標準為均方根誤差(RMSE)。
根據式(17)的標準初始化和式(18)的Xavier初始化方法,同時與參數學習算法RMSprop 和Adam 進行比較,實驗10 次的均方誤差的均值和標準差如表1 所示。此處以及本文之后的預測均為向前一步預測,暫不考慮向前多步的預測問題。

表1 CW-RNN模型初始化方法和參數學習算法RMSE比較
通過假設檢驗的方法對算法的顯著性進行判斷。在使用Adam 算法和標準初始化的效果更好,故下文將使用標準初始化和Adam 算法進行CW-RNN的參數學習。
本文將CW-RNN 與標準RNN 和LSTM 網絡這兩種循環神經網絡相比較,此處三個模型都使用完全相同的超參數:隱藏層神經元為tanh、1層隱藏層神經元、隱藏層神經元個數為160 個、參數訓練使用Adam 算法、參數標準初始化等。實驗10 次的對比結果如表2所示。

表2 CW-RNN模型與標準RNN和LSTM的RMSE比較
CW-RNN 與 標 準RNN 相 比,CW-RNN 與LSTM和標準相比,有較好的泛化能力,更適用于預測回歸的問題。故在該時間序列場景下,使用CW-RNN 的效果更好,后續本文將使用該CW-RNN作為集成學習的初級學習器之一。
此部分將CW-RNN和VAR模型兩個初級學習器集成在一起,集成stacking 方法采用線性回歸。訓練數據集采用CW-RNN和VAR模型驗證數據集生成的數據。集成后的模型和單獨的初級學習器比較結果如表3所示。

表3 集成模型的RMSE比較
集成CW-RNN 比單獨CW-RNN 和單獨VAR模型的效果要好。特別是在驗證數據集上,集成模型的RMSE比單獨CW-RNN要低了大約41%,說明集成多維數據的模型可以提高泛化能力,更適合于處理預測問題。
本文通過stacking 集成算法,融合CW-RNN 和VAR 模型。并利用某上市公司股票的成交均價作為算例,對時間序列的回歸和預測做了實證檢驗,并可以得出結論:1)CW-RNN 可以較好地用于時間序列問題的預測上,優于標準RNN 和LSTM。2)用stacking集成方法也有助于提高回歸預測的準確度,優于單獨的CW-RNN 和單獨的VAR。該模型適用于多維度的時間序列預測情況,且可以有效提高準確度,具有很強的實用價值。