梯度提升与梯度下降

随声附和 提交于 2020-01-15 00:00:55

梯度是什么

“梯度提升”与“梯度下降”中的“梯度”是什么?梯度是损失函数对需要求解的模型参数的导数。梯度方向是参数导数中绝对值最大的方向,因此梯度方向有两个,一个是梯度最大方向,另一个是梯度最小方向。

梯度是谁的

“梯度”是目标函数在当前点的梯度(不是参数的梯度),因此有了目标函数、样本点,才会有梯度。

梯度下降

在参数空间中,梯度下降是指目标函数在当前点的取值下降(最小化目标函数),参数自身沿着负梯度的方向下降。因此梯度下降,是目标函数对最优参数的搜索,其变量是参数。
梯度下降通常用来求解这种无约束最优化问题,它是一种迭代方法:初选取参数初值(还包括算法终止距离参数和学习率参数),不断迭代,更新参数的值,进行损失函数的最小化。
为什么梯度的负方向是函数局部下降最快的方向?下面开始证明。
假设迭代公式为:θt=θt1+Δθ\theta_{t}=\theta_{t-1}+\Delta \theta,将L(θt)L\left(\theta_{t}\right)θt1\theta_{t-1}处进行泰勒展开:
L(θt)=L(θt1+Δθ) L(θt1)+L(θt1)Δθ \begin{aligned} L\left(\theta_{t}\right) &=L\left(\theta_{t-1}+\Delta \theta\right) \ \approx L\left(\theta_{t-1}\right)+L^{\prime}\left(\theta_{t-1}\right) \Delta \theta \end{aligned}
故:
L(θt1+Δθ)L(θt1)L(θt1)Δθ L\left(\theta_{t-1}+\Delta \theta\right)-L\left(\theta_{t-1}\right) \approx L^{\prime}\left(\theta_{t-1}\right) \Delta \theta
L(θt1)ΔθL^{\prime}\left(\theta_{t-1}\right) \Delta \theta是函数值的变化量,因为L(θt1)ΔθL^{\prime}\left(\theta_{t-1}\right)和 \Delta \theta均为向量,因此L(θt1)ΔθL^{\prime}\left(\theta_{t-1}\right) \Delta \theta是两个向量进行点积,而向量进行点积绝对值最大时,是两者共线的时候。故L(θt1)ΔθL^{\prime}\left(\theta_{t-1}\right)和 \Delta \theta方向相同,点积正方向最大;若L(θt1)ΔθL^{\prime}\left(\theta_{t-1}\right)和 \Delta \theta反向,点积负方向最大。
因此,梯度的负方向是局部下降最快的方向,反之,梯度(正)方向是函数局部上升最快的方向。
所以,Δθ=αL(θt1)\Delta \theta=-\alpha L^{\prime}\left(\theta_{t-1}\right),此时α\alpha是学习率(也称为步长)。
对于最终的最优解θ\theta^{*}θ=t=0Tαt[δL(θ)δθ]θ=θt1\theta^{*}=\sum_{t=0}^{T} \alpha_{t} *\left[-\frac{\delta L(\theta)}{\delta \theta}\right]_{\theta=\theta_{t-1}}

梯度提升

在函数空间中,可以借鉴梯度下降的思想,进行最优函数的搜索。梯度提升实际仍是指对于模型的目标函数在当前点的取值提升(有说梯度提升仅指GBDT,对“新函数求导”,让“新函数”沿着梯度方向变化)。
同样,ft(x)=αtgt(x)=αt[δL(y,F(x))δF(x)]F(x)=Ft1(x)f_{t}(x)=-\alpha_{t} g_{t}(x)=-\alpha_{t} *\left[\frac{\delta L(y, F(x))}{\delta F(x)}\right]_{F(x)=F_{t-1}(x)}
可以看出,这个梯度变量是一个函数,通过当前函数的负梯度方向来更新函数以修正模型,是模型更优,最后累加(加法模型)的模型为近似最优函数。

梯度提升原理:
假设已经有T(0≤t≤T)个不完美的模型Ft1F_{t-1}。梯度提升算法不改变Ft1F_{t-1},而是通过增加估计其f构建新的模型Ft(x)=Ft1(x)+f(x)F_{t}(x) = F_{t-1}(x)+f(x)来提高整体模型的效果。如何找到最优的f(x)呢?最好的f(x)应该使得Ft(x)=Ft1(x)+f(x)=yF_{t}(x)=F_{t-1}(x)+f(x)=y,或者等价于f(x)=yFt1(x)f(x)=y-F_{t-1}(x)
因此梯度提升算法是将ff与残差yFt1(x)y-F_{t-1}(x)拟合。可以观察到,残差yFt1(x)y-F_{t-1}(x)是损失函数1/2(yFt1(x))21/2(y-F_{t-1}(x))^2的负梯度方向,因此可以将其推广到其他不是平方误差(分类或者排序问题)的损失函数。也就是说,梯度提升算法实际上也是一种梯度下降算法,只需要更改损失函数和梯度就可以将其推广。
当采用平方误差损失函数时,L(y,f(x))=(yf(x))2L(y, f(x))=(y-f(x))^{2},其损失函数变为:L(y,ft(x))=L(y,ft1(x)+T(x;θt))=(yft1(x)T(x;θt))2=(rT(x;θt))2 \begin{array}{l} {L\left(y, f_{t}(x)\right)} \\ {=L\left(y, f_{t-1}(x)+T\left(x ; \theta_{t}\right)\right)} \\ {=\left(y-f_{t-1}(x)-T\left(x ; \theta_{t}\right)\right)^{2}} \\ {=\left(r-T\left(x ; \theta_{t}\right)\right)^{2}} \end{array}
其中rT(x;θt){r-T\left(x ; \theta_{t}\right)}是当前模型拟合数据的残差。
在使用更一般的损失函数时,利用损失函数的负梯度在当前模型的值
[δL(y,F(x))δF(x)]F(x)=Ft1(x)-\left[\frac{\delta L(y, F(x))}{\delta F(x)}\right]_{F(x)=F_{t-1}(x)}作为提升树算法中残差的近似值,拟合一个梯度提升模型。下面开始证明。
对函数f(x)f(x)x=xt1x=x_{t-1}处的泰勒展开式为:
f(x)f(xt1)+f(xt1)(xxt1)f(x) \approx f(x_{t-1})+f^{\prime}(x_{t-1})(x-x_{t-1}),因此,损失函数L(y,F(x))L(y,F(x))F(x)=Ft1(x)F(x)=F_{t-1}(x)处的泰勒展开式为:
L(y,F(x))L(y,Ft1(x))+[δL(y,F(x))δF(x)]F(x)=Ft1(x)(F(x)Ft1(x))L(y, F(x)) \approx L(y, F_{t-1}(x))+\left[\frac{\delta L(y, F(x))}{\delta F(x)}\right]_{F(x)=F_{t-1}(x)}(F(x)-F_{t-1}(x))F(x)=Ft(x)F(x)=F_t(x)带入上式,可得:
L(y,Ft(x))L(y,Ft1(x))+[δL(y,F(x))δF(x)]F(x)=Ft1(x)(Ft(x)Ft1(x))L(y, F_{t}(x)) \approx L(y, F_{t-1}(x))+\left[\frac{\delta L(y, F(x))}{\delta F(x)}\right]_{F(x)=F_{t-1}(x)}(F_{t}(x)-F_{t-1}(x))
因此,[δL(y,F(x))δF(x)]F(x)=Ft1(x)-\left[\frac{\delta L(y, F(x))}{\delta F(x)}\right]_{F(x)=F_{t-1}(x)}应该对应于平方误差损失函数中的yFt1(x)y-F_{t-1}(x),故对于平方损失函数拟合的是残差,对于一般损失函数,拟合的是残差的近似值。

总结

1、参数与模型
梯度提升与梯度下降算法,都是指每一轮迭代中,利用目标函数相对于模型的负梯度方向的信息来对当前模型进行更新,只是在梯度下降中,函数是以参数化形式表示,参数的更新等价于模型的更新;而在梯度提升中,模型直接定义在函数空间中,函数的优化等价于模型的优化,大大扩展了可以使用的模型种类。
2、近似残差
在平方误差损失函数和指数损失函数中,损失函数的负梯度在当前模型的值作为梯度提升算法中的残差,而在其他一般损失函数中,残差yFt1(x)y-F_{t-1}(x)是目标函数1/2(yFt1(x))21/2(y-F_{t-1}(x))^2的负梯度方向,因此可以将其推广到其他不是平方误差的目标函数。
梯度提升算法是一种梯度下降算法,不同之处在于更改损失函数和求其负梯度就能将其推广,即可以将结论推广为对于一般损失函数也可以利用损失函数的负梯度近似拟合残差。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!