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

【深度学习】Huber Loss详解

文章目录

  • 1. Huber Loss 原理详解
  • 2. Pytorch 代码详解
  • 3.与 MSELoss、MAELoss 区别及各自优缺点
    • 3.1 MSELoss 均方误差损失
    • 3.2 MAELoss 平均绝对误差损失
    • 3.3 Huber Loss
  • 4. 总结
    • 4.1 优化平滑
    • 4.2 梯度较好
    • 4.3 为什么说 MSE 是平滑的

1. Huber Loss 原理详解

Huber Loss 是一种结合了 MSE(均方误差)与 MAE (平均绝对误差)的损失函数,旨在克服两者的缺点。对于小误差使用 MSE,对于大误差使用 MAE,因此在处理回归问题时,既能够平滑训练过程,有能减少异常值的影响

Huber Loss 函数的数学公式定义如下:

L δ ( y , y ^ ) = { 1 2 ( y − y ^ ) 2 , if  ∣ y − y ^ ∣ ≤ δ δ ∣ y − y ^ ∣ − 1 2 δ 2 , otherwise L_{\delta}(y, \hat{y}) = \begin{cases} \frac{1}{2} (y - \hat{y})^2, & \text{if } |y - \hat{y}| \leq \delta \\ \delta |y - \hat{y}| - \frac{1}{2} \delta^2, & \text{otherwise} \end{cases} Lδ(y,y^)={21(yy^)2,δyy^21δ2,if yy^δotherwise

  • y y y 为真实值
  • y ^ \hat y y^ 为预测值
  • δ \delta δ 是一个阈值,控制误差大小的界限,当误差小于 δ \delta δ 时使用 M S E MSE MSE,当误差大于 δ \delta δ 时使用 M A E MAE MAE

Huber Loss 的特点:

  • 平滑性:当误差小于 δ \delta δ ,Huber Loss 与 MSE Loss一样,平方误差让梯度变平滑,有助于快速收敛
  • 对异常值的鲁棒性:当误差大于 δ \delta δ 时,使用 MAE 来减小异常值对模型的影响,使得 Huber Loss 对大的偏差不那么敏感
  • 可调性: δ \delta δ 是一个超参数,可以根据需求调整,平衡 MSE 和 MAE 效果

2. Pytorch 代码详解

torch.nn.HuberLoss 官方文档: https://pytorch.org/docs/stable/generated/torch.nn.HuberLoss.html
Huber Loss 函数定义:

class torch.nn.HuberLoss(reduction='mean', delta=1.0)

创建一个标准,如果逐元素误差的绝对值低于 delta,则使用平方项,否则使用 delta 缩放的 L1 项。此损失结合了 L1Loss 和 MSELoss 的优点。delta 缩放的 L1 区域使损失对异常值的敏感度低于 MSELoss,而 L2 区域在 L1Loss 附近提供了平滑度。

对于大小为 N 的批次,未经约简的损失可以描述为:
l ( x , y ) = L = { l 1 , . . . , l N } T l(x,y) = L=\{ l_1,...,l_N\}^T l(x,y)=L={l1,...,lN}T

其中:
l n = { 0.5 ( x n − y n ) 2 , 如果 ∣ x n − y n ∣ < d e l t a d e l t a ( ∣ x n − y n ∣ − 0.5 ∗ d e l t a ) ,否则 l_n = \begin{cases} 0.5(x_n - y_n)^2 , 如果 |x_n-y_n| < delta \\ delta(|x_n-y_n|-0.5*delta), 否则 \end{cases} ln={0.5(xnyn)2,如果xnyn<deltadelta(xnyn0.5delta),否则

如果reduction不为 none 则:

l ( x , y ) = { m e a n ( L ) , 如果 r e d u c t i o n = m e a n ; s u m ( L ) , 如果 r e d u c t i o n = s u m ; l(x,y) = \begin{cases} mean(L), 如果reduction = mean; \\ sum(L), 如果 reduction = sum; \end{cases} l(x,y)={mean(L),如果reduction=mean;sum(L),如果reduction=sum;

注意:

当 delta 设置为 1 时,此损失等效于 SmoothL1Loss,一般来说,此损失与 SmoothL1Loss 相差 delta 系数(在 Smooth L1 中也称为 beta)

参数:

  • reduction (str, 可选) - 指定要应用于输出的归约:‘none’ | ‘mean’ | ‘sum’。 ‘none’:不应用任何归约,‘mean’:输出的总和将除以输出中的元素数量,‘sum’:输出将求和。默认值:‘mean’
  • delta (float, 可选) – 指定在 delta 缩放的 L1 和 L2 损失之间切换的阈值。该值必须为正数。默认值:1.0

3.与 MSELoss、MAELoss 区别及各自优缺点

3.1 MSELoss 均方误差损失

MSE损失计算的是真实值与预测值之间差异的平方,适用于误差分布较为均匀且没有异常值的数据。

公式:

M S E = 1 N ∑ i = 1 N ( y i − y ^ i ) 2 MSE = \frac {1}{N} \sum_{i=1}^N(y_i - \hat y_i)^2 MSE=N1i=1N(yiy^i)2

优点:

  • 对误差小的样本非常敏感,适用于误差分布均匀的情况
  • 优化平滑,梯度较好,有助于模型快速收敛

缺点:

  • 对异常值非常敏感。因为平方操作,异常值可能导致损失过大,影响训练过程,导致模型不稳定。

3.2 MAELoss 平均绝对误差损失

MAE损失计算的是真实值和预测值之间的绝对差异,适用于数据中可能存在异常值的情况。

公式:
M A E = 1 N ∑ i = 1 N ∣ y i − y ^ i ∣ MAE = \frac {1}{N} \sum_{i=1}^N|y_i-\hat y_i| MAE=N1i=1Nyiy^i

优点:

  • 对异常值更为鲁棒,异常值不会像 MSE 那样放大其影响
  • 对于中等误差,MAE 提供了更好的稳定性

缺点:

  • 梯度不连续:因为MAE是绝对差,导致在误差较大的时候梯度较小,训练过程可能收敛慢
  • 在某些情况下可能无法收敛到最优解

3.3 Huber Loss

Huber Loss 结合了 MSE 和 MAE 的优点,适用于大多数回归问题。它在小误差时使用 MSE(平滑),在大误差时使用 MAE(鲁棒)

优点:

  • 兼具 MSE 和 MAE 的优点,对异常值不敏感,又能平滑优化
  • 可以自定义 δ \delta δ 值,控制从 MSE 到 MAE 的转换点,灵活性较高
  • 适用于大多数实际回归问题,具有较好性能

缺点:

  • 超参 δ \delta δ 的选择需要调优,可能会影响训练结果

4. 总结

4.1 优化平滑

  • 平滑是指损失函数在参数空间内变化的平稳程度。在损失函数的图像中,如果它是光滑的,表示它的值不会出现剧烈的波动。平滑的损失函数对于优化过程有利,因为它减少了优化过程中由于损失函数剧烈波动而导致的难以收敛的情况。
  • 在优化中,平滑的损失函数能够帮助优化算法(如梯度下降)稳定地找到全局或局部最小值,而不会被局部的“尖峰”或“坑”困住。
  • Huber损失就是一个平滑的损失函数,它在小误差时使用平方损失,避免了大误差的过大惩罚;而在大误差时切换到线性损失,使得对于异常值的影响不至于过大。它结合了均方误差(MSE)和绝对误差(MAE)的优点,使得训练过程更加稳定。

4.2 梯度较好

  • 梯度较好意味着损失函数的导数(梯度)在训练过程中变化平滑,且不存在突变或无法计算的情况。好的梯度有助于优化算法(如梯度下降)准确地更新模型参数。
  • 不好的梯度可能包括梯度爆炸或梯度消失,导致模型训练变得非常缓慢或者无法进行有效更新。梯度较好的损失函数可以确保每次更新都是有效的,从而加速训练过程。
  • Huber损失在误差较小的情况下,梯度是平方的(类似于均方误差),而在误差较大的情况下,梯度是线性的(类似于绝对误差)。这种平滑的梯度变化使得优化过程既不会因剧烈波动而不稳定,也不会在大误差情况下过于惩罚,从而能保持稳定的收敛速度。

4.3 为什么说 MSE 是平滑的

  • 连续性:MSE是一个连续的函数,也就是说,它的值随着输入的变化是平滑变化的,不会出现跳跃或断裂。这意味着在模型训练过程中,误差会随着模型预测值的调整而平滑变化,不会突变,避免了不稳定的训练过程。
  • 可导性:均方误差的导数是连续且平滑的。对于MSE来说,损失函数的导数是关于模型预测值的线性函数。连续且可导的损失函数能够提供平滑的梯度,帮助优化算法(如梯度下降)顺利地更新模型参数。

MSE损失函数是:
M S E = 1 N ∑ i = 1 N ( y i − y ^ i ) 2 MSE = \frac {1}{N} \sum_{i=1}^N(y_i - \hat y_i)^2 MSE=N1i=1N(yiy^i)2

对于每个样本误差 a = y − y ^ a=y-\hat y a=yy^,误差的导数是:
d d a ( a 2 ) = 2 a \frac {d}{da}(a^2) = 2a dad(a2)=2a
这个导数是线性的,并且在每个点都有定义。梯度的线性变化意味着,模型在调整参数时,误差随着预测的改进是平滑减少的。这个特性使得梯度下降在优化过程中可以平稳地更新模型权重,而不会遭遇急剧的变化或不连续的情况。

相关文章:

【深度学习】Huber Loss详解

文章目录 1. Huber Loss 原理详解2. Pytorch 代码详解3.与 MSELoss、MAELoss 区别及各自优缺点3.1 MSELoss 均方误差损失3.2 MAELoss 平均绝对误差损失3.3 Huber Loss 4. 总结4.1 优化平滑4.2 梯度较好4.3 为什么说 MSE 是平滑的 1. Huber Loss 原理详解 Huber Loss 是一种结合…...

A5.Springboot-LLama3.2服务自动化构建(二)——Jenkins流水线构建配置初始化设置

下面我们接着上一篇文章《A4.Springboot-LLama3.2服务自动化构建(一)——构建docker镜像配置》继续往下分析,在自动化流水线构建过程当中的相关初始化设置和脚本编写。 一、首先需要先安装Jenkins 主部分请参考我前面写的一篇文章《Jenkins持续集成与交付安装配置》 二、…...

李宏毅机器学习HW1: COVID-19 Cases Prediction

Kaggle数据集和提交链接 特征选择&#xff08;主要修改地方&#xff09; 在sample code的基础上主要修改了Select_feat选择特征函数。 首先&#xff0c;因为数据集中的第一列是id&#xff0c;先在raw_x_train&#xff0c;raw_x_valid&#xff0c;raw_x_test中都去掉这一列。其…...

MySQL下载安装DataGrip可视化工具

目录 WinMySQL下载安装步骤MySQL配置添加环境变量 Mac下载安装配置环境变量 DataGrip可视化工具以Win为例了。Mac忘记截图了。步骤都一样 Win MySQL下载 官网&#xff1a; https://www.mysql.com/ 直接进下载界面&#xff1a; https://downloads.mysql.com/archives/installe…...

多平台下Informatica在医疗数据抽取中的应用

一、引言 1.医疗数据抽取与 Informatica 概述 1.1 医疗数据的特点与来源 1.1.1 数据特点 医疗数据具有显著的多样性特点。从数据类型来看&#xff0c;涵盖了结构化数据&#xff0c;如患者的基本信息、检验检查结果等&#xff0c;这些数据通常以表格形式存储&#xff0c;便于…...

用公网服务器实现内网穿透

首先需要一个公网服务器 下载frp 搜索github下载到frp&#xff0c;服务端frps/客户端frpc。。下载的时候要注意自己本地内网机的cpu版本和服务端cpu架构 我的电脑是mac M1PRO版本 下载的是&#xff1a;darwinarm64 比如 服务端一般是Linux&#xff08;Intel 64位CPU&#xf…...

为什么mysql更改表结构时,varchar超过255会锁表

在 MySQL 中&#xff0c;当修改表结构并将 VARCHAR 字段的长度设置为超过 255 时&#xff0c;可能会出现锁表的情况。这与 MySQL 的存储引擎&#xff08;主要是 InnoDB&#xff09;以及表的底层存储方式相关。 原因分析 行格式变化 InnoDB 存储引擎支持多种行格式&#xff08;…...

ASP.NET Core中 JWT 实现无感刷新Token

在 Web 应用开发中&#xff0c;用户登录状态的管理至关重要。为了避免用户频繁遇到登录过期的问题&#xff0c;我们可以通过实现 JWT&#xff08;JSON Web Token&#xff09;刷新机制来提升用户体验 推荐: 使用 Refresh Token&#xff08;双 Token 机制&#xff09; 1. 生成和…...

函数(函数的概念、库函数、自定义函数、形参和实参、return语句、数组做函数参数、嵌套调用和链式访问、函数的声明和定义、static和extern)

一、函数的概念 •C语⾔中的函数&#xff1a;⼀个完成某项特定的任务的⼀⼩段代码 •函数又被翻译为子函数&#xff08;更准确&#xff09; •在C语⾔中我们⼀般会⻅到两类函数&#xff1a;库函数 ⾃定义函数 二、库函数 1 .标准库和头文件 •C语⾔的国际标准ANSIC规定了⼀…...

物联网在烟草行业的应用

物联网技术在烟草行业的应用 物联网技术在烟草行业的应用主要体现在以下几个方面&#xff1a; 智能制造 &#xff1a;物联网技术可以实现对生产过程中的关键参数进行实时监测&#xff0c;确保产品的质量稳定可靠。同时&#xff0c;通过对设备的远程维护和故障诊断&#xff0c;…...

第6章:Python TDD实例变量私有化探索

写在前面 这本书是我们老板推荐过的&#xff0c;我在《价值心法》的推荐书单里也看到了它。用了一段时间 Cursor 软件后&#xff0c;我突然思考&#xff0c;对于测试开发工程师来说&#xff0c;什么才更有价值呢&#xff1f;如何让 AI 工具更好地辅助自己写代码&#xff0c;或许…...

Java操作Excel导入导出——POI、Hutool、EasyExcel

目录 一、POI导入导出 1.数据库导出为Excel文件 2.将Excel文件导入到数据库中 二、Hutool导入导出 1.数据库导出为Excel文件——属性名是列名 2.数据库导出为Excel文件——列名起别名 3.从Excel文件导入数据到数据库——属性名是列名 4.从Excel文件导入数据到数据库…...

BUUCTF_Web([GYCTF2020]Ezsqli)

1.输入1 &#xff0c;正常回显。 2.输入1 &#xff0c;报错false&#xff0c;为字符型注入&#xff0c;单引号闭合。 原因&#xff1a; https://mp.csdn.net/mp_blog/creation/editor/145170456 3.尝试查询字段&#xff0c;回显位置&#xff0c;数据库&#xff0c;都是这个。…...

微软宣布Win11 24H2进入新阶段!设备将自动下载更新

快科技1月19日消息&#xff0c;微软于1月16日更新了支持文档&#xff0c;宣布Windows 11 24H2进入新阶段。 24H2更新于2024年10月1日发布&#xff0c;此前为可选升级&#xff0c;如今微软开始在兼容的Windows 11设备上自动下载并安装24H2版本。 微软表示&#xff1a;“运行Wi…...

SpringBoot:解决前后端请求跨域问题(详细教程)

文章目录 一、前言二、解决方式 2.1 使用 CrossOrigin 注解&#xff08;简单方便&#xff0c;适用于单个或少量接口&#xff09;2.2 全局配置跨域&#xff08;适用于整个项目中大量接口都需要跨域的情况&#xff09;2.3 使用过滤器来处理跨域&#xff08;更底层的实现方式&…...

Android-V lmkd 中的那些属性值

源码基于&#xff1a;Android V 相关博文&#xff1a; Android lmkd 机制详解&#xff08;一&#xff09; Android lmkd 机制详解&#xff08;二&#xff09; Android lmkd 机制从R到T 1. 汇总 属性名说明默认值 ro.lmk.debug 启动 lmkd 的debug 模式&#xff0c;会打印一…...

PageHelper快速使用

依赖 <!--分页插件PageHelper--> <dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId><version>1.4.7</version> </dependency>示例 /** * 封装分页结果…...

图像处理基础(3):均值滤波器及其变种

均值滤波器可以归为低通滤波器&#xff0c;是一种线性滤波器&#xff0c;其输出为邻域模板内的像素的简单平均值&#xff0c;主要用于图像的模糊和降噪。 均值滤波器的概念非常的直观&#xff0c;使用滤波器窗口内的像素的平均灰度值代替图像中的像素值&#xff0c;这样的结果就…...

力扣刷题心得_JAVA

数学 > 数组 > 链表 > 字符串 > 哈希表 > 双指针 > 递归 > 栈 > 队列 > 树 //一般力扣中传入的参数和新建的对象作为返回值,都不列入空间复杂度中 //但是面试的时候要和面试官商量好,灵活定义空间复杂度 //当然最好是就在传入的对象作为返回值,(在原…...

音乐播放器实现:前端HTML,CSS,JavaScript综合大项目

音乐播放器实现:前端HTML&#xff0c;CSS&#xff0c;JavaScript综合大项目 项目概述项目视图效果一、侧边栏相关代码&#xff08;一&#xff09;HTML代码&#xff08;二&#xff09;css代码 二、登录页面&#xff08;一&#xff09;HTML代码&#xff08;二&#xff09;css代码…...

第19节 Node.js Express 框架

Express 是一个为Node.js设计的web开发框架&#xff0c;它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用&#xff0c;和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...

Linux简单的操作

ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...

vue3 字体颜色设置的多种方式

在Vue 3中设置字体颜色可以通过多种方式实现&#xff0c;这取决于你是想在组件内部直接设置&#xff0c;还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法&#xff1a; 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...

oracle与MySQL数据库之间数据同步的技术要点

Oracle与MySQL数据库之间的数据同步是一个涉及多个技术要点的复杂任务。由于Oracle和MySQL的架构差异&#xff0c;它们的数据同步要求既要保持数据的准确性和一致性&#xff0c;又要处理好性能问题。以下是一些主要的技术要点&#xff1a; 数据结构差异 数据类型差异&#xff…...

Typeerror: cannot read properties of undefined (reading ‘XXX‘)

最近需要在离线机器上运行软件&#xff0c;所以得把软件用docker打包起来&#xff0c;大部分功能都没问题&#xff0c;出了一个奇怪的事情。同样的代码&#xff0c;在本机上用vscode可以运行起来&#xff0c;但是打包之后在docker里出现了问题。使用的是dialog组件&#xff0c;…...

AI病理诊断七剑下天山,医疗未来触手可及

一、病理诊断困局&#xff1a;刀尖上的医学艺术 1.1 金标准背后的隐痛 病理诊断被誉为"诊断的诊断"&#xff0c;医生需通过显微镜观察组织切片&#xff0c;在细胞迷宫中捕捉癌变信号。某省病理质控报告显示&#xff0c;基层医院误诊率达12%-15%&#xff0c;专家会诊…...

TSN交换机正在重构工业网络,PROFINET和EtherCAT会被取代吗?

在工业自动化持续演进的今天&#xff0c;通信网络的角色正变得愈发关键。 2025年6月6日&#xff0c;为期三天的华南国际工业博览会在深圳国际会展中心&#xff08;宝安&#xff09;圆满落幕。作为国内工业通信领域的技术型企业&#xff0c;光路科技&#xff08;Fiberroad&…...

【Post-process】【VBA】ETABS VBA FrameObj.GetNameList and write to EXCEL

ETABS API实战:导出框架元素数据到Excel 在结构工程师的日常工作中,经常需要从ETABS模型中提取框架元素信息进行后续分析。手动复制粘贴不仅耗时,还容易出错。今天我们来用简单的VBA代码实现自动化导出。 🎯 我们要实现什么? 一键点击,就能将ETABS中所有框架元素的基…...

Linux安全加固:从攻防视角构建系统免疫

Linux安全加固:从攻防视角构建系统免疫 构建坚不可摧的数字堡垒 引言:攻防对抗的新纪元 在日益复杂的网络威胁环境中,Linux系统安全已从被动防御转向主动免疫。2023年全球网络安全报告显示,高级持续性威胁(APT)攻击同比增长65%,平均入侵停留时间缩短至48小时。本章将从…...

ArcPy扩展模块的使用(3)

管理工程项目 arcpy.mp模块允许用户管理布局、地图、报表、文件夹连接、视图等工程项目。例如&#xff0c;可以更新、修复或替换图层数据源&#xff0c;修改图层的符号系统&#xff0c;甚至自动在线执行共享要托管在组织中的工程项。 以下代码展示了如何更新图层的数据源&…...