真实面经题目 · 原创解析

GBDT 的实现流程是什么?

GBDT 的实现流程是不断训练回归树去拟合当前模型的负梯度或残差,并把新树按学习率累加到集成模型中。回答时要讲清初始化、计算伪残差、建树、叶子权重、模型更新和停止条件。

出现于:百度 · 算法

60 秒回答模板

GBDT 可以理解为加法模型加梯度下降。第一步用一个常数初始化模型,比如回归用均值、二分类用 log odds;第二步计算当前模型在每个样本上的负梯度,也就是下一棵树要拟合的目标;第三步训练一棵 CART 回归树划分样本;第四步为每个叶子计算最优输出值;第五步用学习率把这棵树加到已有模型上。重复这个过程直到达到树数、损失不再下降或早停条件。

考点 加法模型
难度 算法岗真实面经题
回答目标 讲清方法、取舍和追问

深入解析

01

初始化模型

GBDT 不是一开始就训练很多树,而是先用一个简单常数作为初始预测。平方损失下常用标签均值,二分类逻辑损失下常用正负样本比例对应的 log odds。

02

计算负梯度

每轮迭代都基于当前模型计算损失函数对预测值的梯度。下一棵树的训练目标不是原始标签,而是负梯度方向;平方损失下这个目标刚好等价于残差。

03

训练回归树

GBDT 每一轮通常训练 CART 回归树,用特征切分把样本分到不同叶子。切分目标是让叶子内的负梯度更一致,从而让这棵树能解释当前模型没有拟合好的部分。

04

更新叶子权重

树结构确定后,要为每个叶子计算一个输出值。简单平方损失可取叶子内残差均值,复杂损失通常需要用一阶或二阶信息近似求解最优叶子分数。

05

累加和早停

新树会乘以学习率再加到已有模型中。学习率、树深、叶子数、采样比例和树数量共同控制泛化能力;验证集早停能防止树越加越多导致过拟合。

易错点

  • 不要把 GBDT 说成每棵树都直接拟合原始标签,它拟合的是当前损失的负梯度。
  • 不要只说残差,分类损失下更准确的说法是负梯度或伪残差。
  • 不要忽略学习率,树的输出通常要按步长缩放后再累加。
  • 不要把 GBDT 和随机森林都归成简单多树投票,训练依赖关系完全不同。

面试官追问

GBDT 为什么能处理非线性特征关系?

每棵树通过多次特征切分形成分段函数,多棵树累加后能表达复杂的非线性和特征交互,因此比单一线性模型表达能力更强。

GBDT 和随机森林有什么区别?

随机森林是 bagging 思路,多棵树相对独立并行训练,主要降方差;GBDT 是 boosting 思路,后一棵树依赖前面模型的错误,主要降偏差。

GBDT 容易过拟合时怎么处理?

可以降低树深、增加叶子最小样本数、减小学习率、使用子采样、限制树数量、加入早停,并通过验证集监控泛化误差。