当前位置: 首页 > 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中的每一轮迭代都使用当前模型的损失函数负梯度作为新的目标值,以此指导下一棵树的生成。这种方法使得每一棵新树都在不断纠正前面模型的不足,逐步提升整体模型的性能。

相关文章:

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

本文是将文章《GBDT 算法的原理推导》中的公式单独拿出来做一个详细的解析,便于初学者更好的理解。 公式(11-12)是GBDT算法中非常关键的一步,它表示了如何通过计算损失函数的负梯度来指导下一棵树的生长。 公式(11-12)如下: r m i − [ ∂ …...

mysql设计

大家好,我是捡田螺的小男孩。 昨天一位粉丝,咨询了一个并发的问题~ 我提供了一个乐观锁兜底的方案,然后发现他们的表,都没有加version字段的,我想到,这不是表设计通用字段嘛。因此,本文跟大家聊聊&#xf…...

Android 斗鱼面经

Android 斗鱼面经 文章目录 Android 斗鱼面经一面二面 一面 先简单描述一下JVM JRE JDK的关系 :::info JVM(Java Virtual Machine) Java 虚拟机。它只认识 xxx.class 这种类型的文件,它能够将 class 文件中的字节码指令进行识别并调用操作…...

【机器学习】26. 聚类评估方法

聚类评估方法 1. Unsupervised Measure1.1. Method 1: measure cohesion and separationSilhouette coefficient Method 2:Correlation between two similarity matricesMethod 3:Visual Inspection of similarity matrix 2. Supervised measures3. 决定…...

linux 最多能创建多少个 TCP 连接?

linux 最大允许TCP连接数 约束一&#xff1a;服务器的端口范围约束二&#xff0c;服务器文件描述符限制约束三&#xff1a;系统线程约束四&#xff1a;系统内存总结 tcp连接四元组&#xff1a;源ip&#xff0c;源端口 <> 目标ip&#xff0c;目标端口 连续对同一个目标ip及…...

我为何要用wordpress搭建一个自己的独立博客

我在csdn有一个博客&#xff0c;这个博客是之前学习编程时建立的。 博客有哪些好处呢&#xff1f; 1&#xff0c;可以写自己的遇到的问题和如何解决的步骤 2&#xff0c;心得体会&#xff0c;经验&#xff0c;和踩坑 3&#xff0c;可以转载别人的好的技术知识 4&#xff0c;宝贵…...

Linux系统每日定时备份mysql数据

一、创建存储脚本的文件夹 创建文件夹&#xff0c;我的脚本放在/root/dbback/mysql mkdir ... cd /root/dbback/mysql 二、编写脚本 vi backup_mysql.sh 复制脚本内容 DB_USER"填写用户名" DB_PASSWORD"填写密码" DB_NAME"数据库名称" # …...

书生大模型第一关Linux基础知识

任务一&#xff1a;完成SSH连接与端口映射并运行hello_world.py 1.SSH及其端口映射 2.在VSCode中安装插件&#xff1a; 3.创建开发机 最后点击创建&#xff0c;然后可能需要等待一段较长的时间&#xff0c;大概需要5分钟左右&#xff0c;如果需要排队则更长时间 然后选择…...

机器学习之fetch_olivetti_faces人脸识别--基于Python实现

fetch_olivetti_faces 数据集下载 fetch_olivetti_faceshttps://github.com/jikechao/olivettifaces sklearn.datasets.fetch_olivetti_faces(*, data_homeNone, shuffleFalse, random_state0, download_if_missingTrue, return_X_yFalse, n_retries3, delay1.0)[source] L…...

【系统设计】深入理解HTTP缓存机制:从Read-Through缓存到HTTP缓存的交互流程

在现代Web开发中&#xff0c;缓存机制扮演着至关重要的角色。它不仅提升了用户体验&#xff0c;还极大地优化了资源的使用效率。在这篇博文中&#xff0c;我们将从“Read-Through”缓存的概念出发&#xff0c;深入探讨HTTP缓存的工作原理和交互流程&#xff0c;并详细描述max-a…...

FLINK单机版安装部署入门-1

文章目录 FLINK单机版安装部署高于1.9.3需要修改配置文件flink-conf.yaml(低于1.9.3可以跳过)linux启动集群windows下启动Flink实例运行(单机)还有一种方式是上传任务包运行examples\streamingjava: Compilation failed: internal java compiler error高版本启动脚本 FLINK单机…...

深度学习-学习率调整策略

在深度学习中&#xff0c;学习率调整策略&#xff08;Learning Rate Scheduling&#xff09;用于在训练过程中动态调整学习率&#xff0c;以实现更快的收敛和更好的模型性能。选择合适的学习率策略可以避免模型陷入局部最优、震荡不稳定等问题。下面介绍一些常见的学习率调整策…...

【学员提问bug】小程序在onUnload里面调接口,用来记录退出的时间, 但是接口调用还没成功, 页面就关闭了。如何让接口在onUnload关闭前调用成功?

这种问题比较通用&#xff0c;并不涉及到具体方法执行障碍&#xff0c;所以&#xff0c;解决起来也不麻烦。但是新手往往不知道如何做。 在小程序中&#xff0c;如果在 onUnload 中调用 API 记录页面退出时间&#xff0c;但因为页面关闭速度较快导致请求未完成&#xff0c;可以…...

【刷题13】链表专题

目录 一、两数相加二、两两交换链表的节点三、重排链表四、合并k个升序链表五、k个一组翻转链表 一、两数相加 题目&#xff1a; 思路&#xff1a; 注意整数是逆序存储的&#xff0c;结果要按照题目的要求用链表连接起来遍历l1的cur1&#xff0c;遍历l2的cur2&#xff0c;和…...

Python Turtle模块详解与使用教程

Python Turtle模块详解与使用教程 引言 Python是一种广泛使用的编程语言&#xff0c;其简洁易读的语法使得它成为初学者学习编程的理想选择。而Turtle模块则是Python标准库中一个非常有趣且实用的图形绘制工具&#xff0c;特别适合用于教育和学习编程的基础知识。通过Turtle模…...

【PTA】4-2 树的同构【数据结构】

给定两棵树 T1​ 和 T2​。如果 T1​ 可以通过若干次左右孩子互换就变成 T2​&#xff0c;则我们称两棵树是“同构”的。例如图1给出的两棵树就是同构的&#xff0c;因为我们把其中一棵树的结点A、B、G的左右孩子互换后&#xff0c;就得到另外一棵树。而图2就不是同构的。 图一…...

Node.js——fs模块-同步与异步

本文的分享到此结束&#xff0c;欢迎大家评论区一同讨论学习&#xff0c;下一篇继续分享Node.js的fs模块文件追加写入的学习。...

Java基于微信小程序的私家车位共享系统(附源码,文档)

博主介绍&#xff1a;✌stormjun、8年大厂程序员经历。全网粉丝15w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&…...

vscode 创建 vue 项目时,配置文件为什么收缩到一起展示了?

一、前言 今天用 vue 官方脚手架创建工程&#xff0c;然后通过 vscode 打开项目发现&#xff0c;配置文件都被收缩在一起了。就像下面这样 这有点反直觉&#xff0c;他们应该是在同一层级下的&#xff0c;怎么会这样&#xff0c;有点好奇&#xff0c;但是打开资源管理查看&…...

PySpark任务提交

一般情况下&#xff0c;spark任务是用scala开发的&#xff0c;但是对于一些偏业务人员&#xff0c;或者是基于上手的来说python的API确实降低了开发前置条件的难度&#xff0c;首当其冲的就是能跳过Java和Scala需要的知识储备&#xff0c;但是在提交任务到集群的时候就很麻烦了…...

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...

【入坑系列】TiDB 强制索引在不同库下不生效问题

文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...

可靠性+灵活性:电力载波技术在楼宇自控中的核心价值

可靠性灵活性&#xff1a;电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中&#xff0c;电力载波技术&#xff08;PLC&#xff09;凭借其独特的优势&#xff0c;正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据&#xff0c;无需额外布…...

YSYX学习记录(八)

C语言&#xff0c;练习0&#xff1a; 先创建一个文件夹&#xff0c;我用的是物理机&#xff1a; 安装build-essential 练习1&#xff1a; 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件&#xff0c;随机修改或删除一部分&#xff0c;之后…...

React---day11

14.4 react-redux第三方库 提供connect、thunk之类的函数 以获取一个banner数据为例子 store&#xff1a; 我们在使用异步的时候理应是要使用中间件的&#xff0c;但是configureStore 已经自动集成了 redux-thunk&#xff0c;注意action里面要返回函数 import { configureS…...

回溯算法学习

一、电话号码的字母组合 import java.util.ArrayList; import java.util.List;import javax.management.loading.PrivateClassLoader;public class letterCombinations {private static final String[] KEYPAD {"", //0"", //1"abc", //2"…...

现有的 Redis 分布式锁库(如 Redisson)提供了哪些便利?

现有的 Redis 分布式锁库&#xff08;如 Redisson&#xff09;相比于开发者自己基于 Redis 命令&#xff08;如 SETNX, EXPIRE, DEL&#xff09;手动实现分布式锁&#xff0c;提供了巨大的便利性和健壮性。主要体现在以下几个方面&#xff1a; 原子性保证 (Atomicity)&#xff…...

日常一水C

多态 言简意赅&#xff1a;就是一个对象面对同一事件时做出的不同反应 而之前的继承中说过&#xff0c;当子类和父类的函数名相同时&#xff0c;会隐藏父类的同名函数转而调用子类的同名函数&#xff0c;如果要调用父类的同名函数&#xff0c;那么就需要对父类进行引用&#…...

Spring AI Chat Memory 实战指南:Local 与 JDBC 存储集成

一个面向 Java 开发者的 Sring-Ai 示例工程项目&#xff0c;该项目是一个 Spring AI 快速入门的样例工程项目&#xff0c;旨在通过一些小的案例展示 Spring AI 框架的核心功能和使用方法。 项目采用模块化设计&#xff0c;每个模块都专注于特定的功能领域&#xff0c;便于学习和…...

Elastic 获得 AWS 教育 ISV 合作伙伴资质,进一步增强教育解决方案产品组合

作者&#xff1a;来自 Elastic Udayasimha Theepireddy (Uday), Brian Bergholm, Marianna Jonsdottir 通过搜索 AI 和云创新推动教育领域的数字化转型。 我们非常高兴地宣布&#xff0c;Elastic 已获得 AWS 教育 ISV 合作伙伴资质。这一重要认证表明&#xff0c;Elastic 作为 …...