文章目录
该篇为集成学习的第四篇,主要关注GDBT(Gradient Boosting Decison Tree, 梯度提升树)。在本文的第三部分中,从参数空间到函数空间的角度出发,理解GBDT+XGBoost的原理。
从传送下之前的文章:
一、GBDT概述
GBDT 是一种迭代的前向分布的算法,其弱分类器为CART回归树。
在GBDT的迭代中,假设前一轮迭代得到的强学习器是 f t − 1 ( x ) f_{t−1}(x) ft−1(x),利用前向分布算法,本步的模型可写成 f t ( x ) = f t − 1 ( x ) + h t ( x ) f_t(x)=f_{t-1}(x)+h_t(x) ft(x)=ft−1(x)+ht(x),损失函数是 L ( y , f t ( x ) ) L(y,f_{t}(x)) L(y,ft(x))。
则本轮迭代的目标是找到一个CART回归树模型的弱学习器 h t ( x ) h_t(x) ht(x),让本轮的损失函数 L ( y , f t ( x ) = L ( y , f t − 1 ( x ) + h t ( x ) ) L(y,f_t(x)=L(y,f_{t−1}(x)+h_t(x)) L(y,ft(x)=L(y,ft−1(x)+ht(x)) 最小。也就是说,本轮迭代找到决策树,要让样本的损失尽量变得更小。
GBDT主要的优点:
- 可以灵活处理各种类型的数据,包括连续值和离散值。
- 在相对少的调参时间情况下,预测的准确率也可以比较高。这个是相对SVM来说的。
- 使用一些健壮的损失函数,对异常值的鲁棒性非常强。比如 Huber损失函数和Quantile损失函数。
GBDT的主要缺点:
- 由于弱学习器之间存在依赖关系,难以并行训练数据。 不过可以通过自采样的SGBT来达到部分并行。
二、GDBT原理
1、负梯度拟合
目标:让样本的损失尽量变得更小,何如解决损失函数拟合方法的问题?
Freidman提出了用损失函数的负梯度来拟合本轮损失的近似值,进而拟合一个CART回归树。第
t
t
t 轮的第
i
i
i 个样本的损失函数的负梯度表示为
(1)
r
t
i
=
−
[
∂
L
(
y
i
,
f
(
x
i
)
)
∂
f
(
x
i
)
]
f
(
x
)
=
f
t
−
1
(
x
)
r_{ti}=- \left[ \frac{\partial{L(y_i,f(x_i))}}{\partial f(x_i)} \right]_{f(x)=f_{t-1}(x)} \tag{1}
rti=−[∂f(xi)∂L(yi,f(xi))]f(x)=ft−1(x)(1)
利用
(
x
i
,
r
t
i
)
,
i
=
1
,
2
,
.
.
.
,
m
(x_i,r_{ti}),i=1,2,...,m
(xi,rti),i=1,2,...,m,可以拟合一颗CART回归树,得到第
t
t
t 颗回归树,其对应的叶节点区域
R
t
j
,
j
=
1
,
2
,
.
.
.
,
J
R_{tj},j=1,2,...,J
Rtj,j=1,2,...,J。其中
J
J
J 为叶子节点的个数。
针对每一个叶子节点里的样本,求出使损失函数最小,也就是拟合叶子节点最好的的输出值
c
t
j
c_{tj}
ctj 如下:
(2)
c
t
j
=
a
r
g
m
i
n
⎵
c
∑
x
i
∈
R
t
j
L
(
y
i
,
f
t
−
1
(
x
i
)
+
c
)
c_{tj}=\underbrace{arg\ min}_c\sum_{x_i\in R_{tj}}L(y_i,f_{t-1}(x_i)+c)\tag{2}
ctj=c
arg minxi∈Rtj∑L(yi,ft−1(xi)+c)(2)
则本轮的决策树拟合函数如下:
(3)
h
t
(
x
)
=
∑
j
=
1
J
c
t
j
I
(
x
∈
R
t
j
)
h_t(x)=\sum_{j=1}^Jc_{tj}I(x\in R_{tj})\tag{3}
ht(x)=j=1∑JctjI(x∈Rtj)(3)
从而本轮最终得到的强学习器的表达式如下:
(4)
f
t
(
x
)
=
f
t
−
1
(
x
)
+
∑
j
=
1
J
c
t
j
I
(
x
∈
R
t
j
)
f_t(x)=f_{t-1}(x)+\sum_{j=1}^{J}c_{tj}I(x\in R_{tj})\tag{4}
ft(x)=ft−1(x)+j=1∑JctjI(x∈Rtj)(4)
一种通用的拟合损失误差的办法:通过损失函数的负梯度来拟合,则无论是分类问题还是回归问题,均可通过其损失函数的负梯度的拟合,就可以用GBDT来解决我们的分类回归问题。区别仅仅在于损失函数不同所导致的负梯度不同。
2、GBDT回归算法
输入:训练集样本
T
=
(
x
1
,
y
1
)
,
(
x
2
,
y
2
)
,
.
.
.
,
(
x
m
,
y
m
)
T={(x_1,y_1),(x_2,y_2),...,(x_m,y_m)}
T=(x1,y1),(x2,y2),...,(xm,ym), 最大迭代次数
T
T
T,损失函数
L
L
L。
输出:强学习器
f
(
x
)
f(x)
f(x)
(1)初始化弱学习器
f
0
(
x
)
=
a
r
g
m
i
n
⎵
c
∑
i
=
1
m
L
(
y
i
,
c
)
f_0(x)=\underbrace{arg\ min}_c\sum_{i=1}^mL(y_i,c)
f0(x)=c
arg mini=1∑mL(yi,c)
(2) 对迭代轮数
t
=
1
,
2
,
.
.
.
,
T
t=1,2,...,T
t=1,2,...,T 有:
a) 对样本
i
=
1
,
2
,
.
.
.
,
m
i=1,2,...,m
i=1,2,...,m,计算负梯度
r
t
i
=
−
[
∂
L
(
y
i
,
f
(
x
i
)
)
∂
f
(
x
i
)
]
f
(
x
)
=
f
t
−
1
(
x
)
r_{ti}=- \left[ \frac{\partial{L(y_i,f(x_i))}}{\partial f(x_i)} \right]_{f(x)=f_{t-1}(x)}
rti=−[∂f(xi)∂L(yi,f(xi))]f(x)=ft−1(x)
b) 利用
(
x
i
,
r
t
i
)
,
i
=
1
,
2
,
.
.
.
,
m
(x_i,r_{ti}),i=1,2,...,m
(xi,rti),i=1,2,...,m,可以拟合一颗CART回归树,得到第
t
t
t 颗回归树,其对应的叶节点区域
R
t
j
,
j
=
1
,
2
,
.
.
.
,
J
R_{tj},j=1,2,...,J
Rtj,j=1,2,...,J。其中
J
J
J 为叶子节点的个数。
c) 对叶子区域
j
=
1
,
2
,
.
.
.
,
J
j=1,2,...,J
j=1,2,...,J 计算最佳拟合值:
c
t
j
=
a
r
g
m
i
n
⎵
c
∑
x
i
∈
R
t
j
L
(
y
i
,
f
t
−
1
(
x
i
)
+
c
)
c_{tj}=\underbrace{arg\ min}_c\sum_{x_i\in R_{tj}}L(y_i,f_{t-1}(x_i)+c)
ctj=c
arg minxi∈Rtj∑L(yi,ft−1(xi)+c)
d) 更新强学习器
h
t
(
x
)
=
∑
j
=
1
J
c
t
j
I
(
x
∈
R
t
j
)
h_t(x)=\sum_{j=1}^Jc_{tj}I(x\in R_{tj})
ht(x)=j=1∑JctjI(x∈Rtj)
(3)得到强学习器
f
(
x
)
f(x)
f(x) 的表达式
f
(
x
)
=
f
T
(
x
)
=
f
0
(
x
)
+
∑
t
=
1
T
∑
j
=
1
J
c
t
j
I
(
x
∈
R
t
j
)
f(x)=f_T(x)=f_{0}(x)+\sum_{t=1}^T\sum_{j=1}^{J}c_{tj}I(x\in R_{tj})
f(x)=fT(x)=f0(x)+t=1∑Tj=1∑JctjI(x∈Rtj)
3、GBDT分类算法
由于样本输出不是连续的值,而是离散的类别,导致我们无法直接从输出类别去拟合类别输出的误差。
解决方法:
- 使用指数损失函数。GBDT退化为Adaboost算法。
- 对数似然损失函数。用类别的预测概率值和真实概率值的差来拟合损失。
本文仅关注对数似然损失函数的GBDT分类。
(1)二元GBDT分类算法
对于二元GBDT,如果用类似于 Logistic Regression 的对数似然损失函数,则损失函数为:
L
(
y
,
f
(
x
)
)
=
l
o
g
(
1
+
e
x
p
(
−
y
f
(
x
)
)
)
L(y,f(x))=log(1+exp(-yf(x)))
L(y,f(x))=log(1+exp(−yf(x)))
其中,
y
∈
{
+
1
,
−
1
}
y∈\{+1,-1\}
y∈{+1,−1}。则此时的负梯度误差为
r
t
i
=
−
[
∂
L
(
y
,
f
(
x
i
)
)
∂
f
(
x
i
)
]
f
(
x
)
=
f
t
−
1
(
x
)
=
y
i
1
+
e
x
p
(
y
i
f
(
x
i
)
)
r_{ti}=-\left[\frac{∂L(y,f(x_i))}{∂f(x_i)}\right]_{f(x)=f_{t-1}(x)}=\frac{y_i}{1+exp(y_if(x_i))}
rti=−[∂f(xi)∂L(y,f(xi))]f(x)=ft−1(x)=1+exp(yif(xi))yi
对于生成的决策树,我们各个叶子节点的最佳负梯度拟合值为
c
t
j
=
a
r
g
m
i
n
⎵
c
∑
x
i
∈
R
t
j
l
o
g
(
1
+
e
x
p
(
−
y
i
f
t
−
1
(
x
i
)
+
c
)
)
)
c_{tj}=\underbrace{arg\ min}_c\sum_{x_i\in R_{tj}}log(1+exp(-y_if_{t-1}(x_i)+c)))
ctj=c
arg minxi∈Rtj∑log(1+exp(−yift−1(xi)+c)))
由于上式比较难优化,我们一般使用近似值代替
c
t
j
=
∑
x
i
∈
R
t
j
r
t
j
∑
x
i
∈
R
t
j
∣
r
t
j
∣
(
1
−
∣
r
t
j
∣
)
c_{tj}=\frac{\sum_{x_i\in R_{tj}}r_{tj}}{\sum_{x_i\in R_{tj}}|r_{tj}|(1-|r_{tj}|)}
ctj=∑xi∈Rtj∣rtj∣(1−∣rtj∣)∑xi∈Rtjrtj
除了负梯度计算和叶子节点的最佳负梯度拟合的线性搜索,二元GBDT分类和GBDT回归算法过程相同。
(2)多元GBDT分类算法
多元GBDT要比二元GBDT复杂一些,对应的是多元逻辑回归和二元逻辑回归的复杂度差别。假设类别数为K,则此时我们的对数似然损失函数为:
L
(
y
,
f
(
x
)
)
=
−
∑
k
=
1
K
y
k
l
o
g
p
k
(
x
)
L(y,f(x))=-\sum_{k=1}^Ky_klogp_k(x)
L(y,f(x))=−k=1∑Kyklogpk(x)
其中,如果样本输出类别为
k
k
k,则
y
k
=
1
y_k=1
yk=1。第
k
k
k 类的概率
p
k
(
x
)
p_k(x)
pk(x) 的表达式为:
p
k
(
x
)
=
e
x
p
(
f
k
(
x
)
)
∑
l
=
1
K
e
x
p
(
f
l
(
x
)
)
p_k(x)=\frac{exp(f_k(x))}{\sum_{l=1}^Kexp(f_l(x))}
pk(x)=∑l=1Kexp(fl(x))exp(fk(x))
集合上两式,我们可以计算出第
t
t
t 轮的第
i
i
i 个样本对应类别
l
l
l 的负梯度误差为
r
t
i
=
−
[
∂
L
(
y
i
,
f
(
x
i
)
)
∂
f
(
x
i
)
]
f
(
x
)
=
f
l
,
t
−
1
(
x
)
=
y
i
l
−
p
l
,
t
−
1
(
x
i
)
r_{ti}=-\left[\frac{∂L(y_i,f(x_i))}{∂f(x_i)}\right]_{f(x)=f_{l,t-1}(x)}={y_{il}}-p_{l,t-1}(x_i)
rti=−[∂f(xi)∂L(yi,f(xi))]f(x)=fl,t−1(x)=yil−pl,t−1(xi)
观察上式可以看出,其实这里的误差就是样本
i
i
i 对应类别l的真实概率和
t
−
1
t−1
t−1 轮预测概率的差值。
对于生成的决策树,我们各个叶子节点的最佳负梯度拟合值为
c
t
j
l
=
a
r
g
m
i
n
⎵
c
j
l
∑
i
=
0
m
∑
k
=
1
K
L
(
y
k
,
f
t
−
1
,
l
(
x
)
+
∑
j
=
0
J
c
j
l
I
(
x
i
∈
R
t
j
)
)
c_{tjl}=\underbrace{arg\ min}_{c_{jl}}\sum_{i=0}^m\sum_{k=1}^KL(y_k,f_{t-1,l}(x)+\sum_{j=0}^Jc_{jl}I(x_i\in R_{tj}))
ctjl=cjl
arg mini=0∑mk=1∑KL(yk,ft−1,l(x)+j=0∑JcjlI(xi∈Rtj))
由于上式比较难优化,我们一般使用近似值代替
c
t
j
l
=
K
−
1
K
∑
x
i
∈
R
t
j
l
r
t
j
l
∑
x
i
∈
R
t
i
l
∣
r
t
i
l
∣
(
1
−
∣
r
t
i
l
∣
)
c_{tjl}=\frac{K-1}{K}\frac{\sum_{x_i\in R_{tjl}}r_{tjl}}{\sum_{x_i\in R_{til}}|r_{til}|(1-|r_{til}|)}
ctjl=KK−1∑xi∈Rtil∣rtil∣(1−∣rtil∣)∑xi∈Rtjlrtjl
除了负梯度计算和叶子节点的最佳负梯度拟合的线性搜索,多元GBDT分类和二元GBDT分类以及GBDT回归算法过程相同。
4、GBDT常用损失函数
(1)分类任务
对于分类算法,其损失函数一般有 对数损失函数 和 指数损失函数 两种:
指数损失函数
L
(
y
,
f
(
x
)
)
=
e
x
p
(
−
y
f
(
x
)
)
L(y,f(x))=exp(−yf(x))
L(y,f(x))=exp(−yf(x))
其负梯度计算和叶子节点的最佳负梯度拟合参见Adaboost原理篇。
对数损失函数——见2.3.1和2.3.2
- 二元分类
- 多元分类
(2)回归任务
常用的损失函数为均方差、绝对损失、Huber损失和分位数损失。
-
均方差损失——最常见
L ( y , f ( x ) ) = ( y − f ( x ) ) 2 L(y,f(x))=(y-f(x))^2 L(y,f(x))=(y−f(x))2 -
绝对损失
L ( y , f ( x ) ) = ∣ y − f ( x ) ∣ L(y,f(x))=|y-f(x)| L(y,f(x))=∣y−f(x)∣
其对应负梯度误差为:
s i g n ( y i − f ( x i ) ) sign(y_i-f(x_i)) sign(yi−f(xi)) -
Huber损失
Huber损失是均方差和绝对损失的折衷产物,对于远离中心的异常点,采用绝对损失,而中心附近的点采用均方差。这个界限一般用分位数点度量。损失函数如下:
L ( y , f ( x ) ) = { 1 2 ( y − f ( x ) ) 2 , if ∣ y − f ( x ) ∣ ≤ δ δ ( ∣ y − f ( x ) ∣ − δ 2 ) , if ∣ y − f ( x ) ∣ > δ L(y,f(x))= \begin{cases} \frac{1}{2}(y-f(x))^2, & \text {if $|y-f(x)|\leq\delta$} \\ \delta(|y-f(x)|-\frac{\delta}{2}), & \text{if $|y-f(x)|>\delta$} \end{cases} L(y,f(x))={21(y−f(x))2,δ(∣y−f(x)∣−2δ),if ∣y−f(x)∣≤δif ∣y−f(x)∣>δ
对应的负梯度误差为:
r ( y i , f ( x i ) ) = { y i − f ( x i ) , if ∣ y − f ( x ) ∣ ≤ δ δ s i g n ( y i − f ( x i ) ) , if ∣ y − f ( x ) ∣ > δ r(y_i,f(x_i))= \begin{cases} y_i-f(x_i), & \text {if $|y-f(x)|\leq\delta$} \\ \delta sign(y_i-f(x_i)), & \text{if $|y-f(x)|>\delta$} \end{cases} r(yi,f(xi))={yi−f(xi),δsign(yi−f(xi)),if ∣y−f(x)∣≤δif ∣y−f(x)∣>δ -
分位数损失
它对应的是分位数回归的损失函数,表达式为
L ( y , f ( x ) ) = ∑ y ≥ f ( x ) θ ∣ y − f ( x ) ∣ + ∑ y < f ( x ) ( 1 − θ ) ∣ y − f ( x ) ∣ L(y,f(x))=\sum_{y\geq f(x)}\theta|y-f(x)|+\sum_{y<f(x)}(1-\theta)|y-f(x)| L(y,f(x))=y≥f(x)∑θ∣y−f(x)∣+y<f(x)∑(1−θ)∣y−f(x)∣
其中 θ θ θ 为分位数,需要在回归前指定。对应的负梯度误差为:
r ( y i , f ( x i ) ) = { θ , if y i ≥ f ( x i ) θ − 1 , if y i < f ( x i ) r(y_i,f(x_i))= \begin{cases} \theta, & \text {if $y_i\geq f(x_i)$} \\ \theta-1, & \text{if $y_i < f(x_i)$} \end{cases} r(yi,f(xi))={θ,θ−1,if yi≥f(xi)if yi<f(xi)
对于Huber损失和分位数损失,主要用于健壮回归,也就是减少异常点对损失函数的影响。
5、GBDT的正则化
GBDT的正则化主要有三种方式。
第一种:设置步长(learning rate)
定义为
ν
\nu
ν,对于前面的弱学习器的迭代
f
k
(
x
)
=
f
k
−
1
(
x
)
+
h
k
(
x
)
f_k(x)=f_{k−1}(x)+h_k(x)
fk(x)=fk−1(x)+hk(x)
加上了正则化项,则有
f
k
(
x
)
=
f
k
−
1
(
x
)
+
ν
h
k
(
x
)
f_k(x)=f_{k−1}(x)+\nu h_k(x)
fk(x)=fk−1(x)+νhk(x)
其中
ν
\nu
ν 的取值范围为
0
<
ν
≤
1
0<\nu\leq1
0<ν≤1。对于同样的训练集学习效果,较小的
ν
\nu
ν 意味着需要更多的弱学习器的迭代次数。通常我们用步长和迭代最大次数一起来决定算法的拟合效果。
第二种:子采样比例(subsample)
子采样比例(subsample):取值为
(
0
,
1
]
(0,1]
(0,1]。注意:这里是 无放回抽样。
选择小于1的比例可以减少方差,即防止过拟合,但是会增加样本拟合的偏差,因此取值不能太低。推荐在
[
0.5
,
0.8
]
[0.5, 0.8]
[0.5,0.8] 之间。
使用了子采样的GBDT有时也称作随机梯度提升树(Stochastic Gradient Boosting Tree, SGBT)。由于使用了子采样,程序可以通过采样分发到不同的任务去做boosting的迭代过程,最后形成新树,从而减少弱学习器难以并行学习的弱点。
第三种:弱学习器即CART回归树进行正则化剪枝。
三、从参数空间到函数空间理解GBDT+XGBoost
1、泰勒公式
定义:是一个用函数在某点的信息,描述其附近取值的公式。
基本形式
f
(
x
)
=
f
(
x
0
)
0
!
+
f
′
(
x
0
)
1
!
(
x
−
x
0
)
+
f
′
′
(
x
0
)
2
!
(
x
−
x
0
)
2
+
.
.
.
+
f
(
n
)
(
x
0
)
n
!
(
x
−
x
0
)
n
f(x)=\frac{f(x_0)}{0!}+\frac{f'(x_0)}{1!}(x-x_0)+\frac{f''(x_0)}{2!}(x-x_0)^2+...+\frac{f^{(n)}(x_0)}{n!}(x-x_0)^n
f(x)=0!f(x0)+1!f′(x0)(x−x0)+2!f′′(x0)(x−x0)2+...+n!f(n)(x0)(x−x0)n
其中一阶泰勒展开式就是求一阶导,二阶展开式即求二阶导。
x
0
x_0
x0为已知,公式表示
f
(
x
)
f(x)
f(x) 在
x
0
x_0
x0 附近的展开。
GDBT 或是 xgb 都是一个参数迭代的过程,因此这里表示一个迭代形式的泰勒函数:假设
x
t
=
x
t
−
1
+
Δ
x
x^t=x^{t-1}+\Delta x
xt=xt−1+Δx
将
f
(
x
t
)
f(x^t)
f(xt) 在
x
(
t
−
1
)
x^{(t-1)}
x(t−1) 处进行展开:
f
(
x
t
)
=
f
(
x
t
−
1
+
Δ
x
)
≈
f
(
x
t
−
1
)
+
f
′
(
x
t
−
1
)
Δ
x
+
f
′
′
(
x
t
−
1
)
Δ
x
2
2
f(x^t)=f(x^{t-1}+\Delta x)\approx f(x^{t-1})+f'(x^{t-1})\Delta x+f''(x^{t-1})\frac{\Delta x^2}{2}
f(xt)=f(xt−1+Δx)≈f(xt−1)+f′(xt−1)Δx+f′′(xt−1)2Δx2
2、最优化方法
(1)梯度下降法(Gradient Descend Method)
机器学习中需要最小化损失函数 L ( θ ) L(θ) L(θ),这个 θ θ θ 就是要求解的模型参数。GDM常用于求解无约束最优化问题,是一种迭代方法。初始化 θ θ θ 为 θ 0 θ^0 θ0,不断迭代来更新 θ θ θ 的值,进行损失函数的极小化。
- 迭代公式:
θ
t
=
θ
(
t
−
1
)
+
Δ
θ
θ^t = θ^{(t-1)}+\Delta{θ}
θt=θ(t−1)+Δθ
进行一阶泰勒展开:
L ( θ t ) = L ( θ t − 1 + Δ θ ) ≈ L ( θ t − 1 ) + L ′ ( θ t − 1 ) Δ θ \begin{aligned} L(\theta^t)&=L(\theta^{t-1}+\color{red}{\Delta{\theta}}\color{black}{)}\\ &\approx L(\theta^{t-1})+L'(\theta^{t-1})\color{red}{\Delta{\theta}} \end{aligned} L(θt)=L(θt−1+Δθ)≈L(θt−1)+L′(θt−1)Δθ
要使得 L ( θ t ) < L ( θ ( t − 1 ) ) L(θ^t) < L(θ^{(t-1)}) L(θt)<L(θ(t−1)),则可取:
Δ θ = − α L ′ ( θ t − 1 ) , 则: θ t = θ t − 1 − α L ′ ( θ t − 1 ) \color{red}{\Delta{\theta}}\color{black}{=-\alpha L'(\theta^{t-1})},\text{则:}\theta^t=\theta^{t-1}-\alpha{L'(\theta^{t-1})} Δθ=−αL′(θt−1),则:θt=θt−1−αL′(θt−1) - 其中解释一下为何 Δ θ \Delta\theta Δθ 要取值为上式:首先明确, α \alpha α 的值为正,为了保证 Δ θ \Delta\theta Δθ 恒为负数,则需要乘上 L ′ ( θ t − 1 ) L'(θ^{t-1}) L′(θt−1) 先保证其为整数,再加上负号即可。
- 其实 α \alpha α 就是我们常用的学习速率
-
α
\alpha
α 如何选取?
通常我们选取一个很小的值,例如 0.01 − 0.1 0.01-0.1 0.01−0.1 之间。
(2)牛顿法
牛顿法就是求取二阶泰勒展开:
L
(
θ
t
)
≈
L
(
θ
t
−
1
)
+
L
′
(
θ
t
−
1
)
Δ
θ
+
L
′
′
(
θ
t
−
1
)
Δ
θ
2
2
\begin{aligned} L(\theta^t) &\approx L(\theta^{t-1})+L'(\theta^{t-1})\color{red}{\Delta{\theta}}\color{black}+L''(\theta^{t-1})\frac{\color{red}{\Delta\theta^2}}{2} \end{aligned}
L(θt)≈L(θt−1)+L′(θt−1)Δθ+L′′(θt−1)2Δθ2
假设我们要求的参数
θ
\theta
θ 是一维,则记一阶导数为
g
g
g,二阶导数为
h
h
h,那么上式可表示为:
L
(
θ
t
)
≈
L
(
θ
t
−
1
)
+
g
Δ
θ
+
h
Δ
θ
2
2
\begin{aligned} L(\theta^t) &\approx L(\theta^{t-1})+g\color{red}{\Delta{\theta}}\color{black}+h\frac{\color{red}{\Delta\theta^2}}{2} \end{aligned}
L(θt)≈L(θt−1)+gΔθ+h2Δθ2
此时若求取
L
(
θ
t
)
L(θ^t)
L(θt) 的极小值,则令
g
Δ
θ
+
h
Δ
θ
2
2
g{\Delta{\theta}}+h\frac{{\Delta\theta^2}}{2}
gΔθ+h2Δθ2 极小,求取其一阶导数为
0
0
0 时的
Δ
θ
\Delta\theta
Δθ 即可:
∂
(
g
Δ
θ
+
h
Δ
θ
2
2
)
∂
Δ
θ
=
0
Δ
θ
=
−
g
h
\begin{aligned} \frac{\partial\left( g\color{red}{\Delta{\theta}}\color{black}+h\frac{\color{red}{\Delta\theta^2}}{2} \right)}{\partial\color{red}\Delta\theta}\color{black} &= 0 \\ \\ \color{red}\Delta\theta=\color{black}-\frac{g}{h} \end{aligned}
∂Δθ∂(gΔθ+h2Δθ2)Δθ=−hg=0
则
θ
t
=
θ
t
−
1
+
Δ
θ
=
θ
t
−
1
−
g
h
\theta^t=\theta^{t-1}+\color{red}{\Delta\theta}\color{black}=\theta^{t-1}-\frac{g}{h}
θt=θt−1+Δθ=θt−1−hg
如果参数
θ
\theta
θ 是向量形式,那么可以向高维空间推广,此时的
h
h
h 为
H
H
H(海森矩阵)。
3、从参数空间到函数空间
(1)概述
以上介绍的梯度下降和牛顿法均为参数空间的优化算法
如何从参数空间推广到函数空间呢?
- 从 Gradient descend 到 Gradient boosting;
- 从 Newton’s method 到 Newton Boosting
下面介绍GBDT和xgb中使用的函数空间的优化算法,其基本原理还是梯度下降和牛顿法。
两者关系如下:GBDT泛指一切梯度提升树,包括XGB。为了区分二者,可以利用其梯度下降的原理进行区分
- GBDT在函数空间中利用梯度下降进行优化
- XGB 在函数空间利用牛顿法进行优化
(2)GBDT:梯度下降从参数空间到函数空间
其中对于函数空间,仅仅是将参数的拟合换为函数的拟合
,每次仍然迭代的是一个负梯度,只是其最终得到的是增量函数的累加而不是增量参数累加。
GBDT里,迭代项
f
t
(
x
)
f_t(x)
ft(x) 就是我们的决策树,最终将每棵决策树的预测值(函数)加起来。
(3)XGBoost:牛顿法从参数空间到函数空间
对于牛顿法的函数空间优化,其方法类似于梯度下降的函数空间优化。
牛顿法不仅使用目标函数的一阶偏导数,还进一步利用了目标函数的二阶偏导
,这样就考虑了梯度变化的趋势,因而能更全面地确定合适的搜索方向以加快收敛。