GBDT为什么拟合负梯度,拟合残差又是怎么回事,到底是负梯度还是残差
以GBDT求解回归任务为例子,每次迭代,修改y值为损失函数(目标函数)的负梯度(或者叫残差,因为和残差的表达式一样,这是个巧合),问题是为什么要把y值修改为负梯度(残差),也就是为什么拟合负梯度(残差)
损失函数(目标函数)
GBDT求解回归问题时,常用的时平方个损失函数。即:
l
o
s
s
=
L
(
y
,
f
t
(
x
)
)
=
1
2
(
y
−
f
t
(
x
)
)
2
loss = L(y,f_t(x)) = \frac{1}{2}(y-f_t(x))^2
loss=L(y,ft(x))=21(y−ft(x))2
GBDT是个加法模型,将所有弱学习器(CART回归树)的输出加起来,这么做是想让模型的输出逐渐的趋近于真实值。数学上当然是通过损失函数来实现的,在加的过程中让损失函数越来越小。
所以研究“为什么是拟合负梯度”的问题,可以转化为“怎么才能使的损失函数loss越来越小,而且是loss下降的最快”,这里有三种思路,一个一个讲:
(1)将loss泰勒展开
一阶泰勒展开式如下
f
(
x
)
≈
f
(
x
0
)
+
f
′
(
x
0
)
(
x
−
x
0
)
f(x) ≈ f(x_0) + f'(x_0)(x-x_0)
f(x)≈f(x0)+f′(x0)(x−x0)
把loss按一阶泰勒展开式进行展开
l
o
s
s
=
L
(
y
,
f
t
(
x
)
)
=
L
(
y
,
f
t
−
1
(
x
)
)
+
∂
L
(
y
,
f
t
−
1
(
x
)
)
∂
f
t
−
1
(
x
)
(
f
t
(
x
)
−
f
t
−
1
(
x
)
)
loss = L(y,f_t(x))=L(y,f_{t-1}(x))+\frac{\partial L(y,f_{t-1}(x))}{\partial f_{t-1}(x)}(f_t(x)-f_{t-1}(x))
loss=L(y,ft(x))=L(y,ft−1(x))+∂ft−1(x)∂L(y,ft−1(x))(ft(x)−ft−1(x))
上式中
L ( y , f t − 1 ( x ) ) L(y,f_{t-1}(x)) L(y,ft−1(x))是上一颗树(第t-1棵树)的损失值,在这里就是个确定值了,是个常数。
∂ L ( y , f t − 1 ( x ) ) ∂ f t − 1 ( x ) \frac{\partial L(y,f_{t-1}(x))}{\partial f_{t-1}(x)} ∂ft−1(x)∂L(y,ft−1(x))也是个确定值,是个常数。
要让loss变小,负梯度方向是下降最快的方向。所以在优化loss时,要把参数
f
t
(
x
)
f_t(x)
ft(x)沿着负梯度的方向优化,即:
f
t
(
x
)
=
f
t
−
1
(
x
)
−
η
∂
L
(
y
,
f
t
(
x
)
)
∂
f
t
(
x
)
=
f
t
−
1
(
x
)
−
η
(
∂
L
(
y
,
f
t
−
1
(
x
)
)
∂
f
t
(
x
)
+
∂
(
∂
L
(
y
,
f
t
−
1
(
x
)
)
∂
f
t
−
1
(
x
)
(
f
t
(
x
)
−
f
t
−
1
(
x
)
)
)
∂
f
t
(
x
)
=
f
t
−
1
(
x
)
−
η
∂
L
(
y
,
f
t
−
1
(
x
)
)
∂
f
t
−
1
(
x
)
\begin{align} f_t(x) &= f_{t-1}(x) - η\frac{\partial L(y,f_t(x))}{\partial f_t(x)}\\ & \\ & = f_{t-1}(x) - η (\frac{\partial L(y,f_{t-1}(x))}{\partial f_t(x)}+\frac{\partial (\frac{\partial L(y,f_{t-1}(x))}{\partial f_{t-1}(x)}(f_t(x)-f_{t-1}(x)))}{\partial f_t(x)}\\ & \\ & = f_{t-1}(x) - η\frac{\partial L(y,f_{t-1}(x))}{\partial f_{t-1}(x)}\\ \end{align}
ft(x)=ft−1(x)−η∂ft(x)∂L(y,ft(x))=ft−1(x)−η(∂ft(x)∂L(y,ft−1(x))+∂ft(x)∂(∂ft−1(x)∂L(y,ft−1(x))(ft(x)−ft−1(x)))=ft−1(x)−η∂ft−1(x)∂L(y,ft−1(x))
实际上第t颗树需要拟合的值
γ
t
γ_t
γt就是:
γ
t
=
f
t
(
x
)
−
f
t
−
1
(
x
)
=
−
η
∂
L
(
y
,
f
t
−
1
(
x
)
)
∂
f
t
−
1
(
x
)
=
−
η
(
y
−
f
t
−
1
(
x
)
)
\begin{align} γ_t & = f_t(x)-f_{t-1}(x) \\ & \\ & = - η\frac{\partial L(y,f_{t-1}(x))}{\partial f_{t-1}(x)} \\ & \\ & = - η \ (y-f_{t-1}(x)) \end{align}
γt=ft(x)−ft−1(x)=−η∂ft−1(x)∂L(y,ft−1(x))=−η (y−ft−1(x))
至此,GBDT需要拟合的是负梯度的第一种解释完毕
(2)类比线性回归中的梯度下降算法
线性回归问题的参数是
θ
\theta
θ,求解时常用的时梯度下降算法。即:
θ
t
=
θ
t
−
1
−
η
[
∂
L
o
s
s
(
θ
)
∂
θ
]
θ
=
θ
t
−
1
\theta_t = \theta_{t-1} -η \bigg[\frac{\partial Loss(\theta)}{\partial \theta}\bigg]_{θ=θ_{t-1}}
θt=θt−1−η[∂θ∂Loss(θ)]θ=θt−1
类比到GBDT模型中,首先思考第一个问题,GBDT模型的参数时什么。
好的,我猜你已经抽象出来了,GBDT的方程如下:
f
t
(
x
)
=
f
t
−
1
(
x
)
−
η
[
∂
L
o
s
s
(
f
(
x
)
)
∂
f
(
x
)
]
f
(
x
)
=
f
t
−
1
(
x
)
f_t(x) = f_{t-1}(x) -η \bigg[\frac{\partial Loss(f(x))}{\partial f(x)}\bigg]_{f(x)=f_{t-1}(x)}
ft(x)=ft−1(x)−η[∂f(x)∂Loss(f(x))]f(x)=ft−1(x)
f
t
(
x
)
f_t(x)
ft(x)表示到第t颗树为止模型的输出,显然第t颗树要拟合的值为:
γ
=
f
t
(
x
)
−
f
t
−
1
(
x
)
=
−
η
[
∂
L
o
s
s
(
f
(
x
)
)
∂
f
(
x
)
]
f
(
x
)
=
f
t
−
1
(
x
)
=
−
η
∂
L
(
y
,
f
t
−
1
(
x
)
)
∂
f
t
−
1
(
x
)
=
−
η
(
y
−
f
t
−
1
(
x
)
)
\begin{align} γ & = f_t(x) - f_{t-1}(x) \\ & \\ & = -η \ \bigg[\frac{\partial Loss(f(x))}{\partial f(x)}\bigg]_{f(x)=f_{t-1}(x)}\\ & \\ & = - η \ \frac{\partial L(y,f_{t-1}(x))}{\partial f_{t-1}(x)}\\ & \\ & = - η \ (y-f_{t-1}(x)) \end{align}
γ=ft(x)−ft−1(x)=−η [∂f(x)∂Loss(f(x))]f(x)=ft−1(x)=−η ∂ft−1(x)∂L(y,ft−1(x))=−η (y−ft−1(x))
(3)直接求解
损失函数如下
l
o
s
s
=
L
(
y
,
f
t
(
x
)
)
=
L
(
y
,
f
t
−
1
(
x
)
+
γ
t
)
=
1
2
(
y
−
(
f
t
−
1
(
x
)
+
γ
t
)
)
2
=
1
2
(
(
y
−
f
t
−
1
(
x
)
)
−
γ
t
)
)
2
=
1
2
(
r
−
γ
t
)
)
2
\begin{align} loss &= L(y,f_t(x))\\ &= L(y,f_{t-1}(x)+γ_t)\\ &= \frac{1}{2}(y-(f_{t-1}(x)+γ_t))^2\\ &= \frac{1}{2}((y-f_{t-1}(x))-γ_t))^2\\ &= \frac{1}{2}(r-γ_t))^2\\ \end{align}
loss=L(y,ft(x))=L(y,ft−1(x)+γt)=21(y−(ft−1(x)+γt))2=21((y−ft−1(x))−γt))2=21(r−γt))2
上式中,r就是残差,即:
r
=
y
−
f
t
−
1
(
x
)
r = y-f_{t-1}(x)
r=y−ft−1(x)
数学上可以证明,当导函数为0的点,loss取得极值,导函数为零的
γ
t
γ_t
γt计算如下:
γ
t
=
∂
L
(
y
,
f
t
(
x
)
)
∂
γ
t
=
∂
∂
γ
t
1
2
(
r
−
γ
t
)
2
=
r
=
y
−
f
t
−
1
(
x
)
γ_t =\frac{\partial L(y,f_t(x))}{\partial γ_t} =\frac{\partial}{\partial γ_t}\frac{1}{2}(r-γ_t)^2 =r =y-f_{t-1}(x)
γt=∂γt∂L(y,ft(x))=∂γt∂21(r−γt)2=r=y−ft−1(x)
到底是拟合的负梯度还是残差
通过上面的证明,不难发现,负梯度和残差的结果是一致的。实际上只有当用平方和损失函数作为loss时,负梯度和残差才相等。所以残差只是特例,说拟合负梯度才更加具有普适价值,才能更加泛化,当损失函数不再是平方和损失函数时,只能称为拟合负梯度不能才称为拟合残差!!!