標籤:

PonderRNN對HS300指數預測

前幾天看博客看到Alex Graves設計的ACT (Adaptive Computation Time Graves, 2016)通過構建包裹函數實現RNN模型在時間序列t可以進行n迭代計算,取權重累加和作為時間序列在時刻t的輸出,其核心邏輯為通過拉長RNN的在時間序列上的長度增強RNN模型的複雜性,提高非線性表達。

由於RNN使用tanh激活函數,超過5層的RNN計算成本很大,近兩年的論文認為拉長RNN的時間序列長度可以提高RNN模型的效果,通過對一個時刻的RNN反覆迭代計算並輸出權重和作為時間序列在時刻t的輸出,可以變相拉長RNN的長度。ACT模型通過使用時間損失函數來壓迫模型學習在有限時間(有限的迭代步長)學習判斷輸出。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

2017-08-09更新

代碼實現

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

  • RNN的計算時間由給定問題的序列長度和設計者指定,無法自行變動適應具體問題
  • 具有高度複雜變化的序列數據處理
  • 研究表明,在條件受限無法加深RNN模型深度的情況下,拉成RNN時間軸長度也能夠提升RNN精度

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

標準RNN迭代公式如下:

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

ACT修改RNN迭代公式為:

s_t^n = egin{cases} S(s_{t-1}, x_t^1) ;;; if ;; n = 1 \ S(s_t^{n-1},x_t^n) ;;; otherwise\ end{cases}

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

p_t^n =egin{cases} R(t) ;;; if ;; n=N(t)\ h_t^n ;;; otherwise end{cases}\

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

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

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

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

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

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

P(x) = sum _{t=1}^T p_t

 p_t = N(t) + R(t)


推薦閱讀:

請問是否有辦法可以對中國市場的債券違約風險進行量化的度量,計算出違約的可能性?
身為跨界狂魔是一種怎樣的體驗——詹姆斯·西蒙斯(下)
『國君研報復現』 基於行業趨勢度的擇時策略
淺析至強RNN可微分神經計算機(DNC)
對沖策略

TAG:量化 | RNN |