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