江柏霖 岳 杰 蘭勝杰
(河北建筑工程學(xué)院,河北 張家口 075000)
隨著國家經(jīng)濟的發(fā)展.人民所接觸的新奇事物也開始增多,人民開始金融經(jīng)濟的投資,其中金融經(jīng)濟的入口之一便是股票.21世紀的今天,股票作為人民金融投資的普遍方式,如何在股票中賺錢成為中國大大小小股民的共同目標.如何賺錢便要掌握股票的走勢,因此股票市場的預(yù)測工作引起了社會以及學(xué)術(shù)界的廣泛關(guān)注.由于股票的走勢隨市場變動,又常常因為政策變化發(fā)生很大的變動,這也使得股民對于股市的走勢越發(fā)難測,股民很難在股票中投資盈利[5].
人工智能在國內(nèi)的快速發(fā)展,越來越多的專家學(xué)者開始研究深度學(xué)習領(lǐng)域相關(guān)技術(shù),深度學(xué)習廣泛應(yīng)用于圖像識別、圖像分類、目標預(yù)測、自然語言處理、語音識別、文本分類等各個領(lǐng)域[8].其中目標預(yù)測對于股票走勢方向能起到提升準確度的目的[1].最后發(fā)現(xiàn)循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)對于順序序列數(shù)據(jù)學(xué)習處理中又表現(xiàn)出優(yōu)于其他神經(jīng)網(wǎng)絡(luò)的性能.但是循環(huán)神經(jīng)網(wǎng)絡(luò)再處理大量數(shù)據(jù)時往往會出現(xiàn)對于過去數(shù)據(jù)信息遺忘太快的缺點[2],于是我們使用長短期記憶模型循環(huán)神經(jīng)網(wǎng)絡(luò)(LSTM),它在原有RNN的條件下加入了輸入門,輸出門以及遺忘門,這能處理好循環(huán)神經(jīng)網(wǎng)絡(luò)對于過去數(shù)據(jù)遺忘的問題,還能解決RNN梯度爆炸等一系列問題[6].我們將股票幾年的走勢引入RNN中進行訓(xùn)練,讓計算機分析出股票近幾年的走勢習慣,從而預(yù)測出股票后幾天的走勢情況.`
循環(huán)神經(jīng)網(wǎng)絡(luò)[3]由一個輸入層以及若干個隱藏層和一個輸出層組成.它會先將即將訓(xùn)練的數(shù)據(jù)分成若干個大小相同且有先后順序的數(shù)組.通過將這些數(shù)組有順序的放入神經(jīng)網(wǎng)絡(luò)中訓(xùn)練來建立一個網(wǎng)絡(luò)模型[7].訓(xùn)練過程如圖1所示:
圖1 循環(huán)神經(jīng)網(wǎng)絡(luò)的訓(xùn)練過程
X(t)表示若干個被分開數(shù)組的第t個數(shù)組.將其放入循環(huán)神經(jīng)網(wǎng)絡(luò)中訓(xùn)練,使得循環(huán)神經(jīng)網(wǎng)絡(luò)中的隱藏層構(gòu)建起對t這個數(shù)組的描述S(t).然后輸入第t+1個數(shù)組X(t+1)時.X(t+1)的輸出Y(t+1)不僅受到隱藏層對t+1數(shù)組的描述(S(t+1))的影響,還受到隱藏層對之前數(shù)組的描述影響.同時RNN的隱藏層再對t+1數(shù)組做出輸出時,也會在S(t)的前提下做出對t+1數(shù)組描述的改變.讓一個數(shù)組前后輸入具有聯(lián)系性,從而對于連續(xù)數(shù)據(jù)具有獨特的準確性.
然而循環(huán)神經(jīng)網(wǎng)絡(luò)在處理大量數(shù)據(jù)的訓(xùn)練的就表現(xiàn)的差強人意[4].對于數(shù)據(jù)它遺忘的太快,主要原因是在訓(xùn)練長數(shù)據(jù)時,前面數(shù)據(jù)的結(jié)果與后面結(jié)果差距太大而引起的梯度彌散或者梯度爆炸,如圖2所示:
圖2 循環(huán)神經(jīng)網(wǎng)絡(luò)處理長數(shù)據(jù)的問題
當訓(xùn)練長數(shù)據(jù)時,RNN最初給的結(jié)果是T,而最后的結(jié)果卻是R.因為R與T差距過大引起誤差.當誤差大于0小于1時,誤差在經(jīng)過層層權(quán)值相乘改變后傳到最初結(jié)果時誤差已經(jīng)接近于零而導(dǎo)致梯度彌散.當誤差0于1時,誤差在經(jīng)過層層權(quán)值相乘改變后傳到最初結(jié)果T時誤差便接近無窮大而導(dǎo)致梯度爆炸.這些問題都能導(dǎo)致循環(huán)神經(jīng)網(wǎng)絡(luò)的判斷出現(xiàn)錯誤.由于這些原因,我們使用了長短期記憶模型循環(huán)神經(jīng)網(wǎng)絡(luò)(LSTM)來避免誤差.
LSTM循環(huán)神經(jīng)網(wǎng)絡(luò)[10]對于長數(shù)據(jù)的處理得心應(yīng)手.LSTM的核心思想是用每個神經(jīng)元去維護一個細胞的存儲信息,并設(shè)立三個邏輯門即輸入門,輸出門和遺忘門來控制一個細胞對信息的去除保存的控制能力正如圖3所示:
圖3 LSTM循環(huán)神經(jīng)網(wǎng)絡(luò)的工作原理
其中X(t)表示t時的輸入數(shù)值,h(t)表示t時的輸出數(shù)值,Ct表示t時刻的它的輸出狀態(tài)情況.每個邏輯門按訓(xùn)練順序計算過程如下:
輸入門:i(t)=sigmoid(w(i)*[x(i),h(i-1)]+b(i))
(1)
C(i)=tanh(w(c)*[x(i),h(i-1)]+b(i))
(2)
式子(1)是t時的輸出數(shù)值情況,式子(2)是t時輸出的狀態(tài)情況.i(t)決定著C(i)能否加入這個時間段的狀態(tài)情況.
遺忘門:f(t)=sigmoid(w(f)*[x(t),h(t-1)]+b(f))
(3)
C(t)=i(t)*C(t)+f(t)*C(t-1)
(4)
其中式子3是遺忘門的值,對于這個狀態(tài)是否保存在神經(jīng)網(wǎng)絡(luò)取決于f(t)的值.
輸出門:O(t)=sigmoid(W(o)*[x(t),h(t-1)]+b(O))
(5)
h(t)=O(t)*tanh(C(t))
(6)
其中式子(5)是輸出門的值,這個值決定神經(jīng)網(wǎng)絡(luò)在t時刻的輸出.
當輸入端口的輸入對于主線狀態(tài)具有重大意義時,輸入門就會按照數(shù)據(jù)重要程度寫入神經(jīng)網(wǎng)絡(luò)的狀態(tài)中;而對于遺忘端口,當輸入的數(shù)據(jù)與神經(jīng)網(wǎng)絡(luò)的狀態(tài)分歧過大時,遺忘門就會將神經(jīng)網(wǎng)絡(luò)的狀態(tài)做些許改變,并將輸入數(shù)據(jù)按重要程度寫入神經(jīng)網(wǎng)絡(luò)的狀態(tài)中;輸出端口的輸出情況不但要受到最后一次輸入網(wǎng)絡(luò)的數(shù)據(jù)影響,神經(jīng)網(wǎng)絡(luò)的狀態(tài)也對于結(jié)果又很大的影響.以此三個邏輯門控制神經(jīng)網(wǎng)絡(luò)對于數(shù)據(jù)的去除保存能力.不僅使得神經(jīng)網(wǎng)絡(luò)具有對順序數(shù)據(jù)的記憶能力,而且還防止了因大量數(shù)據(jù)而引起的梯度彌散或梯度爆炸.對于股票數(shù)據(jù)而言,LSTM很好的解決了股票預(yù)測系統(tǒng)中股票數(shù)據(jù)難以預(yù)測及股票數(shù)據(jù)過長的問題.
在win10系統(tǒng)下實驗選擇搭建CUDA來進行并行計算,它使得GPU做出內(nèi)部并行運算,從而能完成很多復(fù)雜的計算問題.GPU的特點是集成大流量處理器和計算單位,用于處理并行運算的過程中具有很大優(yōu)勢,很適合用來處理神經(jīng)網(wǎng)絡(luò)中的大規(guī)模計算.模型方面我們采用Sequential模型.因為Sequential模型構(gòu)成棧的方式是用網(wǎng)絡(luò)層依次按順序進行,它能使得輸入和輸出之間具有一定的聯(lián)系,每層之間也具有相鄰關(guān)的系.應(yīng)用與順序數(shù)據(jù)較為合適.
圖4 實驗流程圖
使用Sequential模型進行實驗,分別搭建一層兩層三層隱藏層來對同一支股票進行訓(xùn)練,由于股票跳動不是特別劇烈,本次實驗采用LSTM與全連接的連接方式.將股票接近兩年的數(shù)據(jù)情況引入神經(jīng)網(wǎng)絡(luò).數(shù)據(jù)包括股票的開盤、收盤、最高點、最低點、成交量、成交額、換手率這8個數(shù)據(jù)為輸入端口,其中實驗以28天為一次訓(xùn)練,以第二天的開盤、收盤、最高點、最低點、成交量、成交額作為標簽.用這些標簽來對神經(jīng)網(wǎng)絡(luò)的輸出作出損失的調(diào)整.使用Adam優(yōu)化器進行優(yōu)化,來防止數(shù)據(jù)走向過擬合,使用L2正則化項和dropout機制來提高模型的泛化能力.
本次實驗過程按照獲取數(shù)據(jù)、對數(shù)據(jù)進行預(yù)處理、對數(shù)據(jù)進行降噪、神經(jīng)網(wǎng)絡(luò)模型的訓(xùn)練、調(diào)整相應(yīng)的超參以及股票預(yù)測這幾步來完成.
數(shù)據(jù)獲取方面,我們使用python在網(wǎng)站上爬取GQY視訊2018年到2020年關(guān)于開盤、收盤、最高點、最低點、成交量、成交額、換手率等順序數(shù)據(jù).
數(shù)據(jù)預(yù)處理方面,因為獲取的原始數(shù)據(jù)存在亂序或缺值我情況,實驗使用插值、排序等操作得到GQY視訊股票十年的順序數(shù)據(jù).一共600多條包含開盤、收盤、最高點、最低點、成交量、成交額、換手率的數(shù)據(jù).
對于數(shù)據(jù)降噪,實驗使用小波降噪來去降低數(shù)據(jù)的噪聲.
微調(diào)參數(shù)方面,實驗通過不斷的訓(xùn)練,在訓(xùn)練中進行參數(shù)的調(diào)整,每次調(diào)整與前幾次最高性能的參數(shù)做對比,選出最好的實驗參數(shù).流程如圖4所示.
(1)第一次實驗使用一層隱藏層的LSTM神經(jīng)網(wǎng)絡(luò)模型來對股票做出預(yù)測.將GQY視訊2018年到2020年的數(shù)據(jù)放入神經(jīng)網(wǎng)絡(luò)中進行訓(xùn)練.其中設(shè)置輸入層八個神經(jīng)元,隱藏層設(shè)置64個神經(jīng)元、輸出層設(shè)置8個神經(jīng)元.將股票以28天為一次訓(xùn)練,以股票的開盤、收盤、最高點、最低點、成交量、成交額、換手率作為輸入.實驗每過四天抽取一次損失值,其損失函數(shù)的走向如圖5所示:
在以真實值的收盤與測試值的收盤做對比,其走向如圖6所示:
圖5 損失函數(shù)走向
圖6 真實值的最高與測試值的最高走向
可以得出隨著訓(xùn)練次數(shù)的推移,LSTM神經(jīng)網(wǎng)絡(luò)的它的損失值在不斷變小,真實值與測試值的走向在步步逼近.
其次我們設(shè)立兩層LSTM神經(jīng)網(wǎng)絡(luò)的隱藏層和一個全連接層模型,其中兩層隱藏層的它的神經(jīng)元個數(shù)都設(shè)置為64,并采用和第一次實驗相同的輸入值和測試值得出的實驗結(jié)果如圖7所示:
圖7 真實值最高與測試值最高的走向
從第二次實驗結(jié)果可以看出,兩層的LSTM神經(jīng)網(wǎng)絡(luò)隱藏層模型的預(yù)測性能得到了很大的提升,圖7展示的數(shù)值擬合度速度要高于圖6展示的數(shù)值擬合度速度,并且在圖7真實值和測試值的走向更加的逼近.證明了LSTM神經(jīng)網(wǎng)絡(luò)用于處理股票這類順序數(shù)據(jù)的優(yōu)越性.
實驗可以通過增加隱藏層來增加模型的準確率來把握數(shù)據(jù)走勢,但是當隱藏層增加到四層時,預(yù)測準確率卻只提升了0.02%.還增加了很多計算的冗余.再增加多層對于預(yù)測的準確率提升也微乎其微.所以實驗建議使用三層隱藏層的LSTM網(wǎng)絡(luò)模型來進行股票預(yù)測,它對于股票預(yù)測的準確度上表現(xiàn)良好,對于計算產(chǎn)生的參數(shù)消耗上也有不錯的表現(xiàn).
本次實驗通過對股票的數(shù)據(jù)使用小波降噪、應(yīng)用L2正則化項和dropout來提高LSTM神經(jīng)網(wǎng)絡(luò)針對于股票預(yù)測它的適應(yīng)性,通過實驗調(diào)整微參和隱藏層神經(jīng)元個數(shù),來對GQY視訊股票進行預(yù)測.最終使得真實值與測試者的走向步步逼近,使得股票預(yù)測更加嫻熟.之后會找尋更好的預(yù)測模型,希望能再次提高股票預(yù)測的準確度.從而讓股民在選擇股票投資方面有更多更好的參考.