Boosing算法是一种加法模型,它包含一种残差逼近的思想。
F ( x ) = ∑ t = 0 T f t ( x ) F(x)=\sum_{t=0}^{T}f_t(x) F(x)=t=0∑Tft(x)
GBDT是一种较为经典的梯度提升树算法,包括Xgboost(Xgboost是GBDT的一个变种)。
GBDT 在函数空间中利用梯度下降法
进行优化。
Xgboost在函数空间中利用牛顿法
进行优化。且相比GBDT,Xgboost加入了正则项,使模型更加不容易过拟合。
简单的说,GBDT与Xgboost都是在泰勒展开式的基础上进行的。不同的是,GBDT的损失函数是一阶导数,而Xgboost是引入了海森矩阵的二阶导数,且加入了正则项。
这里首先介绍下两种优化方法。
优化方法
梯度下降法(Gradient descend method)
在机器学习任务中, 需要最小化损失函数 L ( θ ) L(\theta) L(θ),其中 θ \theta θ是要求解的模型参数。
梯度下降法常用来求解这种无约束最优化问题, 它是一种迭代方法:选取初值 θ 0 \theta^{0} θ0,不断迭代,更新 θ \theta θ的值,进行损失函数的极小化。
梯度下降法利用的一阶泰勒
展开。
- 迭代公式: θ t = θ t − 1 + Δ θ \theta^{t} = \theta^{t-1} + \Delta\theta θt=θt−1+Δθ
- 将 L ( θ t ) L(\theta^{t}) L(θt) 在 θ t − 1 \theta^{t-1} θt−1处进行一阶泰勒展开
L ( θ t ) = L ( θ t − 1 + Δ θ ) ≈ L ( θ t − 1 ) + L ′ ( θ t − 1 ) Δ θ L(\theta^{t}) = L(\theta^{t-1} + \Delta\theta) \approx L(\theta^{t-1}) + L^{'}(\theta^{t-1})\Delta\theta L(θt)=L(θt−1+Δθ)≈L(θt−1)+L′(θt−1)Δθ - 要使得 L ( θ t ) < L ( θ t − 1 ) L(\theta^{t}) < L(\theta^{t-1}) L(θt)<L(θt−1),可取: Δ θ = − α L ′ ( θ t − 1 ) \Delta\theta = -\alpha L^{'}(\theta^{t-1}) Δθ=−αL′(θt−1),则 θ t = θ t − 1 − α L ′ ( θ t − 1 ) \theta^{t} = \theta^{t-1} - \alpha L^{'}(\theta^{t-1}) θt=θt−1−αL′(θt−1)
这里 α \alpha α是步长,可以通过line search确定,但一般直接赋予一个小的数。
牛顿法(Newton’s method)
将 L ( θ t ) L(\theta^{t}) L(θt) 在 θ t − 1 \theta^{t-1} θt−1处进行二阶泰勒展开
L ( θ t ) ≈ L ( θ t − 1 ) + L ′ ( θ t − 1 ) Δ θ + L ′ ′ ( θ t − 1 ) Δ θ 2 / 2 L(\theta^{t}) \approx L(\theta^{t-1}) + L^{'}(\theta^{t-1})\Delta\theta + L^{''}(\theta^{t-1})\Delta\theta^{2}/2 L(θt)≈L(θt−1)+L′(θt−1)Δθ+L′′(θt−1)Δθ2/2
为了简化分析过程,假设参数是标量(即 θ \theta θ只有一维),则可将一阶和二阶导数分别记为 g g g和 h h h:
L ( θ t ) ≈ L ( θ t − 1 ) + g Δ θ + h Δ θ 2 2 L(\theta^{t}) \approx L(\theta^{t-1}) + g\Delta\theta + h\frac{\Delta\theta^{2}}{2} L(θt)≈L(θt−1)+gΔθ+h2Δθ2
要使得 L ( θ t ) L(\theta^{t}) L(θt)极小,即让 g Δ θ + h Δ θ 2 2 g\Delta\theta + h\frac{\Delta\theta^{2}}{2} gΔθ+h2Δθ2极小,
可令 ∂ ( g Δ θ + h Δ θ 2 2 ) ∂ Δ θ = 0 \frac{\partial (g\Delta\theta + h\frac{\Delta\theta^{2}}{2})}{\partial \Delta\theta} = 0 ∂Δθ