- 我的个人微信公众号:Microstrong
微信公众号ID: MicrostrongAI
微信公众号介绍: Microstrong(小强)同学主要研究机器学习、深度学习、计算机视觉、智能对话系统相关内容,分享在学习过程中的读书笔记!期待您的关注,欢迎一起学习交流进步! - 我的知乎主页: https://www.zhihu.com/people/MicrostrongAI/activities
- Github: https://github.com/Microstrong0305
- 个人博客: https://blog.youkuaiyun.com/program_developer
- 本文首发在我的微信公众号里,地址:https://mp.weixin.qq.com/s/Ods1PHhYyjkRA8bS16OfCg,如有公式和图片不清楚,可以在我的微信公众号里阅读。
1. 引言
提升树利用加法模型与前向分歩算法实现学习的优化过程。当损失函数是平方误差损失函数和指数损失函数时,每一步优化是很简单的。但对一般损失函数而言,往往每一步优化并不那么容易。针对这一问题,Freidman提出了梯度提升(gradient boosting)算法。Gradient Boosting是Boosting中的一大类算法,它的思想借鉴于梯度下降法,其基本原理是根据当前模型损失函数的负梯度信息来训练新加入的弱分类器,然后将训练好的弱分类器以累加的形式结合到现有模型中。采用决策树作为弱分类器的Gradient Boosting算法被称为GBDT,有时又被称为MART(Multiple Additive Regression Tree)。GBDT中使用的决策树通常为CART。
2. 梯度下降法
在机器学习任务中,需要最小化损失函数 L ( θ ) L(\theta) L(θ),其中 θ \theta θ 是要求解的模型参数。梯度下降法通常用来求解这种无约束最优化问题,它是一种迭代方法:选取初值 θ 0 \theta_{0} θ0 ,不断迭代,更新 θ \theta θ 的值,进行损失函数的极小化。这里我们还需要初始化算法终止距离 ε \varepsilon ε 以及步长 α \alpha α 。
使用梯度下降法求解的基本步骤为:
(1)确定当前位置的损失函数的梯度,对于 θ t \theta_{t} θt ,其梯度表达式如下: δ L ( θ ) δ θ t \frac{\delta L(\theta) }{\delta \theta_{t}} δθtδL(θ)
(2)用步长 α \alpha α 乘以损失函数的梯度,得到当前位置下降的距离,即: α ∗ δ L ( θ ) δ θ t \alpha \ast\frac{\delta L(\theta) }{\delta \theta_{t}} α∗δθtδL(θ)
(3)确定是否 θ t \theta_{t} θt 梯度下降的距离小于 ε \varepsilon ε ,如果小于 ε \varepsilon ε 则算法终止,当前的 θ t \theta_{t} θt即为最终结果。否则进入步骤(4)。
(4)更新 θ t \theta_{t} θt ,其更新表达式如下。更新完毕后继续转入步骤(1)。
θ t = θ t − α ∗ L ( θ ) δ θ t \theta_{t} = \theta_{t} - \alpha * \frac{L(\theta) }{\delta \theta_{t}} θt=θt−α∗δθtL(θ)
我们也可以用泰勒公式表示损失函数,用更数学的方式解释梯度下降法:
- 迭代公式: θ 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 ) Δ θ \begin{aligned} L(\theta_{t})& = L(\theta_{t-1} + \Delta\theta) \\ & \approx L(\theta_{t-1}) + L^{'}(\theta_{t-1})\Delta\theta \end{aligned} 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(θ