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

news2024/11/18 0:30:46

前言

损失函数(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.coloradmin.cn/o/1900446.html

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

相关文章

【vue动态组件】VUE使用component :is 实现在多个组件间来回切换

VUE使用component :is 实现在多个组件间来回切换 component :is 动态父子组件传值 相关代码实现&#xff1a; <component:is"vuecomponent"></component>import componentA from xxx; import componentB from xxx; import componentC from xxx;switch(…

每日一题——Python实现PAT乙级1096 大美数(举一反三+思想解读+逐步优化)3千字好文

一个认为一切根源都是“自己不够强”的INTJ 个人主页&#xff1a;用哲学编程-CSDN博客专栏&#xff1a;每日一题——举一反三Python编程学习Python内置函数 Python-3.12.0文档解读 目录 我的写法 时间复杂度分析 空间复杂度分析 总结 哲学和编程思想 1. 抽象与具体化 …

2024亚太杯中文赛B题洪水灾害的数据分析与预测原创论文分享

大家好&#xff0c;从昨天肝到现在&#xff0c;终于完成了2024年第十四届 APMCM 亚太地区大学生数学建模竞赛B题洪水灾害的数据分析与预测的完整论文啦。 实在精力有限&#xff0c;具体的讲解大家可以去讲解视频&#xff1a; 2024亚太杯中文赛B题洪水灾害预测原创论文保姆级教…

Ad-hoc命令和模块简介

华子目录 Ad-hoc命令和模块简介1.概念2.格式3.Ansible命令常用参数4.模块类型4.1 三种模块类型4.2Ansible核心模块和附加模块 示例1示例2 Ad-hoc命令和模块简介 1.概念 Ansible提供两种方式去完成任务&#xff0c;一是ad-hoc命令&#xff0c;一是写Ansible playbook(剧本)Ad-…

uni-app打包小程序的一些趣事~

前言 Huilderx版本&#xff1a;4.15 uni-app Web端版本&#xff1a;3.4.21 问题1 Web端/APP端样式好好的&#xff0c;打包微信小程序就乱了咋整&#xff1f; 使用::v-deep/::deep/deep(){}都是没用滴~~ 原因&#xff1f; 解决&#xff1a; <script lang"ts"…

2024/7/6 英语每日一段

More than half of late-teens are specifically calling for more youth work that offers “fun”, with older teenagers particularly hankering for more jollity, according to a study carried out by the National Youth Agency. One in 10 said they have zero option…

将IConfiguration对象转换成一个具体的对象,以面向对象的方式来使用配置

我们倾向于将IConfiguration对象转换成一个具体的对象&#xff0c;以面向对象的方式来使用配置&#xff0c;我们将这个转换过程称为配置绑定。除了将配置树叶子节点配置节的绑定为某种标量对象外&#xff0c;我们还可以直接将一个配置节绑定为一个具有对应结构的符合对象。除此…

C语言课程回顾:八、C语言之函 数

C语言之函 数 8 函 数8.1 概述8.2 函数定义的一般形式8.3 函数的参数和函数的值8.3.1 形式参数和实际参数8.3.2 函数的返回值 8.4 函数的调用8.4.1 函数调用的一般形式8.4.2 函数调用的方式8.4.3 被调用函数的声明和函数原型 8.5 函数的嵌套调用8.6 函数的递归调用8.7 数组作为…

大厂面试官问我:MySQL宕机重启了,怎么知道哪些事务是需要回滚的哪些是需要提交的?【后端八股文九:Mysql事务八股文合集】

本文为【Mysql事务八股文合集】初版&#xff0c;后续还会进行优化更新&#xff0c;欢迎大家关注交流~ 大家第一眼看到这个标题&#xff0c;不知道心中是否有答案了&#xff1f;在面试当中&#xff0c;面试官经常对项目亮点进行深挖&#xff0c;来考察你对这个项目亮点的理解以及…

AIGC | 为机器学习工作站安装NVIDIA 4070 Ti Super显卡驱动

[ 知识是人生的灯塔&#xff0c;只有不断学习&#xff0c;才能照亮前行的道路 ] 0x00 前言简述 话接上篇《AIGC | Ubuntu24.04桌面版安装后必要配置》文章&#xff0c;作为作者进行机器学习的基础篇&#xff08;筑基期&#xff09;&#xff0c;后续将主要介绍机器学习环境之如何…

32位Arm嵌入式开发Ubuntu环境设置

32位Arm嵌入式开发Ubuntu环境设置 今天在调试一块32位ARM A7开发板时老是不成功&#xff0c;我装的是Ubuntu22.04版&#xff0c;在终端下运行工具链里的gdb程序居然报了一大堆错误&#xff0c;缺这个缺那个&#xff0c;按照提示装了一遍&#xff0c;再运行发现需要Python2.7环境…

NSK发布新版在线计算工具

July 01, 2024 NSK Ltd. Corporate Communications Department NSK Ltd. announced today that it has improved the engineering tools available on its website. The new engineering tools — NSK Online Catalog, Technical Calculations, and 2D/3D CAD Data — which …

STM32第十五课:LCD屏幕及应用

文章目录 需求一、LCD显示屏二、全屏图片三、数据显示1.显示欢迎词2.显示温湿度3.显示当前时间 四、需求实现代码 需求 1.在LCD屏上显示一张全屏图片。 2.在LCD屏上显示当前时间&#xff0c;温度&#xff0c;湿度。 一、LCD显示屏 液晶显示器&#xff0c;简称 LCD(Liquid Cry…

分析Profiler Timeline中的算子序列,通过寻找频繁项集的办法,得到TOPK可融合的算子序列

分析Profiler Timeline中的算子序列,通过寻找频繁项集的办法,得到TOPK可融合的算子序列 1.相关链接2.代码【仅分析带通信算子的Pattern】3.在实际工程中发现 [all_gather, matrix_mm_out]频率最高4.[Ascend MC2](https://gitee.com/ascend/MindSpeed/blob/master/docs/features…

路径规划之基于二次规划的路径平滑Matlab代码

参考&#xff1a; 自动驾驶决策规划算法第二章第二节(上) 参考线模块_哔哩哔哩_bilibili 自动驾驶决策规划算法第二章第二节(下) 参考线代码实践_哔哩哔哩_bilibili QP函数&#xff0c;二次规划的逻辑 function [smooth_path_x,smooth_path_y] QP(path_x, path_y, w_cost_s…

docker也能提权??内网学习第6天 rsync未授权访问覆盖 sudo(cve-2021-3156)漏洞提权 polkit漏洞利用

现在我们来说说liunx提权的操作&#xff1a;前面我们说了环境变量&#xff0c;定时任务来进行提权的操作 rsync未授权访问覆盖 我们先来说说什么是rsync rsync是数据备份工具&#xff0c;默认是开启的873端口 我们在进行远程连接的时候&#xff0c;如果它没有让我们输入账号…

从海上长城到数字防线:视频技术在海域边防现代化中的创新应用

随着全球化和科技发展的加速&#xff0c;海域安全问题日益凸显其重要性。海域边防作为国家安全的第一道防线&#xff0c;其监控和管理面临着诸多挑战。近年来&#xff0c;视频技术的快速发展为海域边防场景提供了新的解决方案&#xff0c;其高效、实时、远程的监控特点极大地提…

【优化论】基本概念与细节

优化论&#xff08;Optimization Theory&#xff09;是数学和计算机科学中一个重要的分支&#xff0c;旨在寻找给定问题的最优解。这个领域的应用非常广泛&#xff0c;从经济学、工程学到机器学习、金融等各个领域都有其踪迹。我们可以通过一系列直观的比喻来理解优化论的基本概…

数据库之SQL(二)

目录 一、简述SQL中如何将“行”转换为“列” 二、简述SQL注入 三、如何将一张表的部分数据更新到另一张表 四、WHERE和HAVING的区别 一、简述SQL中如何将“行”转换为“列” 我们以MySQL数据库为例&#xff0c;来说明行转列的实现方式。 首先&#xff0c;假设我们有一张分…

2024亚太杯中文赛数学建模B题完整论文讲解(含每一问python代码+结果+可视化图)

大家好呀&#xff0c;从发布赛题一直到现在&#xff0c;总算完成了2024 年第十四届 APMCM 亚太地区大学生数学建模竞赛B题洪水灾害的数据分析与预测完整的成品论文。 本论文可以保证原创&#xff0c;保证高质量。绝不是随便引用一大堆模型和代码复制粘贴进来完全没有应用糊弄人…