深度森林淺析

深度森林

深度學習最大的貢獻是表徵學習(representation learning),通過端到端的訓練,發現更好的features,而後面用於分類(或其他任務)的輸出function,往往也只是普通的softmax(或者其他一些經典而又簡單的方法)而已,所以,只要特徵足夠好,分類函數本身並不需要複雜representation learning。目前DL的成功都是建立在多層神經網絡的基礎上的,那麼這種成功能否復刻到其他模型上呢?南京大學的周志華老師嘗試提出一種深度的tree模型,叫做gcForest,用文中的術語說,就是“multi-Grained Cascade forest”,多粒度級聯森林。此外,還提出了一種全新的決策樹集成方法,使用級聯結構讓 gcForest 做表徵學習。

在這裏插入圖片描述

論文和實現

https://arxiv.org/abs/1702.08835v2
https://github.com/kingfengji/gcForest
https://github.com/pylablanche/gcForest

整體架構

此圖爲例,三分類,使用三個window,先通過多粒度掃描模塊,每個森林的輸出都是三位向量,將不同尺度window掃描的結果級聯起來得到3618維的向量,再輸入到級聯森林模塊,比如四個森林(兩個完全隨機森林和兩個隨機森林)輸出12位向量,再與輸入的3618維向量級聯得到3630維向量,輸入下一階段。最終輸出12維向量,取平均,再取最大輸出。
兩個完全隨機森林 每個包括500棵完全隨機(完全隨機選擇特徵做節點分裂)
兩個隨機森林,每個包括500棵樹,隨機選擇sqr(d)個特徵,然後選擇最好gini係數的一個特徵做分裂。
如何得到概率分佈
給定一個樣本,樣本會通過每個樹落入一個葉子節點,通過統計訓練樣本中此節點不同類別的比例,得到概率分佈。
如何防止過擬合
每個類別向量通過K折交叉驗證生成,每個訓練樣本被用作k-1次訓練數據,最後平均輸出。
自動調整級聯森林級數(層數)
在該結構中,首先會在一級結束後做一個性能測試,然後再繼續生成下一級,當擴展一個新的級後,整個級聯的性能將在驗證集上進行估計,如果沒有顯着的性能增益,訓練過程將終止。因此,gcForest能夠通過適當的終止,來決定其模型的複雜度,這就使得相對於DNN,gcForest在即使面對小數據集的情況下一樣使用,因爲它的結構不依賴於大量的數據生成。

多粒度掃描模塊實現

在這裏插入圖片描述

通過多個尺度的滑動窗口實現特徵重用(原特徵的重新表示),滑動窗口只是掃描特徵,不涉及參數(不同於卷積操作),掃描的特徵向量作爲新的(正/負例)樣本。如原特徵400維,窗口100,將得到301個100維特徵向量的新樣本輸入森林。最後將所有森林輸出的結果級聯作爲轉換特徵。如果轉換特徵維度太長,可做下采樣。

級聯森林模塊

在這裏插入圖片描述

如上圖所示,每一層都是由決策樹組成的森林組成的,也就是每層都是“集成的集成”。但注意,這裏每層都是由兩種不同的森林所組成,這是因爲周教授在2012年發表論文說,多樣的結構對集成學習來說是很重要的。那這裏所謂的兩種森林是指什麼呢?這裏舉了個簡單的例子,例如說圖中黑色的完全隨機森林,而藍色的是普通隨機森林。完全隨機森林是由1000棵決策樹組成,每棵樹隨機選取一個特徵作爲分裂樹的分裂節點,然後一直生長直到每個葉節點細分到只有1個類別或者不多於10個樣本。類似的,普通隨機森林由1000棵決策樹構成,每棵樹通過隨機選取sqrt(k)(k表示輸入特徵維度,即特徵數)個候選特徵,然後通過gini分數篩選分裂節點。所以兩種森林的主要區別在於候選特徵空間,完全隨機森林是在完整的特徵空間中隨機選取特徵來分裂,而普通隨機森林是在一個隨機特徵子空間內通過gini係數來選取分裂節點。這裏只提到完全隨機森林中決策樹的生長規則——完全或近乎完全生長,但沒有提到普通隨機森林的生長規則,按經驗應該是可以設定停止生長規則或者採用後剪枝來修剪模型的。每個森林裏決策樹的數量其實是個超參數。
在這裏插入圖片描述

因爲決策樹其實是在特徵空間中不斷劃分子空間,並且給每個子空間打上標籤(分類問題就是一個類別,迴歸問題就是一個目標值),所以給予一條測試樣本,每棵樹會根據樣本所在的子空間中訓練樣本的類別佔比生成一個類別的概率分佈,然後對森林內所有樹的各類比例取平均,輸出整個森林對各類的比例。例如下圖所示,這是根據圖1的三分類問題的一個簡化森林,每個樣本在每棵樹中都會找到一條路徑去找到自己對應的葉節點,而同樣在這個葉節點中的訓練數據很可能是有不同類別的,我們可以對不同類別進行統計獲取各類的比例,然後通過對所有樹的比例進行求均值生成整個森林的概率分佈。

優勢(相對DNN):

  1. 深度神經網絡需要花大力氣調參,相比之下 gcForest 要容易訓練得多。實際上,在幾乎完全一樣的超參數設置下,gcForest在處理不同領域(domain)的不同數據時,也能達到極佳的性能。
  2. gcForest 的訓練過程效率高且可擴展。在我們的實驗中,它在一臺PC 上的訓練時間和在 GPU 設施上跑的深度神經網絡差不多,有鑑於 gcForest 天然適用於並行的部署,其效率高的優勢就更爲明顯。
  3. 此外,深度神經網絡需要大規模的訓練數據,而 gcForest 在僅有小規模訓練數據的情況下也照常運轉。
  4. 不僅如此,作爲一種基於樹的方法,gcForest 在理論分析方面也應當比深度神經網絡更加容易。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章