CTR預估[九]: Algorithm-GBDT: Boosting Trees
作者:@三瘋蘭尼斯特 && @Ainika Peng
時間:2017年11月
出處:https://zhuanlan.zhihu.com/p/31607501
聲明:版權所有,轉載請聯繫作者並註明出處。
1.3.4 Boosting Trees
1.3.4.1 Regression Tree
Regression Tree本質上是一組線性劃分空間生成的規則的集合。這裡暫不考慮regularization。
形式化地定義一棵樹
- 這和直接定義任意 從屬 得到值 是等價的:
求解參數 :
直接優化求解參數是困難的,一般都是用近似估計:
- Finding given
- 對於Regression問題,一般用落在region中的樣本均值
- 對於0-1 loss的classification問題,用落在region中的label眾數
- Finding
- 一般都是用top-down recursive策略來優化
最優劃分和次優greedy劃分示意圖如下 -- greedy總是在父空間上二分的
1.3.4.2 Aside: Loss Function
Loss 函數衡量預估值 和真值 之間的差異。針對有監督學習中常見的classification和regression問題,loss有如下區別:
- Regression: loss雙向遞減 -- 對於和真值的差異,無論是大於真值還是小於真值都是類似的;
- Classification: loss單向遞減 -- 對於negative margin比positive margin要有更大的懲罰力度。
Classification -- 0-1 Loss
Classification問題中,最直觀的loss是misclassification loss -- 預估值和真值相同為0不同為1,所以又稱0-1 loss
這裡 表示margin,其中 用來分割超平面兩邊的不同label。
但0-1 loss不是凸函數,直接優化困難,一般都用單調連續凸函數逼近0-1 loss。
Classification -- Binomial Deviance/Log Loss
在#1.1.2 中推導過,最小化log loss和最大化log likelihood等價,令
, log likelihood和之前LR中推導一致
log loss為
註:兩者等價推導需要注意只在 情況下
此時
Classification -- Exponential Loss
Exponential Loss 可以認為是在總體(population,無窮數據集)上和log-loss等價的loss,因為
和log-loss的總體期望是一致的。
但當數據不是無窮時, Exponential Loss比log-loss對於誤分類的懲罰更重(loss值更大):前者是指數增長,後者是線性增長。
本身不是任何對數似然,但其在additive model下有優良的計算特性
Regression -- Absolute Error Loss/Squared Error Loss/Huber Loss
Regression的情況和Classification中對比Log-loss和Exponential Loss有些相似
從統計學的觀點出發,Absolute Error Loss有更好的統計特性,對錯誤 的懲罰更合理,更robust;但 Squared Error Loss 的計算性質更好。
Loss Comparison
1.3.4.3 GBM with Trees
GBM演算法框架如下
Algorithm: Gradient Boost Machine
# 賦初始值 For m = 1 to M do:- # 求梯度 - # 求方向- # 求步長 - # 迭代stage
註:GBM中賦初始值的部分,即取Loss對F求梯度=0,以log-loss為例
一組Boosting Tree即定義base learner=Tree的boosting
由於參數 之間不相關,求解參數 可以簡化為求解參數
如果是Squared Error Loss,即最小化殘差residual,最優值為region中殘差的均值
如果是Absolute Error Loss,即擬合當前殘差的sign, 最優值為region中殘差的中位數
如果是Log Loss,沒有封閉解,需要用牛頓法近似
如果是Exponential Loss,最優值為region中的加權對數幾率
其中權重為
1.3.4.4 XgBoost
前面#1.3.3 中對比了Friedman和陳天奇處理Loss上的區別。陳天奇的定義Objective中直接加入了正則項
定義:
- Regression Tree Leaf 節點數:
- 如樣本 從屬leaf node , 是leaf node對應的權重
定義Regression Tree的Regularization
正則相當於控制了
- 樹的size不要過大
- leaf node權重不要過大
使用stagewise之後,第 步
其中使用了如下參數替代化簡
- Loss 一階梯度:
- Loss 二階梯度:
- 按照leaf node聚組的一階梯度
- 按照leaf node聚組的二階梯度
因為 是關於 的二次項形式,可以解得
上訴最優解帶入前述Obj, XgBoost最終Obj化為
Tree Generation and Split Finding
XgBoost中一個非常棒的特性是:使用和Objective直接相關的指標進行split。在實踐中,樹生長使用的是greedy strategy方法。
如果某個node上擁有的數據 被某個split 分割成兩棵子樹 & ,loss reduction為
上述可以理解為 「左子樹 + 右子樹 - 不分割情況 - 分割產生的多1個leaf的複雜度」
有了分割標準,如何尋找分割點split?
最簡單的方法,窮舉所有split
Solution 1: Exact Greedy
Methods:
- for k in every_feature:
- for j in every_split of feature k:
- find split that max gain
Flaw:
- data太大效率低,可能無法放入內存
- 並行化會出問題
Solution: 近似演算法近似,縮小分割點candidate集合
- 如果開始有1M個分割點無法放入內存,通過演算法縮減到1k個即可放入內存
- 可以在建樹之前(global)分一次,也可以每個節點split的時候分一次(local)
近似演算法需要一個方法可以縮減候選集
XgBoost中Objective推導中#4步
可以等價為Weighted Square Loss,其中
於是縮小候選集的過程可以認為是一個加權分位數的過程(Weighted Quantile Sketch)
Weighted Quantile Sketch
整個Candidate尋找過程可以形式化表述為
對於加權&不加權數據如下,縮小candidate過程類似於取 的b等分過程,之後通過反查對應Y值得X值來確定candidate,如果直接對應的X值沒有,則通過計算X更接近左右哪個點來確定
定義:
- 所有值的權重之和
- 小於當前值所對應的w之和
- 包含當前值所對應的w之和
Methods:
- init
- For in sorted :
- init
- For in :
- if :
- return
- if :
- return
- Find suits
- if
- return
- else
- return
假設有如下example
下圖為取累計頻率(無權重)和累計權重的三等分點,可以看出,實例中累計weight的更接近中心(3)
上述例子中的數據如下,
假設三等分即 ,如要求 的點, , ,在20和22.5中和20更接近,則返回20對應的
1.3.4.5 XgBoost並行化
Boosting框架下,tree之間不可並行,可能的並行策略有
Boosting演算法各Stage之間相互依賴,無法並行,只能在Stage內尋找並行化的可能性
- 1. 按行並行化,將樣本按行分成N份,分別在N個節點上做計算;
- 2. For every Stage(Tree)
- 1. 在0號節點上對特徵隨機採樣,生成建立一棵樹需要用到的特徵,並分發到N個節點上;
- 2. 在0號結點上維護每一維採樣特徵所有可能的特徵值;
- 3. 將每一維特徵的每一個可能的特徵值分發到N個節點上;
- 4. 每一個節點並行計算該節點上所有樣本與分發得到的特徵值的比較結果,分割成左右子樹,並計算增益;
- 5. 歸併所有節點的增益,在0號結點得到每一個特徵在每一個特徵值的增益(f,v,incr);
- 6. 在0號結點上找出最大的(f,v,incr),並作為本次的最佳裂點,分發到N個節點上;
- 7. N個節點將樣本分割成左右子樹;
- 8. 對左右子樹繼續上面過程,直到葉子節點數目滿足要求。
GBDT組織方式和傳送門:
- GBDT的前序兩篇:
- CTR預估[七]: Algorithm-GBDT: Preliminary
- Ensemble方法bagging和boosting的比較:GBDT所屬boosting演算法,說GBDT之前需要對boosting是什麼有個了解
- Aside: bias and variance: bias/var tradeoff是機器學習永恆的話題,而bagging和boosting的分析,尤其是後面的RF依然會用到
- CTR預估[八]: Algorithm-GBDT: Parameter Space Estimation and Function Space Estimation
- 函數空間和參數空間優化:GBDT本質上是從函數空間優化開始的,所以在講具體的boosting trees之前,從兩者的比較開始更佳 -- 注意,本節雖然全部為推導,但個人認為對於理解GBDT至關重要,否則更像是無根之木 (傳送門:)
- Boosting Trees: GBM 和 GBDT; GBDT 的核心推導 (傳送門:CTR預估[九]: Algorithm-GBDT: Boosting Trees)
- Aside: Random Forest; 作為bagging的優秀代表,後面比較GBDT+LR 而非 RF+LR會用到 (傳送門:CTR預估[十]: Algorithm-Random Forest)
推薦閱讀:
※計算廣告和機器學習的興起
※SSP能夠給內容商帶來的好處有哪些?與AD Network的本質區別是什麼?
※Online方式點擊率預估時學習率不斷變小,是否可能追不上目標函數的變化?
※如何用機器學習做廣告反作弊?
※廣告點擊預估用深度學習怎麼搞?