基於LSTM模型的智慧選股策略

寬邦科技發表於2019-10-21

LSTM原理介紹

1.1 什麼是RNN

RNN,顧名思義,是包含迴圈的神經網路。它與傳統神經網路模型最大不同之處是加入了對時序資料的處理。以股票多因子為例,傳統神經網路在某一時間截面的輸入因子資料,輸出下期超額收益預測;而RNN是將某支股票的長期因子資料作為時間序列,取過去一段時間內的資料作為輸入值。資本市場的資訊有著一定永續性,使用RNN可以充分把握“歷史重演”的機會。

如圖表1 左側所示,RNN讀取某個輸入基於LSTM模型的智慧選股策略,並輸出一個值o,迴圈可以使得資訊從當前步傳遞到下一步。從表面看,這樣的網路結構較難理解,因此將其展開為圖表1 右側。對於從序列索引1 到T 的時間序列資料,如果關注tt時刻附近的網路結構,x?代表了在序列索引號t 時刻訓練樣本的輸入,同理x?−1和x?+1代表了在序列索引號t−1 時刻和t+1 時刻訓練樣本的輸入;h?代表在t 時刻模型的隱藏狀態,不僅由x?決定,也受到h?−1的影響;o?代表在t 時刻模型的輸出,o?只由模型當前的隱藏狀態h?決定;y?是t時刻樣本序列的真實值;L?是tt時刻模型的損失函式,透過o?和y?計算得出;U、V、W 這三個矩陣是模型的引數,它們在整個模型中是共享的。

基於LSTM模型的智慧選股策略

RNN 模型本質上也是採用BP(Back Propagation)演算法進行權值和閾值的調整最佳化,只是增加了時間序列,叫做BPTT(Back Propagation Through Time)。公式如下:

基於LSTM模型的智慧選股策略

其中Ct表示t時刻模型輸出與真實值之間的交叉熵。對於上述公式中,如果σ為sigmoid 函式或者 tanh 函式,根據δ的遞推式,當時間跨度較大時,δ就會很小,從而使 BP 的梯度很小,產生“梯度消失”。

另外,對於引數Wℎℎ:由於RNN 中Wℎℎ在每個時刻都是指的相同引數,所以δ中會出現Wℎℎ的累乘。而多次累乘後,數值的分佈有明顯的趨勢:要麼趨近於0,要麼趨近於絕對值很大的值。而這兩種情況,就很可能會分別造成“梯度消失”“梯度爆炸”

1.2 什麼是LSTM

傳統RNN 模型容易產生梯度消失的問題,難以處理長序列的資料。因此Hochreater 和Schmidhuber 在1997 年提出了長短期記憶網路LSTM,透過用精心設計的隱藏層神經元緩解了傳統RNN的梯度消失問題。

1.3 LSTM V.S. RNN

在RNN 模型中,在每個序列索引位置都有一個隱藏狀態h?,如果我們略去每層都有的o?,y?和 L?,那麼模型可以簡化為如圖表4 的形式,透過線條指示的路徑可以清晰地看出隱藏狀態h?由h?−1和x?共同決定。h?將一方面用於計算當前層模型的損失,另一方面用於計算下一層的h?+1。

基於LSTM模型的智慧選股策略

LSTM 模型中,每個序列索引位置tt時刻被向前傳播的,除了和RNN 一樣的隱藏狀態h?,還多了另一個隱藏狀態,如圖表6中的標黑橫線。這個隱藏狀態被我們稱為細胞狀態C?(Cell State),細胞也就是LSTM的一個單元。C?在LSTM 中實質上起到了RNN 中隱層狀態h?的作用。

基於LSTM模型的智慧選股策略

1.4 LSTM的單元結構

除了細胞狀態,LSTM的單元還有其他許多結構,這些結構一般稱之為門控結構(Gate)。LSTM 模型在每個序列索引位置tt的門控結構一般包括輸入門(Input Gate), 輸出門(Output Gate), 忘記門(Forget Gate):這三個 Gate 本質上就是權值,形象地說,類似電路中用於控制電流的開關。當值為1,表示開關閉合,流量無損耗流過;當值為0,表示開關開啟,完全阻塞流量;當值介於(0,1),則表示流量透過的程度。而這種[0,1]的取值,其實就是透過啟用函式實現的。

基於LSTM模型的智慧選股策略

由上述的結構分析可知,LSTM 只能避免RNN 的“梯度消失”。“梯度膨脹”雖然不是個嚴重的問題,但它會導致引數會被修改的非常遠離當前值,使得大量已完成的最佳化工作成為無用功。當然,“梯度膨脹”可以採用梯度裁剪(gradient clipping)來最佳化(如果梯度的範數大於某個給定值,將梯度同比收縮)。

1.5 LSTM小結

總結而言,LSTM內部主要有三個階段:

  1. 忘記階段。這個階段主要是對上一個節點傳進來的輸入進行 選擇性 忘記。簡單來說就是會 “忘記不重要的,記住重要的”。透過忘記門進行判斷。
  2. 選擇記憶階段。這個階段將對輸入有選擇性地進行“記憶”。哪些重要則著重記錄下來,哪些不重要,則少記一些。透過輸入門控制。
  3. 輸出階段。將上面兩步得到的結果相加,即可得到傳輸給下一個狀態的h?。這個階段將決定哪些將會被當成當前狀態的輸出。主要是透過輸出門控制。

02

例項:LSTM模型選股

LSTM的底層邏輯確實比較複雜,但是在實際使用中,只要能夠理解其大致原理和關鍵引數,透過呼叫平臺上的深度學習相關的各種視覺化模組,便能省時省力地構建深度學習網路,從而將精力更多地放在策略邏輯最佳化上。下面,我們將以一個視覺化例項展現如何透過LSTM模型進行選股。

基於LSTM模型的智慧選股策略

如圖所示,LSTM選股策略構建包含下列步驟:

  • 獲取資料 :A股所有股票。
  • 特徵和標籤提取 :計算7個因子作為樣本特徵;計算5日個股收益率,極值處理。
  • 特徵預處理 :進行缺失值處理;去掉特徵異常的股票,比如某個特徵值高於99.5%或低於0.5%的;標準化處理,去除特徵量綱/數量級差異的影響。
  • 序列視窗滾動 :視窗大小設定為5,滾動切割。這裡的意思是使用過去5天的因子資料作為輸入。視窗大小可調整,在“序列視窗滾動”模組中進行。
  • 搭建LSTM模型 :構建兩個隱含層的LSTM長短期記憶神經網路預測股票收益率(迴歸模型)。在視覺化策略中表現為1個輸入層;一個LSTM和一個全連線層作為隱藏層,每構建一層進行dropout斷開一些神經元防止過擬合;最後一個全連線層作為輸出層(輸出維度調整為1)。
  • 模型訓練與預測 :使用LSTM模型進行訓練和預測;可以嘗試多種啟用函式,策略預設為tanh。
  • 策略回測 :利用2010到2016年資料進行訓練,預測2016到2019年的股票表現。每日買入預測排名最靠前的30只股票,至少持有5日,同時淘汰排名靠後的股票。具體而言,預測排名越靠前,分配到的資金越多且最大資金佔用比例不超過20%;初始5日平均分配資金,之後,儘量使用剩餘資金(這裡設定最多用等量的1.5倍)。
  • 模型評價 :檢視模型回測結果。

LSTM模型的引數如下:

  • 輸入資料:7個因子,使用了過去5天的因子資料,因此輸入7*5的一個矩陣。
  • 基於LSTM模型的智慧選股策略
  • LSTM層:啟用函式採用tanh,recurrent啟用函式採用hard_sigmoid。迴圈核初始化方法Orthogonal,權值使用glorot_uniform初始化方法,偏置向量使用Zeros初始化方法。
  • 全連線層:啟用函式tanh。權重使用glorot_uniform初始化方法,偏置向量使用Zeros初始化方法。
  • 輸出層:最後一個全連線層。需要選擇“輸出空間維度”為1,因為要得到個股的收益率預測結果,這是一個值。
  • 基於LSTM模型的智慧選股策略
  • 隨機斷開輸入神經元比例dropout:0.2。在不同隱藏層之間使用dropout可以讓網路更耐用並且避免過擬合。
  • 訓練次數率:epochs值為5,共訓練5輪,以mae作為評估指標。
  • 最佳化器:RMSProp。
  • 損失函式:均方誤差MSE。

預測個股下五日的收益率,排序後得到結果如下:

基於LSTM模型的智慧選股策略

回測結果如下:

基於LSTM模型的智慧選股策略

可以看到,LSTM的回測結果比較突出,相比於基準收益有著非常突出的表現。在本次的策略中,我們運用了兩層的LSTM模型,具體的迴圈層數、模型引數有非常大的調整空間,可以克隆嘗試。

03

策略模板

微信無法克隆模板,請前往社群克隆

基於LSTM模型的智慧選股策略

相關文章