Gradiant Boosting Machine

  最近看了Friedman的關於梯度提升算法的論文,記錄一下。
這裏寫圖片描述

1 函數估計

  在機器學習領域,算法就是利用數據去估計一個函數或就是一個“預測學習”問題。用訓練數據得到一個估計的F*(x),這個函數將x映射到y,然後我們通過最小化一個損失函數,求出我們想要的F(x),即:

F=argminFEy,xL(y,F(x))=argminFEx[EyL(y,F(x))|x](1)

L(y,f(x)) 包括軍方誤差(yF)2 ,binomial log-likelihood(logic regression)等
常見的套路就是限定F(x) 是某個參數化的函數空間裏的一個函數F(x;P)P={P1,P2} 是一個有限集合,這裏我們只考慮加法模型
F(x;{βm,am})=m=1Mβmh(x;am)(2)

公式(2)其實是很多算法的核心思想,如神經網絡、支持向量機等,這裏只討論h(x;am) 是一個小的迴歸樹。其中的參數包括分割變量、分割位置以及葉子節點的值。

1.1 數值優化

  通常,選擇一個參數化的模型令

P=argminPΦ(P)(3)

這裏
Φ(P)=Ex,yL(y,F(x;P)) (4)

最後我們求得的最優函數就是:F(X)=F(x;P) ,也就是我們最終想要擬合出來的模型。數值優化的方法是用來求解(3),而最終的參數P對應的結果可以表達成
P=Mm=0pm 的形式。

1.2 梯度下降

  梯度下降是最簡單數值優化的方法之一,而對於(3)式來說,當前的梯度爲

gm=gjm=[Φ(P) pj]p=pm1

其中
Pm1=m1i=0pi


pm=ρmgm


ρm=argminρΦ(Pm1ρgm)(5)

用有限的數據來估計模型


按照式(1)則有
{βm,amM1}=argminNi=1L(yi,βmh(xi;am))(6)
在這種情況確實得到的是最優解,但是複雜度太高,很難求解。所以可以選擇“貪心”算法。即對於m 1,2, M
(βm,am)=argminβ,ai=1NL(yi,Fm1(xi)+βh(xi;a))(7)

然後
Fm(x)=Fm1(x)+βmh(xi;am)(8)

在機器學習中,函數h(x;am) 被稱爲弱學習器或者基於學習器,而這個迭代的過程被稱爲“boosting”。給一定一個Fm1(x) ,我們就可以用之前所述的梯度下降法,來求解β 以及h(x;a) .。給定特定的lossL(y,F)h(x;a) ,式(7)的解式很難求的。給定一個Fm1(x) , βmh(x;am) 可以被看成最佳的貪心算法,對F(x) 的估計。
  求出損失函數在每一個訓練數據的梯度,得出一個N維的向量。
gm(xii)={L(yi,F(xi))F(xi)}F(x)=Fm1(x)

但是這樣求出來的梯度不能泛化的其他的數據上。一個方法是選擇一個h(x;am) 使得它求得的hm={h(xi;am)} 儘可能的與gm 平行
am=argmina,β[gm(xi)βh(xi;a)]2

求出a參數向量之後,就可以求出另外一個參數
βm=argmini=1Nl(yi,Fm1(xi)+βh(xi;am))

然後就可以更新
Fm(x)=Fm1(x)+βmh(x;am)

僞代碼如下:
這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章