【深度学习】Huber Loss详解

news2025/1/21 15:40:06

文章目录

  • 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
这个导数是线性的,并且在每个点都有定义。梯度的线性变化意味着,模型在调整参数时,误差随着预测的改进是平滑减少的。这个特性使得梯度下降在优化过程中可以平稳地更新模型权重,而不会遭遇急剧的变化或不连续的情况。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2279392.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一文大白话讲清楚webpack基本使用——1——完成webpack的初步构建

文章目录 一文大白话讲清楚webpack基本使用——1——完成webpack的初步构建1. 先回忆webpack是个啥2. webpack四大核心2.1 Entry(入口)2.2 Output(输出)2.3 Loader(加载器)2.4 Plugin(插件) 3. 按部就班实现webpack3.1 初始化项目3.2 完成项目骨架搭建3.3 实现webpack构建 一文…

迁移学习-详解

一、fasttext工具介绍 1 fasttext介绍 1.1 fasttext作用 作为NLP工程领域常用的工具包, fasttext有两大作用: 进行文本分类 训练词向量 1.2 fasttext工具包的优势 正如它的名字, 在保持较高精度的情况下, 快速的进行训练和预测是fasttext的最大优势. fasttext优势的原因:…

Mac 删除ABC 输入法

参考链接&#xff1a;百度安全验证 Mac下删除系统自带输入法ABC&#xff0c;正解&#xff01;_mac删除abc输入法-CSDN博客 ABC 输入法和搜狗输入法等 英文有冲突~~ 切换后还会在英文状态&#xff0c;可以删除 &#xff1b;可能会对DNS 输入有影响&#xff0c;但是可以通过复…

读取GPS文件中的坐标

不同厂家产生的gps不同&#xff0c;但MALA, impulse等厂家还是比较规范&#xff0c;格式基本一致。 1 格式对比 厂家1&#xff1a;128930 1 31.865250637 118.631077136 -87.226619530 -17.247052234 -20.881583506 -19.300643625 9.146650245 -5.089975857 4.000000000 2024…

【github 使用相关】GitHub Desktop桌面端基础操作 WIP 分支 提交pr

WIP 是 “Work In Progress”&#xff08;进行中的工作&#xff09;的缩写&#xff0c;WIP分支通常用来存放尚未完成或不稳定的代码&#xff0c;开发者可在WIP进行实验逐步完成某项功能、进行团队开发、修复重要BUG和多任务处理。 在 GitHub Desktop 上管理 WIP&#xff08;Wo…

C语言之装甲车库车辆动态监控辅助记录系统

&#x1f31f; 嗨&#xff0c;我是LucianaiB&#xff01; &#x1f30d; 总有人间一两风&#xff0c;填我十万八千梦。 &#x1f680; 路漫漫其修远兮&#xff0c;吾将上下而求索。 C语言之装甲车库车辆动态监控辅助记录系统 目录 一、前言 1.1 &#xff08;一&#xff09;…

日志模块新增配置日志根目录和项目模块功能

文章目录 1.日志模块新增监听器支持外部配置1.common-log4j2-starter项目结构2.修改log4j2.xml为log4j2-spring.xml&#xff08;这样可以解决读取外部配置但是提前创建目录的问题&#xff09;3.ApplicationEnvironmentPreparedListener.java 监听器读取配置4.spring.factories …

[JavaScript] 运算符详解

文章目录 算术运算符&#xff08;Arithmetic Operators&#xff09;注意事项&#xff1a; 比较运算符&#xff08;Comparison Operators&#xff09;注意事项&#xff1a; 逻辑运算符&#xff08;Logical Operators&#xff09;短路运算&#xff1a;逻辑运算符的返回值&#xf…

latin1_swedish_ci(latin1 不支持存储中文、日文、韩文等多字节字符)

文章目录 1、SHOW TABLE STATUS WHERE Name batch_version;2、latin1_swedish_ci使用场景注意事项修改字符集和排序规则修改表的字符集和排序规则修改列的字符集和排序规则修改数据库的默认字符集和排序规则 3、ALTER TABLE batch_version CONVERT TO CHARACTER SET utf8mb4 C…

【机器学习实战入门】使用OpenCV进行性别和年龄检测

Gender and Age Detection Python 项目 首先,向您介绍用于此高级 Python 项目的性别和年龄检测中的术语: 什么是计算机视觉? 计算机视觉是一门让计算机能够像人类一样观察和识别数字图像和视频的学科。它面临的挑战大多源于对生物视觉有限的了解。计算机视觉涉及获取、处…

计算机毕业设计PySpark+Hadoop+Hive机票预测 飞机票航班数据分析可视化大屏 航班预测系统 机票爬虫 飞机票推荐系统 大数据毕业设计

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

游戏引擎学习第84天

仓库:https://gitee.com/mrxiao_com/2d_game_2 我们正在试图弄清楚如何完成我们的世界构建 上周做了一些偏离计划的工作&#xff0c;开发了一个小型的背景位图合成工具&#xff0c;这个工具做得还不错&#xff0c;虽然是临时拼凑的&#xff0c;但验证了背景构建的思路。这个过…

RIME-CNN-LSTM-Attention多变量多步时序预测Matlab实现

SCI一区级 | Matlab实现RIME-CNN-LSTM-Multihead-Attention多变量多步时序预测 目录 SCI一区级 | Matlab实现RIME-CNN-LSTM-Multihead-Attention多变量多步时序预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.Matlab实现RIME-CNN-LSTM-Multihead-Attention霜冰算法…

SpringMVC——原理简介

狂神SSM笔记 DispatcherServlet——SpringMVC 的核心 SpringMVC 围绕DispatcherServlet设计。 DispatcherServlet的作用是将请求分发到不同的处理器&#xff08;即不同的Servlet&#xff09;。根据请求的url&#xff0c;分配到对应的Servlet接口。 当发起请求时被前置的控制…

K8S的探针说明和使用方式

探针概述 探针分类 K8S中 探针&#xff08;Probes&#xff09; 是用于检查容器的健康状况和可用性的机制。探针可以自动判断应用的运行状态&#xff0c;并根据需要重启容器、替换容器或将流量路由到健康的实例。从而确保应用始终处于健康、可用的状态&#xff0c;并帮助自动化…

基于SpringBoot+Vue的智慧动物园管理系统的设计与实现

获取源码&#xff1a;基于SpringBootVue智慧动物园系统设计与实现: 后台和用户前台。后台包括首页、员工管理、考勤管理、部门管理、角色管理、审核管理、动物管理、演出管理、园区管理、园区设施维修、饲养管理、行为观察管理、疫苗管理、看护管理、个人中心、票务管理、收入管…

【博客之星评选】2024年度前端学习总结

故事的开端...始于2024年第一篇前端技术博客 那故事的终末...也该结束于陪伴了我一整年的前端知识了 踏入 2025 年&#xff0c;满心激动与自豪&#xff0c;我成功闯进了《2024 年度 CSDN 博客之星总评选》的 TOP300。作为一名刚接触技术写作不久的萌新&#xff0c;这次能走到这…

GPT-5 传言:一场正在幕后发生的 AI 变革

新的一年&#xff0c;让我们从一个引人入胜的话题开始&#xff1a;如果我告诉你&#xff0c;GPT-5 并非虚构&#xff0c;而是真实存在呢&#xff1f;它不仅真实存在&#xff0c;而且正在你看不见的地方悄然塑造着世界。我的基本假设是&#xff1a;OpenAI 已经秘密开发出 GPT-5&…

LeetCode题练习与总结:N 叉树的最大深度--559

一、题目描述 给定一个 N 叉树&#xff0c;找到其最大深度。 最大深度是指从根节点到最远叶子节点的最长路径上的节点总数。 N 叉树输入按层序遍历序列化表示&#xff0c;每组子节点由空值分隔&#xff08;请参见示例&#xff09;。 示例 1&#xff1a; 输入&#xff1a;roo…

51c自动驾驶~合集47

我自己的原文哦~ https://blog.51cto.com/whaosoft/13083194 #DreamDrive 性能爆拉30%&#xff01;英伟达&#xff1a;时空一致下的生成重建大一统新方案~ 从自车的驾驶轨迹中生成真实的视觉图像是实现自动驾驶模型可扩展训练的关键一步。基于重建的方法从log中生成3D场景…