RNN最大化條件概率參數模型預測時間序列

假想股市為交響樂合奏,多種信號交織出股票漲跌,則可以通過RNN擬合最大化條件概率的參數模型預測股票未來收益率。

假設股票收益率可以通過多種信號進行一定程度的解釋和估計,也就是進行多參數模型擬合,則可以通過擬合如上圖所示的信號流設定的數據訓練集使RNN模型對應訓練集的條件概率最大化,對求得的參數模型使用最新的輸入變數進行預估。

最大條件概率

設定訓練序列對輸入序列X_{train} =(x_1, x_2, x_3, ...,x_T),輸出序列為Y_{train}=(y_1, y_2, y_3, ..., y_{T}) (兩個序列長度不固定相等)。一個標準的RNN計算序列到序列通過迭代下公式:

h_t = f(x_t, h_{t-1})  ;   ny_t = W_{out}h_t

其中f為激活函數,迭代上面的公式序列到序列的RNN參數theta模型估計最大的序列生成條件概率,即:

p(Y_{train}|X_{train};theta) = prod_{i=1}^T p(y_i|y_1,...,y_{i-1}, x_1,x_1,...,x_i;theta)n

theta^* = argmax_{theta} sum_{X_{train},Y_{train}}log(p(Y_{train}|X_{train};theta))n

通過推斷,給定的輸入序列Pn學習到的參數theta^*概率最大的估計序列被輸出hat C^P=argmax_{hat P^C} p(C^P|P,theta)

對於一個全A股市場收益率序列預測模型尋找最優的序列意味著巨大的計算資源需求,按照直接演算法這意味著巨大的計算量,由於這裡不是介紹數值優化器的短文,關於具體求解技巧略。

節點激活函數

最初RNNn模型的激活函數f(x)採用sigmoid函數但對於長序列依賴問題和序列到序列的非單調對應關係使得模型性能表現較差。

1) Long Short Term Memory

LSTM通過設計門控制單元處理長期關係依賴問題,在本文構件使用原始LSTMn控制單元,公式如下:

f(x_t,h_{t-1})=begin{bmatrix}ni_t = tanh(W_ix_t + R_ih_{t-1} + b_i)nj_t = sigma(W_jx_t + R_jh_{t-1} + b_j)nf_t = sigma(W_fx_t + R_fh_{t-1} + b_f)no_t = tanh(W_ox_t+R_oh_{t-1} + b_o)nc_t = i_t odot j_t + f_t odot c_{t-1}nh_t = o_t odot tanh(c_t)nend{bmatrix}

2) Gated Recurrent Unit

GRU連接輸入門和遺忘門控為更新門控,並連接單元狀態和隱藏狀態,在某些應用方面保證極高的學習效果的前提下非常高效的降低了LSTM的計算量。

f(x_t,h_{t-1})=begin{bmatrix}nr = sigma(W_rx + U_r h_{t-1})nz = sigma(W_z + U_z h_{t-1})nwidetilde h_t =  phi(Wx + U(rodot h_{t-1})) nh_t = z h_{t-1} + (1-z) widetilde h_tnend{bmatrix}

3) Neural Turing Machines

NTM通過添加外緩存結構有效解決了LSTM中長序列信息丟失問題。由於本文後面的內容與NTM聯繫不多,這裡不對NTM過多描述。

網路推斷模型

1) ResNet

stacked RNN結構就是多層RNN模型疊加,下一層的輸出作為上一層的輸入,在encoder-decoder可以上一層用輸出或者隱藏狀態當作下一層的輸入。

Stacked RNN: h_t^{(l)} = f_h^{(l)}(h_t^{(l-1)}, h_{t-1}^{(l)} )

ResNet:設i layer 的輸入為X,輸出為F(X), 則下一層的輸入為 X + F(x)這種殘差結構設計可以有效加深stacked LSTM的縱向層數。

2) Gird2d LSTM

Grid LSTM 是吸收Stacked LSTM和Multidimensional LSTM兩種LSTM單元間網路結構形成的新演算法設計。相對於Stacked結構,Grid2d使用維度概念代替Stacked裡面的深度概念(層數),將深度構建為另一個維度的序列,即轉換多層LSTM為x,y維度的多維度LSTM網格結構。實驗顯示,Grid相對於Stacked效果有明顯提升。

具體操作方法如下圖,將多維度LSTM放在一個格子裡面算成一步,在第一個維度運行LSTM激活函數然後將維度一的輸出和時刻i的輸入合併為維度二的在時刻i的輸入,更多維度依此進行。Grid2d LSTM網路拓撲結構設計的特點是相對於常規Stacked RNN結構在深度方向的上添加了記憶流動渠道,為雙通道信息流。

3 Adaptive Computation Time

自適應計算時間演算法是一種允許神經網路常態性的學習在輸入和輸出之間需要執行多少計算步驟的演算法,根據具體問題的複雜度動態調整模型使用的計算量,該網路結構主要針對如下問題設計:

  • RNN的計算時間由給定問題的序列長度和設計者指定,無法自行變動適應具體問題

  • 具有高度複雜變化的序列數據處理

  • 研究表明,在條件受限無法加深RNN模型深度的情況下,拉成RNN時間軸長度也能夠提升RNN精度

上圖顯示了ACT模型通過嵌套包裹RNN單元來實現自適應計算時間的調整的操作方法,兩條虛線之間的時間展開對應傳統RNN模型的時刻i的一步計算,相當於傳統RNN模型在時刻i也就是序列位置i只進行一次計算,而ACT在時刻i或者序列位置i可以自行調整計算次數提升模型泛化效果。

標準RNN迭代公式如下:

s_t = S(s_{t-1}, x_t)ny_t = W_y s_t + b_y

ACT修改RNN迭代公式為:

s_t^n = begin{cases}nS(s_{t-1}, x_t^1)  ;;; if ;; n = 1   n S(s_t^{n-1},x_t^n) ;;; otherwisenend{cases}

即在時刻t進行n次迭代計算,並使用halting probability unit決定每個輸入步的更新量:

p_t^n =begin{cases}nR(t) ;;; if ;; n=N(t)nh_t^n ;;; otherwisenend{cases}n

h_t^n = sigma(W_hs_t^n + b_h)

並設置最大迭代限制N防止網路在某步進程中無限制迭代計算,

N(t) = min  { n:sum_{n=1}^{n}} h_t^n >=1-epsilonnR(t) = 1- sum_{n=1}^{N(t)-1}h_t^n

最終在時刻t的更新量為:

s_t = sum _{n=1}^{N(t)}p_t^n s_t^nny_t = sum_{n=1}^{N(t)}p_t^ny_t^n

通過使用包含思考代價的複合損失函數hat L(x,y) = L(x,y) + tau P(x),該模型被設計為鼓勵神經網路快速進行判斷而不是一味的追求精度消耗大量計算資源。

P(x) = sum _{t=1}^T p_tnp_t = N(t) + R(t)

4) Neural GPU

從數據集學習具體的演算法是神經網路設計的初衷,對於能夠學習演算法的神經模型,必須能夠運行必要數量的計算步驟。上述的模型可以輸入序列對中學習到需要線性計算步驟(時間)的演算法,但是對於需要超線性運算時間的演算法表現很差,在處理多位數字乘法演算法學習的測試中,GridLSTM和NerualGPU表現較佳。但是NerualGPU和GridLSTM的具體使用網路模型往往非常深入,並且具有精細的架構,這使得最小化訓練誤差的問題對於隨機梯度下降是非常具有挑戰性的。

需要超線性數量的計算操作的任務不能通過只能執行線性數計算操作的神經體系來解決,表列出了幾種不同的神經網路架構可以執行的計算操作的數量。

GridLSTM和NeruralGPU對輸入序列長度為n的任務執行O(n^2)的計算量,這是一個理想的屬性,因為這意味著該模型可以學習對輸入序列計算運行時間超線性增長的演算法,例如整數乘法。

CGRU(s) = mu odot s + (1-mu) odot tanh(U*(r odot s) + B)nmu = sigma(U odot s + B)nr = sigma(U*s + B)nU*s = conv(input=s, ;;; filter=U )

深度拓展(傳統RNN中的疊加多層概念)結構NerualGPU迭代公式為

s_{t+1}  = CGRU_l(CGRU_{l-1}(...(CGRU_1(s_t))))ns_{fin} = s_nn

其中的假想圖片(mental image)是對一個標準的conv2d卷積的數據操作格式為 輸入數據[batch, in_height, in_width, in_channels] 相對應的卷積核數據形狀為[filter_height, filter_width, in_channels, out_channels],在上面的公式中卷積U*x中是將RNN序列中在時刻t的輸入變數後置於卷積通道數據位上了,如RNN輸入數據格式為[batch, in_length, in_width] 其中in_width為股票i在時刻t對應的多因子歸一化數據,調整為[batch, in_length, w, in_width]數據格式,其中w維度擴展初置0並且在最終只提取w維度第一列的數據。

The Extended Nerual GPU

NerualGPU模型在後續研究中被添加了主動記憶解碼過程,將原始演算法的最終假想圖片s_{fin}設定為decoder解碼器的起始點。在主動記憶解碼器(active memory decoder)中,使用一個單獨的輸出緩存張量p(output tape tensor)將解碼器設計為s_t = f(s_{t-1}, y_{t-1}, x_t),t時刻的隱藏狀態y_{t-1}受到上一時刻輸出值:CGRU^d(s,p) = mu odot s + (1-mu)odot tanh(U*(rodot s) + W * p  +B)nmu = sigma(U * s + W *p + B)nr = sigma (U *s + W *p + B)

解碼器在時刻t的運算公式為:

d_{t+1} = CGRU_l^d(CGRU_{l-1}^d(...CGRU_1^d(s_t, p_t)),pt)

在解碼器計算時刻k輸出緩存張量p更新k位置的tensor值為該時刻的輸出列向量。

注意,The Extended Nerual GPU結構設計中雖然使用tape結構引入RNN attention 機制,但是在tape數據格式具體操作中採用在未得到數據前置0的方式進行處理,不會使用時間序列中的未來數據。

5) Pointer Network

Pointer Network本意是 簡化attention機制的計算公式,但是這個公式組合簡化之後可以剝離encoder-decoder結構,可以直接拿到多層LSTM上面使用,我試了一下,效果還不錯。

u_j^i = v^T tanh (W_1e_j +W_2 d_i)np(C_i|C_1,...,C_{i-1},P)= softmax(u_i)

注意上面的公式,encoder在decoder時間步i將所有的encoder 序列j全面編碼計算指針網路,這裡如果直接使用時間序列會用到未來數據,注意這裡可以參考上面NeuralGPU論文裡面的處理方法空置方法或者在編碼的地方設置一個條件選擇即可。當然也可以用作橫面數據回歸,不過根據因素排序股票通常沒有特別明顯的嬗變關係,可以適當使用分組的方法處理。

附錄

Encoder&Decoder

Encoder-Decoder 結構一般用來處理神經機器翻譯方面,如上圖所示,對一個英-漢句子互譯的任務可以認為是sequence to sequence的具體案例,通過encoder將輸入序列進行編碼處理,將RNN最後一個隱藏狀態矩陣當作信息緩存傳送到decoder進行RNN解碼翻譯成對應的語句詞向量。由上圖可見對於傳統的encoder-decoder結構,encoder只是將最後一個隱藏狀態矩陣傳遞到decoder這造成了神經翻譯模型的性能瓶頸,attention機制通過軟對齊方法將更多的encoder信息流向decoder,提高模型整體性能。

由於在結構設計Encoder-Decoder提取全輸入序列的信息,不便於直接用於時間序列的預測,這裡附錄是考慮多數的sequence to sequence是基於encoder-decoder結構處理NLP為假設應用進行設計的,所以單從時間序列角度考慮可能不容易快速理解。

代碼示例

Grid2dLSTM 構建高抽象的多因子股票時間序列預測模型

Adaptive Computation Time for Recurrent Neural Networks

NeuralGPU卷積與RNN結合超線性計算時間多因子時間序列預

tensorflow 筆記6 RNN 時間序列預測

引用

Pointer Networks

NEURAL GPUS LEARN ALGORITHMS

EXTENSIONS AND LIMITATIONS OF THE NEURAL GPU

Can Active Memory Replace Attention?

NEURAL MACHINE TRANSLATION BY JOINTLY LEARNING TO ALIGN AND TRANSLATE

GRID LONG SHORT-TERM MEMORY

A WAY OUT OF THE ODYSSEY: ANALYZING AND COBINING RECENT INSIGHTS FOR LSTM

Network In Network

Adaptive Computation Time for Recurrent Neural Networks

A Critical Review of Recurrent Neural Networks

Sequence to Sequence Learning with Neural Networks

Learning Phrase Representations using RNN Encoder–Decoder for Statistical Machine Translation


推薦閱讀:

量化策略系列教程:18MACD策略
掘金量化擂台賽
【量化】均值回歸入門

TAG:神经网络 | 量化 | 深度学习DeepLearning |