Pytorch(笔记7损失函数类型)

前言

损失函数(Loss Function):是定义在单个样本上的,是指一个样本的误差,度量模型一次预测的好坏。
代价函数(Cost Function)=成本函数=经验风险:是定义在整个训练集上的,是所有样本误差的平均,也就是所有损失函数值的平均,度量平均意义下模型预测的好坏。
目标函数(Object Function)=结构风险=经验风险+正则化项=代价函数+正则化项:是指最终需要优化的函数,一般指的是结构风险。正则化项(regularizer)=惩罚项(penalty term)。

损失函数类型

平方损失函数(Quadratic Loss Function)又称均方误差(Mean Squared Error, MSE)

一种常用的回归损失函数。它衡量的是模型预测值与真实值之差的平方的平均值。平方损失函数对于大的误差给予了更大的惩罚,这使得它成为许多回归任务中首选的损失函数之一。

平方损失函数的公式(MSE):
在这里插入图片描述

import torch# 创建一个包含从 0.0 到 4.0(包括0.0和4.0)的浮点数的一维张量 x
x = torch.arange(5.0)  # 注意这里的 5.0,它确保了 x 是浮点类型# 创建一个与 x 形状相同但所有元素都是 1.0 的浮点类型张量 Y
Y = torch.ones_like(x, dtype=torch.float32)  # 显式指定 dtype 为 torch.float32# 创建一个 MSELoss 的实例
MSE = torch.nn.MSELoss()# 计算 x 和 Y 之间的均方误差,并将结果存储在变量 a 中
a = MSE(x, Y)# 打印结果
print(a)  # 输出:tensor(3.),表示 x 和 Y 之间的均方误差
print(x)  # 输出:tensor([0., 1., 2., 3., 4.]),x 的值
print(Y)  # 输出:tensor([1., 1., 1., 1., 1.]),Y 的值

注意

  • 平方损失函数对异常值(outliers)非常敏感,因为异常值会导致误差的平方变得非常大,从而影响整个损失函数的值。
  • 在某些情况下,如果预测值与实际值的差距非常大,使用平方损失函数可能会导致梯度爆炸,从而使得模型的训练变得不稳定。对于这类问题,可能需要考虑使用其他的损失函数,如绝对误差损失(L1损失)等。

L1范数损失(L1 Loss)也被称为最小绝对偏差(LAD)、平均绝对值误差(MAE)

L1 Loss损失函数的公式(MAE):
在这里插入图片描述

优点:

  • 稳定性:L1 Loss对于任何输入值都有着稳定的梯度,即其梯度为常数(±1),这避免了梯度爆炸的问题,使得模型训练过程更加稳定。
  • 鲁棒性:L1 Loss对离群点(outliers)的惩罚是固定的,不会因离群点而产生过大的损失值,从而提高了模型对异常值的鲁棒性。
  • 稀疏性:L1 Loss在优化过程中倾向于产生稀疏解,即使得模型中的许多权重接近于0,这有助于特征选择,简化模型,并提高模型的泛化能力。

缺点:

  • 不可导性:在0点处,L1Loss的梯度未定义(或者说是不连续的),这可能导致在优化过程中遇到一些困难,尤其是在使用梯度下降等基于梯度的优化算法时。
  • 收敛性:由于L1 Loss的梯度为常数,当预测值接近真实值时,梯度仍然较大,这可能导致模型在最优解附近震荡,难以精确收敛。

使用场景

L1 Loss通常用于回归任务,尤其是在需要模型的权重具有稀疏性的场景下。然而,由于其在0点处的不可导性,L1 Loss在神经网络等复杂模型中的直接使用较少。相反,Smooth L1 Loss(平滑L1损失)作为L1 Loss和L2 Loss的结合,既保留了L1 Loss的鲁棒性,又解决了其在0点处不可导的问题,因此在目标检测等任务中得到了广泛应用。

# x = tensor([0., 1., 2., 3., 4.])  
# y = tensor([1., 1., 1., 1., 1.])  # 计算差的绝对值  
abs_diff = torch.abs(x - y)  
# 输出: tensor([1., 0., 1., 2., 3.])  # 计算L1损失(平均绝对误差)  
L1loss = torch.nn.L1Loss()  
a = L1loss(x, y)  
# 或者直接计算平均值,不使用torch.nn.L1Loss()  
# a = torch.mean(abs_diff)  # 输出L1损失  
print(a)  # 应该是 (1 + 0 + 1 + 2 + 3) / 5 = 1.4

SmoothL1Loss,平滑L1损失函数

是深度学习中常用的一种损失函数,尤其在处理回归问题时表现出色。它是L1损失和L2损失的结合体,旨在减少对异常值的敏感性,并在优化过程中提供更加稳定的梯度。

在这里插入图片描述

特性与优势

  • 结合L1和L2的优点:当误差较小时(∣x∣<β),SmoothL1Loss的计算方式类似于L2损失(平方误差),这使得它在原点附近更加平滑,有助于模型的快速收敛。当误差较大时(∣x∣≥β),SmoothL1Loss的计算方式则类似于L1损失(绝对误差),这有助于减少离群点对损失函数的影响,使模型更加鲁棒。
  • 对异常值不敏感:相比于L2损失,SmoothL1Loss在误差较大时不会过度放大损失值,从而避免了梯度爆炸的问题。这对于包含异常值或噪声的数据集尤其有用。
  • 稳定的梯度:SmoothL1Loss在误差的整个范围内都提供了相对稳定的梯度,这有助于模型的稳定训练。

应用场景

SmoothL1Loss在目标检测、物体跟踪、姿态估计等需要精确回归的任务中得到了广泛应用。特别是在目标检测的Bounding Box回归中,SmoothL1Loss能够有效地计算预测框与真实框之间的误差,并帮助模型优化预测结果。

在PyTorch的torch.nn.SmoothL1Loss类中,reduction和beta是两个重要的参数,它们分别用于控制损失值的计算和平滑转换点的设置。

reduction参数指定了应用于输出损失值的缩减方法。它有三个可选值:‘none’、‘mean’和’sum’。

  • 当reduction='mean’时,函数会计算所有元素损失的平均值作为最终的损失值。这是回归任务中常用的做法,因为它将损失值标准化为单个标量,便于比较和反向传播。
  • 如果设置为’none’,则函数将返回一个与输入形状相同的损失张量,不进行任何缩减。
  • 如果设置为’sum’,则函数会计算所有元素损失的总和作为最终的损失值。

beta参数是一个超参数,用于定义SmoothL1Loss函数中的平滑转换点。在SmoothL1Loss的公式中,当误差的绝对值小于beta时,损失函数采用L2损失(平方误差)的形式;当误差的绝对值大于或等于beta时,损失函数采用L1损失(绝对误差减去0.5*beta)的形式。

  • beta=1.0是PyTorch中SmoothL1Loss的默认值。这个值的选择是基于经验和实践的,旨在在L1损失和L2损失之间找到一个平衡点,以便在大多数情况下都能获得良好的性能。
  • 调整beta的值可以改变损失函数对误差的敏感度。较小的beta值会使损失函数在误差较小时更加接近L2损失,从而在原点附近更加平滑;较大的beta值则会使损失函数更早地过渡到L1损失的形式,从而减少对大误差的惩罚。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LNMP搭建Discuz和Wordpress

1、LNMP L:linux操作系统 N&#xff1a;nginx展示前端页面web服务 M&#xff1a;mysql数据库&#xff0c;保存用户和密码&#xff0c;以及论坛相关的内容 P&#xff1a;php动态请求转发的中间件 数据库的作用&#xff1a; 登录时验证用户名和密码 创建用户和密码 发布和…

RightFont 8.7.0 Mac专业字体管理工具

RightFont 适用于 macOS 的终极字体管理器应用程序&#xff0c;提供无缝的字体管理体验。它结合了速度、直观的功能和专业的功能&#xff0c;使用户能够轻松预览、安装、组织和共享字体。 RightFont 8.7.0 Mac下载 RightFont 8.0的新增功能 RightFont 8.0 带来了全新的智能选…

软件架构之系统性能评价

软件架构之系统性能评价 第 5 章 系统性能评价5.1 性能指标5.1.1 计算机 5.1.2 网络5.3 性能设计5.3.1 阿姆达尔解决方案5.3.2 负载均衡 5.4 性能评估5.4.1 基准测试程序5.4.2 Web 服务器的性能评估5.4.3 系统监视 第 5 章 系统性能评价 系统性能是一个系统提供给用户的众多性…

互联网3.0时代的变革者:华贝甄选大模型创新之道

在当今竞争激烈的商业世界中&#xff0c;华贝甄选犹如一颗璀璨的明星&#xff0c;闪耀着独特的光芒。 华贝甄选始终将技术创新与研发视为发展的核心驱动力。拥有先进的研发团队和一流设施&#xff0c;积极探索人工智能、大数据、区块链等前沿技术&#xff0c;为用户提供高性能…

PostgreSQL 如何解决数据迁移过程中的数据类型不匹配问题?

文章目录 一、了解常见的数据类型不匹配情况1. 整数类型差异2. 浮点数类型差异3. 字符类型差异4. 日期和时间类型差异 二、解决数据类型不匹配的一般策略1. 数据转换2. 调整数据库表结构3. 数据清洗和预处理 三、PostgreSQL 中的数据类型转换函数1. 数值类型转换2. 字符类型转换…

Mysql数据库两表连接进行各种操作

一&#xff0c;创建两个表emp和dept&#xff0c;并给它们插入数据 1.创建表emp create table dept (dept1 int ,dept_name varchar(11)) charsetutf8; 2.创建表dept create table emp (sid int ,name varchar(11),age int,worktime_start date,incoming int,dept2 int) cha…

CSS技巧专栏:一日一例 2.纯CSS实现 多彩边框按钮特效

大家好,今天是 CSS技巧一日一例 专栏的第二篇《纯CSS实现多彩边框按钮特效》 先看图: 开工前的准备工作 正如昨日所讲,为了案例的表现,也处于书写的习惯,在今天的案例开工前,先把昨天的准备工作重做一遍。 清除浏览器的默认样式定义页面基本颜色设定body的样式清除butt…

同步时钟系统支持多种校时方式

在当今数字化、信息化高速发展的时代&#xff0c;时间的准确性和同步性变得至关重要。无论是金融交易、通信网络、交通运输&#xff0c;还是工业生产、科学研究等领域&#xff0c;都离不开一个精确且同步的时钟系统。而同步时钟系统之所以能够在众多领域发挥关键作用&#xff0…

【网络安全】Host碰撞漏洞原理+工具+脚本

文章目录 漏洞原理虚拟主机配置Host头部字段Host碰撞漏洞漏洞场景工具漏洞原理 Host 碰撞漏洞,也称为主机名冲突漏洞,是一种网络攻击手段。常见危害有:绕过访问控制,通过公网访问一些未经授权的资源等。 虚拟主机配置 在Web服务器(如Nginx或Apache)上,多个网站可以共…

论文阅读 - Intriguing properties of neural networks

Intriguing properties of neural networks 经典论文、对抗样本领域的开山之作 发布时间&#xff1a;2014 论文链接: https://arxiv.org/pdf/1312.6199.pdf 作者&#xff1a;Christian Szegedy, Wojciech Zaremba, Ilya Sutskever, Joan Bruna, Dumitru Erhan, Ian Goodfellow,…

AI会取代建筑设计师们的工作吗?

随着人工智能技术的不断进步和革新&#xff0c;几乎每一个行业都在经历深刻的变革和重新定义&#xff0c;建筑可视化也不例外。无论是通过智能算法生成高度逼真的三维模型&#xff0c;还是利用机器学习优化渲染过程&#xff0c;AI都在为建筑可视化注入新的活力&#xff0c;改变…

Redis配置主从服务器报错:Error condition on socket for SYNC: No route to host

Redis配置主从服务器报错&#xff1a;Error condition on socket for SYNC: No route to host 问题方法开放防火墙端口策略额外的检查 这个问题时常出现在配置Redis的主从服务器时出现&#xff0c;无法建立TCP连接。如果需要建立多个主从服务器&#xff0c;并且有 主 -> 从…

数据结构 —— Dijkstra算法

数据结构 —— Dijkstra算法 Dijkstra算法划分集合模拟过程打印路径 在上次的博客中&#xff0c;我们解决了使用最小的边让各个顶点连通&#xff08;最小生成树&#xff09; 这次我们要解决的问题是现在有一个图&#xff0c;我们要找到一条路&#xff0c;使得从一个顶点到另一个…

【Linux】网络新兵连

欢迎来到 破晓的历程的 博客 ⛺️不负时光&#xff0c;不负己✈️ 引言 在上一篇博客中&#xff0c;我们简单的介绍了一些Linux网络一些比较基本的概念。本篇博客我们将开始正式学习Linux网络套接字的内容&#xff0c;那么我们开始吧&#xff01; 1.网络中的地址管理 大家一…

2024年 春秋杯 网络安全联赛夏季赛 Web方向 题解WirteUp 部分

brother 题目描述&#xff1a;web哥&#xff0c;打点容易提权难。 打点就是最简单的SSTI。 执行下find / -user root -perm -4000 -print 2>/dev/null找一下具备suid权限的命令 /usr/lib/dbus-1.0/dbus-daemon-launch-helper /usr/bin/chsh /usr/bin/gpasswd /usr/bin/n…

Java面试八股之MySQL中的锁及其作用

MySQL中的锁及其作用 MySQL中的锁分类 全局锁&#xff08;Global Lock&#xff09;&#xff1a; 描述&#xff1a;对整个数据库实例加锁&#xff0c;最常见的是FLUSH TABLES WITH READ LOCK命令&#xff0c;主要用于全库备份等场景&#xff0c;阻止所有对表的写入操作。 作…

7月开刷880题,30天搞定必刷重点‼️

李林880一定要在暑假期间给吃透 马上就要刷家了&#xff0c;教大家一个方法&#xff0c;30天吃透880题&#xff0c;正确了90%&#xff01; 25版880题变化并不大&#xff0c;25版的主要改动是在去年的李6李4模拟题中挑选了约40道题&#xff0c;加入到今年的新版本中。 具体而…

PDF内存如何变小,PDF内存压缩,PDF内存变小怎么调整

在数字化时代&#xff0c;pdf已成为工作、学习和生活中不可或缺的文件格式。它以其跨平台兼容性和安全性受到广大用户的喜爱。然而&#xff0c;随着pdf文件中嵌入的图片、图形和文本内容的增多&#xff0c;文件大小往往会变得相当可观&#xff0c;给文件的传输和存储带来一定的…

python采集阿里巴巴历年员工人数统计报告

数据为2012到2022财年阿里巴巴每年的全职员工数量。截止2022年3月31日&#xff0c;阿里巴巴共有全职员工254941人&#xff0c;比上年增长3479人。 数据来源于阿里巴巴20-F和F-1文件 按阿里巴巴财政年度进行统计&#xff0c;阿里巴巴财年结束日期为每年3月31日 为全职员工人数 阿…

探索横河AQ6370E系列光谱仪隐藏功能!---高级标记功能!

横河AQ6370E系列光谱仪的这款光谱仪的传统功能中&#xff0c;其实还隐藏了一个特别实用的功能——高级标记功能&#xff01;前所未有的方式解析数据与测量信号&#xff0c;不仅带来了全新的测试体验&#xff0c;还提升了测量速度&#xff0c;那么这个功能怎么找到呢&#xff0c…