GBDT为什么拟合负梯度,拟合残差又是怎么回事,到底是负梯度还是残差
以GBDT求解回归任务为例子,每次迭代,修改y值为损失函数(目标函数)的负梯度(或者叫残差,因为和残差的表达式一样,这是个巧合),问题是为什么要把y值修改为负梯度(残差),也就是为什么拟合负梯度(残差)

损失函数(目标函数)
GBDT求解回归问题时,常用的时平方个损失函数。即:
loss=L(y,ft(x))=12(y−ft(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(x0)+f′(x0)(x−x0)
f(x) ≈ f(x_0) + f'(x_0)(x-x_0)
f(x)≈f(x0)+f′(x0)(x−x0)
把loss按一阶泰勒展开式进行展开
loss=L(y,ft(x))=L(y,ft−1(x))+∂L(y,ft−1(x))∂ft−1(x)(ft(x)−ft−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,ft−1(x))L(y,f_{t-1}(x))L(y,ft−1(x))是上一颗树(第t-1棵树)的损失值,在这里就是个确定值了,是个常数。
∂L(y,ft−1(x))∂ft−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时,要把参数ft(x)f_t(x)ft(x)沿着负梯度的方向优化,即:
ft(x)=ft−1(x)−η∂L(y,ft(x))∂ft(x)=ft−1(x)−η(∂L(y,ft−1(x))∂ft(x)+∂(∂L(y,ft−1(x))∂ft−1(x)(ft(x)−ft−1(x)))∂ft(x)=ft−1(x)−η∂L(y,ft−1(x))∂ft−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=ft(x)−ft−1(x)=−η∂L(y,ft−1(x))∂ft−1(x)=−η (y−ft−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−η[∂Loss(θ)∂θ]θ=θ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的方程如下:
ft(x)=ft−1(x)−η[∂Loss(f(x))∂f(x)]f(x)=ft−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)
ft(x)f_t(x)ft(x)表示到第t颗树为止模型的输出,显然第t颗树要拟合的值为:
γ=ft(x)−ft−1(x)=−η [∂Loss(f(x))∂f(x)]f(x)=ft−1(x)=−η ∂L(y,ft−1(x))∂ft−1(x)=−η (y−ft−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)直接求解
损失函数如下
loss=L(y,ft(x))=L(y,ft−1(x)+γt)=12(y−(ft−1(x)+γt))2=12((y−ft−1(x))−γt))2=12(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−ft−1(x)
r = y-f_{t-1}(x)
r=y−ft−1(x)
数学上可以证明,当导函数为0的点,loss取得极值,导函数为零的γtγ_tγt计算如下:
γt=∂L(y,ft(x))∂γt=∂∂γt12(r−γt)2=r=y−ft−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时,负梯度和残差才相等。所以残差只是特例,说拟合负梯度才更加具有普适价值,才能更加泛化,当损失函数不再是平方和损失函数时,只能称为拟合负梯度不能才称为拟合残差!!!
573

被折叠的 条评论
为什么被折叠?



