【深度学习】(3)--损失函数
文章目录
- 损失函数
- 一、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. 优缺点
- 优点
- 稳定性:L1Loss对于所有输入值都有稳定的梯度,不会导致梯度爆炸问题,因此具有较为稳健的解。
- 鲁棒性:L1Loss对于噪声和异常值(离群点)具有相对较强的鲁棒性,因为它不会因个别异常值而产生过大的误差。
- 稀疏性:L1Loss能够产生稀疏的特征权重,即很多无用或影响较小的特征的权重会被置为0,有助于特征选择和模型简化。
- 缺点
- 不可导性:在0点处,L1Loss的梯度不存在(因为绝对值函数在0点不可导),这可能导致在优化过程中,当权重恰好接近0时,梯度下降法无法继续进行。
- 收敛速度:与L2Loss相比,L1Loss在误差较大时,其梯度是恒定的,这可能导致在接近最优解时收敛速度较慢。
3. 应用
- L1Loss通常用于回归任务中,特别是当模型需要处理的数据集存在较多噪声或异常值。
- 或者希望模型具有稀疏特征时。
然而,由于神经网络通常解决的是复杂问题,且L1Loss在0点不可导的缺点,它在神经网络中的应用相对较少,尤其是在需要精细调整权重的情况下。
二、NLLLoss损失函数
NLLLoss损失函数,全称为Negative Log Likelihood Loss(负对数似然损失),是深度学习中常用的一种损失函数,尤其在处理分类问题时表现出色。
1. 定义与原理
NLLLoss衡量的是模型预测概率分布与真实标签之间差异的损失。在PyTorch等深度学习框架中,它通常用于多分类任务。具体来说,NLLLoss计算的是对数概率的负值与真实标签之间的交叉熵损失。这样做的目的是通过最小化损失来优化模型参数,使得模型的预测结果更加接近真实标签。
2. 优点与注意
NLLLoss损失函数的优点在于它能够直接反映模型预测的概率分布与真实标签之间的差异,且计算过程相对简单高效。然而,在使用时需要注意以下几点:
- 输入要求:NLLLoss要求输入的对数概率必须是通过log_softmax函数计算得到的,而不能直接使用softmax函数的输出。
- 目标标签:目标标签需要是整数类型,表示每个样本的真实类别索引。
- 权重调整:如果需要对不同类别的损失进行权重调整,可以在NLLLoss函数中设置相应的权重参数。
- 数值稳定性:由于NLLLoss涉及对数运算,因此需要注意数值稳定性问题。通过先应用log_softmax函数可以避免直接计算softmax时可能出现的上溢或下溢问题。
3. 应用
NLLLoss损失函数在多分类问题中广泛应用,包括但不限于自然语言处理(NLP)中的语言模型、情感分类等任务。在这些任务中,模型需要将输入序列映射到输出标签,而NLLLoss能够评估模型预测的概率分布与真实标签之间的差异,从而指导模型的优化方向。
三、MSELoss损失函数
MSELoss损失函数,全称为Mean Squared Error Loss(均方误差损失函数),是深度学习中常用的一种回归损失函数。
1. 定义与原理
MSELoss通过计算预测值与真实值之间差的平方的平均值来衡量模型的性能。具体来说,对于每个样本,它计算预测值与真实值之差的平方,然后对所有样本的平方误差求和并取平均,得到最终的损失值。这种损失函数旨在通过最小化预测值与真实值之间的差异来优化模型参数,从而提高模型的预测准确性。
对于单个样本,假设预测值为 y^,真实值为 y,则该样本的均方误差为 (y^−y)2。对于包含 n 个样本的数据集,MSELoss的计算公式为:
2. 优点与注意
- 优点:
- 优化景观:MSE结果是一个平滑且凸的优化景观,这有助于使用基于梯度的算法(如梯度下降)进行高效优化。
- 唯一极小值:MSE具有唯一的全局极小值,这简化了优化过程,并在某些情况下可以获得解析解。
- 可微性:MSE在任何地方都是可微的,这使得在训练过程中可以使用基于梯度的优化方法。
- 广泛适用性:MSE是回归问题的标准且广泛使用的损失函数,适用于预测连续的数值。
- 注意:
- 对异常值敏感:由于MSE计算的是误差的平方,因此它对异常值非常敏感。当数据集中存在极端值时,这些异常值可能会对损失值产生不成比例的影响,从而导致模型性能下降。
- 非直观的尺度: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. 优点与注意
- 优点:
- 直观性:BCELoss能够直观地反映模型预测的概率分布与实际标签之间的差异,从而指导模型的优化方向。
- 鲁棒性:在二分类问题中,BCELoss对正负样本的预测误差都进行了考虑,使得模型在训练过程中能够同时关注到正负样本的分类情况。
- 易于实现:在深度学习框架(如PyTorch、TensorFlow等)中,BCELoss通常作为内置函数提供,易于实现和使用。
- 注意:
- 输入要求:在使用BCELoss时,需要注意模型输出的概率值应该经过Sigmoid函数或其他适当的激活函数处理,以确保其值在0和1之间。
- 标签要求:BCELoss要求真实标签必须是二值化的(0或1),而不是其他形式的标签(如类别索引、独热编码等)。
- 数值稳定性:在计算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. 优点与注意
- 优点:
- 直观性:交叉熵损失能够直观地反映模型预测的概率分布与真实标签之间的差异。
- 易于优化:由于交叉熵损失函数是凸函数(在模型输出为softmax概率的情况下),因此可以使用梯度下降等优化算法来有效地最小化损失。
- 鲁棒性:交叉熵损失对预测概率的微小变化敏感,这有助于模型在训练过程中更准确地逼近真实标签。
- 注意:
- 输入要求:在使用交叉熵损失函数时,需要确保模型输出的是概率值(通常通过softmax函数进行转换),而真实标签是独热编码形式的。
- 数值稳定性:当预测概率接近0时,log(p) 的值会趋于负无穷,这可能导致数值问题。为了解决这个问题,可以在计算对数之前对预测概率进行平滑处理(例如,添加一个小的正数 ϵ 到预测概率中)。
- 权重平衡:在处理类别不平衡的数据集时,可以为不同类别的损失分配不同的权重,以改善模型的性能。
3. 应用
交叉熵损失函数广泛应用于多分类问题中,如图像分类、文本分类等。在这些任务中,模型需要输出每个类别的概率预测,而交叉熵损失函数能够有效地评估模型预测的准确性,并指导模型的优化方向。
总结
本篇介绍了部分损失函数,损失函数有很多,这些是较为常用的,其余可以自行了解哦~
- L1Loss损失函数:通常用于回归任务中。
- NLLLoss损失函数:在多分类问题中广泛应用。
- MSELoss损失函数:在多种回归任务中表现出色。
- BCELoss损失函数:广泛应用于各类二分类任务中。
- CrossEntropyLoss交叉熵损失函数:广泛应用于多分类问题中。
相关文章:

【深度学习】(3)--损失函数
文章目录 损失函数一、L1Loss损失函数1. 定义2. 优缺点3. 应用 二、NLLLoss损失函数1. 定义与原理2. 优点与注意3. 应用 三、MSELoss损失函数1. 定义与原理2. 优点与注意3. 应用 四、BCELoss损失函数1. 定义与原理2. 优点与注意3. 应用 五、CrossEntropyLoss损失函数1. 定义与原…...

git学习报告
文章目录 git学习报告如何配置vscode终端安装PowerShell安装 Microsoft.Powershell.Preview使用 git的使用关于团队合作 git指令本地命令:云端指令 git学习报告 如何配置vscode 安装powershell调教window终端,使其像Linux一样,通过Linux命令…...

Spring MVC的应用
目录 1、创建项目与maven坐标配置 2、核心配置 3、启动项目测试 4、不同请求参数在controller的配置 4.1 servlet API 4.2 简单类型 4.3 pojo类型 4.4 日期类型 4.5 restful风格4种操作类型 4.5.1 GET:获取资源 4.5.2 POST:新建资源 4.5.3 P…...

JavaEE: 深入探索TCP网络编程的奇妙世界(六)
文章目录 TCP核心机制TCP核心机制九: 面向字节流TCP核心机制十: 异常处理 小小的补充(URG 和 PSH)~TCP小结TCP/UDP 对比用UDP实现可靠传输(经典面试题) 结尾 TCP核心机制 上一篇文章JavaEE: 深入探索TCP网络编程的奇妙世界(五) 书接上文~ TCP核心机制九: 面向字节流 TCP是面…...

探秘 Web Bluetooth API:连接蓝牙设备的新利器
引言 随着物联网技术的快速发展,蓝牙设备在日常生活中扮演着越来越重要的角色。而在 Web 开发领域,Web Bluetooth API 的出现为我们提供了一种全新的方式来连接和控制蓝牙设备。本文将深入探讨 Web Bluetooth API 的使用方法和原理,帮助开发…...

Kubernetes Pod调度基础(kubernetes)
实验环境依旧是k8s快照,拉取本次实验所需的镜像文件; 然后在master节点上传已经编写好的yaml文件; 然后同步会话,导入镜像; pod控制器: 标签选择器--》标签: 标签: 在Kubernetes&…...

Angular由一个bug说起之十:npm Unsupported engine
我们在用npm下载包的时候,有时候会碰到这样的提示 这是npm的警告,说我们使用的nodejs版本与下载的包所要求的nodejs版本不一致。 这是因为有些包它对nodejs的版本有要求,然后就会在package.json文件里的engines字段里声明它所要求的nodejs版本…...

Android 开发高频面试题之——Flutter
Android开发高频面试题之——Java基础篇 flutter高频面试题记录 Flutter1. dart中的作用域与了解吗2. dart中. .. ...分别是什么意思?3. Dart 是不是单线程模型?如何运行的?4. Dart既然是单线程模型支持多线程吗?5. Future是什么6. Stream是什么7. Flutter 如何和原生交互…...

视频单目标跟踪研究
由于对视频单目标跟踪并不是很熟悉,所以首先得对该领域有个大致的了解。 视频目标跟踪是计算机视觉领域重要的基础性研究问题之一,是指在视频序列第一帧指定目标 后,在后续帧持续跟踪目标,即利用边界框(通常用矩形框表…...

若依vue3.0表格的增删改查文件封装
一、因若依生成的文件没进行封装,维护起来比较麻烦。所以自己简单的进行封装了一下 gitee代码(文件)地址:https://gitee.com/liu_yu_ting09/ruo_yi.git 二、封装的方法(下面绿色按钮进行全局封装一个JeecgListMixin.js…...

【已解决】如何使用JAVA 语言实现二分查找-二分搜索折半查找【算法】手把手学会二分查找【数据结构与算法】
文章目录 前言任务描述编程要求 输出样例:未查找到11元素! 二、代码实现总结理解不了考试的时候直接背下来就好了。 前言 [TOC]二分搜索 任务描述 折半查找(二分搜索) 设a[low..high]是当前的查找区间,首先确定该区间的中点位置…...

ERROR 1524 (HY000): Plugin ‘mysql_native_password‘ is not loaded
你遇到的错误是由于 MySQL 版本不再默认支持 mysql_native_password 认证插件导致的。从 MySQL 8.0 开始,默认的认证插件是 caching_sha2_password,而不是 mysql_native_password。 解释: 错误 ERROR 1524 (HY000): Plugin mysql_native_pa…...

.NET 6.0 WebAPI 使用JWT生成Token的验证授权
1.引入相关程序包JwtBearer注意版本: 2.配置文件appsettings.json写相关配置参数(也可不写,写在程序里面,数据库读取也是一样的) , //JWT加密"JWTToken": {"SecretKey": "jsaduwqe6asdjewejdue7dfmsdfu0sdfmwmsd8wfsd6",…...

M9410A VXT PXI 矢量收发信机,300/600/1200MHz带宽
M9410A PXI 矢量收发信机 -300/600/1200MHz带宽- M9410A VXT PXI 矢量收发信机,300/600/1200MHz带宽支持 5G 的 PXI 矢量收发信机(VXT)是一个 2 插槽模块,具有 1.2 GHz 的瞬时带宽 主要特点 Keysight M9410A VXT PXIe 矢量收发…...

用工厂模式演示springboot三种注入方式 | @Autowired
背景:看了个demo工厂模式,示例代码的工厂类是new出来的,但是实际项目中都是用springboot框架、bean都是会给容器管理的,所以在思考这个工厂类要交给springboot托管要怎么改。以下是总结笔记 依赖注入 1.工厂类用new实现2.工厂类用…...

es查询语法
查询关键词的含义: match: 用于进行全文搜索,分析查询文本并与倒排索引中的词项进行匹配。 term: 精确匹配,适用于非分析字段,如 keyword 类型。用于查找字段值完全相等的文档。 bool: 组合多个查询条件。可以使用 must…...

LabVIEW提高开发效率技巧----合理使用数据流与内存管理
理使用数据流和内存管理是LabVIEW开发中提高性能和稳定性的关键,特别是在处理大数据或高频率信号时,优化可以避免内存消耗过大、程序卡顿甚至崩溃。 1. 使用 Shift Register 进行内存管理 Shift Register(移位寄存器) 是 LabVIE…...

如何在 ECharts 中设置轴标签
在 ECharts 中,轴标签(Axis Label)是指 X 轴或 Y 轴上的刻度标签,用于显示轴上的数据值或分类名称。你可以通过配置 xAxis(X 轴)或 yAxis(Y 轴)的 axisLabel 属性来设置轴标签的样式…...

怎么用gitee做一个图片仓库,在md文档中用这个图片网络地址,然后显示图片
痛因:我为什么要这样做,呃,我一开始图片都是存本地地址的,放在和这个md文档同级的assets文件夹下面,这样子确实当时很方便,复制粘贴什么也不用管,但是想把这个文档分享给别的人的时候࿰…...

Thinkphp(TP)
1.远程命令执行 /index.php?sindex/think\app/invokefunction&functioncall_user_func_array&vars[0]system&vars[1][]whoami 2.远程代码执行 /index.php?sindex/think\app/invokefunction&functioncall_user_func_array&vars[0]phpinfo&vars[1][]…...

【艾思科蓝】前端框架巅峰对决:React、Vue与Angular的全面解析与实战指南
【JPCS独立出版】第三届能源与动力工程国际学术会议(EPE 2024)_艾思科蓝_学术一站式服务平台 更多学术会议请看:https://ais.cn/u/nuyAF3 引言 在快速发展的前端技术领域,选择合适的框架或库对于项目的成功至关重要。React、Vu…...

IT行业的未来:技术变革与创新的持续推动
IT行业的未来:技术变革与创新的持续推动 随着数字化进程的不断加速,信息技术(IT)行业正迈入一个快速变革的时代。新兴技术如人工智能(AI)、5G、物联网(IoT)和区块链,正在…...

Python PDF转图片自定义输出
PDF转图片自定义输出 一、引入必要库 1 2import fitz import os也可以检查一下版本就是了:print(fitz.__doc__) 上一篇文章已经介绍过要使用的库,和写代码要用到的思路了。我们直接开始: 二、找到文件 首先是我们要获取用户的输入&#x…...

Git 常用操作命令说明
Git 常用操作命令 1. 初始化和克隆仓库 1.1 初始化仓库 git init在当前目录初始化一个新的 Git 仓库。 1.2 克隆仓库 git clone <repository-url>从远程仓库克隆项目到本地。 示例: git clone https://github.com/user/repo.git2. 查看状态和日志 2.1…...

自学前端的正确姿势是...
师傅带进门,修行在个人。 在前端自学成才的道路上,有些人走的很快,有些人却举步维艰。 为什么会这样子呢?因为他们没有掌握自学前端的正确姿势。 在介绍应该要怎样自学前端之前,首先来看下,自学前端容易…...

C/C++语言基础--C++构造函数、析构函数、深拷贝与浅拷贝等等相关知识讲解
本专栏目的 更新C/C的基础语法,包括C的一些新特性 前言 周末休息了,没有更新,请大家见谅哈;构造函数、析构函数可以说便随着C每一个程序,故学构造函数、析构函数是必要的;C语言后面也会继续更新知识点&am…...

json格式互相转换
您提供的字符串已经是一个JSON格式的字符串,但是JSON标准要求键名必须用双引号括起来,而不是单引号。因此,您需要将字符串中的单引号替换为双引号。以下是转换后的JSON字符串: {"图片描述": "高速公路上发生了严重…...

Linux下共享内存详解
共享内存是Linux中一种高效的进程间通信(IPC)方式,它允许多个进程共享同一段内存,从而实现数据的快速传递。共享内存通常比其他IPC机制(如管道或消息队列)更快,因为数据直接存储在内存中&#x…...

MySQL篇(管理工具)
目录 一、系统数据库 二、常用工具 1. mysql 2. mysqladmin 3. mysqlbinlog 4. mysqlshow 5. mysqldump 6. mysqlimport/source 6.1 mysqlimport 6.2 source 一、系统数据库 MySQL数据库安装完成后,自带了一下四个数据库,具体作用如下…...

redis学习笔记(六)
redis每种数据结构的应用场景 1. 字符串 (String) 应用场景 : 缓存:存储频繁访问的数据,如网页缓存、会话信息等。计数器:实现统计和计数功能,如访问计数、统计数据等。键值存储:简单的键值对存储…...