基于梯度的boosting方法推导

一、基础知识

损失函数具有可加性

一般来说,损失函数具有线性可加性。
设我们有数据集D={(xi,yi)}i=1nD=\{(x_i,y_i)\}_{i=1}^nD={(xi,yi)}i=1n,估计模型FFF,损失函数LLL,那么
L(y1,…,yn;F(x1),…,F(xn))=∑i=1nL(yi,F(xi)).L(y_1, \dots ,y_n ;F(x_1),\dots,F(x_n))=\sum_{i=1}^n L(y_i, F(x_i)).L(y1,,yn;F(x1),,F(xn))=i=1nL(yi,F(xi)).
直观的,损失函数在数据集的损失等于损失函数在数据集的所有样本之和。
理解可加性对于理解基于梯度的boosting方法至关重要。

常见的损失函数

下面给出两种常见的损失函数,请读者自行验证其具有可加性。
均方误差损失:
L(F)=∑i=1n(yi−F(xi))2.L(F)= \sum_{i=1}^n \left(y_i - F(x_i)\right)^2.L(F)=i=1n(yiF(xi))2.
交叉熵损失:
L(F)=−∑i=1n[yilog⁡F(xi)+(1−yi)log⁡(1−F(xi))]L(F)= -\sum_{i=1}^n \left[ y_i \log F(x_i) + (1-y_i)\log(1-F(x_i)) \right]L(F)=i=1n[yilogF(xi)+(1yi)log(1F(xi))]
学过数理统计的读者可以验证交叉熵损失最小化与伯努利分布的似然函数最大化等价。

对损失函数求模型的导数

基于梯度的提升方法的核心是对损失函数求模型的导数,即计算∂L(F)∂F\frac{\partial L(F)}{\partial F}FL(F). 这个步骤似乎很抽象,因为模型是一个函数,损失函数和模型之间似乎又没有简单的函数关系,应该如何求导?

如果损失函数具有可加性,那么有:
∂L(F)∂F=∂∂F∑i=1nL(yi,F(xi))=∑i=1n∂L(yi,F(xi))∂F.\frac{\partial L(F)}{\partial F} =\frac{\partial}{\partial F}\sum_{i=1}^n L(y_i, F(x_i)) =\sum_{i=1}^n \frac{\partial L(y_i, F(x_i))}{\partial F}.FL(F)=Fi=1nL(yi,F(xi))=i=1nFL(yi,F(xi)).
因为可加性的存在,我们可以对损失函数先“拆解”,再对每个F(xi)F(x_i)F(xi)求导,最后求和。
类似的,对于二阶导,我们有:
∂2L(F)∂F2=∂2∂F2∑i=1nL(yi,F(xi))=∑i=1n∂2L(yi,F(xi))∂F2\frac{\partial^2 L(F)}{\partial F^2}= \frac{\partial^2}{\partial F^2} \sum_{i=1}^n L(y_i, F(x_i))= \sum_{i=1}^n \frac{\partial^2 L(y_i, F(x_i))}{\partial F^2}F22L(F)=F22i=1nL(yi,F(xi))=i=1nF22L(yi,F(xi))

加法模型

boosting方法本质上属于加法模型。有标签的统计学习模型本质上是一个函数,对于相同的数据集,模型的自变量都是相同的。因此,显然相加后的函数还是以模型原本的自变量为输入。
现在我们有基学习器Fm−1(xi)F_{m-1}(x_i)Fm1(xi),我们把这个基学习器加上这新学习器fm(xi)f_m(x_i)fm(xi),就可以得到新的学习器Fm−1(xi)+fm(xi)F_{m-1}(x_i)+f_m(x_i)Fm1(xi)+fm(xi)

泰勒展开

一元函数在x0x_0x0的泰勒展开为:
f(x)≈f(x0)+f′(x0)(x−x0)+12f′′(x0)(x−x0)2f(x) \approx f(x_0) + f'(x_0)(x-x_0) + \frac{1}{2}f''(x_0)(x-x_0)^2f(x)f(x0)+f(x0)(xx0)+21f′′(x0)(xx0)2
那么,损失函数的其中一项L(yi,Fm−1(xi)+fm(xi))L\bigl(y_i, F_{m-1}(x_i)+f_m(x_i)\bigr)L(yi,Fm1(xi)+fm(xi))(yi,Fm−1(xi))\bigl(y_i, F_{m-1}(x_i)\bigr)(yi,Fm1(xi))的泰勒展开为:
L(yi,Fm−1(xi)+fm(xi))≈L(yi,Fm−1(xi))+∂L∂F(xi)fm(xi)+12∂2L∂F(xi)2fm(xi)2L\bigl(y_i, F_{m-1}(x_i)+f_m(x_i)\bigr) \approx L\bigl(y_i, F_{m-1}(x_i)\bigr) + \frac{\partial L}{\partial F(x_i)} f_m(x_i) + \frac{1}{2} \frac{\partial^2 L}{\partial F(x_i)^2} f_m(x_i)^2L(yi,Fm1(xi)+fm(xi))L(yi,Fm1(xi))+F(xi)Lfm(xi)+21F(xi)22Lfm(xi)2

这个泰勒展开是什么意思?直观上讲,Fm−1(xi)+fm(xi)F_{m-1}(x_i)+f_m(x_i)Fm1(xi)+fm(xi)就是一个“老”学习器加一个新学习器,顾名思义,老学习器是已知的,新学习器是未知的,因此L(yi,Fm−1(xi)+fm(xi))L\bigl(y_i, F_{m-1}(x_i)+f_m(x_i)\bigr)L(yi,Fm1(xi)+fm(xi))其实就是以新学习器fm(xi)f_m(x_i)fm(xi)为自变量的函数。泰勒展开就是再将损失函数L(yi,Fm−1(xi)+fm(xi))L\bigl(y_i, F_{m-1}(x_i)+f_m(x_i)\bigr)L(yi,Fm1(xi)+fm(xi))近似为一个二次函数。
类似的,如果只保留泰勒展开的前两项,就是将L(yi,Fm−1(xi)+fm(xi))L\bigl(y_i, F_{m-1}(x_i)+f_m(x_i)\bigr)L(yi,Fm1(xi)+fm(xi))近似为一个一次平面,这里不做额外说明。

二、Boosting

现在,假设我们已经得到了一个统计学习模型Fm−1(x)F_{m-1}(x)Fm1(x),接下来,我们考虑一个新的学习器fm(x)f_m(x)fm(x),使得Fm(x)=Fm−1(x)+fm(x)F_m(x)=F_{m-1}(x)+f_m(x)Fm(x)=Fm1(x)+fm(x). 现在的问题是,我们已知老模型的损失函数∑i=1nL(yi,Fm−1(xi))\sum_{i=1}^n L\bigl(y_i, F_{m-1}(x_i)\bigr)i=1nL(yi,Fm1(xi)),新模型的损失函数∑i=1nL(yi,Fm−1(xi)+fm(xi))\sum_{i=1}^n L\bigl(y_i, F_{m-1}(x_i)+f_m(x_i)\bigr)i=1nL(yi,Fm1(xi)+fm(xi))是以fm(xi)f_m(x_i)fm(xi)为自变量的函数,应该如何得到一个使得∑i=1nL(yi,Fm−1(xi)+fm(xi))\sum_{i=1}^n L\bigl(y_i, F_{m-1}(x_i)+f_m(x_i)\bigr)i=1nL(yi,Fm1(xi)+fm(xi))最小的fm(xi)f_m(x_i)fm(xi)
可以发现,此时的问题是一个优化问题,此时我们的目标是寻找优化问题的最优解。根据泰勒展开可知其一阶导与二阶导均已知,我们既可以使用梯度下降法、也可以使用牛顿法。

Gradient Boosting

这里不加推导地给出梯度下降法的搜索方向Δgradient=−∂L∂F(xi)\Delta_\text{gradient}=-\frac{\partial L}{\partial F(x_i)}Δgradient=F(xi)L,这实际上就是二阶泰勒展开的一次项的负系数。
因此,我们的新基学习器fm(x)f_m(x)fm(x)应当尽可能拟合ηΔgradient\eta \Delta_\text{gradient}ηΔgradient,其中η\etaη是学习率,代表搜索的步长。
Gradient Boosting的命名来自于其使用的Gradient Descent优化方法。

Newton Boosting

这里不加推导地给出牛顿法的搜索方向
Δnewton=−∂L∂F∂2L∂F2\Delta_\text{newton} =-\frac{ \frac{\partial L}{\partial F} }{ \frac{\partial^2 L}{\partial F^2} }Δnewton=F22LFL,这实际上就是二阶泰勒展开后的二次函数的最优解方向。
因此,我们的新基学习器fm(x)f_m(x)fm(x)应当尽可能拟合ηΔnewton\eta \Delta_\text{newton}ηΔnewton,其中η\etaη是学习率,代表搜索的步长。
Newton Boosting的命名来自于其使用的Newton-Raphson method。

三、例子

均方误差损失

首先对损失函数求一阶导:
∂L(yi,F(xi))∂F(xi)=2(F(xi)−yi).\frac{\partial L(y_i,F(x_i))}{\partial F(x_i)} =2\left(F(x_i)-y_i\right).F(xi)L(yi,F(xi))=2(F(xi)yi).
因此,负梯度方向为:
−∂L(yi,F(xi))∂F(xi)=2(yi−F(xi)).-\frac{\partial L(y_i,F(x_i))}{\partial F(x_i)} =2\left(y_i-F(x_i)\right).F(xi)L(yi,F(xi))=2(yiF(xi)).

因此:均方误差损失下的gradient boosting是在拟合η\etaη倍的残差。
下面对损失函数求二阶导:
∂2L(yi,F(xi))∂F(xi)2=2.\frac{\partial^2 L(y_i,F(x_i))}{\partial F(x_i)^2} =2.F(xi)22L(yi,F(xi))=2.
请读者自行验证此时Newton Boosting和Gradient Boosting等价。

交叉熵损失

首先对损失函数求一阶导:
∂Li(F)∂F(xi)=−yiF(xi)+1−yi1−F(xi)\frac{\partial L_i(F)}{\partial F(x_i)} =-\frac{y_i}{F(x_i)} + \frac{1-y_i}{1-F(x_i)}F(xi)Li(F)=F(xi)yi+1F(xi)1yi
因此,负梯度方向为:
−∂Li(F)∂F(xi)=yi−F(xi)F(xi)(1−F(xi))-\frac{\partial L_i(F)}{\partial F(x_i)} =\frac{y_i-F(x_i)}{F(x_i)(1-F(x_i))}F(xi)Li(F)=F(xi)(1F(xi))yiF(xi)
此时负梯度方向是Gradient Boosting的搜索方向。
下面对损失函数求二阶导:
∂2Li(F)∂F(xi)2=yiF(xi)2+1−yi(1−F(xi))2\frac{\partial^2 L_i(F)}{\partial F(x_i)^2} =\frac{y_i}{F(x_i)^2} + \frac{1-y_i}{(1-F(x_i))^2}F(xi)22Li(F)=F(xi)2yi+(1F(xi))21yi
因此,牛顿法搜索方向为:
−∂Li(F)∂F(xi)∂2Li(F)∂F(xi)2=F(xi)−yi-\frac{ \frac{\partial L_i(F)}{\partial F(x_i)} }{ \frac{\partial^2 L_i(F)}{\partial F(x_i)^2} } =F(x_i)-y_iF(xi)22Li(F)F(xi)Li(F)=F(xi)yi
可以发现,交叉熵损失下的Newton Boosting是在拟合η\etaη倍的残差。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐