Try   HackMD

Gradient Boosting

簡介

注意

此篇筆記是嘗試將 Gradient Boosting 那些艱澀難懂的數學式,應用在實際例子上(迴歸與分類),建議先看參考資料,瞭解什麼是 Gradient Boosting 再來看這篇會比較有心得(吧

STEP 0-定義損失函數並推導其梯度

根據任務性質,定義個可微分的損失函數:

重點

L(y, h(x))

給定已經定義好的損失函數,推導其在

h(x) 的梯度(gradient):

重點

h(x)L(y, h(x))

STEP 1-初始化基準模型

初始化第

0 個模型
h0(x)
,通常稱為 base learner。該模型很簡單,不論輸入什麼,它只輸出一個固定值
γ
。而該值必須最小化總樣本損失:

重點

h0(x)=argminγn=1NL(yn,γ)

實際上,我們會將損失函數在

γ 的梯度加總起來並設為
0
,推導出
γ

重點

n=1NγL(yn, γ)=0

STEP 2-依序建立 T 個模型

初始化好基準模型後,接下來就是依序建立

T 個模型,疊加在前個模型之上。以下的步驟都是給定我們正在建立第
t
個模型。

STEP 2.1-計算樣本負梯度(虛擬殘差)

給定前個模型

ht1(x),計算每個樣本的負梯度
rtn

重點

rtn=[h(xn)L(yn, h(xn))]h(x)=ht1(x)    n=1, , N

rtn 通常又被稱為虛擬殘差(pseudo residual),後續的實際例子會更瞭解其內涵。

STEP 2.2-根據樣本負梯度(虛擬殘差)建立模型

以輔助資料集

{(xn, rtn)}n=1N ,建立第
t
個模型
ht(x)
,用來預測虛擬殘差
rtn
。如此一來,該模型就正朝著正確的方向更新其輸出值了。

STEP 2.3-計算模型輸出值

假設模型訓練完成後會有

Kt 個葉節點
{Rtk}k=1Kt
。那麼接下來就是計算這些葉節點的輸出應該要是多少。計算每個葉節點的輸出值
γtk
,負責預測
rtn

重點

γtk=argminγxn  RtkL(yn, ht1(xn)+γ)    k=1, , Kt

實際上,我們會將損失函數在

γtk 的梯度加總起來並設為
0
,推導出
γtk

重點

xn  RtkγtkL(yn, ht1(xn)+γtk)=0    k=1, , Kt

STEP 2.4-更新模型

重點

ht(x)=ht1(x)+νk=1KtγtkI[xRtk]

STEP 3-產出最終模型

重點

H(x)

迴歸(Regression)任務

目前還沒整理,但這篇文章已經有很完整的介紹了。

STEP 0-定義損失函數並推導其梯度
STEP 1-初始化基準模型
STEP 2-依序建立 T 個模型
STEP 2.1-計算樣本負梯度(虛擬殘差)
STEP 2.2-根據樣本負梯度(虛擬殘差)建立模型
STEP 2.3-計算模型輸出值
STEP 2.4-更新模型
STEP 3-產出最終模型
STEP 3-產出最終模型

分類(Classification)任務

在分類任務中使用梯度提升樹,會借用到 Logistic 迴歸的理論。

STEP 0-定義損失函數並推導其梯度

首先,分類任務的梯度提升樹的損失函數定義如下:

重點

L(y,h(x))=(ylog(σ(h(x)))+(1y)log(1σ(h(x))))

其中

σ(z)=11+ez

可以看得出來,就是 Logistic 迴歸的 negative log likelihood。

實際上,上述損失函數也可以簡化為以下兩種形式(省略推導過程):

L(y,h(x))=((y1)h(x)log(1+eh(x)))=(yh(x)log(1+eh(x)))

透過簡化過後的損失函數,我們可以更容易推導出其在

h(x) 的梯度(省略推導過程):

重點

h(x)L(y, h(x))=(y11+eh(x))=(yσ(h(x)))

可以觀察到,結果是實際值(

0
1
)減去預測機率值(介於
0
1
)再加上負號。

STEP 1-初始化基準模型

初始化基準模型

h0(x)
h0(x)=argminγn=1NL(yn,γ)=argminγn=1N(ynγlog(1+eγ))

實際上,我們會將損失函數在

γ 的梯度加總起來並設為
0
,推導出
γ

n=1NγL(yn, γ)=0n=1N(ynσ(γ))=0

重點

γ=log(Nynyn)=log(odds)

可以看到,最小化損失函數的基準模型,固定會輸出

log(odds),非常容易計算。

STEP 2-依序建立 T 個模型

初始化好基準模型後,接下來就是依序建立

T 個模型,疊加在前個模型之上。以下的步驟都是給定我們正在建立第
t
個模型。

STEP 2.1-計算樣本負梯度(虛擬殘差)

第一步就是計算每個樣本的虛擬殘差,定義如下:

rtn=[h(xn)L(yn, h(xn))]h(x)=ht1(x)    n=1, , N

推導後結果如下所示:

重點

rtn=ynσ(ht1(xn))    n=1, , N

rtn 為實際值減去前個模型
ht1(x)
的預測機率值,可以理解成殘差(residual),但通常被稱為虛擬殘差(pseudo residual),因為會隨著不同的損失函數而變,有時候可能並沒有這麼好的直覺。

STEP 2.2-根據樣本負梯度(虛擬殘差)建立模型

以輔助資料集

{(xn, rtn)}n=1N ,建立第
t
個模型
ht(x)
,用來預測虛擬殘差
rtn
。如此一來,該模型就能朝著正確的方向更新其輸出值了。

STEP 2.3-計算模型輸出值

假設訓練完成後會有

Kt 個葉節點
{Rtk}k=1Kt
。接下來就是計算每個葉節點的輸出值
γtk
,負責預測
rtn

γtk=argminγxn  RtkL(yn, ht1(xn)+γ)    k=1, , Kt

這裡我們並不會「直接」將上述的損失函數在

γ 的梯度加總起來並設為
0
,推導出
γtk
,如果這麼做,式子將會變得很複雜。

取而代之的是,我們會先將損失函數以二階泰勒公式展開:

重點

L(y, h(x)+γ)L(y, h(x))+h(x)L(y, h(x))γ+122h(x)2L(y, h(x))γ2

接著,再求展開後的損失函數在

γ 的梯度:

重點

γL(y, h(x)+γ)h(x)L(y, h(x))+2h(x)2L(y, h(x))γ

再來,才跟過去一樣,將損失函數在

γtk 的梯度加總起來並設為
0
,推導出
γtk

xn  RtkγtkL(yn, ht1(xn)+γtk)=0    k=1, , Ktγtk=xnRtk(ht1(xn)L(yn, ht1(xn)))xnRtk(2ht1(xn)2L(yn, ht1(xn)))    k=1, , Kt

重點

γtk=xnRtkrtnxnRtk[σ(ht1(xn))(1σ(ht1(xn)))]    k=1, , Kt

將損失函數經由泰勒公式展開後,能簡化

γtk 的計算,結果也相當容易理解,分子是樣本的虛擬殘差相加,而分母則是樣本在前個模型的「預測成功機率值」乘上「預測失敗機率值」,再相加。

STEP 2.4-更新模型

重點

ht(x)=ht1(x)+νk=1KtγtkI[xRtk]

STEP 3-產出最終模型

重點

H(x)={1if  σ(hT(x))threshold0o.w.

參考資料

tags: ML