首页 > 其他分享 >【深度学习】(3)--损失函数

【深度学习】(3)--损失函数

时间:2024-09-21 23:22:31浏览次数:12  
标签:函数 -- 标签 模型 损失 深度 BCELoss 预测

文章目录

损失函数

损失函数(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交叉熵损失函数:广泛应用于多分类问题中。

标签:函数,--,标签,模型,损失,深度,BCELoss,预测
From: https://blog.csdn.net/m0_74896766/article/details/142345594

相关文章

  • 《架构演进之路:突破与成长》——二次初稿感悟和思考
    前言:时间一晃,第二次初稿的时间(9月13日)已经过去8天了,剩下的5位合写团队成员未按时间提交二次初稿,我有一点小失望,失望的不是大家没有按时交稿,而是没有提前沟通卡点和未交稿的原因,好像已经从生活中忘却。既然问题来了,作为发起人我有主要责任。因为是非协议性合写,所以当问题......
  • 校园IT社团管理系统的设计与实现
    一、前言  随着信息技术的飞速发展,校园内的IT社团也日益活跃。然而,传统的社团管理方式存在效率低下、信息不透明等问题。为了更好地管理IT社团,提高社团活动的质量和效率,开发一个校园IT社团管理系统具有重要的现实意义。   本校园IT社团管理系统采用Spring......
  • 基于python flask的高血压疾病预测分析与可视化系统的设计与实现,使用随机森林、决策树
    研究背景随着现代社会的快速发展,生活方式的改变和人口老龄化的加剧,心血管疾病,尤其是高血压,已成为全球范围内的重大公共健康问题。高血压是一种常见的慢性疾病,其主要特征是动脉血压持续升高。长期不控制的高血压会导致心脏病、脑卒中、肾功能衰竭等一系列严重并发症,甚至危及生......
  • LangChain4j支持的API类型
    本文描述了底层的大语言模型(LLM)API。高级的LLMAPI参见AI服务。1LLMAPI的类型1.1LanguageModel非常简单—,接受一个String作为输入,并返回一个String作为输出。该API现正逐渐被聊天API(第二种API类型)取代。1.2ChatLanguageModel这种API接受一或多个ChatMessage作为输入,并返......
  • 【油猴脚本】00011 案例 Tampermonkey油猴脚本,动态渲染表格-实现页面动态-添加提取数
    前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏+关注哦......
  • 如何将Word公式批量置入InDesign
    作者提供的稿件格式是微软Word格式,而我用的工具是InDesign,这两个软件,在绝大多数格式上是兼容的,当然,除了公式。*Word中显示正常InDesign中不显示公式用这个插件可以解决。Formula插件这个插件的工作原理是将OMML公式转成Latex,置入InDesign之后将Latex渲......
  • deadlock detected
    目录标题说明:解决方法:预防措施:如何在PostgreSQL中使用`pg_locks`视图详细查询死锁涉及的事务信息?PostgreSQL中`deadlock_timeout`参数的具体配置方法和最佳实践是什么?配置方法最佳实践在PostgreSQL中,如何优化DELETE操作以减少死锁的可能性?PostgreSQL咨询锁(AdvisoryLock......
  • 静态库和动态(共享)库
    前提要先了解gcc/g++编译器的基本命令1.库的介绍1)什么是库库是二进制文件,是源代码文件的另外一种表现形式,是一些功能相近或相似的函数的集合体。2)使用库有什么好处提高代码的可重用性,还可以提高程序的健壮性。减少开发者的代码开发量,缩短开发周期3)库制作完成后,如何给......
  • 快速掌握Matlab R2016a安装,就是这么简单
    MatlabR2016a下载方法:MatlabR2016a安装教程:1、右击下载好的压缩包,选择解压到MatlabR2016a2、打开文件夹【R2016a_win64】,右击下面的setup.exe,选择【以管理员身份运行】3、点击选择【使用文件安装密钥】,然后点击【下一步】4、选择【是】后,点击【下一步】5、选......
  • Java 选 UTF-16 原因
    在Java中使用UTF-16而不是UTF-8主要有以下几个原因:一、历史背景和兼容性考虑Java诞生于上世纪90年代,当时Unicode主要以16位编码为主,UTF-16能更好地与早期的Unicode版本兼容。Java在设计之初选择UTF-16编码可以更方便地处理当时主流的字符集,确保与已有的......