1. 程式人生 > >GBDT與梯度的理解

GBDT與梯度的理解

GBDT 全稱為 Gradient Boosting Decision Tree。顧名思義,它是一種基於決策樹(decision tree)實現的分類迴歸演算法不難發現,GBDT 有兩部分組成: gradient boosting, decision tree。Boosting 作為一種模型組合方式,與gradient descent 有很深的淵源,它們之間究竟有什麼關係?同時 decisiontree 作為一種 base weak learner,又是如何通過 boosting 組裝成一個強分類器?本文就通過回答這兩個問題來深入瞭解下 GBDT 的“面子”和“裡子”。 

  • Gradient Descent: method of steepest descent 

    梯度下降作為求解確定可微方程的常用方法而被人所熟知。它是一種迭代求解過程,具體就是使解沿著當前解所對應梯度的反方向迭代。這個方向也叫做最速下降方向。具體推導過程如下。假定當前已經迭代到第 k 輪結束,那麼第 k+1 輪的結果怎麼得到呢?我們對函式 f 做如下一階泰勒展開:

    為了使得第 k+1 輪的函式值比第 k 輪的小,即如下不等式成立。 

    則只需使: 

    按照這樣一直迭代下去,直到 f(xk)=0,  xk+1=x函式收斂,迭代停止。由於在做泰勒展開時,要求

xk+1x足夠小。因此,需要γ比較小才行,一般設定為 0~1 的小數。

    什麼?你沒聽過這個 γ 那我說它的另一個名字你保準知道:“學習率(learning rate)”。你終於知道為什麼學習率要設定的比較小才行了吧。

    順帶提一下,Gradient Descent 是一種一階優化方法,為什麼這麼說呢?因為它在迭代過程中不需要二階及以上的資訊。如果我們在泰勒展開時,不是一階展開,而是二階展開。那對應的方法就是另一個被大家所熟知的可微方程求解方法:Newton Method,關於牛頓法的詳細內容,我們會在後續文章介紹。

  • Boosting: Gradient Descent in functional space 

    Boosting 一般作為一種模型組合方式存在,這也是它在 GBDT 中的作用。那Boosting 與 gradient descent 有什麼關係呢?上一節我們說到 gradient descent 是一種確定可微方程的求解方法。這裡的可微有一個要求,就是說上文中的損失函式 f 針對模型 x 直接可微。因此模型x可以根據梯度迭代直接求解。而這種損失函式針對模型直接可微是一個很強的假設,不是所有的模型都滿足,比如說決策樹模型。現在我們回到第一節,將f(x)寫的更具體一點:

f(x)=l(h(x,D),Y)

其中 D 為資料特徵;Y 為資料 label;h 為模型函式,解決由 D->Y 的對映,x為模型函式引數,即通常我們說的模型;l 為目標函式或損失函式。關於他們之間的關係,請參考

    以邏輯迴歸為例, x為權重向量, h模型函式展開為:


    目標函式l展開為: 


    我們發現函式l對h可微,同時h對x可微,因此l對x可微。因此,我們可以通過 gradient descent 的方式對 x 進行直接求解,而不用將 h 儲存下來。然而,如果 l 對 h 可微,但 h 對 x 不可微呢? 我們仍按照第一節的方法先對l 進行泰勒展開,只不過不是針對 x,而是對 h。為了簡單起見,我們省略 D, Y。 


    其中: 

    按照第一節的邏輯,我們不難得出如下迭代公式: 

    這裡的H(Xt)為T時刻之前所有學習得到的迴歸樹集合,由此可見,GBDT新生成的一顆迭代樹就是來擬合當前損失函式的梯度,作為新的一個迴歸樹,新增到模型集合中,得到H(Xt+1),因此gbdt每一顆樹就是通過當前模型損失函式的梯度值。

但別忘了,我們的目的不是求 h,而是 x。由於 h 對 x 不可微,所以 x 必須根據資料重新學習得到。而此時我們重新學習 x 的目標已經不是源目標 Y,而是原損失函式 l 在當前 H 處的梯度,即:

 

    這個重新學習 x 的過程正是每個 base weak learner 所做的事情。而這種通過 weak learner 擬合每一步迭代後的梯度,進而實現 weak learner 組合的方式,就是 Boosting。又由於我們在求導過程中,損失函式 l 沒法對模型 x 直接求導,而只能對模型函式 h 求導。因此 Boosting 又有一個別名:“函式空間梯度下降“。

    此外,你可能會聽過 boosting 的可加性(additive)。這裡順便提一句,可加性指的是 h 的可加,而不是 x 的可加。比如 x 是決策樹,那兩棵決策樹本身怎麼加在一起呢? 你頂多把他們並排放在一起。可加的只是樣本根據決策樹模型得到的預測值 h(x,D)罷了。 

  • Decision Tree: the based weak learner 

    上一節最後我們提到,Boosting 的本質就是使用每個 weak learner 來擬合截止到當前的梯度。則這裡的 D,還是原來資料中的 D,而 Y 已經不是原來的 Y了。而GBDT 中的這個 weak learner 就是一棵分類迴歸樹(CART)。因此我們可以使用決策樹直接擬合梯度: l(H(xt))此時我們要求的x就變成了這樣一棵有 k 個葉子節點的、使得如下目標函式最小化的決策樹: 


    其中T為目標l(H(xt)),W為每個葉子節點的權重,L為葉子節點集合。容易求得每個葉子節點的權重為歸屬到當前葉子節點的樣本均值。即 :


    每個樣本的預測值即為其所歸屬的葉子節點的權重,即h(xt+1

  • 後記 1

    通過本文不難發現其實 GBDT 與邏輯迴歸的本質差別只在於 h 的不同。如果 h函式中的 x 為決策樹,預測值通過決策樹預測得到,那就是 GBDT;如果將 h 中的x變為一個權重向量,預測值為x與d的內積,則演算法就變成了邏輯迴歸(LR)。

    因此本文介紹的內容可以看做是一個相對通用的演算法框架,只要根據不同的業務和資料,設計對應的 weak learner 及損失函式即可。在實際應用中要把握好其中“變”與“不變”的部分。