目录

1 引言

2 梯度下降法

3 梯度提升算法

4 梯度提升原理推导

5 对梯度提升算法的若干思考

5.1 梯度提升与梯度下降的区别和联系是什么?

5.2 梯度提升和提升树算法的区别和联系?

5.3 梯度提升和GBDT的区别和联系?

5.4 梯度提升算法包含哪些算法?

5.5 对于一般损失函数而言,为什么可以利用损失函数的负梯度在当前模型的值作为梯度提升算法中残差的近似值呢?


1 引言

        提升树利用加法模型前向分歩算法实现学习的优化过程。当损失函数是平方误差损失函数指数损失函数时,每一步优化是很简单的。但对一般损失函数而言,往往每一步优化并不那么容易。针对这一问题,Freidman提出了梯度提升(gradient boosting)算法

        Gradient Boosting是Boosting中的一大类算法,它的思想借鉴于梯度下降法,其基本原理是根据当前模型损失函数的负梯度信息来训练新加入的弱分类器,然后将训练好的弱分类器以累加的形式结合到现有模型中。采用决策树作为弱分类器的Gradient Boosting算法被称为GBDT,有时又被称为MART(Multiple Additive Regression Tree)。GBDT中使用的决策树通常为CART。

2 梯度下降法

最优化方法一:梯度下降法_意念回复的博客-CSDN博客_梯度下降法求最优解

梯度提升算法

        在梯度下降法中,我们可以看出,对于最终的最优解 ,是由初始值经过T次迭代之后得到的,这里设,则为:

                

        其中,  表示处泰勒展开式的一阶导数。

        在函数空间中,我们也可以借鉴梯度下降的思想,进行最优函数的搜索。对于模型的损失函数,为了能够求解出最优的函数,首先设置初始值为:

        以函数作为一个整体,与梯度下降法的更新过程一致,假设经过T次迭代得到最优的函数为:

                     

        其中,  为:

                     

         可以看到,这里的梯度变量是一个函数,是在函数空间上求解,而我们以前梯度下降算法是在多维参数空间中的负梯度方向,变量是参数。为什么是多维参数,因为一个机器学习模型中可以存在多个参数。而这里的变量是函数,更新函数通过当前函数的负梯度方向来修正模型,使模型更优,最后累加的模型为近似最优函数。

 

        总结:Gradient Boosting算法在每一轮迭代中,首先计算出当前模型在所有样本上的负梯度,然后以该值为目标训练一个新的弱分类器进行拟合并计算出该弱分类器的权重,最终实现对模型的更新。 

梯度提升原理推导

        在梯度提升的 步中,假设已经有一些不完美的模型(最初可以使用非常弱的模型,它只是预测输出训练集的平均值)。梯度提升算法不改变 ,而是通过增加估计器构建新的模型来提高整体模型的效果。那么问题来了,如何寻找函数呢?

        梯度提升方法的解决办法是认为最好的 应该使得:

                  

        或者等价于:

                 

        因此,梯度提升算法将与残差拟合。与其他boosting算法的变体一样,  修正它的前身  。我们观察到残差  是损失函数  的负梯度方向,因此可以将其推广到其他不是平方误差(分类或是排序问题)的损失函数。也就是说,梯度提升算法是一种梯度下降算法,只需要更改损失函数和梯度就能将其推广。

        当采用平方误差损失函数时,  ,其损失函数变为:

              

        其中,  是当前模型拟合数据的残差(residual)。在使用更一般的损失函数时,我们使用损失函数的负梯度在当前模型的值  作为提升树算法中残差的近似值,拟合一个梯度提升模型。当使用一般的损失函数时,为什么会出现上式的结果呢?下面我们就来详细阐述。 

         我们知道,对函数  在  处的泰勒展示式为:

                  

        因此,损失函数  在  处的泰勒展开式就是: 

                

         将  带入上式,可得:

                

        因此,应该对应于平方误差损失函数中的,这也是我们为什么说对于平方损失函数拟合的是残差;对于一般损失函数,拟合的就是残差的近似值。

5 对梯度提升算法的若干思考

5.1 梯度提升与梯度下降的区别和联系是什么?

        GBDT使用梯度提升算法作为训练方法,而在逻辑回归或者神经网络的训练过程中往往采用梯度下降作为训练方法,二者之间有什么联系和区别呢?

        下表是梯度提升算法和梯度下降算法的对比情况。可以发现,两者都是在每一轮迭代中,利用损失函数相对于模型的负梯度方向的信息来对当前模型进行更新,只不过在梯度下降中,模型是以参数化形式表示,从而模型的更新等价于参数的更新。而在梯度提升中,模型并不需要进行参数化表示,而是直接定义在函数空间中,从而大大扩展了可以使用的模型种类。

5.2 梯度提升和提升树算法的区别和联系?

       提升树利用加法模型与前向分歩算法实现学习的优化过程。当损失函数是平方误差损失函数和指数损失函数时,每一步优化是很简单的。但对一般损失函数而言,往往每一步优化并不那么容易。针对这一问题,Freidman提出了梯度提升(gradient boosting)算法。这是利用损失函数的负梯度在当前模型的值作为提升树算法中残差的近似值,拟合一个梯度提升模型。

5.3 梯度提升和GBDT的区别和联系?

  • 采用决策树作为弱分类器的Gradient Boosting算法被称为GBDT,有时又被称为MART(Multiple Additive Regression Tree)。GBDT中使用的决策树通常为CART。
  • GBDT使用梯度提升(Gradient Boosting)作为训练方法。

5.4 梯度提升算法包含哪些算法?

        Gradient Boosting是Boosting中的一大类算法,其中包括:GBDT(Gradient Boosting Decision Tree)、XGBoost(eXtreme Gradient Boosting)、LightGBM (Light Gradient Boosting Machine)和CatBoost(Categorical Boosting)等。 

5.5 对于一般损失函数而言,为什么可以利用损失函数的负梯度在当前模型的值作为梯度提升算法中残差的近似值呢?

        我们观察到在提升树算法中,残差 是损失函数的负梯度方向,因此可以将其推广到其他不是平方误差(分类或是排序问题)的损失函数。也就是说,梯度提升算法是一种梯度下降算法,不同之处在于更改损失函数求其负梯度就能将其推广。即,可以将结论推广为对于一般损失函数也可以利用损失函数的负梯度近似拟合残差

 

 

 

 

 梯度提升(Gradient Boosting)算法 - 知乎

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐