不求甚解哪行之TabNet


TabNet是由Google提出的一種用於處理表格型數據的神經網絡方法,它的出現有望挑戰樹形模型對表格數據的壟斷地位(XGBoost, GBDT, LGBM)。

論文地址:TabNet: Attentive Interpretable Tabular Learning
官方項目地址:TabNet官方
pytorch實現:TabNet Pytorch實現

目錄

  • 決策樹及其變體模型有何優勢和劣勢?

  • TabNet核心思想

  • TabNet Encoder(如何進行回歸和分類任務學習?)

  • TabNet Decoder(如何實現自監督學習進行表征學習?)

  • 實驗及調參

決策樹及其變體模型有何優勢和劣勢?

為什么在表格型數據領域,深度學習方法還無法撼動集成決策樹及其變體在該領域的統治地位?

首先樹形模型具有如下優勢:

1)模型具有近似超平面邊界的決策流形(decision manifolds),對表格數據具有高效的表示能力(所以性能好)

2)他們的基本形式有很強的解釋性(通過追蹤決策結點)(這在現實生活的很多應用中都是非常重要的考量,比如金融服務)

3) 樹形模型訓練很快

其次之前提出的DNN結構並不太適合表格型數據,以卷積層或MLP為基礎的傳統DNN對於表格型數據往往參數量過大,缺乏適當的歸納偏差(inductive bias)通常導致他們無法找到表格數據決策流形的最優解。

那么決策樹及其變體模型有何缺點呢?首先就是我們對特征工程的依賴。我們回想一下,為什么深度學習方法能夠在圖像、自然語言以及音頻方面取得巨大的成功?一個很重要的原因,就是深度學習能夠將原始數據編碼成有意義的表示。基於反向傳播算法的端到端訓練能夠對表格型數據進行有效的編碼,從而減輕甚至消除對特征工程的需要。不僅如此,當數據集規模更大時,神經網絡模型的表達能力可能具有更好的效果。

而TabNet就是要集合DNN和決策樹型模型的優點,實現一個更好的處理表格型數據的方法。

TabNet核心思想

如果想讓DNN具有樹模型的優點,那么需要解決個一個問題就是:如何構建一個具有與樹模型相似決策流行的神經網絡?作者的構思如下圖:

image-20201112192338712

左圖是右圖決策流型的神經網絡實現。其中Mask層對應於特征選擇,比如特征\([x_1, x_2]\)在經過mask\([1, 0]\)后選擇了特征\(x_1\)。經過FC層后得到的向量為\([C_1 x_1 - C_1 a, -C_1 x_1 + C_1 a, -1, -1]\),變換后可得到\([C_1(x_1 - a), -C_1(x_1 - a), -1, -1]\)。不難發現,其中只有一個元素能夠大於或等於0。經過ReLU層后,只有一個元素為正值,其余全為0,這對應於決策樹的條件判斷。

Encoder(TABNET FOR TABULAR LEARNING )

Encoder結構

表格數據包含類別數據和數值型數據。TabNet使用原始的數值型數據,並用可訓練的embedding將類別特征映射為數值特征。Tabnet不使用全局歸一化的特征,而是使用BN。每一個決策步(decision step)輸入相同的\(B \times D\)的特征矩陣。\(B\)是batch size的大小,\(D\)是特征的維數。TabNet的encoding是基於多個決策步的處理。每個決策步的特征由上一決策步的輸出經過Attentive transformer來決定。並輸出處理過的特征表示,整合到整體的決策中。這種以序列的形式實現自上而下的注意力是受到了處理視覺與語言數據(比如視覺問答)以及強化學習的啟發。

Feature selection

特征選擇通過每一個決策步的Mask模塊實現。選擇哪些特征由決策步的Attentive transformer實現。

那么,Attentive transformer是如何實現特征的選擇呢?

Attentive transformer通過學習一個mask來實現對當前決策步的特征選擇。學習mask的公式如下表示:

\[M[i]=sparsemax(P[i - 1] \cdot h_i (a[i-1])). \]

公式中各符號的含義已在圖中標出,下面用張量流動的順序來說明各符號的含義:

1.首先上一決策步的Feature transformer輸出張量並送給Split模塊。

2.Split模塊對步驟1中的張量進行切分並得到\(a[i-1]\)

3.\(a[i-1]\)經過\(h_i\)層,\(h_i\)層表示一個全連接層和一個BN層。

4.\(h_i\)層的輸出和上一決策步的先驗尺度\(P[i-1]\)相乘。

5.然后通過Sparsemax生成所需的\(M[i]\),進而完成特征選擇。

6.\(M[i]\)更新\(P[i]\)。更新公式為:\(P[i]=\prod_{j=1}^i(\gamma-M[j])\)\(P[i]\)表示的是過去的決策步中特征的使用情況。當\(\gamma=1\)的時候,則表示強迫每個特征只能出現在一個決策步中【為什么?】\(P[0]\)初始化為全1。在自監督學習中,如果未使用某些特征,可在P[0]中置為0.

7.\(M[i]\)和feature元素相乘實現當前決策步的特征選擇。

8.將選擇后的特征輸入當前決策步的feature transformer,並開啟新的決策步循環。

了解了特征選擇的過程,第二個問題就是,為什么Attentive transformer能實現特征的選擇呢?

Attentive transformer有3個模塊:FC+BN、Prior scales和Sparsemax。

FC+BN的作用是實現特征的線性組合,從而抽取出更高維更抽象的特征。

Prior scales根據前面的公式可以發現他其實是當前決策步在選擇特征時的先驗知識。一般來說,在過去的決策步中使用越多的特征,在當前決策步中的權重就越小。所以這一步相當於是根據歷史出現的情況,選擇當前所需的特征。

Sparsemax可以使得\(\sum_{j=1}^D M[i]_{b,j}=1\)【為什么使用sparsemax,而不是softmax?】。其中\(D\)表示特征的維數。sparsemax對每個樣本\(b\)的每個特征\(j\)實現權重的分配,並使每個樣本的所有特征的權重和為1,從而實現了instance-wise的特征選擇。

特別地,為了控制所選特征的稀疏性,作者還以熵的形式提出了稀疏正則項,公式如下:

\[L_{sparse}=\sum_{i=1}^{N_{steps}} \sum_{b=1}^B \sum_{j=1}^D \frac{-M_{b,j}[i]}{N_{steps} \cdot B} log(M_{b,j}[i]+ \epsilon) \]

其中\(\epsilon\)是為了保證數值的穩定性。\(L_{sparse}\)會以權重\(\lambda_{sparse}\)加入到最終的損失函數中。可以發現當所選特征越密集的時候,正則項會越大。

那么,作者為什么要使用這么多手段去保證特征選擇的稀疏性呢?(sparsemax以及\(L_{sparse}\))

作者認為:當數據集的大部分特征都是冗余的時候,稀疏性能夠為收斂到更高的准確率提供更好的歸納偏差。我認為這里存在矛盾的地方。TabNet最大的魅力可能就在於免去表格數據繁雜的特征工程,也就是說可能做到”我有什么就輸入什么“的理想狀態(像CV領域一樣)。但是這里的sparsemax和正則項都以特征冗余為前提,則將特征工程的活轉變為了調參的活。這里能否將稀疏度本身也作為可學習的參數本身呢?

1.為什么\(\gamma=1\)時,表示每個特征只能在一個決策步中出現?

假設某個特征\(n\)第一次出現在第\(j\)個決策步,即\(M[j]_n=1\),那么\(\gamma - M[j]_n=0\)。根據\(P[i]\)的更新公式不難得到\(P[j+1]_n=0\)。又由於更新是連乘的方式,所以特征\(n\)\(j\)以后的決策步的先驗尺度都為0。

2.Attentive transformer中為什么使用sparsemax,而不是softmax?

Softmax是常用的注意力機制,但是它會產生較密集的注意力。根據softmax的定義可以發現softmax的輸出都大於0,對應到特征選擇的場景下,就是每個特征都會選擇,只是程度的問題。但是sparsemax可以通過投影到probabilistic simplex產生更為稀疏化的效果。這里借鑒稀疏序列到序列模型中的一個例圖。

圖中的\(z\)可以理解為投影前的特征值,把他們都投影到線段(單純性)上后,大部分的特征都會投影到單純性的邊界上,從而形成了稀疏化的輸出效果。從以下代碼可以更直觀得看到效果。

In [1]: import torch

In [2]: from torch.nn.functional import softmax

In [2]: from entmax import sparsemax
 
In [4]: x = torch.tensor([-2, 0, 0.5])

In [5]: softmax(x, dim=0)
Out[5]: tensor([0.0486, 0.3592, 0.5922])

In [6]: sparsemax(x, dim=0)
Out[6]: tensor([0.0000, 0.2500, 0.7500])

Feature processing

經過Mask過濾后的特征被送進了feature transformer進行特征處理。處理完成的特征被split模塊切分成兩部分,一部分用於當前決策步的輸出,另一部分則作為下一決策步的輸入信息。【為何要split,而不是共用?】用公式表示為:

\[[d[i], a[i]]=f_i (M[i] \cdot f) \]

公式各符號含義已在下圖標出。

整個特征處理的流程非常清晰,下面我們來關注feature transformer的模型結構。

作者說,"為了保證復雜模型的參數有效性及魯棒學習的能力,feature transformer應該包含在決策步間共享的層僅作用於當前決策步的層",對應到圖中分別是Shared across decision steps和Decision step dependent。相比於所有參數只作用於當前決策步,這種設計參數量更少,學習更加魯棒。而相比於每個決策步共享完全相同的參數,這種設計的參數在每一個決策步可能具有不一樣的特征處理能力,使得每一決策步的特征處理更加有效。

這里有一個細節,就是在每一個殘差連接后會乘上\(\sqrt{0.5}\),這是為了防止模型的方差發生劇烈變化,從而穩定訓練過程,這個操作源於《Convolutional Sequence to Sequence Learning 》。

另外,作者提到,"為了加快訓練,要使用large batch sizes"。而為了提升large batch sizes的性能,所有的BN層(除了作用於模型輸入特征的第一層BN外)都是用的是ghost BN。ghost BN源於論文《Train longer, generalize better: closing the generalization gap in large batch training of neural networks. 》,它的提出就是為了解決在large batch size下,減小generalization gap的方法。它有兩個相關的參數virtual batch size \(B_V\)以及momentum \(m_b\)。而對於輸入特征而言 ,作者觀察到低方差平均的好處,所以沒有使用ghost BN。

Encoder的最后借鑒了樹型模型聚合的思想,把所有決策步的embedding聚合成\(d_{out}\)\(\pmb {d_{out}}=\sum_{i=1}^{N_{steps}} ReLU(\pmb {d[i]})\)。最后再用一個全連接層映射到最終的輸出。

Decoder(TABULAR SELF-SUPERVISED LEARNING )

作者還提出了一個decoder結構來重建encoder所學習到的表示特征。decoder同樣由決策步構成,每個決策步為feature transformer加FC層。最終所有的輸出相加得到最終重建的特征。

自監督的目標是隨機丟掉部分樣本的部分特征,並且對他們進行預測。重建的損失函數表示為:

\[\sum_{b=1}^B \sum_{j=1}^D \left|(\pmb{\hat{f}_{b,j}} - \pmb{f_{b,j}}) \cdot \pmb{S_{b,j}} / \sqrt{\sum_{b=1}^B (\pmb{f_{b,j}} - 1/B \sum_{b=1}^B \pmb{f_b,j})} \right|^2 \]

由於每個特征可能有不同的尺度,所以這里用真實數據的標准差進行正則化。這里的\(\pmb{S_{b,j}}\)是以概率\(p_s\)在每一輪迭代依照伯努利分布進行獨立的抽樣。

實驗及調參

對於所有的數據集而言,類別性特征通過一個可學習的embedding被映射到一個1維的尺度上(有時更高維的embedding能輕微得提升性能,但是每個維度的可解釋性無法很好理解)。而數值型特征沒有經過預處理(這里作者提到一些特別設計的特征工程,比如logarithmic transformation of variables highly-skewed distributions 可能會進一步提高性能,但論文的實驗部分暫時沒有考慮這部分的內容)。

在所有數據集上的超參數搜索空間為:

hyperparameter_search_space = {
    "n_d": [8, 16, 24, 32, 64, 128], # n_a=n_d
    "n_steps": [3, 4, 5, 6, 7, 8, 9, 10],
    "gamma": [1.0, 1.2, 1.5, 2.0],
    "lambda_sparse": [0, 0.000001, 0.0001, 0.001, 0.01, 0.1],
    "batch_size": [256, 512, 1024, 2048, 4096, 8192, 16384, 32768],
    "virtual_batch_size": [256, 512, 1024, 2048, 4096],
    "momentum": [0.6, 0.7, 0.8, 0.9, 0.95, 0.98]
}

關鍵參數:

影響模型復雜度的參數:

  • \(N_a\).可以理解為用來決定輸出的隱藏層神經元個數。\(N_a\)更大,擬合能力更強,也容易過擬合。
  • \(N_d\).可以理解為用來決定下一決策步特征選擇的隱藏層神經元個數。
  • \(N_{steps}\).決策步的個數。可理解為決策樹中分裂結點的次數。

特征選擇能力:

  • \(\gamma\).決定歷史所用特征在當前決策步的特征選擇階段的權重。
  • \(\lambda_{sparse}\)。稀疏正則項權重,用來對特征選擇階段的特征稀疏性添加約束。越大,則特征選擇越稀疏。

基本學習參數:

  • Batch size
  • learning rate

模型結構:

  • feature transformer: shared decision layers
  • feature transformer: step-dependent layers

Reference

參考論文

From Softmax to Sparsemax: A Sparse Model of Attention and Multi-Label Classification

參考文章

谷歌發表於ICLR 2020,針對表列數據的注意力可解釋深度學習算法

數據挖掘競賽利器——TabNet模型淺析


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM