当深度学习遇上量化交易——模型篇
?PaperWeekly 原創 ·?作者|桑運鑫
學校|上海交通大學碩士生
研究方向|圖神經網絡在金融領域的應用
本文介紹三篇從模型層面著手解決股價預測問題的頂會文章。
IJCAI 2019
論文標題:Enhancing Stock Movement Prediction with Adversarial Training
論文來源:IJCAI 2019
論文鏈接:https://www.ijcai.org/Proceedings/2019/0810.pdf
眾所周知,股票市場具有噪聲高和隨機性強的特點,傳統使用靜態歷史數據訓練的模型很容易過擬合。為了提高模型的泛化能力,文章提出通過對數據增加擾動來解決這一問題。其最大的亮點就是提出了使用對抗訓練(Adversarial Training)的方式來訓練模型。
首先,為了適應股票數據時序依賴的特點,文章首先提出了 Attentive LSTM。為了預測某一時刻的股價走勢(1 代表上漲,0 代表下跌),輸入之前 天的數據 。之后輸入一個全連接層獲取特征的隱向量:
之后使用 LSTM 捕捉時序依賴,獲得隱向量 , 因為不同時間的狀態對時刻 的股價走勢影響是不同的,使用時序注意力層(Temporal Attention Layer)來對隱向量進行加權求和:
之后將時刻?的隱向量和加權求和的結果拼接獲取最終的股票表示,計算獲取預測結果:
但這種訓練方式不那么適用于股票市場,因為我們輸入模型的數據(如各種技術因子的取值)是有隨機性的,因此很容易導致過擬合而缺少泛化性能。而一個好的模型應當能捕捉隨機性。所以文章提出了對抗訓練的方式。
首先來思考一個問題,怎么提高模型建模隨機性的能力?自然的想法就是如果我們對輸入樣本加一個擾動,模型仍然可以正確預測,那么模型肯定能很好的抵御隨機性。那么這個擾動怎么加也很有學問,我們希望加的擾動能夠讓模型輸出結果發生最大的改變。
那么哪個方向的擾動能夠讓模型輸出結果發生最大的改變呢?回憶一下梯度下降法,梯度方向是下降最快的方向。顯然,樣本的梯度方向就是我們尋求的那個能夠讓模型輸出結果發生最大改變的方向。
所以從本質上來說,文章提出的對抗訓練就是一種梯度下降法,不過梯度下降法優化的是參數,而這里的對抗訓練改變的是樣本,得到對抗樣本。
根據上圖所示,生成對抗樣本的計算過程如下:
其中 是原樣本。之后將對抗樣本的訓練和損失也加入到目標函數中:
模型的總體結構如下:
文章在 ACL18 和 KDD17 兩個數據集上進行了實驗,結果證明方法了有效性,同時與 ALSTM 的對比實驗表明,使用對抗樣本訓練的模型分類置信度更高,擴展了決策邊界,增強了模型的魯棒性和泛化性能。
KDD 2017
論文標題:Stock Price Prediction via Discovering Multi-Frequency Trading Patterns
論文來源:KDD 2017
論文鏈接:http://www.eecs.ucf.edu/~gqi/publications/kdd2017_stock.pdf
這是一篇應用的文章,作者還發了一篇偏理論的文章在 ICML 2017 上:State-Frequency Memory Recurrent Neural Networks, in Proceedings of International Conference on Machine Learning [1] 。
我們通常使用 LSTM 來建模時間序列之間的長期依賴。如果我們將股價的變動看作一種信號處理任務的話,那么利用 LSTM 來預測股價變動只捕捉了時域上的信息,而忽略了頻域上的信息。
而對于股價信號來說,頻域上的信息是非常有用的,其中的高頻部分反應了股價的波動性,低頻部分捕捉了長期的趨勢和規律。基于此,文章提出了 SFM 來同時建模時間序列的時域與頻域信息。
傳統的 LSTM 結構大家都知道,這里不再贅述。我們來介紹下文章提出的 SFM 對于傳統 LSTM 的三個改進:
將 LSTM 中的記憶細胞 變成狀態-頻率矩陣(the state-frequency matrix);
將遺忘門改成聯合狀態-頻率遺忘門;
利用傅里葉變換和逆變換使信號能夠在時域與頻域之間轉換。
對于時間步?,模型有三個輸入:數據 、上一時間步的狀態-頻率矩陣 、上一時間步的隱向量(hidden state),后兩者開始時初始化為 0。
狀態-頻率矩陣是一個 行 列的矩陣,每一列可以看作多個狀態,每個狀態在物理意義上可以理解成代表某個引發信號波動的因子;矩陣中的一行可以看作某狀態的各個頻率組件的權重。
因為每個時間步傳遞的是狀態-頻率矩陣,所以遺忘門被分為狀態遺忘門(state forget gate) 和頻率遺忘門(frequency forget gate):
利用外積操作 (運算規則如上圖所示)將兩個遺忘門聯合成狀態-頻率遺忘門 :
輸入門 和輸入調制(input modulation) 和 LSTM 保持一致:
對于狀態-頻率矩陣的更新操作向量計算形式如下:
其中 , 是 個頻率部分的傅立葉基函數。 是按元素乘。
現在已經有了當前時間步的狀態-頻率矩陣 ,之后要更新當前時間步的隱藏狀態 。首先利用歐拉公式 把 的更新公式分為實部和虛部兩部分:
此外,復數可以表示成振幅 和相位 :
但后面的計算只用到了振幅 ,因為實驗證明相位 對結果沒有顯著影響。利用振幅信息獲取記憶狀態:
上述過程可以被看做是傅立葉逆變換,但比起標準的傅立葉逆變換,文章選擇可訓練權重 來適應訓練任務。之后的更新過程與 LSTM 一致:
文章使用 2007 到 2014 年的 50 只股票的股價數據作為訓練集,2015 年的數據作為驗證集,2016 年的數據作為測試集進行了實驗,SFM 在預測 1 天后、3 天后、5 天后的股價均表現最佳:
此外,文章探索了時間窗口 、狀態數量 、頻率數量 三個參數的影響,結論如下:
AR 的表現會隨著 的增大而變差,LSTM 與 SFM 則會變好。證明了 LSTM 和 SFM 對于長期依賴的捕捉能力。
對于短期預測,太多的狀態會讓結果變差(過擬合),而長期預測則需要更多的狀態來提供更多信息。
短期預測需要更多的頻率成分來表現短期股價的高波動性,而長期預測則依賴于那些比較穩定的低頻成分。
IJCAI 2017
論文標題:A Dual-Stage Attention-Based Recurrent Neural Network for Time Series Prediction
論文來源:IJCAI 2017
論文鏈接:https://www.ijcai.org/Proceedings/2017/0366.pdf
上一篇文章改造 LSTM 來進行股市預測,這篇文章則提出一種變種的 Seq2Seq 模型 DA-RNN 來進行端到端的時序預測任務。模型結構比較簡單,如下圖所示:
相比于傳統的 Seq2Seq 模型,DA-RNN 在輸入端增加了一個 input attention 層。可以分成兩部分:Encoder with input attention、Decoder with temporal attention。
編碼器部分,在時間步 ,輸入有當前時間步的特征 ,上一時間步獲得的隱狀態 和記憶細胞 ,首先輸入 Input attention Layer 獲取對每個特征的加權 :
之后輸入作為編碼器的 LSTM 獲得當前時間步的隱狀態 :
解碼器的結構與帶 Attention 的 Seq2Seq 一致,只不過這里的 Attention 改叫 temporal attention,對于時間步?,解碼器能夠獲得編碼器輸出的隱向量 , 上一時間步的解碼器隱向量 ,記憶細胞狀態 , 上一時間步的真實標簽 。
給編碼器的隱向量賦予不同的注意力權重,計算當前時間步的情景(context)向量:
將上一時間步的真實標簽 和情景向量拼接成當前時間步的解碼器輸入:
同樣采用 LSTM 作為解碼器,獲取當前時間步的解碼器隱狀態 :
之后可以預測時刻 的輸出:
文章選取了 SML 2010 和 NASDAQ 100 兩個數據集進行實驗。實驗表明文章提出的 DA-RNN 更適合時序預測任務。
文章還將模型的輸入做了擾動后拼接上正常的輸入進行訓練,發現 input attention 對于擾動后的數據賦予了較低的權重,證明了 input attention 讓模型抗干擾能力更強。
此外,文章對模型參數時間窗口 和 LSTM 隱層大小 進行了測試,在 NASDAQ 100 Stock 上的最優參數是 。
總結
股價數據具有極低信噪比、隨機性強、時序依賴的特點,比一般的序列預測任務相比更加困難,模型改進的方向也是盡可能的提升模型的抗干擾能力(對抗訓練),從噪聲中提取有價值的信號(頻域、注意力機制)。希望未來在這一領域看到更多更有創造性的工作。
因為相關的資料確實相當匱乏,我在 GitHub 上新建了一個 repo 用于收集、整理相關的研究論文、書籍、數據、網站等,歡迎 star!
https://github.com/sangyx/deep-stock
如果您對深度學習在量化交易中的應用感興趣,歡迎加我微信一起學習探討(請備注一下姓名,機構或研究方向)。
參考鏈接
[1] https://dl.acm.org/doi/10.5555/3305381.3305543
更多閱讀
#投 稿?通 道#
?讓你的論文被更多人看到?
如何才能讓更多的優質內容以更短路徑到達讀者群體,縮短讀者尋找優質內容的成本呢?答案就是:你不認識的人。
總有一些你不認識的人,知道你想知道的東西。PaperWeekly 或許可以成為一座橋梁,促使不同背景、不同方向的學者和學術靈感相互碰撞,迸發出更多的可能性。?
PaperWeekly 鼓勵高校實驗室或個人,在我們的平臺上分享各類優質內容,可以是最新論文解讀,也可以是學習心得或技術干貨。我們的目的只有一個,讓知識真正流動起來。
?????來稿標準:
? 稿件確系個人原創作品,來稿需注明作者個人信息(姓名+學校/工作單位+學歷/職位+研究方向)?
? 如果文章并非首發,請在投稿時提醒并附上所有已發布鏈接?
? PaperWeekly 默認每篇文章都是首發,均會添加“原創”標志
?????投稿郵箱:
? 投稿郵箱:hr@paperweekly.site?
? 所有文章配圖,請單獨在附件中發送?
? 請留下即時聯系方式(微信或手機),以便我們在編輯發布時和作者溝通
????
現在,在「知乎」也能找到我們了
進入知乎首頁搜索「PaperWeekly」
點擊「關注」訂閱我們的專欄吧
關于PaperWeekly
PaperWeekly 是一個推薦、解讀、討論、報道人工智能前沿論文成果的學術平臺。如果你研究或從事 AI 領域,歡迎在公眾號后臺點擊「交流群」,小助手將把你帶入 PaperWeekly 的交流群里。
總結
以上是生活随笔為你收集整理的当深度学习遇上量化交易——模型篇的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ClassLoader.getResou
- 下一篇: Java面向对象---重写(Overri