[机器学习]gcForest算法理解
一、相關理論
本篇博文主要介紹南京大學周志華教授在2017年提出的一種深度森林結構——gcForest(多粒度級聯森林)。近年來,深度神經網絡在圖像和聲音處理領域取得了很大的進展。關于深度神經網絡,我們可以把它簡單的理解為多層非線性函數的堆疊,當我們人工很難或者不想去尋找兩個目標之間的非線性映射關系,我們就多堆疊幾層,讓機器自己去學習它們之間的關系,這就是深度學習最初的想法。既然神經網絡可以堆疊為深度神經網絡,那我們可以考慮,是不是可以將其他的學習模型堆疊起來,以獲取更好的表示性能,gcForest就是基于這種想法提出來的一種深度結構。gcForest通過級聯的方式堆疊多層隨機森林,以獲得更好的特征表示和學習性能。
深度神經網絡雖然取得很好的性能,但是也存在一些問題。
第一、要求大量的訓練數據。深度神經網絡的模型容量很大,為了獲得比較好的泛化性能,需要大量的訓練數據,尤其是帶標簽的數據。獲取大規模數據需要耗費很大的人工成本;
第二、深度神經網絡的計算復雜度很高,需要大量的參數,尤其是有很多超參數(hyper-parameters)需要優化。比如網絡層數、層節點數等。所以神經網絡的訓練需要很多trick;
第三、深度神經網絡目前最大的問題就是缺少理論解釋。就像“煉丹”一樣,反正“丹藥”出來了,怎么出來的我也不知道。
gcForest使用級聯的森林結構來進行表征學習,需要很少的訓練數據,就能獲得很好的性能,而且基本不怎么需要調節超參數的設置。gcForest不是要推翻深度神經網絡,也不是以高性能為目的的研究,只是在深度結構研究方面給我們提供了一些思路,而且確實在一些應用領域獲得了很好的結果,是一項很有意義的研究工作。
?
二、算法介紹
這種方法生成一個深度樹集成方法(deep forest ensemble method),使用級聯結構讓gcForest學習。
gcForest模型把訓練分成兩個階段:Multi-Grained Scanning和Cascade Forest。Multi-Grained Scanning生成特征,Cascade Forest經過多個森林多層級聯得出預測結果。
Cascade Forest(級聯森林)
1. 級聯中的每一級接收到由前一級處理的特征信息,并將該級的處理結果輸出給下一級。
2. 級聯的每個級別包括兩個隨機森林(藍色字體標出)和兩個完全隨機樹木森林(黑色)。[可以是多個,為了簡單這里取了2種森林4個弱分類器]
3. 每個完全隨機的樹森林包含1000(超參數)個完全隨機樹,通過隨機選擇一個特征在樹的每個節點進行分割實現生成,樹一直生長,直到每個葉節點只包含相同類的實例或不超過10個實例。
4. 類似地,每個隨機森林也包含1000(超參數)棵樹,通過隨機選擇√d數量(輸入特征的數量開方)的特征作為候選,然后選擇具有最佳gini值的特征作為分割。(每個森林中的樹的數值是一個超參數)
假設有三個類要預測; 因此,每個森林將輸出三維類向量,然后將其連接輸入特征以重新表示下一次原始輸入。
?
類別概率向量生成:
給定一個實例,每個森林會通過計算在相關實例落入的葉節點處的不同類的訓練樣本的百分比,然后對森林中的所有樹計平均值,以生成對類的分布的估計。即每個森林會輸出一個類別概率向量。
?
為了降低過擬合風險,每個森林產生的類向量由k折交叉驗證(k-fold cross validation)產生。具體來說,每個實例都將被用作 k -1 次訓練數據,產生 k -1 個類向量,然后對其取平均值以產生作為級聯中下一級的增強特征的最終類向量。需要注意的是,在擴展一個新的級后,整個級聯的性能將在驗證集上進行估計,如果沒有顯著的性能增益,訓練過程將終止;因此,級聯中級的數量是自動確定的。與模型的復雜性固定的大多數深度神經網絡相反,gcForest 能夠適當地通過終止訓練來決定其模型的復雜度(early stop)。這使得 gcForest 能夠適用于不同規模的訓練數據,而不局限于大規模訓練數據。
?
?
假設有三個類,則四個森林每一個都將產生一個三維的類向量,因此,級聯的下一級將接收12 = 3×4個增強特征(augmented feature)則下一層的輸入特征向量維度為(3×4 + length of x)。
Multi-Grained Scanning(多粒度掃描)
用多粒度掃描流程來增強級聯森林,使用滑動窗口掃描的生成實例,輸入森林后結果合并,生成新的特征。
?
對于400維的序列數據,采用100維的滑動窗對輸入特征進行處理,得到301(400 - 100 + 1)個100維的特征向量。
對于20×20的圖像數據,采用10×10的滑動窗對輸入特征進行處理,得到121((20-10+1)*(20-10+1))個10×10的二維特征圖。
然后將得到的特征向量(或特征圖)分別輸入到一個completely-random tree forest和一個random forest中(不唯一,也可使用多個森林),以三分類為例,會得到301(或121)個3維類分布向量,將這些向量進行拼接,得到1806(或726)維的特征向量。
維度變化:1個實例400維->301個實例100維->2棵森林301個實例3維->1806維(2x301x3)
維度變化:1個實例20*20->121個實例10*10->2棵森林121個3維->726維(2x121x3)
整體流程
?
階段1:
1. 利用滑動窗口切分成多實例特征向量,經過森林變換輸出類別概率向量。
2. 合并類別概率向量生成新的特征。
階段2:
3. 輸入特征經過森林輸出類別概率向量,連接原始輸入作為下一層輸出。
4. 經過多個級聯森林,輸出最終的類別概率向量。
5. 對多個森林輸出的類別概率向量求類別的均值概率向量,取最大的類別概率為預測結果。
?
使用多粒度掃描對輸入特征進行預處理。以使用三個尺寸的滑動窗為例,分別為100-dim,200-dim和300-dim。輸入數據為400-dim的序列特征,使用100-dim滑動窗會得到301個100-dim向量,然后輸入到一個completely-random tree forest和一個random forest中,兩個森林會分別得到的301個3-dim向量(3分類),將兩個森林得到的特征向量進行拼接,會得到1806-dim的特征向量。同理,使用200-dim和300-dim滑動窗會分別得到1206-dim和606-dim特征向量
?
三、算法實現
gcForest模型的Python實現
GitHub上有兩個star比較多的gcForest項目,這里要說明的是其中 是官方提供(由gcForest的作者之一Ji Feng維護)的一個Python版本。
目前gcForest算法的官方Python包并未托管在Pypi, 但v1.1.1支持Python3.5
1. 官方開源地址:https://github.com/kingfengji/gcForest
使用請參考:https://mp.csdn.net/postedit/84774888
2 實現基于Python3.x的gcForest version0.1.6版本(https://github.com/pylablanche/gcForest),但其功能要相對弱
?
四、總結
相比于深度神經網絡,gcForest具有以下優點:
1. 對于某些領域,gcForest的性能較之深度神經網絡具有很強的競爭力
2. gcForest所需參數少,較深度神經網絡容易訓練得多
3. gcForest具有少得多的超參數,并且對參數設置不太敏感,在幾乎完全一樣的超參數設置下,在處理不同領域的不同數據時,也能達到極佳的性能,即對于超參數設定性能魯棒性高。
4. gcForest對于數據量沒有要求,在小數據集上也能獲得很好的性能。
5.? gcForest訓練過程效率高且可擴展,適用于并行的部署,其效率高的優勢就更為明顯。
?
???
??
參考
Paper:https://arxiv.org/abs/1702.08835v3
Github:https://github.com/kingfengji/gcForest
Website:http://lamda.nju.edu.cn/code_gcForest.ashx
Deep Forest: Towards An Alternative to Deep Neural Networks
總結
以上是生活随笔為你收集整理的[机器学习]gcForest算法理解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2022最新短视频API解析接口源码(北
- 下一篇: 40+个精选的VSCode前端插件,总有