理解《Deep Forest: Towards An Alternative to Deep Neural Network》
轉自女朋友的csdn: 理解《Deep Forest: Towards An Alternative to Deep Neural Network》
Deep Forest 優點
1. 性能高度接近深度神經網路2. gcForest 的參數數量較少,訓練更簡單,森林層次自適應
3. 訓練速度更快4. gcForest能在小數據集上表現良好5. 樹結構在理論上更容易分析和理解Deep Learning 缺點
1. 需要更大的訓練數據才能有更好的結果2. DNN結構複雜,需要的計算量大(為了要利用大的訓練數據,學習模型需要更大的容量,會更複雜)3. DNN有大量參數,且訓練性能嚴重依賴於 hyper parametor 的微調Deep Forest 結構
說明:本文中插圖全部來自原論文 」Deep Forest: Towards An Alternative to Deep Neural Network」
Deep Forest 的結構分為兩個大部分,其中第一個部分是Multi-Grained Scanning,作用類似於卷積神經網路,即將多個相鄰特徵進行分組處理,考慮了特徵之間的相互關係,示例中將一個400維的特徵擴展到了3618維。第二個部分是Cascade Forest,這部分是演算法的核心,通過將若干個弱分類器(決策樹)集成得到的森林再次集成,形成森林瀑布的層次,每一層中都由四個森林組成,最終結果層是取森林瀑布頂層的四個森林結果的均值作為最終判定結果。Cascade Forest 整體演算法如下:

1. Deep Forest 是由多層森林組成的瀑布型結構,每一層的輸入是前一層森林輸出的特徵信息,且該層森林的輸出作為下一層森林的輸入特徵的一部分
2. 瀑布是由多個森林串成的,而森林又是由多棵決策樹集成的。為了保證模型的多樣性,採用了多種不同種類的森林
3. 為了簡單起見,文中在每層中只選用了兩種森林:two complete random forests 與 two random forests。即每層只有四個森林
4. complete random forest 是由1000棵 complete random trees 組成的,complete random tree 中每個節點都隨機的選擇一個特徵作為分裂特徵,不斷增長整棵樹,直到剩餘所有樣本屬於同一類,或樣本數量少於10
5. random forest 是由1000棵 random trees 組成的, random tree 中的每個節點都隨機的選擇 sqrt(d) 個特徵(其中d是輸入特徵總數),然後選擇最佳基尼係數的特徵作為該節點的分裂特徵,同樣增長整棵樹,直到剩餘所有樣本屬於同一類或樣本數量少於 10
輸出過程分析:

森林對每個輸入樣本都有一個輸出,該輸出是以類別佔比的形式給出的,如上圖中,此時存在三個類別(方形,三角形,橢圓形),森林中每棵樹的葉子節點記錄了建立該決策樹時,落在該葉子節點中的樣本集合中各個類別的樣本所佔的比例,如第一棵樹中給出的葉子節點的例子,落在該節點上的一共有9個樣本,其中有2個方塊樣本,4個橢圓樣本,和3個三角形樣本。因此該葉子節點記錄的 class vector 為 [ 0.2, 0.5, 0.3]。
一個樣例 x 進入森林中,在第一棵樹中按決策樹規則走,最後落在的葉子的 class vector 為[0.2, 0.5, 0.3],在第二棵樹中得到的 class vector 為 [0.3, 0.4, 0.3], 在第三棵樹中得到的 class vector 為 [1.0, 0 , 0 ],所以最終整個森林得到的 class vector 為各棵樹上得到的 class vector 的平均值,即【0.5,0.3,0.2】。
四個森林得到的結果串聯起來,同時原始輸入的特徵也串聯在這四棵樹的特徵後,將這些特徵傳入下一層
在瀑布層次後,用一個總的驗證集衡量瀑布的性能,不斷增加瀑布的層次,直到驗證集上的性能不再提升,這也是文中說的自適應的森林層次的實現方式。
注意:為了避免過擬合,每個森林中 class vector 的產生採用了 k 折交叉驗證的方法,具體來說,假設樣本有 k 個, 觀察針對第k個樣本的class vector 的生成, 先把第一個樣本扔出訓練集,用剩下的 k - 1 個樣本訓練整個森林(其中包含第k個樣本),此時得到的森林對第k個樣本輸出一個 class vector。然後將第二個樣本扔出訓練集,用剩下的 k - 1個樣本訓練森林,此時得到的森林對第 k 個樣本仍然輸出一個 class vector,。。。依次,每個樣本被用作訓練集中樣本的數量為(k - 1)次,產生 k - 1 個 class vector,取這些 class vector 的平均值作為該森林對該樣本最終輸出的 class vector。(這個部分 我還沒理解透!!!!)
Multi-Grained Scanning 演算法說明:

整體流程:

推薦閱讀:
※論文導讀 | TFX:基於TensorFlow可大規模擴展的機器學習平台
※Andrew Ng對 Geoffrey Hinton 的採訪:致敬老爺子的一路堅持!
※揭開機器學習的面紗
※李宏毅機器學習2016 第三講 梯度下降
TAG:机器学习 | 深度学习DeepLearning |
