GBDT 中的前向分布算法 和贪婪学习 ,可以从「加法模型的本质」入手,用大白话 + 生活类比的方式讲解,全程结合 GBDT 的训练过程,零基础也能理解。
一、先铺垫:GBDT 是一种「加法模型」
前向分布算法是专门为加法模型设计的训练方法,所以我们先明确什么是加法模型。
GBDT 的最终模型可以写成这样:fM(x)=f0(x)+η⋅h1(x)+η⋅h2(x)+...+η⋅hM(x)
- f0(x):初始模型(比如所有样本标签的均值);
- h1(x)∼hM(x):第 1~M 棵 CART 回归树(基学习器);
- η:学习率,控制每棵树的贡献权重;
- 核心特点 :最终模型 = 多个基模型的加权累加。
类比:加法模型就像叠积木,最终的模型是一块一块积木(基模型)叠出来的,积木越多,模型的预测效果越好。
二、前向分布算法:加法模型的「分步训练框架」
1. 定义(大白话版)
前向分布算法的核心是:不一次性训练所有基模型,而是分步骤迭代训练 ------ 每一步只训练 1 个新的基模型,前面已经训练好的基模型全部固定不动。
这个算法的目的是简化加法模型的优化难度------ 如果要同时优化 M 棵树的参数,计算量会爆炸;而分步训练,每一步只优化 1 棵树,就把复杂问题拆成了 M 个简单问题。
2. 核心步骤(结合 GBDT 理解)
我们用 GBDT 回归任务的训练过程,看前向分布算法是怎么工作的:
| 步骤 | 操作 | 前向分布的体现 |
|---|---|---|
| 1 | 初始化初始模型 f0(x)=所有样本标签的均值 | 先搭好第一块「基础积木」 |
| 2 | 训练第 1 棵树 h1(x):用残差 yi−f0(xi) 作为新标签,找最优划分 | 只优化 h1(x),f0(x) 固定不变 |
| 3 | 更新模型:f1(x)=f0(x)+η⋅h1(x) | 叠上第 1 块新积木,形成新的模型 |
| 4 | 训练第 2 棵树 h2(x):用残差 yi−f1(xi) 作为新标签 | 只优化 h2(x),f0(x) 和 h1(x) 完全固定 |
| 5 | 重复步骤 3-4,直到生成 M 棵树 | 每一步只加 1 块新积木,前面的积木绝不改动 |
3. 生活类比:包饺子的分步流程
前向分布算法就像包饺子:
- 第一步:准备馅料(固定,对应 f0(x));
- 第二步:擀饺子皮(只做这一步,馅料固定);
- 第三步:包饺子(只做这一步,馅料和饺子皮固定);
- 第四步:煮饺子(只做这一步,前面的步骤固定)。
你不会在擀皮的时候回头改馅料,也不会在煮饺子的时候回头重新擀皮 ------每一步只做一件事,做完就固定,绝不返工,这就是前向分布算法的核心。
三、贪婪学习:每一步都选「眼前最优」的策略
1. 定义(大白话版)
贪婪学习是一种决策策略 :在每一步选择方案时,只追求当前步骤的最优解,不考虑这个选择对未来步骤的影响。
它的特点是:局部最优 ≠ 全局最优 ,但胜在计算简单、速度快------ 对于 GBDT 这种需要迭代数百次的模型,贪婪策略是性价比最高的选择。
2. GBDT 中贪婪学习的体现
GBDT 每一轮训练新树 hm(x) 时,完全遵循贪婪策略,具体表现为:
- 目标贪婪 :训练第 m 棵树的唯一目标,是最大程度拟合当前的残差(让这棵树的预测值和残差的平方误差最小);
- 选择贪婪 :在选择「哪个特征 + 哪个阈值」划分树时,只选当前能让基尼系数 / 平方误差最小的划分方案,不管这个划分会不会让后面的树更难训练。
3. 生活类比:走迷宫的「贪心策略」
假设你在一个迷宫里,目标是走到出口,你用贪婪策略的话:
- 每到一个岔路口,你只选看起来离出口最近的那条路(当前最优);
- 你不会提前规划整条路线,也不会考虑这条近路后面会不会是死胡同;
- 优点:不用费脑想全局,走一步看一步,效率高;
- 缺点:可能走进死胡同(局部最优≠全局最优),但在 GBDT 中,后续的树可以「修正」这个错误。
4. GBDT 中贪婪学习的具体例子(学生成绩数据集)
在 GBDT 训练第 1 棵树时:
- 残差是 yi−f0(xi);
- 遍历「学习时长」「作业完成率」两个特征的所有候选阈值;
- 发现「学习时长 = 2.5」这个划分,能让残差的平方误差降到 0(当前最优);
- 贪婪策略会直接选这个划分,不会考虑这个划分会不会让第 2 棵树没残差可拟合 ------ 反正第 2 棵树的事,等第 2 轮再考虑。
四、前向分布算法 & 贪婪学习:GBDT 的「黄金搭档」
| 概念 | 定位 | 在 GBDT 中的作用 |
|---|---|---|
| 前向分布算法 | 训练框架 | 把「同时训练 M 棵树」的复杂问题,拆成「逐次训练 1 棵树」的简单问题 |
| 贪婪学习 | 每一步的决策策略 | 让每一步训练树时,能快速找到当前最优的划分方案,保证训练效率 |
两者结合的效果:
- 高效:每一步只做一件事,且只选当前最好的选项,训练速度快;
- 实用:虽然是局部最优,但通过迭代多轮(增加树的数量),最终能逼近全局最优;
- 易实现:算法逻辑简单,工程上容易落地(这也是 GBDT 能广泛应用的原因之一)。
五、关键澄清:贪婪学习的「小缺点」
贪婪学习的「局部最优」会不会导致 GBDT 效果差?
- 不会。因为 GBDT 是串行迭代的 ------ 即使第 m 棵树选了一个「不完美」的划分,第 m+1 棵树可以拟合这个划分带来的新残差,相当于「修正错误」;
- 只要树的数量 M 足够多,模型就能不断修正误差,最终达到很好的预测效果。