ARTICLE

梯度提升机

梯度提升机 (Gradient Boosting Machine, GBM) 梯度提升机是一种基于集成学习的监督学习算法,由 Friedman (2001) 系统化提出。它通过迭代地训练弱学习器(通常是决策树),使每个新学习器拟合前序模型整体损失函数的负梯度方向,从而逐步降低整体偏差。GBM 的核心思想是将提升 (boosting) 框架推广到任意可微损失函

浏览 0 更新 2025-11-08

梯度提升机 (Gradient Boosting Machine, GBM)

梯度提升机是一种基于集成学习的监督学习算法,由 Friedman (2001) 系统化提出。它通过迭代地训练弱学习器(通常是决策树),使每个新学习器拟合前序模型整体损失函数的负梯度方向,从而逐步降低整体偏差。GBM 的核心思想是将提升 (boosting) 框架推广到任意可微损失函数,因而兼具高预测精度与广泛的适用性,是结构化数据建模中最强大的算法之一。

核心思想:函数空间中的梯度下降

传统的梯度下降在参数空间中沿损失函数 L(θ) L(\theta) 的负梯度方向更新参数 θ \theta

θ(m)=θ(m1)ρθL(θ(m1))\theta^{(m)} = \theta^{(m-1)} - \rho \cdot \nabla_\theta L(\theta^{(m-1)})

GBM 将这一思想迁移到函数空间:将预测函数 F(x) F(x) 本身视为优化变量。给定训练数据 {(xi,yi)}i=1n \{(x_i, y_i)\}_{i=1}^n 和损失函数 L(y,F(x)) L(y, F(x)) ,在第 m m 步,GBM 计算当前模型 Fm1(x) F_{m-1}(x) 对每个样本的负梯度(即"伪残差"):

rim=[L(yi,F(xi))F(xi)]F(x)=Fm1(x)r_{im} = -\left[ \frac{\partial L(y_i, F(x_i))}{\partial F(x_i)} \right]_{F(x)=F_{m-1}(x)}

然后训练一个新的弱学习器 hm(x) h_m(x) 来拟合这些伪残差,并通过线搜索确定步长 ρm \rho_m

ρm=argminρi=1nL(yi,Fm1(xi)+ρhm(xi))\rho_m = \arg\min_\rho \sum_{i=1}^n L(y_i, F_{m-1}(x_i) + \rho \cdot h_m(x_i))

最终更新模型:

Fm(x)=Fm1(x)+νρmhm(x)F_m(x) = F_{m-1}(x) + \nu \cdot \rho_m \cdot h_m(x)

其中 ν(0,1] \nu \in (0, 1] 学习率 (learning rate),也称收缩 (shrinkage) 参数,通过衰减每棵树的贡献来防止过拟合。

算法流程

标准 GBM 的步骤如下:

  1. 初始化:以常数值初始化模型,通常为 F0(x)=argminci=1nL(yi,c) F_0(x) = \arg\min_c \sum_{i=1}^n L(y_i, c) 。对于平方损失,F0(x)=yˉ F_0(x) = \bar{y} ;对于绝对损失,F0(x)=median(y) F_0(x) = \text{median}(y)
  2. 迭代m=1,2,,M m = 1, 2, \ldots, M ): \begin{itemize}
  3. 计算伪残差 rim r_{im}
  4. 用决策树 hm(x) h_m(x) 拟合 {(xi,rim)} \{(x_i, r_{im})\} ,得到终端区域 Rjm R_{jm}
  5. 对每个终端区域 Rjm R_{jm} 计算最优常数拟合 γjm=argminγxiRjmL(yi,Fm1(xi)+γ) \gamma_{jm} = \arg\min_\gamma \sum_{x_i \in R_{jm}} L(y_i, F_{m-1}(x_i) + \gamma)
  6. 更新 Fm(x)=Fm1(x)+νjγjm1(xRjm) F_m(x) = F_{m-1}(x) + \nu \sum_j \gamma_{jm} \mathbf{1}(x \in R_{jm}) 。 \end{itemize}
  7. 输出:最终模型 FM(x) F_M(x)

损失函数与应用场景

不同损失函数对应不同的预测任务:

  • 回归:平方损失 L(y,F)=12(yF)2 L(y, F) = \frac{1}{2}(y - F)^2 ,伪残差恰为普通残差 yiF(xi) y_i - F(x_i) ;绝对损失 L(y,F)=yF L(y, F) = |y - F| ,伪残差为残差的符号,对异常值更稳健;Huber 损失结合二者优势。
  • 二分类:对数损失 (logistic loss / Bernoulli deviance) L(y,F)=log(1+e2yF) L(y, F) = \log(1 + e^{-2yF}) ,其中 y{1,+1} y \in \{-1, +1\}
  • 多分类:多项对数损失 (multinomial deviance),在每轮迭代中为每个类别训练一棵独立树。
  • 排序:LambdaRank 等基于梯度的排序损失,广泛用于搜索引擎和推荐系统。

重要变体:XGBoost、LightGBM 与 CatBoost

  • XGBoost (Chen \& Guestrin, 2016):在原 GBM 基础上引入二阶Taylor展开加速优化,显式加入正则化项(树的叶节点数和叶权重 L2 范数)控制复杂度,支持列抽样 (column subsampling) 和加权分位数草图近似分裂点搜索,大幅提升了计算效率和泛化能力。XGBoost 自问世以来几乎统治了结构化数据的竞赛和工业应用。
  • LightGBM (Ke et al., 2017):引入基于梯度的单侧采样 (Gradient-based One-Side Sampling, GOSS) 和互斥特征捆绑 (Exclusive Feature Bundling, EFB) 技术,使用叶子节点优先 (leaf-wise) 的生长策略替代传统按层生长 (level-wise),训练速度比 XGBoost 快数倍,尤其适用于高维大数据。
  • CatBoost (Prokhorenkova et al., 2018):通过有序提升 (ordered boosting) 和有序目标编码 (ordered target encoding) 解决类别特征的数据泄露和预测偏移问题,有效处理大量类别特征而无需显式的独热编码,且对超参数不敏感、默认表现优异。

正则化与超参数调优

GBM 的过拟合控制依赖多层次的超参数:

  • 树的数量 M M :过大则过拟合。通常采用早停法 (early stopping),在验证集上监控性能,连续若干轮不改善即终止训练。
  • 学习率 ν \nu (shrinkage):典型取值范围 [0.01,0.1] [0.01, 0.1] 。较小的 ν \nu 需要更多树,但泛化效果通常更佳。ν \nu M M 之间存在此消彼长的权衡。
  • 树深度与最小叶节点样本数:限制单棵树的复杂度。深度通常设为 3--8,最小叶节点样本数视数据集大小而定。
  • 子采样率 (subsample):每轮随机抽取部分样本训练,提高了计算效率并引入了随机性,具有类似Bootstrap的正则化效果。

与 Bagging 方法的比较

GBM 属于提升 (boosting) 家族,与以随机森林为代表的装袋 (bagging) 方法有本质区别:

  • 训练方式:Bagging 并行训练各棵独立的树(如 Bootstrap 抽样后各自拟合),最后取平均或多数投票;GBM 串行训练,每一棵树依赖前序全体的残差。
  • 偏差-方差权衡:Bagging 主要降低方差(对高方差、低偏差的复杂模型效果显著);Boosting 主要降低偏差(逐步拟合残差,将弱学习器组合为强学习器)。
  • 对噪声的敏感度:Boosting 更容易受标签噪声影响,因为算法会执着地尝试拟合异常点;Bagging 对噪声更为稳健。

重要性与局限

GBM 及其变体在 Kaggle 竞赛、金融风控、推荐系统、时序预测等领域取得了统治级表现。其核心优势在于预测精度极高、能够自动处理非线性关系和交互效应、无需严格的特征缩放。然而,GBM 也存在可解释性相对线性模型较弱、对超参数敏感、训练时间较长(尤其在大数据上)以及容易在噪声数据上过拟合等局限。实践中,通过合理的超参数调优和早停策略,GBM 在绝大多数结构化数据任务中是首选的基线模型和最终方案。