用於時間序列預測的多層感知器(神經網路)
我想建立一個多層感知器來預測金融時間序列。我了解算法概念(線性組合器、啟動函式等)。但是在嘗試建構輸入、隱藏和輸出層時,我遇到了一些關於基礎的問題。
**A)**我對輸入與隱藏層感到困惑。是輸入層還是隱藏層神經元具有 i) 線性組合器和 ii) 啟動函式。
範例:對於 1 個 USDEUR 交易數據,假設我的輸入向量是$$ time, bid, ask, bid-volume, ask-volume $$. 如果我的輸入層有 5 個神經元,那麼整個集合是否會到達輸入層中的每個神經元?或者是“出價”輸入到一個神經元,“詢問”是輸入到另一個神經元,等等。
**B)**隱藏層神經元的值是多少?如果我們的輸入神經元有一個觸發值,我們如何將其轉換為我們最終想要預測的值
$$ bid-percent-change, ask-percent-change $$? 即:最終,我希望輸出層給我一個 2 的向量$$ bid-percent-change, ask-percent-change $$
**C)**對於金融時間序列,建議使用“滑動視窗”作為輸入向量。該輸入向量如何與其他輸入相匹配:出價、要價、時間等?
首先,讓我們來談談一般的感知器:
- 他們的意見 $ X_0 $ 是一個 $ K $ 維向量。所以如果你想使用 $ (P_{bid}(t),P_{ask}(t), Q_{bid}(t),Q_{ask}(t)) $ ,這意味著無需任何努力(但稍後我們會看到,像往常一樣做一些努力會更好):
$$ X_0(t)=(P_{bid}(t),P_{ask}(t), Q_{bid}(t),Q_{ask}(t))’\in\mathbb{R}^4 $$
- 然後隱藏層由 $ N $ 隱藏的神經元 $ (Z_n){1\leq n\leq N} $ ,它們中的每一個都與權重相關聯 $ (w^h{k,n})_{1\leq k\leq K} $ 和偏見 $ b^h_n $ :一個隱藏單元的啟動 $ Z_n $ 是
$$ Z_n(t)=\Phi\left( \sum_k w^h_{k,n}\cdot X_k(t) + b^h_n\right) $$ 在哪裡 $ \Phi(\cdot) $ 是感知器的啟動函式;如果你想做一些花哨的事情,你可以使用不同的啟動函式,但正常的啟動函式是sigmoid(即 $ \rm th $ )。注意 $ Z=(Z_n)_{1\leq n\leq N} $ 在 $ \mathbb{R}^N $ . 這意味著每個隱藏單元 $ Z_n(t) $ 將收到所有輸入的組合。在您的範例中:
$$ Z_n(t)=\Phi\left( w^h_{1,n} ,P_{bid}(t) + w^h_{2,n} ,P_{ask}(t)+w^h_{3,n} , Q_{bid}(t)+ w^h_{4,n} ,Q_{ask}(t) + b^h_n\right) $$
- 最後但並非最不重要的輸出層 $ Y $ 由您想要預測的內容組成,假設您的目標是 $ (\rho_{ask}(t+1),\rho_{bid}(t+1)) $ (即體積變化的百分比),然後您採取: $$ Z(t)=(\rho_{ask}(t+1),\rho_{bid}(t+1))’\in\mathbb{R}^2 $$ 您還需要輸出的權重和偏差,以便( $ U $ 是輸出的數量): $$ Y_n(t)=\Phi\left( \sum_{u=1}^U w^o_{u,n}\cdot Y_n(t) + b^o_u\right) $$ 有時人們不會對輸出使用任何啟動函式,但我不建議這樣做。
所有這些放在一起,您可以將輸出表示為輸入的函式:
$$ Y_n(t)=\Phi\left( \sum_{u=1}^U w^o_{u,n}\cdot \Phi\left( \sum_k w^h_{k,n}\cdot X_k(t) + b^h_n\right) + b^o_u\right) $$ 它是如何工作的?
感知器必須在一個樣本數據庫上進行訓練 $ T $ 輸入和輸出的關聯 $ (X(t),Y(t))_{1\leq t\leq T} $ . 它的訓練是通過找到權重和偏差來最小化 $ L2 $ 預期輸出和獲得的輸出之間的距離:
$$ \left\vert\begin{array}{ll} \mbox{Minimize}& \mathbb{E}t \left| Y(t) - \Phi\left( \sum{u=1}^U w^o_{u,n}\cdot \Phi\left( \sum_k w^h_{k,n}\cdot X_k(t) + b^h_n\right) + b^o_u\right)\right|^2\ \mbox{Variable}& (w^h_{k,n},b^h_n,w^o_{u,n},b^o_u)_{1\leq u\leq U, 1\leq n\leq N,1\leq k\leq K} \end{array}\right. $$ 人們喜歡感知器的是,只要你使用通常的二次最小化方法,訓練速度非常快,相關的計算也很容易完成。
訓練結束後,你得到一個估計 $ Y $ 就您的最小化程序而言,這是最佳的(即 $ L2 $ 距離統計意義)。
如何使用感知器?
我喜歡你的問題,因為我認為你的問題接近於“好的,但它可以這麼簡單嗎?只需投入我的投入 $ X $ ,詢問我的輸出 $ Y $ ,並且一切都會在幾秒鐘內起作用?”。當然答案是否定的。
- 首先,您可以注意到您需要稍微標準化您的輸入(例如,居中並減少它們,即 $ X_k(t)\rightarrow (X_k(t) - \mathbb{E}_t(X_k))/\sqrt{\mathbb{V}_t(X_k)} $ ),不僅如此,由於您對建模問題的理解,您還可以對輸入進行預處理。例如,在您的情況下,您可以使用:
$$ X(t)=\left(\frac{P_{ask}(t)-P_{bid}(t)}{P_{ask}(t)+P_{bid}(t)}, \frac{Q_{bid}(t)}{Q_{bid}(t)+Q_{ask}(t)}\right)’ $$ 您的輸入將與您的輸出在某種程度上是同質的(我不保證任何好的結果,這只是對您的玩具範例的改進)
- 您還需要注意您向預測的感知器詢問的輸出。問你一個問題“為什麼不使用 $ U $ 如果我有感知器 $ U $ 輸出?”。唯一好的理由是你確信共享相同的隱藏單元來嘗試同時預測 $ U $ 輸出將穩定權重:輸出應與相同的潛在現象密切相關。
- 這一切的時間呢?我做了好像協會 $ (X,Y) $ 在時間上是獨立同分佈的。如果不是這種情況,您可以嘗試使用更滑動的方法,例如 TDNN(時間延遲神經網路)。感知器之於 GARCH 模型之於線性回歸(或多或少)…
- 當然,您需要注意過度擬合和所有其他類似 VCdimension的統計學習主題。
最後一句話:您似乎嘗試使用感知器進行日內預測。在高頻交易的背景下,永遠不要忘記您將與訂單簿動態互動,因此您將處於面向控制的框架而不是預測框架中。我的意思是,通過在 LOB 中發送訂單,您將更改它,但繼續使用訂單簿的更改狀態進行下一步預測……這稱為市場影響,它意味著您試圖控制LOB。
已經開發了一些特殊技術來在控制範圍內使用感知器,例如Lehalle 和 Azencott 在1999 年 IEEE 智能控制/智能係統和符號學國際研討會論文集上的分段仿射神經網路如何生成穩定的非線性控制, 1999 年。