【损失函数】Hinge Loss 合页损失

news2025/6/8 0:50:18

1、介绍

        Hinge Loss(合页损失)通常用于支持向量机(Support Vector Machine,SVM)等模型中,特别是在二分类问题中。它的目标是使正确类别的分数与错误类别的最高分之间的差异达到一个固定的边界,从而促使模型学会产生更大的间隔。

criterion = nn.HingeEmbeddingLoss(margin=1.0, size_average=None, reduce=None)

2、参数 

  1. margin(边界):

    • 默认值:margin = 1.0
    • 此参数表示正确类别的分数与错误类别的最高分之间的边界。Hinge Loss 的损失函数是在分数小于 margin 时线性增加的,即只有当分数小于 margin 时才会产生损失。
  2. size_average 和 reduce(大小平均和减小):

    • 默认值:size_average = None, reduce = None
    • size_averagereduce 这两个参数用于控制损失的计算方式。如果 size_average 设置为 True,则计算的是平均损失;如果设置为 False,则计算的是总损失。reduce 控制是否对每个样本的损失进行降维操作,可选的值包括 'none''mean''sum'

3、公式

$Hinge Loss =\frac{1}{N} \sum_{i=1}^N \max \left(0,1-y_i \cdot \hat{y}_i\right)$

其中,{N}是样本数量,y_i 是真实标签(+1 或 -1,二分类的情况),\hat{y}_i 是模型的预测分数(通常都是软结果,例如分数为0.58,而不是0,1这种)。

        损失函数的含义是,如果预测正确类别的分数小于1,就会有一个损失,否则损失为零。 

        当 y_i \cdot \hat{y}_i < 1 ,合页损失为 1-y_i \cdot \hat{y}_i

        当 y_i \cdot \hat{y}_i \geq 1 ,合页损失为 0

        变种用法:

        实际应用中,一方面很多时候我们的y的值域并不是[-1,1],比如我们可能更希望y更接近于一个概率,即其值域最好是[0,1]。另一方面,很多时候我们希望训练的是两个样本之间的相似关系,而非样本的整体分类,所以很多时候我们会用下面的公式:

$Hinge Loss =\frac{1}{N} \sum_{i=1}^N \max \left(0,m-y_i + \hat{y}_i\right)$

其中,y_i 是正样本的得分,\hat{y}_i 是负样本的得分,{m} 是 margin(自定义)

        即我们希望正样本分数越高越好,负样本分数越低越好,但二者得分之差最多到m就足够了,差距增大并不会有任何奖励。

4、图像

        上图是合页损失(Hinge Loss)的图像。在图中,橙色线表示真实标签 y_i 为 +1 的损失,绿色线表示真实标签 y_i 为 -1 的损失。当预测值与真实标签一致并且预测值的绝对值较大时,损失趋于零;否则,损失随着预测值与真实标签的差距增大而增大。这种损失函数鼓励模型不仅正确分类,而且对正确分类的信心足够大。 ​

可能看到这里,还有很多同学不理解合页损失如何使正确类别的分数与错误类别的最高分之间的差异达到一个固定的边界,或者为什么对正确分类的信心足够大,请看下面详细分析:

        当真实标签 y_i 为 +1 正类时,观察上图的橙色线段,模型输出负值(横坐标代表Predicted value)会有较大的惩罚,当模型输出为正值且在(0,1)区间时还会有一个较小的惩罚。

        观察上图,所以合页损失不仅惩罚预测错的,并且对于预测对了但是置信度不高的也会给一个惩罚,只有置信度高(Predicted value > 1)的才会有零损失。使用合页损失直觉上理解是要找到一个决策边界,使得所有数据点被这个边界正确地、高置信地被分类。

5、实例

示例1:我们使用 Hinge Loss作为损失函数:

import torch
import torch.nn as nn
import torch.optim as optim

# 示例数据
torch.manual_seed(42)
num_samples = 100
y_true = torch.randint(0, 2, (num_samples,)) * 2 - 1  # +1 或 -1 的标签
y_pred_scores = torch.randn(num_samples)  # 未归一化的预测分数

# 定义 Hinge Loss 函数
criterion = nn.HingeEmbeddingLoss()

# 计算损失
loss = criterion(y_pred_scores, y_true.float())

print(f'Hinge Loss: {loss.item()}')

示例2:自定义 HingeEmbeddingLoss 参数

import torch
import torch.nn as nn

# 示例数据
y_true = torch.tensor([-1, 1, -1], dtype=torch.float32)
y_pred_scores = torch.tensor([0.8, -0.5, 2.0], dtype=torch.float32)

# 定义 Hinge Loss 函数,设置 margin 和 reduce 参数
criterion = nn.HingeEmbeddingLoss(margin=1.0, size_average=None, reduce=None)

# 计算损失
loss = criterion(y_pred_scores, y_true)

print(f'Hinge Loss: {loss.item()}')

在这个示例中,margin 被设置为默认值1.0,而 size_averagereduce 参数保持为默认值。 

6、参考

Hinge Loss-合页损失函数 - 简书 (jianshu.com) 

机器学习 [合页损失函数 Hinge Loss]_合页loss-CSDN博客 

深度学习常用损失函数总览:基本形式、原理、特点 (qq.com)

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

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

相关文章

【代码随想录】刷题笔记Day45

前言 早上又赖了会床......早睡早起是奢望了现在&#xff0c;新一年不能这样&#xff01;支棱起来&#xff01; 377. 组合总和 Ⅳ - 力扣&#xff08;LeetCode&#xff09; 这一题用的就是完全背包排列数的遍历顺序&#xff1a;先背包再物品&#xff0c;从前往后求的也是有几…

RK3568驱动指南|第九篇 设备模型-第106章 为什么注册总线之前要先注册设备实例分析实验

瑞芯微RK3568芯片是一款定位中高端的通用型SOC&#xff0c;采用22nm制程工艺&#xff0c;搭载一颗四核Cortex-A55处理器和Mali G52 2EE 图形处理器。RK3568 支持4K 解码和 1080P 编码&#xff0c;支持SATA/PCIE/USB3.0 外围接口。RK3568内置独立NPU&#xff0c;可用于轻量级人工…

OpenAI API/Plus会员信用卡绑定付款方式经历

前言 9月25日起ChatGPT风控升级&#xff0c;428813的卡只可以支付Open ai API-key&#xff0c;直接订阅plus会被拒。部分用户将卡绑定美区Google pay使用app store进行订阅可以成功&#xff0c;如果您没有这两种支付方式&#xff0c;请您重新开一张534786的万事达美卡升级订阅…

专题一:递推与递归

递归 例题 递归实现指数型枚举 从 1∼n这 n个整数中随机选取任意多个&#xff0c;输出所有可能的选择方案。 输入格式 输入一个整数 n。 输出格式 每行输出一种方案。 同一行内的数必须升序排列&#xff0c;相邻两个数用恰好 1 个空格隔开。 对于没有选任何数的方案&#xff0c…

【ModelScope】部署一个属于自己的AI服务

前言 技术栈是Fastapi。 FastAPI 是一个现代、快速&#xff08;基于 Starlette 和 Pydantic&#xff09;、易于使用的 Python web 框架&#xff0c;主要用于构建 RESTful API。以下是 FastAPI 的一些优势&#xff1a; 性能卓越&#xff1a; FastAPI 基于 Starlette 框架&…

GC4938 三相无刷直流电机预驱动芯片可替代A4938/allegro,外置MOS,具有低速降噪,宽电压工作的功能

GC4938 是一款三相无刷直流电机预驱 动芯片。芯片可以驱动 N 型功率 MOSFET&#xff0c; 最高电源到 36V。芯片状态切换逻辑受三个 相位差为 120的霍尔输入确定。 芯片集成固定衰减时间的脉冲调制来控 制电流并且抑制励磁涌流&#xff1b;堵转保护时间可 调&#xff1b;过温保护…

AIOps探索 | 基于大模型构建高效的运维知识及智能问答平台(2)案例分享

原作者&#xff1a;擎创科技产品专家 布博士 案例分享 所需要的软件列表 本次案例的实现&#xff0c;全部采用开源或SAAS的产品来提供&#xff0c;并不涉及到私有化部署的软件产品。软件列表如下所示&#xff0c;如何申请apikey请自行研究&#xff0c;在这里不再详细说明&…

Linux第3步_安装Ubuntu操作系统

创建好虚拟机后&#xff0c;就可以安装Ubuntu操作系统了。 1、双击“VMware Workstation Pro”&#xff0c;得到下面的界面。 2、点击“编辑虚拟机设置”&#xff0c;见下图&#xff1a; 3、等几秒钟&#xff0c;得到下面的界面&#xff1a; 4、点击“CD/DVD”&#xff0c;得到…

opencv入门到精通——Canny边缘检测

目录 理论 OpenCV中的Canny Edge检测 附加资源 在本章中&#xff0c;我们将学习 Canny边缘检测的概念 OpenCV函数: cv.Canny() 理论 Canny Edge Detection是一种流行的边缘检测算法。它由John F. Canny发明 1.这是一个多阶段算法&#xff0c;我们将经历每个阶段。 2.降…

redis重启后数据丢失问题解决(亲测好用)

redis修改密码重启后发现redis中的数据丢失了 解决办法&#xff1a; 首先在redis的安装目录下查找重启之前的dump.rdb文件&#xff0c;发现只有当天的一个dump.rdb文件&#xff0c;确认不是重启备份的文件 然后我就全盘找一下dump.rdb的备份文件&#xff0c;找到前一天的备份…

鸿蒙应用中图片的显示(Image组件)

目录 1、加载图片资源 1.1、存档图类型数据源 a.本地资源 b.网络资源 c.Resource资源 d.媒体库file://data/storage e.base64 1.2、多媒体像素图片 2、显示矢量图 3、添加属性 3.1、设置图片缩放类型 3.2、设置图片重复样式 3.3、设置图片渲染模式 3.4、设置图…

工具篇--Spring-Cloud--feign 通过feign 接口完成文件的下载

文章目录 前言一、feign接口获取文件流程&#xff1a;二、文件获取实现2.1 引入jar&#xff1a;2.2 实现&#xff1a; 总结 前言 通常在spring-boot 项目中&#xff0c;对于文件的下载都是直接调用到对应的服务中&#xff0c;而不是通过feign 接口获取文件&#xff1b;有时我们…

珠海盈致浅析MES生产管理系统的优点

MES系统是用于管理和控制制造过程的信息化系统.它具有许多优点&#xff1a; 1. 生产过程可视化:MES系统提供实时的生产过程监控和数据收集,使管理人员能够清晰地了解生产线上的各个环节,包括设备状态、生产进度、质量指标等.这使得管理人员能够作出准确的决策并快速响应变化. 2…

APPnium 自动化实践 :第一步adb 连接手机

1. 下载安装 adb ,添加到环境变量。 ADB Download - Get the latest version of ADB and fastboot 2. 手机开启开发者模式 https://developer.huawei.com/consumer/cn/doc/quickApp-Guides/quickapp-open-developer-option-0000001137005543 3. adb 连接设备 【And…

【C语言】字符串 和 ctype.h 中的函数 练习

前面总结了有关字符串和ctype.h的文章&#xff0c;接下来就以几个例子来练习一下&#xff0c;以巩固之前的基础概念。注意&#xff1a;以下示例都有更简单更高效的解决方法&#xff0c;但本次仅以巩固基础为目的&#xff0c;所以方法可能稍作繁琐 Leetcode 344.反转字符串 编…

HUAWEI WATCH 系列 eSIM 全新开通指南来了

HUAWEI WATCH 系列手表提供了eSIM硬件能力&#xff0c;致力为用户提供更便捷、高效的通信体验。但eSIM 业务是由运营商管理并提供服务的&#xff0c;当前运营商eSIM业务集中全面恢复&#xff0c;电信已经全面恢复&#xff0c;移动大部分省份已经全面放开和多号App开通方式&…

自由DIY预约小程序源码系统:适用于任何行业+自由DIY你的界面布局+全新升级的UI+多用户系统 带安装部署教程

随着移动互联网的普及&#xff0c;预约服务逐渐成为人们日常生活的一部分。从家政服务、医疗挂号到汽车保养&#xff0c;预约已经渗透到各个行业。然而&#xff0c;市面上的预约小程序大多功能单一&#xff0c;界面老旧&#xff0c;无法满足商家和用户的个性化需求。今天来给大…

PPT如何画半圆和半圆弧

一、画半圆 这里总结为两种方法&#xff0c;具体如下&#xff1a; 1.形状剪除法 1.打开PPT&#xff0c;选择“插入”->“形状”&#xff0c;接着画一个正圆 2.在刚才画好的圆形一半的位置&#xff0c;画出一个矩形 3.按住Ctrl键&#xff0c;同时选中圆形和矩形两个图形…

Pytest fixture 及 conftest详解!

前言 fixture是在测试函数运行前后&#xff0c;由pytest执行的外壳函数。fixture中的代码可以定制&#xff0c;满足多变的测试需求&#xff0c;包括定义传入测试中的数据集、配置测试前系统的初始状态、为批量测试提供数据源等等。fixture是pytest的精髓所在&#xff0c;类似u…

[排序算法] 如何解决快速排序特殊情况效率低的问题------三路划分

前言 在[C/C]排序算法 快速排序 (递归与非递归)一文中,对于快速排序的单趟排序一共讲了三种方法: hoare、挖坑法、双指针法 ,这三种方法实现的快速排序虽然在一般情况下效率很高,但是如果待排序数据存在大量重复数据,那这几种方法的效率就很低,而为了解决快速排序在这样特殊情况…