当前位置:网站首页>GBDT与xgb区别,以及梯度下降法和牛顿法的数学推导
GBDT与xgb区别,以及梯度下降法和牛顿法的数学推导
2020-11-06 01:28:00 【IT界的小小小学生】
为什么要介绍梯度下降法和牛顿法那?
这里提及两个算法模型GBDT和XGBoost,两个都是boosting模型。
GBDT和xgb的目标函数是不同的,同时针对其目标函数中的误差函数 L(θ) 的拟合方式也有差异:
- GBDT利用一阶泰勒展开两项,做一个近似
- xgboost利用二阶泰勒展开三项,做一个近似
言为之意, - GBDT在函数空间中利用梯度下降法进行优化
- XGBoost在函数空间中用牛顿法进行优化
最终的目标函数只依赖于每个数据点的在误差函数上的一阶导数和二阶导数。
针对误差函数可以自定义,比如说平方损失函数: ( y i , y i ) = ( y i − y i ) 2 (yi,y^i) = (yi−y^i)2 (yi,yi)=(yi−yi)2,或logistic损失函数
更多介绍建议去听:https://study.163.com/course/courseMain.htm?courseId=1006401020&share=2&shareId=400000000645014
1. 梯度下降法的推导
梯度下降法在机器学习和深度学习里用的非常多,一般教程或者教材在解释梯度下降法的时候会用形象化的方式(二次曲线、下凸面等),想必大家都知道如何用形象化的方式来说明梯度下降法的有效性。这里,我就不再赘述这种形象化的解释了。我这里使用数学推导来证明梯度下降法的有效性。
一元函数的泰勒展开大家应该都知道,公式如下:
f ( x ) = f ( x 0 ) + f ’ ( x 0 ) 1 ! ( x − x 0 ) + f ’ ’ ( x 0 ) 2 ! ( x − x 0 ) 2 + f ’ ’ ’ ( x 0 ) 3 ! ( x − x 0 ) 3 + … f(x)=f(x_0)+\frac{f’(x_0)}{1!}(x-x_0)+\frac{f’’(x_0)}{2!}(x-x_0)^2+\frac{f’’’(x_0)}{3!}(x-x_0)^3+… f(x)=f(x0)+1!f’(x0)(x−x0)+2!f’’(x0)(x−x0)2+3!f’’’(x0)(x−x0)3+…
不妨只取右边式子的前两项,也就是一个“约等于”的结果:
f ( x ) = f ( x 0 ) + f ’ ( x 0 ) 1 ! ( x − x 0 ) f(x)=f(x_0)+\frac{f’(x_0)}{1!}(x-x_0) f(x)=f(x0)+1!f’(x0)(x−x0)
记: Δ x = x − x 0 \Delta x=x-x_0 Δx=x−x0,上式变为:
f ( x ) = f ( x 0 ) + f ’ ( x 0 ) 1 ! Δ x f(x)=f(x_0)+\frac{f’(x_0)}{1!}\Delta x f(x)=f(x0)+1!f’(x0)Δx
我们的目标是在迭代过程中让下式恒成立,也就是说希望迭代过程中函数值会逐渐减小,用数学语言描述就是: f ( x n + 1 ) ≤ f ( x n ) f(x_{n+1})\leq f(x_{n}) f(xn+1)≤f(xn)
容易想到,应该构造:
Δ x = − f ’ ( x 0 ) \Delta x=-f’(x_0) Δx=−f’(x0)
此时:
f ( x ) = f ( x 0 ) − f ’ ( x 0 ) 2 f(x)=f(x_0)-f’(x_0)^2 f(x)=f(x0)−f’(x0)2
写成迭代形式:
f ( x n + 1 ) = f ( x n ) − f ’ ( x n ) 2 f(x_{n+1})=f(x_{n})-f’(x_{n})^2 f(xn+1)=f(xn)−f’(xn)2
由于 f ’ ( x ) 2 ≥ 0 f’(x)^2\geq 0 f’(x)2≥0,我们就完成了对于梯度下降有效性的证明。从上述步骤归纳出来的参数迭代更新的公式如下:
f ( x n + 1 ) = f ( x n ) − f ’ ( x n ) 2 f(x_{n+1})=f(x_{n})-f’(x_{n})^2 f(xn+1)=f(xn)−f’(xn)2
以上步骤是在一元函数上证明了梯度下降的有效性。容易推广到多元函数。另外,在多元函数中,还可以补充证明梯度方向是下降最快的方向。
详见:知乎为什么梯度下降能找到最小值?
2. 牛顿法
说完了梯度下降法,顺便介绍下牛顿法的推导。因为牛顿法也是通过泰勒展开推导出来的。
继续看泰勒展开:
f ( x ) = f ( x 0 ) + f ’ ( x 0 ) 1 ! ( x − x 0 ) + f ’ ’ ( x 0 ) 2 ! ( x − x 0 ) 2 + f ’ ’ ’ ( x 0 ) 3 ! ( x − x 0 ) 3 + … f(x)=f(x_0)+\frac{f’(x_0)}{1!}(x-x_0)+\frac{f’’(x_0)}{2!}(x-x_0)^2+\frac{f’’’(x_0)}{3!}(x-x_0)^3+… f(x)=f(x0)+1!f’(x0)(x−x0)+2!f’’(x0)(x−x0)2+3!f’’’(x0)(x−x0)3+…
依旧,我们取右式的前2项:
f ( x ) = f ( x 0 ) + f ’ ( x 0 ) 1 ! ( x − x 0 ) f(x)=f(x_0)+\frac{f’(x_0)}{1!}(x-x_0) f(x)=f(x0)+1!f’(x0)(x−x0)
对等式两边取导数:
f ’ ( x ) = f ’ ( x 0 ) + f ’ ’ ( x 0 ) 1 ! ( x − x 0 ) f’(x)=f’(x_0)+\frac{f’’(x_0)}{1!}(x-x_0) f’(x)=f’(x0)+1!f’’(x0)(x−x0)
f ’ ( x ) = f ’ ( x 0 ) + f ’ ’ ( x 0 ) 1 ! Δ x f’(x)=f’(x_0)+\frac{f’’(x_0)}{1!}\Delta x f’(x)=f’(x0)+1!f’’(x0)Δx
根据微积分的性质, f ( x ) f(x) f(x)取最小值时,有 f ’ ( x ) = 0 f’(x)=0 f’(x)=0,我们把这个性质代入上面的式子,有:
0 = f ’ ( x 0 ) + f ’ ’ ( x 0 ) 1 ! Δ x 0=f’(x_0)+\frac{f’’(x_0)}{1!}\Delta x 0=f’(x0)+1!f’’(x0)Δx
Δ x = − f ’ ( x 0 ) f ’ ’ ( x 0 ) \Delta x=-\frac{f’(x_0)}{f’’(x_0)} Δx=−f’’(x0)f’(x0)
这样我们就得到了牛顿法的参数迭代更新公式如下:
x n + 1 = x n − f ’ ( x n ) f ’ ’ ( x n ) x_{n+1}=x_{n}-\frac{f’(x_n)}{f’’(x_n)} xn+1=xn−f’’(xn)f’(xn)
3. 梯度下降法和牛顿法的异同
从上面的证明过程可以看出,梯度下降法和牛顿法虽然都可以用泰勒展开推导,但推导所依据的思想还是有一点不一样的。
在实际运用中,牛顿法和梯度下降法都是广泛应用于机器学习中的。两者的区别其实很多博客都有写,比如:梯度下降or拟牛顿法?
4. 拟牛顿法
在上面牛顿法的参数迭代更新公式中,我们可以看到 f ’ ’ ( x 0 ) f’’(x_0) f’’(x0)是位于分母部分的。记住,上面的数学推导是用的一元函数,对于多元函数,这个分母存在相当于要计算Hessian矩阵的逆矩阵,这是非常困难且耗费时间的。因此,很多牛顿算法的变形出现了,这类变形统称拟牛顿算法。BFGS是用迭代法去近似计算海森矩阵。而BFGS需要额外储存近似的那个海森矩阵,所以有了改进版L-BFGS。

版权声明
本文为[IT界的小小小学生]所创,转载请带上原文链接,感谢
https://vip01.blog.csdn.net/article/details/85855497
边栏推荐
- 5.5 ControllerAdvice注解 -《SSM深入解析与项目实战》
- leetcode之赎金信
- 9.2.3 loadcustomvfs method (XML configuration builder analysis) - SSM in depth analysis and project practice
- 刚毕业不久,接私活赚了2万块!
- iptables基础原理和使用简介
- 8.1.3 handling global exceptions through exceptionhandler (Global exception handling) - SSM in depth analysis and project practice
- 深度解读智能推荐系统搭建之路 | 会展云技术揭秘
- 解決pl/sql developer中資料庫插入資料亂碼問題
- 直接保存文件至 Google Drive 并用十倍的速度下载回来
- 如何将分布式锁封装的更优雅
猜你喜欢
面经手册 · 第12篇《面试官,ThreadLocal 你要这么问,我就挂了!》
从零学习人工智能,开启职业规划之路!
python 下载模块加速实现记录
理解梯度下降
How to select the evaluation index of classification model
Elasticsearch数据库 | Elasticsearch-7.5.0应用搭建实战
Working principle of gradient descent algorithm in machine learning
一文带你了解 Jest 单元测试
Anomaly detection method based on SVM
JVM Metaspace内存溢出排查与总结
随机推荐
基于 Flink SQL CDC 的实时数据同步方案
程序员自省清单
使用Asponse.Words處理Word模板
滴滴 Elasticsearch 集群跨版本升级与平台重构之路
今天你写博客了吗?
微信小程序:防止多次点击跳转(函数节流)
JVM Metaspace内存溢出排查与总结
7.3.1 file upload and zero XML registration interceptor
Python爬蟲實戰詳解:爬取圖片之家
普通算法面试已经Out啦!机器学习算法面试出炉 - kdnuggets
2个月再招10000人,字节跳动冲刺10万员工“小目标”
一场关于FLV是否要支持HEVC的争论
Electron应用使用electron-builder配合electron-updater实现自动更新
写一个通用的幂等组件,我觉得很有必要
ETCD核心機制解析
UML类图还不懂?来看看这版乡村爱情类图,一把学会!
看完这篇就看懂了很多webpack脚手架
阻塞队列之LinkedBlockingQueue分析
计算机TCP/IP面试10连问,你能顶住几道?
二叉树的常见算法总结