GBDT-f_t(x_i)取值问题的理解

530 阅读1分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 8 天,点击查看活动详情

本文不一定正确,都是一些个人理解

f_t(x_i) 可能存在下限

个人理解,在 ll 为平方误差的时候,ft(x)f_{t}(x) 是有范围的,我们对上面一阶泰勒展开的式子详细写开

l(Ht1(xi)+ft(xi))l(Ht1(xi))+l(Ht1(xi))Ht1(xi)×ft(xi)=[yiHt1(xi)]22[yiHt1(xi)]×ft(xi)\begin{aligned} l(H_{t-1}(x_i) + f_t(x_i) ) &\approx l(H_{t-1}(x_i)) + \frac{\partial{l(H_{t-1}(x_i))}}{\partial{H_{t-1}(x_i)}} \times f_t(x_i) \\ &= [y_{i}-H_{t-1}(x_{i})]^{2}-2[y_{i}-H_{t-1}(x_{i})]\times f_{t}(x_{i})\\ \end{aligned}

这里需要注意的是,等式左面是平方损失,本身就是平方项,因此必须要大于等于 0,因此其最小值就为 0

 [yiHt1(xi)]22[yiHt1(xi)]×ft(xi)=0ft(xi)=12[yiHt1(xi)]ft(xi)=14gt\begin{aligned} \ [y_{i}-H_{t-1}(x_{i})]^{2}-2[y_{i}-H_{t-1}(x_{i})]\times f_{t}(x_{i})&=0\\ f_{t}(x_{i})&=\frac{1}{2}[y_{i}-H_{t-1}(x_{i})]\\ f_{t}(x_{i})&=-\frac{1}{4}g_{t} \end{aligned}

当然如果 ll 使用其他的计算公式那么这个推导就不适用了

为什么取 f_t(x_i)=-g_t

从迭代的角度说,其实 ft(xi)f_{t}(x_{i}) 也没必要很大,因为此时梯度为 l(Ht1(xi))Ht1(xi)\begin{aligned} \frac{\partial{l(H_{t-1}(x_i))}}{\partial{H_{t-1}(x_i)}}\end{aligned},但经过更新后,也就是 Ht(x)=Ht1(x)+ηft(x)H_t(x) = H_{t-1}(x) + \eta f_t(x),梯度的值也会重新变化,也就是损失函数下降最快的方向就会随之变化,因此我们需要不断更新梯度

对于一个凸函数,用泰勒展开并令其等于 0 得到的

ft(xi)=14gtf_{t}(x_{i})=-\frac{1}{4}g_{t}

即使拟合的数完全符合这个规则,代入

Ht(x)=Ht1(x)+ft(x)H_t(x) = H_{t-1}(x) + f_t(x)

并不会直接使得损失函数为 0,泰勒展开是约等于,只是使得在当前梯度情况下的损失函数最小值,也就是满足

l(Ht1(xi))+l(Ht1(xi))Ht1(xi)×ft(xi)=0l(H_{t-1}(x_i)) + \frac{\partial{l(H_{t-1}(x_i))}}{\partial{H_{t-1}(x_i)}} \times f_t(x_i)=0

l(Ht1(xi)+ft(xi))0l(H_{t-1}(x_i) + f_t(x_i) )\ne 0

如果想要

l(Ht1(xi)+ft(xi))=0l(H_{t-1}(x_i) + f_t(x_i) )= 0

则需要拟合

ft(xi)=gtf_{t}(x_{i})=-g_{t}

感性的理解一下,也就是需要一步满足、

y=Ht1(xi)+ft(xi)y=H_{t-1}(x_{i})+f_{t}(x_{i})

这样损失函数就能直接为 0,但此时模型的泛化能力会很弱,整体模型偏差小,方差很大,也就是决策树模型,所以我们要在保证减小损失函数的前提下保证模型的泛化能力,因此就会有 η\eta 以及参数 max_depth 等来限制模型一次性达到损失函数的最小值