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

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)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

力扣hot100 二叉树的直径

&#x1f468;‍&#x1f3eb; 题目地址 一个节点的最大直径 它左树的深度 它右树的深度 &#x1f60b; AC code /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* Tr…

jmeter安装使用

下载 解压后 apache-jmeter-5.5\bin\jmeter.bat 启动 简单使用: 创建线程组 创建默认请求头 创建请求 post请求需要设置请求头信息 创建结果树启动

电网2.0-安科瑞EMS智能化用配电未来应用

安科瑞 崔丽洁 摘要&#xff1a;随着科技的发展&#xff0c;电力系统正逐步向智能化、数字化、互联网化迈进。智能配电与智能用电是电力产业发展的重要方向&#xff0c;将为传统电力系统带来革命性的变革。本文将对智能配电和智能用电的概念、特点、关键技术及应用进行详细介绍…

深入理解左倾红黑树 | 京东物流技术团队

平衡二叉搜索树 平衡二叉搜索树&#xff08;Balanced Binary Search Tree&#xff09;的每个节点的左右子树高度差不超过 1&#xff0c;它可以在 O(logn) 时间复杂度内完成插入、查找和删除操作&#xff0c;最早被提出的自平衡二叉搜索树是 AVL 树。 AVL 树在执行插入或删除操…

JavaWeb基础(2)- Web概述、HTTP协议、Servlet、Request与Response

JavaWeb基础&#xff08;2&#xff09;- Web概述、HTTP协议、Servlet、Request与Response 文章目录 JavaWeb基础&#xff08;2&#xff09;- Web概述、HTTP协议、Servlet、Request与Response3 Web概述3.1 Web和JavaWeb的概念3.2 JavaWeb技术栈3.2.1 B/S架构**3.2.2 静态资源**3…

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

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

马蹄集oj赛(双周赛第十八次)

目录 幸运的3 打靶 照亮街道 九次九日九重色 寻找串 竹鼠的白色季节 捉迷藏 好的三连 三角数 买马 可怜的小码哥 花园浇水 高次方程 幸运的3 难度:黄金时间限制: 1秒四占用内存:128M 你有 n 个数&#xff0c;可以将它们两两匹配(即将两数首尾相连)&#xff0c;每个…

element中Table表格控件实现单选功能、多选功能、两种分页方式

目录 1、Table表格控件实现单选功能2、Table控件和Pagination控件实现多选和两种分页方式方法一&#xff1a;使用slice方法方法二&#xff1a;多次调用接口 1、Table表格控件实现单选功能 <template><div><!-- highlight-current-row 是否要高亮当前行 -->…

【史上最细教程】CentOS7 下载安装 RabbitMQ(两种方式:手动安装 / Docker安装)

文章目录 【史上最细教程】CentOS7 下载安装 RabbitMQ方式一&#xff1a;手动安装1.下载安装Erlang、RabbitMQ2.防火墙、安全组端口放行3.启动RabbitMQ服务4.浏览器用户登录5.配置文件查看(可略) 方式二&#xff1a;Docker安装1.安装Docker2.获取RabbitMQ镜像、创建容器3.浏览器…

synchronized锁

synchronized 类锁&#xff1a;给类的静态方法加上synchronized 关键字进行修饰&#xff0c; 锁的是当前类class&#xff0c;一个静态同步方法拿到锁&#xff0c;其他静态同步方法就会等待静态同步方法和普通同步方法间是没有竞争的 对象锁&#xff1a;给类的方法加上synchron…

权威外媒聚焦:Messari强调波场TRON在全球加密支付领域的引领作用

近日,金融时报、费加罗报及美联社等海外权威媒体就波场TRON 在全球加密支付领域的重要进展发布了相关报道。报道引述加密研究机构Messari 《Crypto Theses for 2024》年度报告,重点强调了波场TRON在推动全球加密货币支付尤其是稳定币USDT应用方面的显著成就。 报道提到,波场TR…

你的第一个C/S程序

目录 socket服务端代码客户端代码执行结果 socket socket基础知识 服务端代码 import socket import threading import timeMSG_LENGTH 64 DISCONNECTED !CONNECTION CLOSED connections 0#定义服务器地址 server_ip socket.gethostbyname(socket.gethostname()) server…

三城三奖!苏州金龙助力各地公共交通打造高品质线路

元旦前夕&#xff0c;由中国交通报社主办的绿色运输可持续发展座谈会暨2023年度“新能源公交高品质线路”经验交流会在京举行&#xff0c;来自全国各地的100余名行业管理部门、公交客运企业代表参会。会上同时评选出20条各具特色的“新能源公交高品质线路”及6家“我的公交我的…

后端主流框架-SpringMvc-day2

Java中的文件下载 2 文件下载 文件下载&#xff1a;就是将服务器&#xff08;表现在浏览器中&#xff09;中的资源下载&#xff08;复制&#xff09;到本地磁盘&#xff1b; 2.1 前台代码 前台使用超链接&#xff0c;超链接转到后台控制器&#xff0c;在控制器通过流的方式…

阿里云服务器(ECS云服务器)安装redis

前言&#xff1a; 笔者使用的是云服务器是阿里云的ECS服务器 这个服务器内核是Alibaba Cloud Linux 3。 使用的命令行工具为Alibaba Could Manager 命令行工具连接服务器这里就不多说了&#xff0c;如果没有用过的小伙伴可以去看阿里云的官方文档&#xff0c;很详细。 下面…

【51单片机系列】LCD1602液晶模块

本文是关于液晶显示屏的相关介绍。相对于静态数码管、动态数码管、LED点阵等&#xff0c;LCD1602液晶显示器能够显示更多的字符数字信息&#xff0c;并且也是常用的一种显示装置。 文章目录 一、LCD1602介绍1.1、LCD1602简介1.2、LCD1602常用指令1.3、LCD1602使用 二、LCD1602使…

[雷池WAF]长亭雷池WAF配置基于健康监测的负载均衡,实现故障自动切换上游服务器

为了进一步加强内网安全&#xff0c;在原有硬WAF的基础上&#xff0c;又在内网使用的社区版的雷池WAF&#xff0c;作为应用上层的软WAF。从而实现多WAF防护的架构。 经过进一步了解&#xff0c;发现雷池WAF的上游转发代理是基于Tengine的&#xff0c;所以萌生出了一个想法&…

SpringMVC-获取请求参数

1. 通过ServletAPI获取请求参数 /**** param request HttpServletRequest对象&#xff0c;直接作为形参传入方法&#xff0c;前端处理器就是一个Servlet* 所以前端处理器可以获得HttpServletRequest对象&#xff0c;并根据控制器方法的形参将对象传递给方法* re…

勒索事件急剧增长,亚信安全发布《勒索家族和勒索事件监控报告》

近期(12.15-12.21)态势快速感知 近期全球共发生了247起攻击和勒索事件&#xff0c;勒索事件数量急剧增长。 近期需要重点关注的除了仍然流行的勒索家族lockbit3以外&#xff0c;还有本周top1勒索组织toufan。toufan是一个新兴勒索组织&#xff0c;本周共发起了108起勒索攻击&a…

一文读懂$mash 通证的 “Fair Launch” 规则,将公平发挥极致

Solmash 是Solana生态中由社区主导的铭文资产LaunchPad平台&#xff0c;该平台旨在为Solana原生铭文项目&#xff0c;以及通过其合作伙伴SoBit跨链桥桥接到Solana的Bitcoin生态铭文项目提供更广泛的启动机会。有了Solmash&#xff0c;将会有更多的Solana生态的铭文项目、资产通…