時間卷積網絡 (TCN):關於從風控項目當中的學習
An empirical genetic convolution and recurrent network for sequence modeling
此為論文整理筆記 + debug 紀錄
時間卷積網絡 (TCN) 是什麼?
TCN,全名為 Temporal Convolution Network ,這篇論文於 2018 年出的,算是 TCN 的開端 (截至 2019/7/28,citation: 203)。
時序卷積網絡主要可以解決時序的模式識別(Time Series Discovery)問題,模型架構由1D的全連接層(Fully Convolution Network)與卷積層組成。卷積層結合了因果卷積層(Causal Network)與擴張卷積(Dilated Network)兩種結構。
- 因果卷積一開始的提出:是為了解決圖片的分割為題,會跳過部分輸入,提升 image recognition的準確率,同時它允許卷積的時的輸入存在間隔採樣。它的經典應用在於 Google’s WaveNet(語音領域)。
To extract features with different time intervals from time series and finally combine these features.
解決的問題:Time Series Discovery
- 希望建立的是通用解,主要應用在 NLP、語音合成等任務(Sequence Modeling)。
- 關於我在風控當中(第三方數據)的應用任務:需要在信貸時序數據上,挖掘衍生的特徵變量以及可解釋性。
比方說 feat_new1是兩個共債相關變量的組合 :(1) 按手機號碼查詢,近 15天以及 (2) 近 12 個月在非銀機構申請機構數的加權平均;這兩個變量在原始變量對應到 var_1 ( IV=0.7 ) 與 var_2 ( IV=0.5 ),分別刻畫了用戶在較長時間內(12 個月)與較短時間(15天)內的借款需求。
卷積網絡用組合方式產生衍生變量,用來描述用戶的借款『飢渴度』在時序上的變化,顯現單一變量無法提供的信息,具有時序上的解釋意義。
『但是這並不代表我們可以將算法的輸出直接代入最終的授信模型中,我們需要結合金融邏輯與業務經驗對算法的輸出進行篩選與精煉,這只是一種算法上的嘗試。』
如何解
TCN 模型的特性與優點
1.序列建模的時序預測:
在因果卷積當中,定義了 {yt} 只受過去 {Xt, Xt-1, Xt-2, ..} 影響,並不受未來數據 {Xt+1, Xt+2, ..} 影響,並且對歷史有記憶;另外,全連接層確保了輸出與輸入維度一致。
2.彈性調整感受野大小(Receptive Field Size):
擴張卷積和一般卷積的不同在於:每一層 Hidden Layer 都和輸入序列大小一樣,越到因果卷積層的上層,卷積窗口越大(意味著空洞越多),除了提高感受野以外,同時能降低計算量。
- d: 擴張卷積、以 2 的指數遞增,決定在層的級別隔幾個空格傳遞至下一層。
- k: filter size,決定每一層之間取幾個值傳到下一層,下圖 (a) 每一層皆為 k=3。
下圖為 TCN 整體模型架構:(a) 為因果卷積示意圖 ; (b) 為殘差模塊內部構造 ; (c) 為殘差卷積的跳層連接在 TCN 的示意圖(較下層的特徵跳層連接到上層,提高模型準確度)
模型特點摘要:以下整理自 David 在時間卷積網絡(TCN) 總結篇:
1.其實 TCN 只是一維卷積變形之後在時序問題上變得適用,廣義上,自動提取特徵信息至今仍是一格非常靈活難以把握的問題。
2.擴張卷積和普通1D卷積最大的不同:越到上層,卷積窗口越大,而卷積窗口中的「空孔」越多;擴張卷積可以做到每一層隱層都和輸入序列大小一樣,計算量降低,感受野足夠大。
3.因果卷積:時序預測要求對時刻 t 的預測 yt 只能通過 t 時刻之前的輸入 x1 到 xt-1來判別(e.g. 隱馬爾科夫鏈)。
4.為了提高準確率,加入了殘差卷積的跳層連接,以及1×1的卷積操作
如何衡量此解法的好壞
論文裡面根據不同的任務,主要都是與 LSTM 與 GRU 比較,TCN 皆取得了較好的成果:
- 隨著序列長度增加,TCN 可以更快收斂
- 隨著迭代次數增加,TCN可以達到較高的準確率 (MNIST & P-MNIST)
- 在效能上也可以吃較少的內存:由於 TCN 基於卷積的關係,有共享參數
程式碼實現
Install
pip install keras-tcn
Usage
from tcn import compiled_tcn
- 主程式以及相關說明在
keras_tcn/tcn/tcn.py
當中,原作者的註解相當的清楚,可以作為調參參考。 - 風控項目調用 TCN 程式碼參考
後記
由於此程式碼為 2019–07~08 月之間,因應暑期項目:百融雲創的徵信去識別化數據,進行數據挖掘與特徵衍生所研究開發的模型。在 9月初去上海參加 Google 開發者大會之後,將 tensorflow 升級到了 2.0,並且在整理此項目的程式碼時(因有部分 bug 想重跑模型)遇到了不能運行的錯誤,以下為 bug 紀錄 (Bug format 參考:Learning From Your Bugs)。
Date:
2019-10-04Symptom:
graph = tf.get_default_graph()
AttributeError: module 'tensorflow' has no attribute 'get_default_graph'Cause:當從 tensorflow 1.14.0 升版到 tensorflow 2.0 RC版之後,backend 的 tensorflow 版本封裝 keras 的方式不一致。Fix:
由於 tf 將 keras納入自身模組,看了很多解法將原本的 import keras 改成 tf.keras,還是會出現錯誤info,最終從 keras 官方文檔得到最終解法:將 keras 更新至 2.3.0 才會和 tensorflow 2.0 相容。Time taken to resolve bug:
2.5 hourLessons:
1.由於未來 tf 2.0 銳不可擋,除了升級當中遇到的問題可以直接透過 error info 找解法以外,最終還是回歸 tf or keras 官方文檔找尋線索可以節省 debug 時間。2.tensorflow2.0 執行 1.x版本的過渡與遷移方式:https://www.tensorflow.org/guide/upgrade
為什麼要升版 tensorflow 2.0?
原因其實很簡單,就是去朝聖了 Google 開發者大會後(當然他們就是老王賣瓜),我腦波很弱的有買單,於是乎就從 1.14 升版到 2.0(想說 RC 版應該相對穩定吧吧吧),也想試試看很多厲害的衍生的新功能:像是 Tensorflow Probability,結合機率+深度學習的工具,可作機率推論與統計建模。除了 tensorflow2.0以外,還有一個很喜歡的 function 是 Material Design,詳細的其他乾貨介紹整理如下連結:
寫在最後:除了 TCN 之外
另外一篇相關的論文 Causal Discovery with Attention-Based Convolutional Neural Networks,也是時間因果發現不錯的論文,有時間可以再來研究。
Temporal Causal Discovery Framework
- Given multiple time series as input, TCDF discovers causal relationships between these time series and outputs a causal graph.
- It can also predict one time series based on other time series. TCDF uses Attention-based Convolutional Neural Networks combined with a causal validation step.
- By interpreting the internal parameters of the convolutional networks, TCDF can also discover the time delay between a cause and its effect.
參考資料
- 時間卷積網絡(TCN) 總結:時序模型不再是遞歸網絡(RNN) 的天下,但作為信息粗暴提取的一種方法,請不要神話CNN !
- 機器學習如何應用於風險管理(知乎)
- 深度學習+ 論文詳解: TCN_時間卷積網絡_原理與優勢
- TCN(時間卷積網絡)與CNN有啥區別?
- [Tensorflow] Implementing Temporal Convolutional Networks
- Temporal Convolutional Networks — Dethroning RNN’s for sequence modelling
- TCN時間卷積網絡(知乎)
- TCN論文閱讀(知乎)
- 機器之心GitHub項目:從循環到卷積,探索序列建模的奧秘
如果這篇文章有幫助到你,可以幫我在下方綠色的拍手圖示按5下,只要登入Google或FB,不需任何花費就能【免費支持】youmgmi 繼續創作。