AdaBoost&GBDT(三)

GBDT

GBDT是Gradient Boosting Decision Tree的简称,其形式是决策树的加法模型。
f M ( x ) = ∑ m = 1 M T ( x ; Θ m ) f_M(x) = \sum_{m=1}^MT(x;\Theta_m) fM(x)=m=1MT(x;Θm)
其中 T ( x ; Θ ) T(x;\Theta) T(x;Θ)代表树模型,普遍使用的是CART树。

GBDT Regression

求解这个加法模型的方法即是上一节所提到的前向分步算法,于是我们自然要明确每一轮的损失函数的形式。GBDT并不指定损失函数的具体形式,对一般的损失函数 L ( y , f ( x i ) ) L(y,f(x_i)) L(y,f(xi)),在前向分步算法中第 m m m步的优化中,我们要建立回归树去拟合损失函数关于 f ( x ) f(x) f(x)的负梯度
r m i = − [ ∂ L ( y i ; f ( x ) ) ∂ f ( x ) ] f ( x ) = f m − 1 ( x i ) i = 1 , 2 , … , N r_{mi} = -\Bigg[\frac{\partial{L(y_i;f(x))}}{\partial f(x)}\Bigg]_{f(x) = f_{m-1}(x_i)} \quad i = 1,2,\ldots,N rmi=[f(x)L(yi;f(x))]f(x)=fm1(xi)i=1,2,,N

这是梯度提升名称的由来,也是本篇的重点,下面着重解析此处拟合负梯度的动机。

前向分步算法第 m m m步的本质优化目标可以写为
min ⁡ f ∑ i = 1 N L ( y i , f ( x i ) ) \min_{f}\sum_{i=1}^NL(y_i,f(x_i)) fmini=1NL(yi,f(xi))
f ( x ) f(x) f(x)拆分为 f m − 1 ( x ) + T ( x , Θ m ) f_{m-1}(x)+T(x,\Theta_m) fm1(x)+T(x,Θm),优化目标变为
min ⁡ Θ m ∑ i = 1 N L ( y i , f m − 1 ( x i ) + T ( x i , Θ m ) ) \min_{\Theta_m}\sum_{i=1}^NL(y_i,f_{m-1}(x_i)+T(x_i,\Theta_m)) Θmmini=1NL(yi,fm1(xi)+T(xi,Θm))
由于 L ( y , f ( x ) ) L(y,f(x)) L(y,f(x))在此处没有明确形式,我们无法像AdaBoost那样直接将 f m − 1 ( x ) f_{m-1}(x) fm1(x) T ( x , Θ m ) T(x,\Theta_m) T(x,Θm)分成独立的两部分,为达成这个目的,考虑 L ( y i , f m − 1 ( x ) + T ( x , Θ m ) ) L(y_i,f_{m-1}(x)+T(x,\Theta_m)) L(yi,fm1(x)+T(x,Θm))的麦克劳林(Maclaurin)公式
L ( y i , f m − 1 ( x i ) + T ( x i , Θ m ) ) ≈ L ( y i , f m − 1 ( x i ) ) + g i T ( x i , Θ m ) + 1 2 h i [ T ( x i , Θ m ) ] 2 L(y_i,f_{m-1}(x_i)+T(x_i,\Theta_m)) \approx L(y_i,f_{m-1}(x_i))+g_iT(x_i,\Theta_m)+\frac{1}{2}h_i[T(x_i,\Theta_m)]^2 L(yi,fm1(xi)+T(xi,Θm))L(yi,fm1(xi))+giT(xi,Θm)+21hi[T(xi,Θm)]2
其中 g i = [ ∂ L ( y i , f ( x ) ) ∂ f ( x ) ] f ( x ) = f m − 1 ( x i ) , g_i = \bigg[\frac{\partial{L(y_i,f(x))}}{\partial{f(x)}}\bigg]_{f(x) = f_{m-1}(x_i)},\quad gi=[f(x)L(yi,f(x))]f(x)=fm1(xi) h i = [ ∂ 2 L ( y i , f ( x ) ) ∂ ( f ( x ) ) 2 ] f ( x ) = f m − 1 ( x i ) h_i = \bigg[\frac{\partial^2{L(y_i,f(x))}}{\partial{(f(x))^2}}\bigg]_{f(x) = f_{m-1}(x_i)} hi=[(f(x))22L(yi,f(x))]f(x)=fm1(xi)

这时候,由于前向分步算法第 m m m步中, f m − 1 ( x i ) f_{m-1}(x_i) fm1(xi)是常值,于是优化问题可以做如下转化
a r g min ⁡ Θ m ∑ i = 1 N L ( y i , f m − 1 ( x i ) + T ( x i , Θ m ) ) ≈ a r g min ⁡ Θ m ∑ i = 1 N g i T ( x i , Θ m ) + 1 2 h i [ T ( x i , Θ m ) ] 2 arg\min_{\Theta_m}\sum_{i=1}^NL(y_i,f_{m-1}(x_i)+T(x_i,\Theta_m))\approx arg\min_{\Theta_m}\sum_{i=1}^Ng_iT(x_i,\Theta_m)+\frac{1}{2}h_i[T(x_i,\Theta_m)]^2 argΘmmini=1NL(yi,fm1(xi)+T(xi,Θm))argΘmmini=1NgiT(xi,Θm)+21hi[T(xi,Θm)]2

L ( T ( x i , Θ ) ) = g i T ( x i , Θ ) + 1 2 h i [ T ( x i , Θ ) ] 2 \mathcal{L}(T(x_i,\Theta)) = g_iT(x_i,\Theta)+\frac{1}{2}h_i[T(x_i,\Theta)]^2 L(T(xi,Θ))=giT(xi,Θ)+21hi[T(xi,Θ)]2,对 T ( x i , Θ ) T(x_i,\Theta) T(xi,Θ)求偏导并使其为 0 0 0,则有
∂ L ( T ( x i , Θ ) ) ∂ T ( x i , Θ ) = g i + h i T ( x i , Θ ) = 0 \frac{\partial{\mathcal{L}(T(x_i,\Theta))}}{\partial{T(x_i,\Theta)}} = g_i + h_iT(x_i,\Theta) = 0 T(xi,Θ)L(T(xi,Θ))=gi+hiT(xi,Θ)=0

T ( x i , Θ ) = − g i h i T(x_i,\Theta) = -\frac{g_i}{h_i} T(xi,Θ)=higi
而我们一般假定 L ( y i , f ( x i ) ) L(y_i,f(x_i)) L(yi,f(xi))是一个凸函数,此时 h i > 0 h_i>0 hi>0,通常将 h i h_i hi设置成 1 1 1去扮演梯度下降中学习率的角色,于是我们知道了前向分步算法中第 m m m步的近似最优解就是能更好的拟合 − g i -g_i gi的那一棵CART回归树,这即是GBDT拟合负梯度的动机。

还可以从另外一个角度去理解,即使 L ( y i , f ( x i ) ) L(y_i,f(x_i)) L(yi,f(xi))不是一个凸函数,我们将 L ( y i , f m − 1 ( x i ) + T ( x i , Θ m ) ) L(y_i,f_{m-1}(x_i)+T(x_i,\Theta_m)) L(yi,fm1(xi)+T(xi,Θm))仅仅展开到一阶,如下式
L ( y i , f m − 1 ( x i ) + T ( x i , Θ m ) ) ≈ L ( y i , f m − 1 ( x i ) ) + g i T ( x i , Θ m ) L(y_i,f_{m-1}(x_i)+T(x_i,\Theta_m)) \approx L(y_i,f_{m-1}(x_i))+g_iT(x_i,\Theta_m) L(yi,fm1(xi)+T(xi,Θm))L(yi,fm1(xi))+giT(xi,Θm)
移项后,变为
g i T ( x i , Θ m ) ≈ L ( y i , f m − 1 ( x i ) + T ( x i , Θ m ) ) − L ( y i , f m − 1 ( x i ) ) g_iT(x_i,\Theta_m) \approx L(y_i,f_{m-1}(x_i)+T(x_i,\Theta_m)) - L(y_i,f_{m-1}(x_i)) giT(xi,Θm)L(yi,fm1(xi)+T(xi,Θm))L(yi,fm1(xi))
我们想要通过每一步优化使训练误差减小,即是想达到 L ( y i , f m − 1 ( x i ) + T ( x i , Θ m ) ) − L ( y i , f m − 1 ( x i ) ) ⩽ 0 L(y_i,f_{m-1}(x_i)+T(x_i,\Theta_m)) - L(y_i,f_{m-1}(x_i))\leqslant 0 L(yi,fm1(xi)+T(xi,Θm))L(yi,fm1(xi))0的目的。此时取 T ( x i , Θ m ) = − g i T(x_i,\Theta_m) = -g_i T(xi,Θm)=gi即可满足要求。从这个角度也可以看出GBDT拟合负梯度的动机。

攻克了这项难关之后,下面的伪代码无非只是每一步用树模型拟合负梯度的前向分步算法

其中关于优化 c m j c_{mj} cmj的一步,CART树通常的做法是将落在 R m j R_{mj} Rmj的所有训练样本的label求平均,作为 c m j c_{mj} cmj的值。

GBDT Regression的特例——Boosting Tree

将提升树(Boosting Tree)写在这里,以解决抽象形式的损失函数 L ( y , f ( x ) ) L(y,f(x)) L(y,f(x))所带来的理解困难的问题。
Boosting Tree是特殊的GBDT,其指定了损失函数的具体形式
L ( y , f ( x ) ) = ( y − f ( x ) ) 2 L(y,f(x)) = (y-f(x))^2 L(y,f(x))=(yf(x))2
该损失函数是一个凸函数,按照梯度提升树的求法,每一步所训练的树所要拟合的目标为
T ( x i , Θ ) = − g i h i T(x_i,\Theta) = -\frac{g_i}{h_i} T(xi,Θ)=higi
其中 g i = [ ∂ L ( y i , f ( x ) ) ∂ f ( x ) ] f ( x ) = f m − 1 ( x i ) = − 2 ( y i − f m − 1 ( x i ) ) , g_i = \bigg[\frac{\partial{L(y_i,f(x))}}{\partial{f(x)}}\bigg]_{f(x) = f_{m-1}(x_i)} = -2(y_i-f_{m-1}(x_i)),\quad gi=[f(x)L(yi,f(x))]f(x)=fm1(xi)=2(yifm1(xi)) h i = [ ∂ 2 L ( y i , f ( x ) ) ∂ ( f ( x ) ) 2 ] f ( x ) = f m − 1 ( x i ) = 2 h_i = \bigg[\frac{\partial^2{L(y_i,f(x))}}{\partial{(f(x))^2}}\bigg]_{f(x) = f_{m-1}(x_i)} = 2 hi=[(f(x))22L(yi,f(x))]f(x)=fm1(xi)=2

代入后,有
− g i h i = y i − f m − 1 ( x i ) -\frac{g_i}{h_i} = y_i-f_{m-1}(x_i) higi=yifm1(xi)

于是提升树是GBDT的特例,每一步优化的负梯度为当前模型拟合数据的残差(residual)。

GBDT Classification

而当我们想要用GBDT解决分类问题时(以二分类问题为例,多分类问题仅仅是将sigmoid函数更换为softmax函数),与Logistic Regression类似,用GBDT去拟合对数几率 l o g p 1 − p log\frac{p}{1-p} log1pp.即
l o g p 1 − p = f ( x ) = ∑ m = 1 M f m ( x ) log\frac{p}{1-p} = f(x) = \sum_{m=1}^M{f_m(x)} log1pp=f(x)=m=1Mfm(x)
得分类模型
P ( y = 1 ∣ x ) = 1 1 + e − f ( x ) = 1 1 + e − ∑ m = 1 M f m ( x ) P(y=1|x) = \frac{1}{1+e^{-f(x)}} = \frac{1}{1+e^{-\sum_{m=1}^M{f_m(x)}}} P(y=1x)=1+ef(x)1=1+em=1Mfm(x)1
损失函数即与Logistic Regression相同,使用交叉熵(cross entropy)衡量分布的相似程度
L ( x i , y i ∣ f ( x ) ) = − y i l o g 1 1 + e − f ( x i ) − ( 1 − y i ) l o g ( 1 − 1 1 + e − f ( x i ) ) = y i l o g ( 1 + e − f ( x i ) ) + ( 1 − y i ) l o g ( 1 + e − f ( x i ) e − f ( x i ) ) = y i l o g ( 1 + e − f ( x i ) ) + ( 1 − y i ) [ l o g ( 1 + e − f ( x i ) ) + f ( x i ) ] \begin{aligned} L(x_i,y_i|f(x)) &= -y_ilog\frac{1}{1+e^{-f(x_i)}}-(1-y_i)log(1-\frac{1}{1+e^{-f(x_i)}}) \\ & = y_ilog(1+e^{-f(x_i)})+(1-y_i)log(\frac{1+e^{-f(x_i)}}{e^{-f(x_i)}}) \\ & = y_ilog(1+e^{-f(x_i)})+(1-y_i)[log(1+e^{-f(x_i)})+f(x_i)] \end{aligned} L(xi,yif(x))=yilog1+ef(xi)1(1yi)log(11+ef(xi)1)=yilog(1+ef(xi))+(1yi)log(ef(xi)1+ef(xi))=yilog(1+ef(xi))+(1yi)[log(1+ef(xi))+f(xi)]

损失函数在当前模型的负梯度为
− [ ∂ L ( y i ∣ f ( x ) ) f ( x ) ] f ( x ) = f m − 1 ( x i ) = y i − 1 1 + e − f m − 1 ( x i ) = y i − y ^ m − 1 , i -\bigg[\frac{\partial L(y_i|f(x))}{f(x)}\bigg]_{f(x) = f_{m-1}(x_i)} = y_i - \frac{1}{1+e^{-f_{m-1}(x_i)}} = y_i - \hat{y}_{m-1,i} [f(x)L(yif(x))]f(x)=fm1(xi)=yi1+efm1(xi)1=yiy^m1,i

于是分类任务的GBDT每一轮的训练任务与提升树相同,都是拟合当前模型的残差。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值