假设我们要拟合函数:
损失函数仍然是平方误差:
初始预测函数取常数:
学习率 ,为了让迭代过程可见。
2️⃣ 迭代 1
一阶梯度和二阶梯度:
二阶梯度提升更新公式:
结果:
| x | y | f1(x) |
|---|---|---|
| 1 | 1 | 0.5 |
| 2 | 4 | 2 |
残差还没完全消失,需要下一次迭代。
3️⃣ 迭代 2
更新梯度:
二阶梯度提升更新:
结果:
| x | y | f2(x) |
|---|---|---|
| 1 | 1 | 0.75 |
| 2 | 4 | 3 |
可以看到,函数逐步逼近 ,需要多次迭代才能完全拟合。
4️⃣ 迭代公式的通用形式
对于平方误差,二阶梯度提升更新公式等价于:
- 其中
作用解释:
- 公式不是直接求函数的全局偏导数最小值,而是沿负梯度方向做二阶近似的局部更新
- 当损失函数比较复杂(非平方误差)时,二阶梯度会对步长进行校正,使更新更稳定、收敛更快
- 对平方误差,这个公式简化为“沿残差方向更新”,就是梯度下降。
5️⃣ 总结
- 学习率 可以保证多次迭代逼近目标函数,而不是一次性拟合
- 二阶梯度提升的公式作用是沿梯度方向更新,并用二阶导校正步长
- 对连续函数可以写成代数式,迭代公式:
- 多次迭代可以逼近复杂函数(如 ),每次更新都是沿当前梯度方向的一小步。
如果你愿意,我可以画一个图,把 f0→f1→f2→y=x^2 的迭代过程可视化,让你直观理解二阶梯度更新是怎么逼近目标函数的。
你希望我画吗?
明白,你想要一个**梯度提升(Gradient Boosting)**的实际数值例子,并且想理解 预测函数 是如何更新的,以及 泰勒展开在其中的作用。我们用一个小例子一步步演示。
1️⃣ 问题设置
假设我们有一个回归问题,目标是预测 ,数据如下:
| x | y |
|---|---|
| 1 | 3 |
| 2 | 5 |
| 3 | 7 |
我们用梯度提升模型,初始预测函数:
损失函数:平方误差
2️⃣ 梯度计算(负梯度)
梯度提升的核心是拟合负梯度。对于平方损失:
负梯度就是:
第一次迭代:
计算残差(负梯度):
| x | y | f0(x) | r = y - f0(x) |
|---|---|---|---|
| 1 | 3 | 5 | -2 |
| 2 | 5 | 5 | 0 |
| 3 | 7 | 5 | 2 |
3️⃣ 拟合一个弱学习器
假设我们的弱学习器是一棵简单的回归树,这里为了演示,我们直接用 一阶线性函数拟合残差:
假设我们得到一个简单拟合:
- x=1 → h1= -1
- x=2 → h1=0
- x=3 → h1=1
(和残差近似匹配,步长 )
4️⃣ 更新预测函数
梯度提升的更新公式:
这里 ,所以:
预测结果:
| x | f1(x) |
|---|---|
| 1 | 4 |
| 2 | 5 |
| 3 | 6 |
更新后的残差:
可以看到残差缩小了,模型更接近真实值。
5️⃣ 泰勒展开的作用
对于一般损失 ,梯度提升用二阶泰勒展开做近似:
其中:
- (梯度)
- (二阶导)
然后通过拟合 最小化泰勒展开的二次近似损失。
- 对平方损失,二阶导 ,于是负梯度就是残差,直接拟合即可。
- 对其他损失(如对数损失),就需要考虑二阶导来调整拟合。
✅ 总结
- 梯度提升每步更新函数
- 负梯度 是“残差”,用弱学习器拟合
- 泰勒展开提供二阶近似,帮助拟合复杂损失函数时更精确更新
- 迭代多步,残差越来越小,预测越来越接近真实值