來源 | AI小白入門
作者 | 文傑
編輯 | yuquanle
原文鏈接
本文介紹了提升樹模型中的梯度提升樹算法GBDT (Gradient Boosting Decision Tree) 。首先介紹了提升樹通過擬合殘差來提升學習器的設計思想。然後介紹了基於梯度提升的GBDT算法,核心在於學習器本身不再擬合殘差,而是學習器擬合殘差的一階梯度,權重擬合殘差的一階係數。最後介紹了GBDT對應分類和迴歸場景的學習流程。
提升樹
提升樹GBDT同樣基於最小化第m個學習器和前m−1個學習器累加起來損失函數最小,提升樹採用殘差的思想來最小化損失函數,將投票權重放到學習器上,使得基學習器的權重都爲1。
GBDT將損失用一階多項式擬合,基學習器擬合梯度,學習器的權重爲一階多項式的係數。
在前面的Adaboost中,我們需要學習M個基學習器,賦予不同的權重組合得到最後的強學習器。它是基於M個基學習器組合而成。而提升樹中,直接將他們以“殘差(損失函數的殘差)”的形式累加起來,故也爲加法模型,而且是逐步累加。
提升樹模型如下:
fM(x)=m=1∑MT(x;θm)
其中,T(x,θm)表示決策樹,θm爲決策樹的參數,M爲樹的個數。
提升樹優化過程:
-
輸入:訓練集{(xi,yi)}i=1N,損失函數L(y,f(x))
-
輸出:提升樹fM(x)
-
初始化f0(x)=0
-
對m=1,2,...M
2.1 計算殘差:
rmi=yi−fm−1(xi) ,{1,2,…,N}
2.2 擬合殘差rmi學習基學習器T(x;θm),訓練集爲{(xi,rmi)}i=1N
2.3 更新模型:
fm(x)=fm−1(x)+T(x;θm)
-
得到最終的強學習器:
fM(x)=m=1∑MT(x;θm)
可以看出,提升樹本質與Adboost一致,也是最小化第m個學習器和前m−1個學習器組合的損失函數,不同的是提升樹採用決策樹作爲基學習器,採用殘差的思想使得每個決策樹的投票權重爲1。
GBDT
GBDT是基學習器採用的Decision Tree的Gradient Boosting方法。Gradient Boosting模型與Adaboost的形式一致,採用M個基學習器的線性組合得到最終模型:
fM(x)=m∑γmT(x;θm)
首先確定初始模型,定義初始基學習器f0(x),當模型迭代到第m步時:
fm(x)=fm−1(x)+γmT(x;θm)
通過最小化損失來確定參數θm的值:
argθmmini∑L(yi,fm−1(xi)+γmT(x;θm))
這裏有兩種理解Gradient Boosting的方式,從優化角度可以理解是採用梯度下降算法,T表示負梯度方向,γm爲步長。從模型角度我們可以理解爲損失函數一階多項式展開γmT(x,θm)+fm−1,而T表示一階信息,γm爲係數。
優化角度,保證損失函數在遞減:
L(yi,fm(xi))<L(yi,fm−1(xi))
爲了使得損失函數不斷減少,即梯度下降:
fm(xi)=fm−1(xi)+γm(−∂fm−1(xi)∂L(yi,fm−1(xi)))
將fm(x)=fm−1(x)+γmT(x;θm)代入上式有:
T(x;θm)=−∂fm−1(xi)∂L(yi,fm−1(xi))
所以Gradient Boosting 的算法流程如下:
-
輸入:訓練集{(xi,yi)}i=1N,損失函數L(y,f(x))
-
輸出:fM(x)
-
初始化f0(x)=0;
-
對m=1,2,...M:
2.1 計算梯度:
rmi=[−∂f(xi)∂L(yi,f(xi))]f(xi)=fm−1(x) ,{1,2,…,N}
2.2 擬合梯度rmi學習基學習器T(x;θm),訓練集爲{(xi,rmi)}i=1N;
2.3 根據梯度下降算法,計算學習器γm:
γm=argγmini∑L(yi,fm−1(xi)+γT(x;θm))
2.4 更新模型: fm(x)=fm−1(x)+γmT(x;θm)
-
得到最終的強學習器:
fM(x)=m=1∑MγmT(x;θm)
可以看出Gradient Boosting 是一個不斷基於殘差彌補的模型,目標不斷地減少Bais,而沒有關注Variance。它不像隨機森林的集成引入隨機性減少Variance的思想。
下面考慮決策樹爲基學習器的Gradient Boosting的方法GBDT,其在GB基礎上有兩點值得一提:
-
GBDT,採用決策樹作爲基函數將樣本劃分到固定數目J個決策區間Rmj,j=1,2..J,m=1,2..M;
-
在決策樹中決策函數採用指示函數I(x∈Rmj),梯度與步長的積直接放到γmj上。
下面給出GBDT迴歸和分類兩個問題的算法流程
GBDT 迴歸
-
輸入:訓練集{(xi,yi)}i=1N,xi∈Rn,y∈R,損失函數L(y,f(x))
-
輸出:fM(x)
- 初始時給出一個最優的偏置常數c,f0(x)=c:
f0(x)=argcmini∑L(yi,c)
- 對m=1,2,...M
a)計算梯度:
rmi=[−∂f(xi)∂L(yi,f(xi))]f(xi)=fm−1(x) ,{1,2,…,N}
b)擬合梯度rmi學習一個迴歸樹T(x;θm)=αI(x∈Rmj),產生J個決策區間Rmj,j=1,2..J;
c)對於決策區間j=1,2..J,計算γmj:
γmj=argγminxi∈Rmj∑L(yi,fm−1(xi)+γmjI(x∈Rmj))
d)更新模型: fm(x)=fm−1(x)+j=1∑JγmjI(x∈Rmj)
- 得到最終的強學習器:
fM(x)=m=1∑Mj=1∑JγmjI(x∈Rmj)
GBDT分類
考慮K分類問題,採用Softmax思想,將K類映射到K維。第m個決策樹的決策第k維的值爲fM,k(x),對輸出進行Softmax歸一化,可以得到k類的概率爲pm,k(x),K類的概率和∑kpm,k(x)=1,分類損失函數採用交叉熵損失。
pm,k(x)=∑l=1Kexp(fm,l(x))exp(fm,k(x)), k=1,…,K
似然函數爲:
L(yi,fm(xi))=k=1∏K[fm,k(xi)]yik
對數損失函數爲:
L(yi,fm(xi))=−k=1∑Kyiklogfm,k(xi)
由於Softmax將分類映射到K維,對應的基分類器和損失函數都是K維。因此算法流程中負梯度方向也是一個K維向量。
算法流程:
-
輸入:訓練集{(xi,yi)}i=1N,xi∈Rn,y∈R,損失函數L(y,f(x))
-
輸出:fM(x)
-
初始時f0,k(x)=0
-
對m=1,2,...M
2.1 對決策樹fm−1,k進行Softmax歸一化:
pm−1,k(x)=∑l=1Kexp(fm−1,l((x))exp(fm−1,k(x)), k=1,…,K
2.2 對k=1,2..K:
2.2.1 計算梯度:
rik=∂fm−1,k(xi)∂L(yi,fm−1(xi))=yik–pm−1,k(xi), i=1,2,…N
2.2.2 擬合梯度rik學習第m個決策樹T(x;θm)=αI(x∈Rmkj)在第k維產生的J個決策區間Rmkj,j=1,2..J:
rik=∂fm−1,k(xi)∂L(yi,fm−1(xi))=yik–pm−1,k(xi), i=1,2,…N
2.2.3 計算第m顆樹第k維在區間Rmj的參數γmkj:
γmkj=KK−1∑xi∈Rmkj∣rik∣(1−∣rik∣)∑xi∈Rmkjrik, j=1,2,...,
2.2.4 更新模型:
fm,k(x)=fm−1,k(x)+j=1∑JγmkjI(x∈Rmkj)
-
得到最終的強學習器:
fM(x)=m=1∑Mj=1∑JγmjI(x∈Rmj)
GBDT到此,可以看出Boosting的這些方法,都是前向分步加法模型,分類迴歸採用不同的損失函數,加法模型都是考慮學習M模型來不斷地減小損失函數,即第m個模型的學習是基於前m−1個模型組合起來最小化損失函數。
Adboost是基於最小化損失函數在導數爲0處取到,針對二分類問題導出樣本系數,決策器權重係數,決策樹。
提升樹是基於殘差思想最小化損失函數,使得決策樹的權重爲1。GBDT採用一階多項式來擬合殘差,進而導出梯度提升的思想。GBDT中γmTm存在冗餘項,在GBDT中用決策樹擬合梯度,γ來確定步長。
更多AI、NLP乾貨資源請關注公衆號:AI小白入門(ID: StudyForAI):