《LightGBM: A Highly Efficient Gradient Boosting Decision Tree》论文笔记
1 簡介
本文根據2017年microsoft研究所等人寫的論文《LightGBM: A Highly Efficient Gradient Boosting Decision Tree》翻譯總結。
Gradient Boosting Decision Tree (GBDT)已是一個流行的機器學習方法,也存在一些實施,例如XGBoost和pGBRT。可以進行多類別分類、點擊率預測、學習排名等應用場景。但他們的效率和可擴展性還是不太滿意,尤其是針對高維度數據和大數據時。其中一個主要原因是:對于每個特征,他們需要掃描所有的數據實例來評估所有可能分割點的信息增益,這非常花費時間。
為了解決這個問題,我們引入了兩項技術:Gradient-based One-Side Sampling (GOSS) and
Exclusive Feature Bundling (EFB,排除在外特征的捆綁打包). 采用GOSS和EFB的GBDT算法,我們叫做LightGBM。
采用GOSS,我們可以排除相當比例的小梯度信息的數據實例,僅使用剩下的數據實例評估信息增益。擁有大梯度的數據實例在信息增益計算中扮演重要的角色。
即GOSS用來減少訓練數據量。
采用EFB,我們可以把互斥的特征(他們很少同時擁有非零值)打包在一起,來減少特征的數量。尋找互斥特征的最優打包是NP-hard(NP是指多項式復雜程度的非確定性問題non-deterministic polynomial,縮寫NP)的,但一個貪婪的算法可以完成很好的近似比率。
即EFB用來減少特征維度。
LightGBM在完成相同正確率的情況下,相比傳統的GBDT有20倍以上的速度。文中主要將LightGBM和XGBoost對比。
2 預備知識
2.1 GBDT及其復雜度分析
GBDT是決策樹的集成算法,它會按順序訓練。在每個迭代中,GBDT通過擬合負梯度(殘差)來學習決策樹。
GBDT最主要的時間花費是學習決策樹,在學習決策樹時,最花費時間的地方是找到最佳分割點。其中一個流行的尋找分割點方法是預排序算法,它會在預排序好的特征值上迭代所有可能的分割點。這種算法簡單,可以找到最優的分割點,但是它在訓練速度和內存使用上效率不高。
另一個流行的算法是基于直方圖的算法。該算法將連續的特征值分割到一些離散的箱體中,然后在訓練中使用這些箱體來構建特征直方圖。該算法在訓練速度和內存使用上更加有效。LightGBM將擴展此方法。
基于直方圖的算法如上圖,其基于特征直方圖尋找最佳分割點。它花費O(#data * #feature)來構建直方圖,花費O(#bin * #feature)進行分割點查找。因為#bin通常比#data小很多,所有構建直方圖決定計算的復雜度,如果我們減少#data或者#feture,就可以很大的提升GBDT訓練速度。
2.2 相關工作
Scikit-learn 、 gbm in R是預排序算法;
pGBRT是基于直方圖的算法;
XGBoost支持預排序和基于直方圖。XGBoost優于Scikit-learn 、 gbm in R、pGBRT。本文主要是將LightGBM與XGBoost對比。
為了減少訓練數據的大小,常用的方法是下采樣數據。例如如果數據實例的權重小于某個閾值,就過濾掉。SGB(Stochastic gradient boosting)使用一個隨機分組在每個迭代中訓練弱學習者。采樣比例可以在訓練過程中動態調整。但是除了SGB,其他算法是基于AdaBoost的,不能直接應用于GBDT,因為沒有天然的權重可以用于GBDT的數據。雖然SGB可以應用于GBDT,但它會損害準確率,不是一個好的選擇。
同時,對于減少特征維度,自然也是過濾弱的特征,通常是通常主成分分析或者投影追蹤(projection pursuit)。但是這些方法都假設特征值們擁有足夠的富裕度,這在實際中也許并不總是這樣。特征通常是有他們各自獨特的貢獻,去除特征中的任何一個都可能影響訓練的準確度。
實際場景中大數據通常是稀疏的。基于預排序的GBDT可以忽略那些零值,減少訓練成本。但是基于直方圖算法的GBDT沒有有效的稀疏優化解決方案,因為其需要取回特征箱體值,無論特征值是零或非零。故基于直方圖算法的GBDT可以有效利益這種稀疏特性。
3 GOSS (Gradient-based One-Side Sampling)
3.1 算法描述
我們發現在GBDT中,每個數據實例的梯度對數據采樣提供了有用的信息。
GOSS會保有帶有大梯度的數據實例,而對于小梯度的數據實例進行隨機采樣。為了補償對數據分布的影響,在計算信息增益時,GOSS對于小梯度數據實例引入了一個常數乘數。如下圖算法所示。GOSS首先根據梯度絕對值對數據實例排序,然后選擇前面a100%的數據。接著從剩下的數據中隨機采樣b100%的實例。上面完成后,GOSS在計算信息增益時,利用一個常熟因子(1-a)/b 來放大采樣的小梯度數據。這樣,我們就可以更加關注訓練不足的實例,而不會太改變原始數據的分布。
3.2 理論分析
公式較多。對于GBDT,信息增益通常是通過分割后的方差衡量的。
4 EFB-Exclusive Feature Bundling
高維數據通常是稀疏的。在一個稀疏的特征空間,許多特征是互斥的,即他們不會同時取得零值。我們可以把排除在外的特征打包成一個特征。通過設計一個仔細小心的特征掃描算法,我們可以將不同特征打包后,形成一樣的特征直方圖。這樣特征直方圖創建的計算復雜度從O(#data * #feature) 下降到 O(#data * #bundle)。這樣在不損害準確性的情況下,提供GBDT訓練速度。
有兩個事情需要考慮,一是哪些特征要被打包在一起,二是如何構建這些打包。第一件事是NP-hard的,在多項式時間內找不到一個準確的解決方法。
EFB組合了許多稀疏特征,如one-hot 編碼特征、不明顯的除外特征。
5 實驗結果
所有實驗采用多線程,線程數量是16。
XGBoost:xgb_exa(pre-sorted algorithm) and xgb_his (histogram-based algorithm)。
EFB (called lgb_baselline)。
Lgb_baseline: LightGBM without GOSS and EFB。
從下別表格2可以看出來LightGBM是最快的算法,GOSS可以提高2倍的速度,EFB是一個非常有效的算法,可以提升直方圖算法中稀疏屬性的利用,速度提升也很明顯。
總結
以上是生活随笔為你收集整理的《LightGBM: A Highly Efficient Gradient Boosting Decision Tree》论文笔记的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Mesh 无线自组网系统
- 下一篇: 移动端音乐WebApp