当前位置: 首页 > news >正文

《GBDT 算法的原理推导》 11-12计算损失函数的负梯度 公式解析

本文是将文章《GBDT 算法的原理推导》中的公式单独拿出来做一个详细的解析,便于初学者更好的理解。


公式(11-12)是GBDT算法中非常关键的一步,它表示了如何通过计算损失函数的负梯度来指导下一棵树的生长。

公式(11-12)如下:

r m i = − [ ∂ L ( y i , f ( x i ) ) ∂ f ( x i ) ] f ( x ) = f m − 1 ( x ) r_{mi} = - \left[ \frac{\partial L(y_i, f(x_i))}{\partial f(x_i)} \right]_{f(x) = f_{m-1}(x)} rmi=[f(xi)L(yi,f(xi))]f(x)=fm1(x)

1. 公式的背景

在GBDT中,我们的目标是最小化一个损失函数 L ( y , f ( x ) ) L(y, f(x)) L(y,f(x)),其中:

  • y y y 是真实值,
  • f ( x ) f(x) f(x) 是模型的预测值。

每一轮 m m m 的模型 f m ( x ) f_m(x) fm(x) 是在前一轮的基础上进行改进的,即:

f m ( x ) = f m − 1 ( x ) + T ( x ; Θ m ) f_m(x) = f_{m-1}(x) + T(x; \Theta_m) fm(x)=fm1(x)+T(x;Θm)

这里的 T ( x ; Θ m ) T(x; \Theta_m) T(x;Θm) 是新增的树,我们希望它能纠正前一轮模型 f m − 1 ( x ) f_{m-1}(x) fm1(x) 的误差。

2. 负梯度的意义

为了指导新树的构建,我们需要让新树 T ( x ; Θ m ) T(x; \Theta_m) T(x;Θm) 能够减少当前模型 f m − 1 ( x ) f_{m-1}(x) fm1(x) 的误差。GBDT使用了一个关键的技巧:用损失函数的负梯度来近似每个样本的残差,即误差。

  • 损失函数的负梯度表示模型需要改进的方向。通过沿着负梯度的方向优化,我们可以使得损失逐步减小。
  • 具体来说,公式(11-12)中的 r m i r_{mi} rmi 是第 m m m 轮中第 i i i 个样本的负梯度,它表示当前模型对该样本的误差方向和大小。

3. 公式(11-12)的含义

公式(11-12)中的 r m i r_{mi} rmi 是针对第 m m m 轮中第 i i i 个样本计算的负梯度:

r m i = − [ ∂ L ( y i , f ( x i ) ) ∂ f ( x i ) ] f ( x ) = f m − 1 ( x ) r_{mi} = - \left[ \frac{\partial L(y_i, f(x_i))}{\partial f(x_i)} \right]_{f(x) = f_{m-1}(x)} rmi=[f(xi)L(yi,f(xi))]f(x)=fm1(x)

其中:

  • L ( y i , f ( x i ) ) L(y_i, f(x_i)) L(yi,f(xi)) 是损失函数,表示模型预测 f ( x i ) f(x_i) f(xi) 与真实值 y i y_i yi 之间的误差。
  • ∂ L ( y i , f ( x i ) ) ∂ f ( x i ) \frac{\partial L(y_i, f(x_i))}{\partial f(x_i)} f(xi)L(yi,f(xi)) 是损失函数关于模型输出 f ( x i ) f(x_i) f(xi) 的偏导数。偏导数表示的是损失函数在 f ( x i ) f(x_i) f(xi) 处的变化趋势。
  • 负号 − - 表示我们要沿着负梯度方向去优化,即在模型的当前输出基础上减少误差。

因此, r m i r_{mi} rmi 表示的是在第 m m m 轮中,第 i i i 个样本的当前模型预测值与真实值之间的差异(残差)的一个估计,并且这个估计是基于损失函数的梯度计算的。

4. 负梯度用于训练新树

在GBDT的第 m m m 轮中,新树 T ( x ; Θ m ) T(x; \Theta_m) T(x;Θm) 是通过拟合所有样本的负梯度 r m i r_{mi} rmi 来生成的。也就是说,这棵新树的任务是尽可能准确地拟合当前模型的“误差”部分,从而在下一轮更新中进一步减少总损失。

5. 举个例子

假设我们使用的是平方损失函数:

L ( y i , f ( x i ) ) = 1 2 ( y i − f ( x i ) ) 2 L(y_i, f(x_i)) = \frac{1}{2} (y_i - f(x_i))^2 L(yi,f(xi))=21(yif(xi))2

那么,损失函数对于 f ( x i ) f(x_i) f(xi) 的导数是:

∂ L ( y i , f ( x i ) ) ∂ f ( x i ) = f ( x i ) − y i \frac{\partial L(y_i, f(x_i))}{\partial f(x_i)} = f(x_i) - y_i f(xi)L(yi,f(xi))=f(xi)yi

因此,在平方损失的情况下,公式(11-12)中的负梯度就是:

r m i = − ( f m − 1 ( x i ) − y i ) = y i − f m − 1 ( x i ) r_{mi} = - (f_{m-1}(x_i) - y_i) = y_i - f_{m-1}(x_i) rmi=(fm1(xi)yi)=yifm1(xi)

这表示负梯度等于当前模型的残差 y i − f m − 1 ( x i ) y_i - f_{m-1}(x_i) yifm1(xi),即真实值和预测值的差值。因此,新的树会拟合这个残差,从而在下一轮更新时使模型预测值更接近真实值。

总结

公式(11-12)表示,GBDT中的每一轮迭代都使用当前模型的损失函数负梯度作为新的目标值,以此指导下一棵树的生成。这种方法使得每一棵新树都在不断纠正前面模型的不足,逐步提升整体模型的性能。


http://www.mrgr.cn/news/64180.html

相关文章:

  • 免费部署本地AI大语言模型聊天系统:Chatbox AI + 马斯克grok2.0大模型(简单5步实现,免费且比GPT4.0更好用)
  • 小程序app封装公用顶部筛选区uv-drop-down
  • 数据安全中间件的好处
  • 2024-12-24 NO1. XR Interaction ToolKit 环境配置
  • R语言数据分析案例46-不同区域教育情况回归分析和探索
  • 打造高效的 LaTeX 公式编辑器
  • 【酒店管理与推荐系统】Python+Django网页界面平台+推荐算法+管理系统网站
  • 第5章 输入/输出(I/O)管理
  • C++11标准模板(STL)- 常用数学函数 - 分类及比较 - 对给定的浮点值分类(std::fpclassify)
  • 食堂采购系统源码:实现供应链管理平台功能模块的技术实践
  • 5G学习笔记三之物理层、数据链路层、RRC层协议
  • 笔记整理—linux驱动开发部分(4)驱动框架
  • 一篇文章带你快速理解MySQL中的内连接和外连接
  • 如何避免使用锁时出现的死锁问题?
  • leetcode35.搜索插入位置
  • 锁原理和使用
  • Python自动化运维:技能掌握与快速入门指南
  • 绿色积分如何结合商家联盟?打造线上线下消费生态
  • MMSegmentation测试阶段推理速度非常慢的一种可能原因
  • 优先级队列(PriorityQueue)
  • Visual Studio 2019下载安装使用教程
  • Php实现钉钉OA一级审批,二级审批
  • 河南省教育厅办公室关于举办2024年河南省高等职业教育技能大赛的通知
  • electron + vue 打包完成后,运行提示 electrion-updater 不存在
  • 最小支撑树MST
  • 数据结构-复杂度