徐 偉,陳秀明,儲天啟
(阜陽師范大學 計算機與信息工程學院,安徽 阜陽 236037)
隨著中國互聯網行業迅速發展,其在金融業中也充當著一種日益關鍵的角色。近年來,我國實行匯率改革,由于對外貿易的順差以及實體經濟的蓬勃發展,人民幣匯率浮動區間的擴大使得人民幣開始對世界經濟的變化更加敏感,遠期外匯市場的穩定成為我國對外貿易中的重要一環。匯率的變化與國家宏觀經濟的發展、國內外重大事件的發生以及國際社會的輿論風波等都有關聯,這導致匯率的波動有時會極其劇烈且突然。此外,由于匯率數據基數龐大,且一般呈非線性狀,傳統的機器學習算法,如支持向量機[1]、隨機森林[2]、決策樹[3]等,無法很好地對匯率走勢進行預測。與之相對的,深度學習模型有著強大的擬合能力和學習能力[4],目前常用的有卷積神經網絡和循環神經網絡(RNN)的一些變種模型[5-7]。相比機器學習,深度學習模型可以更好地擬合出非線性數據的變化趨勢,合理準確地對匯率的波動進行分析預測。
本文運用深度學習方法,對一段時間跨度內美元人民幣匯率(USDCNY)的波動曲線進行分析,提出了一種基于注意力機制的CNN-BiGRU-Att匯率預測模型,該模型先使用一維卷積神經網絡Conv1D挖掘數據的局部特征,再利用BiGRU來提取數據間的時序特征,同時引入注意力機制,加強對重要特征信息的關注,以提高模型的擬合性能。以外匯市場的最低價(low)、最高價(high)和開盤價(open)作為依據,以收盤價(close)作為預測目標,擬合真實值與預測值曲線,依據評價指標比較誤差大小,且與CNN、GRU、BiGRU、CNN-GRU、CNN-BiGRU 等模型進行對比,驗證了本文所采用的模型在匯率波動預測中具有一定的優越性。
為提高匯率走勢預測的準確性,本文提出了一種基于Attention機制的CNN-BiGRU-Att匯率預測模型,總體框架如圖1所示。模型主要由數據預處理模塊和神經網絡模塊兩部分組成,具備以下優點:使用26 277條浮動數據對模型進行訓練和測試,大規模數據集可以使模型更準確地學習到數據特征,使擬合結果更符合匯率市場的真實變化情況;對數據集進行歸一化[8]處理,將數據統一到[0,1)范圍之間,不僅可以提升模型的收斂速度,而且有利于找到全局最優解;由Conv1D 提取數據的局部特征,再使用BiG‐RU雙向提取數據的時序特征,并引入注意力機制進行特征權重的加權運算,使預測結果更貼合實際。

圖1 基于Attention機制的CNN-BiGRU匯率預測模型
在訓練神經網絡之前,需要對數據進行一系列預處理操作,本文主要包括數據歸一化、切分數據集和轉換數據維度等流程。
1.1.1 數據歸一化
由于原始數據集的特征數據通常都是相對雜亂無章的,不同特征之間采用的量綱單位也不同,這會對整個模型的訓練過程形成相應程度的數據干擾,為有效處理該問題并提高模型的訓練精度,本文采用極差變化法進行歸一化,其公式為x?=其中x為原始值,x?為歸一化后的值。部分原始數據如表1所示,對應歸一化的結果如表2所示。

表1 數據集中的部分數據

表2 對應歸一化后的結果
1.1.2 數據集切分
將數據集按照1-6,2-7,3-8,…每6 行數據作為一組,得到26 271 組數據,以時間先后順序按訓練集:測試集=9:1的比例進行切分,得到23 644組訓練數據和2 627組測試數據。
1.1.3 數據維度轉換
本文需要將一維標量轉換為三維張量,使其滿足Conv1D要求的輸入格式,經處理后的數據格式為(None,5,4)。其中,None等于batch_size的大小;第二維度5表示每5行樣本作為一組數據,是將之前每6行作為一組數據中的最后一行樣本舍去所得到,該值等于BiGRU輸入時間窗的大小;第三維度4表示樣本的open、low、close和high這4個特征。
深度學習網絡模塊主要由CNN層、BiGRU層以及Attention層構成,為擬合匯率在一段時間跨度內的浮動規律,不僅需要提取數據本身的局部特征,還應該考慮數據在時序上的規律。CNN在內部特征的提取上表現得十分優異,因此該模型使用Conv1D提取數據局部特征,再通過BiGRU充分獲取時序數據的雙向時間特征,而Attention層對輸出特征進行加權求和操作,根據信息的重要程度重新分配不同的權重系數,以提高預測的準確性。
1.2.1 CNN層
在本層,輸入通道數等于矩陣列數,數目為4;過濾器數目為16,表示采用16個卷積核;卷積窗口寬度為1,表示每次只對輸入數據的一行進行卷積計算;最大池化層窗口長度為5,表示每5個數取一個最大值作為這5個數的特征值。對于每個batch_size的數據,都是一個5*4的矩陣,進入Conv1D層后,會和16個長度為4、寬度為1的卷積核進行卷積運算,得到一個5*16的新矩陣,然后進入Maxpooling層,每一列只保留最大值,得到一個1*16 的矩陣。經過整個卷積神經網絡之后的數據格式為(None,1,16),Conv1D層的具體過程如圖2所示。

圖2 Conv1D具體過程
1.2.2 BiGRU層
GRU[9]和LSTM[10]都引入了“門”的概念來控制數據的流動,但GRU內部只有重置門和更新門兩個門控,其中重置門決定用多大程度覆蓋以前的隱藏狀態,更新門則表示在多大程度上選擇候選值來更新當前隱藏層的狀態信息,相關內部結構如圖3 所示,計算公式:其中xt為t時刻的輸入為t時刻的一個候選狀態,ht為t時刻的隱藏狀態值,wz和wr分別對應更新門和重置門的權重矩陣,bz和br分別為其偏置。

圖3 GRU網絡內部展開圖
BiGRU[11]由一對向前和向后的GRU組成,兩個GRU分別從正向和反向去提取序列特征,然后將兩個輸出向量拼接起來得到最終結果,BiGRU相較于BiLSTM[12]超參數更少、計算量更小、訓練效率更高,相關原理如圖4所示。

圖4 BiGRU原理圖
1.2.3 Attention層
注意力機制首先被運用于圖像領域,隨著2017年“Attention is all you need”這篇文章的發表,其開始成為NLP領域的研究熱點[13-14]。注意力機制本質上是一系列加權求和操作,對隱藏狀態的特征權重系數根據其重要程度進行再分配。本文在BiGRU層后添加Attention層進行特征加權運算,其實現過程:對經過BiGRU層的隱藏狀態ht使用tanh函數進行非線性變換,從而得到新狀態λt,對λt加權處理得到注意力權值at,再根據注意力權重對隱藏狀態ht進行加權運算,最終得到新的特征向量vt,具體公式如
2.1.1 實驗數據與環境
本文使用新浪財經網上外匯市場的USDCNY數據,共26 277條,每條數據包括開盤價open、收盤價close、最低價low和最高價high四個特征。實驗采用的處理器版本為Intel Core i7,內存8.0 GB,深度學習模型在Windows 10 操作系統環境中搭建,底層使用CPU 版本的Tensorflow 框架,代碼由Python 語言實現,開發環境為JetBrains PyCharm。
2.1.2 參數敏感性分析
神經網絡的超參數配置對模型性能有一定的影響,不同的參數往往會導致模型最終擬合效果大相庭徑。本文從dropout值、卷積神經網絡過濾器數目(filters)和GRU網絡隱藏神經元個數(units)來進行參數敏感性分析,使用控制變量法觀察每個超參數不同取值對模型的影響,藍色線為真實值,橙色線為預測值,相關結果如圖5~7所示。

圖5 dropout參數對比
從圖5可以看出,當dropout值過大時,某些神經元會被隨機舍棄,導致數據特征的提取不完善,最終預測結果偏差較大;而當dropout取值為0時,模型又會提取出一些不必要的特征,對最終的預測產生干擾,出現過擬合現象。
由圖6和圖7可知,filters和units參數對模型的影響程度不如dropout影響程度顯著,但是當二者的取值過小或過大時,模型擬合結果都出現了非最優的偏差。

圖6 filters參數對比

圖7 units參數對比
2.1.3 超參數設置
實驗測試了多種超參數設置,根據效果不同,最終選擇超參數設置如下:在CNN層,過濾器數目為16,卷積窗口寬度為1,最大池化層窗口長度為5;在BiGRU層,設置32個隱藏神經元;在Attention層,隱藏神經元也有32 個。整個網絡選用Adam 優化器,學習率為0.001,dropout 取值0.001,batch_size 取值256,迭代次數為500次。
2.1.4 實驗評價指標
本研究選擇平均絕對誤差(MAE)、均方誤差(MSE)以及平均絕對百分比誤差(MAPE)作為預測結果的評價指標,從多個方面對模型性能進行充分評估。MAE、MSE和MAPE均被用來衡量預測值與真實值之間的偏離程度,取值范圍為[0,+∞),其中0 表示完美模型,值越大誤差越大。假設預測值y′=,真實值y=,則有
2.2.1 實驗結果
各模型的擬合結果如圖8所示,藍色實線為真實值走勢,橙色實線為預測值,橫坐標設置為第200行到第500行數據,縱坐標為匯率歸一化后的結果。

圖8 各模型對比
各模型的誤差指標值如表3 所示。其中,CNN 模型的預測誤差最大,GRU、BiGRU、CNN-GRU和CNNBiGRU 模型的誤差均有所降低,在引入Attention 機制后,CNN-BiGRU-Att 模型取得了更好的結果,較其他模型的MAE、MSE 以及MAPE 值都最小,與真實值曲線的分離程度最低,展現了更優的性能。

表3 模型實驗結果對比
2.2.2 結果討論
通過對比實驗擬合圖可以發現,由于CNN網絡不能很好地提取時序數據的特征,所以對于匯率的波動不是特別敏感,擬合結果較差;GRU[15]和BiGRU網絡擅長分析獲取數據間的時序特性,對匯率波動時間規律特征的擬合效果較好,但對數據局部特性信息的獲取能力不夠準確,數值預測誤差較大;CNNGRU[16]和CNN-BiGRU[17]網絡結合了CNN和GRU共同具有的獨特優勢,既能有效提取數據的局部特性,又能夠有效提取數據的時序特性,大體上擬合出了匯率走勢的規律;由圖8可知,引入Attention機制[18]之后,一方面兼顧了CNN與BiGRU網絡的優點,另一方面注意力機制可以更好使模型關注那些對預測結果有重要影響的特征,進而調整其權重系數占比,使擬合出的匯率波動曲線更貼合實際,本文模型的預測效果得到了一定的提升。
通過對比各項誤差數據可以看出,GRU和BiGRU模型的各項指標值幾乎一樣,相較于單一模型,融合模型的性能有所提升,各項誤差值均有所降低,最優和最劣模型的各項指標差距甚至達到了一倍以上。本文模型利用CNN對數據局部特征進行提取,有效避免了主要特征信息的丟失;此外,BiGRU在處理時序數據時充分考慮了數據前后信息對當前信息的影響,能夠更精確地提取時序特征,擬合匯率的波動規律;引入注意力機制關注時間序列中的一些關鍵特征信息,提高了模型的估計精確度。
通過對比實驗,可以驗證本文提出的模型具有一定的優越性,但同時也存在不足。只要是使用了CNN網絡的模型,預測曲線波動頻率較真實曲線都會或多或少地有所降低,這是因為CNN層只是初步提取了特征信息,進入池化層后會進一步提取主要特征,而在進入Dropout層之后又會舍棄部分特征,所以無法像GRU網絡那樣高度擬合出曲線的波動規律。另外,該模型是建立在外匯市場正常運作的基礎上,其無法應對突發性事件帶來的沖擊。以本次俄烏沖突為例,事情發生得太過突然,盧布短時間內大幅度貶值,模型無法洞察到數據背后的深層原因,故很難正確預測出盧布的波動走勢,類似于擬合圖中第250-300組數據,所有模型都出現了較大的偏差。
在互聯網行業和金融投資行業交相融合的時代,通過人工智能技術預測匯率的波動走向對于外匯市場投資具有重大意義。本文在CNN 和BiGRU 的融合模型中引入Attention 機制,利用Python 語言對模型進行代碼實現,并采用MAE、MSE和MAPE作為評價指標,通過與CNN、GRU、BiGRU、CNN-GRU、CNN-BiGRU等模型對比,證明了本文模型在匯率走勢預測上的有效性。本次實驗中匯率曲線圖出現了三次較為明顯的峰值波動,可能與國家自身國力的增強、國際重大政治事件的發生、國際社會輿論風波等因素有關,未來運用主題挖掘技術分析匯率波動原因,有助于投資者更好地避開投資風險。