孙怡带你深度学习(3)--损失函数

news2024/9/20 17:00:57

文章目录

  • 损失函数
    • 一、L1Loss损失函数
      • 1. 定义
      • 2. 优缺点
      • 3. 应用
    • 二、NLLLoss损失函数
      • 1. 定义与原理
      • 2. 优点与注意
      • 3. 应用
    • 三、MSELoss损失函数
      • 1. 定义与原理
      • 2. 优点与注意
      • 3. 应用
    • 四、BCELoss损失函数
      • 1. 定义与原理
      • 2. 优点与注意
      • 3. 应用
    • 五、CrossEntropyLoss损失函数
      • 1. 定义与原理
      • 2. 优点与注意
      • 3. 应用
  • 总结

损失函数

损失函数(Loss Function)是机器学习和深度学习中非常重要的一个概念,它用于评估模型的预测值与实际值之间的差异程度。在训练过程中,损失函数作为优化的目标,通过最小化损失函数的值来调整模型参数,从而提高模型的预测准确性。

具体来说,损失函数将模型的预测输出(例如,一个分类任务中的类别概率分布)与真实标签(或真实值)进行比较,并计算出一个表示差异的数值。这个数值越大,表示模型的预测越不准确;数值越小,表示模型的预测越接近真实情况。

接下来,我们介绍几个常用的损失函数。

一、L1Loss损失函数

L1Loss损失函数,也被称为平均绝对误差(Mean Absolute Error, MAE),是深度学习和机器学习中常用的一种损失函数,特别是在回归任务中。

1. 定义

L1Loss计算的是模型预测值f(x)与真实值y之间差的绝对值的平均值。其数学表达式为:

在这里插入图片描述

其中,n是样本数量,yi是第i个样本的真实值,f(xi)是模型对第i个样本的预测值。

2. 优缺点

  • 优点
  1. 稳定性:L1Loss对于所有输入值都有稳定的梯度,不会导致梯度爆炸问题,因此具有较为稳健的解。
  2. 鲁棒性:L1Loss对于噪声和异常值(离群点)具有相对较强的鲁棒性,因为它不会因个别异常值而产生过大的误差。
  3. 稀疏性:L1Loss能够产生稀疏的特征权重,即很多无用或影响较小的特征的权重会被置为0,有助于特征选择和模型简化。
  • 缺点
  1. 不可导性:在0点处,L1Loss的梯度不存在(因为绝对值函数在0点不可导),这可能导致在优化过程中,当权重恰好接近0时,梯度下降法无法继续进行。
  2. 收敛速度:与L2Loss相比,L1Loss在误差较大时,其梯度是恒定的,这可能导致在接近最优解时收敛速度较慢。

3. 应用

  1. L1Loss通常用于回归任务中,特别是当模型需要处理的数据集存在较多噪声或异常值。
  2. 或者希望模型具有稀疏特征时。

然而,由于神经网络通常解决的是复杂问题,且L1Loss在0点不可导的缺点,它在神经网络中的应用相对较少,尤其是在需要精细调整权重的情况下。

二、NLLLoss损失函数

NLLLoss损失函数,全称为Negative Log Likelihood Loss(负对数似然损失),是深度学习中常用的一种损失函数,尤其在处理分类问题时表现出色。

1. 定义与原理

NLLLoss衡量的是模型预测概率分布与真实标签之间差异的损失。在PyTorch等深度学习框架中,它通常用于多分类任务。具体来说,NLLLoss计算的是对数概率的负值与真实标签之间的交叉熵损失。这样做的目的是通过最小化损失来优化模型参数,使得模型的预测结果更加接近真实标签。

2. 优点与注意

NLLLoss损失函数的优点在于它能够直接反映模型预测的概率分布与真实标签之间的差异,且计算过程相对简单高效。然而,在使用时需要注意以下几点:

  1. 输入要求:NLLLoss要求输入的对数概率必须是通过log_softmax函数计算得到的,而不能直接使用softmax函数的输出。
  2. 目标标签:目标标签需要是整数类型,表示每个样本的真实类别索引。
  3. 权重调整:如果需要对不同类别的损失进行权重调整,可以在NLLLoss函数中设置相应的权重参数。
  4. 数值稳定性:由于NLLLoss涉及对数运算,因此需要注意数值稳定性问题。通过先应用log_softmax函数可以避免直接计算softmax时可能出现的上溢或下溢问题。

3. 应用

NLLLoss损失函数在多分类问题中广泛应用,包括但不限于自然语言处理(NLP)中的语言模型、情感分类等任务。在这些任务中,模型需要将输入序列映射到输出标签,而NLLLoss能够评估模型预测的概率分布与真实标签之间的差异,从而指导模型的优化方向。

三、MSELoss损失函数

MSELoss损失函数,全称为Mean Squared Error Loss(均方误差损失函数),是深度学习中常用的一种回归损失函数

1. 定义与原理

MSELoss通过计算预测值与真实值之间差的平方的平均值来衡量模型的性能。具体来说,对于每个样本,它计算预测值与真实值之差的平方,然后对所有样本的平方误差求和并取平均,得到最终的损失值。这种损失函数旨在通过最小化预测值与真实值之间的差异来优化模型参数,从而提高模型的预测准确性。

对于单个样本,假设预测值为 y^,真实值为 y,则该样本的均方误差为 (y^−y)2。对于包含 n 个样本的数据集,MSELoss的计算公式为:

在这里插入图片描述

2. 优点与注意

  • 优点
  1. 优化景观:MSE结果是一个平滑且凸的优化景观,这有助于使用基于梯度的算法(如梯度下降)进行高效优化。
  2. 唯一极小值:MSE具有唯一的全局极小值,这简化了优化过程,并在某些情况下可以获得解析解。
  3. 可微性:MSE在任何地方都是可微的,这使得在训练过程中可以使用基于梯度的优化方法。
  4. 广泛适用性:MSE是回归问题的标准且广泛使用的损失函数,适用于预测连续的数值。
  • 注意
  1. 对异常值敏感:由于MSE计算的是误差的平方,因此它对异常值非常敏感。当数据集中存在极端值时,这些异常值可能会对损失值产生不成比例的影响,从而导致模型性能下降。
  2. 非直观的尺度:MSE的尺度受到平方差的影响,这可能导致其解释性较差。特别是在与原始数据的尺度相比时,MSE可能难以直观地反映模型预测的准确性。

3. 应用

MSELoss在多种回归任务中表现出色,包括但不限于房价预测、股票价格预测、气温预测等。在这些任务中,模型需要输出一个连续的数值预测结果,而MSELoss能够有效地评估模型预测结果与实际值之间的差异,并指导模型的优化方向。

四、BCELoss损失函数

BCELoss损失函数,全称为Binary Cross Entropy Loss(二元交叉熵损失函数),是深度学习中常用于二分类问题的一种损失函数。

1. 定义与原理

BCELoss通过计算模型预测的概率分布与实际标签之间的交叉熵损失来评估模型的性能。在二分类问题中,每个样本的真实标签是0或1,而模型输出的是一个介于0和1之间的概率值,表示该样本属于正类的概率。BCELoss通过比较这两个值之间的差异,为模型提供一个损失值,该值越大表示模型预测越不准确。

对于单个样本,BCELoss的数学公式为:

在这里插入图片描述

其中,y 是实际标签(0 或 1),p 是模型输出的概率值(预测为正类的概率),log 是自然对数。

  • y=1 时,损失函数简化为 −log(p),此时如果 p 越接近 1,则损失越小;
  • y=0 时,损失函数简化为 −log(1−p),此时如果 p 越接近 0,则损失越小。

对于一批样本,BCELoss通常是对所有样本的BCELoss求和后取平均值。

2. 优点与注意

  • 优点
  1. 直观性:BCELoss能够直观地反映模型预测的概率分布与实际标签之间的差异,从而指导模型的优化方向。
  2. 鲁棒性:在二分类问题中,BCELoss对正负样本的预测误差都进行了考虑,使得模型在训练过程中能够同时关注到正负样本的分类情况。
  3. 易于实现:在深度学习框架(如PyTorch、TensorFlow等)中,BCELoss通常作为内置函数提供,易于实现和使用。
  • 注意
  1. 输入要求:在使用BCELoss时,需要注意模型输出的概率值应该经过Sigmoid函数或其他适当的激活函数处理,以确保其值在0和1之间。
  2. 标签要求:BCELoss要求真实标签必须是二值化的(0或1),而不是其他形式的标签(如类别索引、独热编码等)。
  3. 数值稳定性:在计算BCELoss时,需要注意数值稳定性问题。例如,当预测概率 p 非常接近0或1时,log(p) 或 log(1−p) 的值可能会变得非常大或非常小,导致计算过程中出现数值问题。为了避免这种情况,可以对 p 进行一些平滑处理(如添加一个小的正数 ϵp 和 1−p 中)。

3. 应用

BCELoss广泛应用于各类二分类任务中,如文本情感分析(积极/消极)、垃圾邮件检测(垃圾邮件/非垃圾邮件)、病患诊断(患病/未患病)等。在这些任务中,模型需要输出一个二分类的概率预测结果,而BCELoss能够有效地评估模型预测的准确性,并指导模型的优化方向。

五、CrossEntropyLoss损失函数

CrossEntropyLoss损失函数,也称为交叉熵损失函数,是深度学习中用于分类问题的一种常用损失函数。它衡量的是模型预测的概率分布与真实标签的概率分布之间的差异。尽管它通常与多分类问题相关联,但也可以用于二分类问题(在这种情况下,它等价于二元交叉熵损失,即BCELoss的特例)。

1. 定义与原理

交叉熵损失函数通过比较模型对每个类别的预测概率和真实的标签(通常是独热编码形式)来计算损失。如果模型对某个样本的预测概率分布与真实标签越接近,则交叉熵损失越小;反之,损失越大。

对于多分类问题,假设有C个类别,对于每个样本,交叉熵损失的计算公式如下:

在这里插入图片描述

其中,yc 是样本的真实标签中第 c 类的值(在独热编码中,只有一个元素为1,其余为0),pc 是模型预测的第 c 类的概率。

注意,在实际计算中,由于 yc 是独热编码的,所以上式中的求和实际上只涉及一个非零项,即真实标签对应类别的预测概率的对数的负值。

2. 优点与注意

  • 优点
  1. 直观性:交叉熵损失能够直观地反映模型预测的概率分布与真实标签之间的差异。
  2. 易于优化:由于交叉熵损失函数是凸函数(在模型输出为softmax概率的情况下),因此可以使用梯度下降等优化算法来有效地最小化损失。
  3. 鲁棒性:交叉熵损失对预测概率的微小变化敏感,这有助于模型在训练过程中更准确地逼近真实标签。
  • 注意
  1. 输入要求:在使用交叉熵损失函数时,需要确保模型输出的是概率值(通常通过softmax函数进行转换),而真实标签是独热编码形式的。
  2. 数值稳定性:当预测概率接近0时,log(p) 的值会趋于负无穷,这可能导致数值问题。为了解决这个问题,可以在计算对数之前对预测概率进行平滑处理(例如,添加一个小的正数 ϵ 到预测概率中)。
  3. 权重平衡:在处理类别不平衡的数据集时,可以为不同类别的损失分配不同的权重,以改善模型的性能。

3. 应用

交叉熵损失函数广泛应用于多分类问题中,如图像分类、文本分类等。在这些任务中,模型需要输出每个类别的概率预测,而交叉熵损失函数能够有效地评估模型预测的准确性,并指导模型的优化方向。

总结

本篇介绍了部分损失函数,损失函数有很多,这些是较为常用的,其余可以自行了解哦~

  1. L1Loss损失函数:通常用于回归任务中。
  2. NLLLoss损失函数:在多分类问题中广泛应用。
  3. MSELoss损失函数:在多种回归任务中表现出色。
  4. BCELoss损失函数:广泛应用于各类二分类任务中
  5. CrossEntropyLoss交叉熵损失函数:广泛应用于多分类问题中。

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

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

相关文章

『 Linux 』HTTP(一)

文章目录 域名URLURLEncode和URLDecodeHTTP的请求HTTP的响应请求与响应的获取简单的Web服务器 域名 任何客户端在需要访问一个服务端时都需要一个IP和端口号,而当一个浏览器去访问一个网页时通常更多使用的是域名而不是IP:port的方式, www.baidu.com这是百度的域名; 实际上当浏…

数据结构和算法|排序算法系列(五)|排序总结(时间复杂度和是否稳定)

文章目录 选择排序冒泡排序插入排序快排归并排序堆排序 选择排序 一句话总结,开启一个循环,每轮从未排序区间选择****最小的元素,将其放到已排序区间的末尾。「未排序区间一般也放在后面,已排序区间放在前面」 选择排序 时间复…

2024蓝桥杯省B好题分析

题解来自洛谷,作为学习 目录 宝石组合 数字接龙 爬山 拔河 宝石组合 # [蓝桥杯 2024 省 B] 宝石组合## 题目描述在一个神秘的森林里,住着一个小精灵名叫小蓝。有一天,他偶然发现了一个隐藏在树洞里的宝藏,里面装满了闪烁着美…

Flutter Android Package调用python

操作步骤 一、创建一个Flutter Package 使用以下指令创建一个Flutter Package flutter create --templateplugin --platformsandroid,ios -a java flutter_package_python 二、修改android/build.gradle文件 在buildscript——>dependencies中添加以下内容 //导入Chaqu…

接口幂等性和并发安全的区别?

目录标题 幂等性并发安全总结 接口幂等性和并发安全是两个不同的概念,虽然它们在设计API时都很重要,但侧重点不同。 幂等性 定义:幂等性指的是无论对接口进行多少次相同的操作,结果都是一致的。例如,HTTP的PUT和DELE…

TON基金会与Curve Finance合作:推出基于TON的新型稳定币互换项目

2024年,TON基金会宣布与去中心化金融(DeFi)领域的知名协议Curve Finance建立战略合作,携手推出一个全新的基于TON区块链的稳定币交换项目。这一合作标志着TON生态系统在DeFi领域的进一步扩展,并将通过Curve Finance的核…

玖逸云黑系统源码 v1.3.0全解无后门 +搭建教程

功能带有卡密生成和添加黑名单等,反正功能也不是很多具体的自己看程序截图即可。 搭建教程 完成 1.我们先添加一个站点 2.PHP选择7.3 3.上传源码解压 4.导入数据库 5.配置数据库信息config.php 源码下载:https://download.csdn.net/download/m0_6…

Python包管理工具pip 入门

主要参考资料: 全面解析 python 包管理工具 pip: https://blog.csdn.net/maiya_yayaya/article/details/135341026 目录 pypi社区pip工具安装 piprequirements.txt 记录python包管理工具8.1 什么是 requirements.txt8.2 requirements.txt 格式8.3 示例8.4 pip 安装 …

鸿蒙手势交互(二:单一手势)

二、单一手势 有六种:点击手势(TapGesture)、长按手势(LongPressGesture)、拖动手势(PanGesture) 捏合手势(PinchGesture)、旋转手势(RotationGesture)、滑动手势(SwipeGesture) 点击手势(TapGesture) TapGesture(value?:{count?:number, fingers?:number}) /…

7.7opencv中(基于C++) 翻转图像

基本概念 在OpenCV中,翻转图像指的是沿着一个或多个轴翻转图像。OpenCV提供了一个函数 flip 来完成这个任务。这个函数可以沿着水平轴、垂直轴或者同时沿着水平和垂直轴翻转图像。 函数原型 void flip(InputArray src,OutputArray dst,int flipCode );参数说明 •…

vulnhub-prime1

目录 靶场环境解题过程 靶场环境 项目ip靶机(prime)未知攻击机(kali)10.128.129.128 解题过程 打开靶机,我们只能看见一个登录界面,上面只有半截提示 我们首先要做的是主机发现,因为是网络适…

使用 HFD 加快 Hugging Face 模型和数据集的下载

Hugging Face 提供了丰富的预训练模型和数据集,而且使用 Hugging Face 提供的 from_pretrained() 方法可以轻松加载它们,但是,模型和数据集文件通常体积庞大,用默认方法下载起来非常花时间。 本文将指导你如何使用 HFD&#xff08…

makefile 的语法(9):函数 file foreach

(57) 之前学了处理文本的函数,处理文件名的函数,现在学习读取文件的函数 file : (58)可以对文本中每一项进行函数处理的 foreach : (59) (60&…

路由原理介绍

定义与过程 定义:是指导IP报文发送的路径信息 过程: 检查数据包的目的地确定信息源发现可能的路径选择最佳路径验证和维护路由信息 路由来源 直连路由:不需配置,路由器配置IP后自动生效 静态路由:手动配置 ip r…

小商品市场配电系统安全用电解决方案

1.概述 随着市场经济的快速发展和人民生活水平的不断提高,全国各地相继建起了大批大型小商品批发市场,此类市场以其商品种类繁多、价格实惠、停车方便等特点吸引了大量的顾客,成为人们日常光顾的重要场所,地方便了广大人民群众的日常生活。 小商品市场集商品销售和短时货物储…

分享一个 在线拍卖系统 商品竞拍平台Java、python、php三个技术版本(源码、调试、LW、开题、PPT)

💕💕作者:计算机源码社 💕💕个人简介:本人 八年开发经验,擅长Java、Python、PHP、.NET、Node.js、Android、微信小程序、爬虫、大数据、机器学习等,大家有这一块的问题可以一起交流&…

【zookeeper安装】zookeeper安装详细教程(单机/集群部署)(linux版)

文章目录 前言一、zookeeper简介二、获取Zookeeper安装包2.1. 离线获取2.2. 在线获取2.3. 解压包 三、单机部署3.1. 配置conf文件3.2. 启动服务 四、集群部署4.1. 概念4.2. 配置conf文件4.3. 创建myid文件4.3. 启动每个节点的zookeeper服务 五、配置systemctl管理(选…

neo4j:ubuntu环境下的安装与使用

一、neo4j安装 1. 下载安装包 进入网站:https://neo4j.com/deployment-center/#community 在上图中选择下载即可(社区版免费) 注意:neo4j的版本要和电脑安装的jdk版本对应,jdk版本使用java --version查看:…

不得不说 Sam‘s Club 的数字化做得挺好

因正好有东西要退货就顺便看了下订单如何退货。 但发现 Sam’s Club 的所有交易都能够从后台查到,同时还提供了个 CSV 文件的下载。 打开下载文件就能看到全部的数字化的交易记录。 就拿加油这个事情来说,能够非常清楚这一年在 Sam’s Club 加油多少加…

【docker】命令之容器操作

一、前言 在上篇博客介绍了关于如何从应用市场,下载镜像后,对镜像的相关操作了。这篇博客呢我们就要讲解我们把镜像下载下来了,启动这个镜像后,就是我们说的容器了,那么容器的具体操作又有那些呢? 二、容器…