《深度学习》—— PyTorch的神经网络模块中常用的损失函数

news2024/12/26 2:38:28

文章目录

  • 前言
  • 一、回归模型中常用的损失函数
    • 1、平均绝对误差损失(L1Loss)
    • 2、均方误差损失(MSELoss也称L2Loss)
    • 3、SmoothL1Loss
  • 二、分类模型中常用的损失函数
    • 1、负对数似然损失(NLLLoss)
    • 2、二元交叉熵损失(BCELoss)
    • 3、交叉熵损失(CrossEntropyLoss)

前言

  • 在神经网络中,损失函数(Loss Function)扮演着至关重要的角色,它是衡量模型预测值实际值之间差异的关键工具

  • 损失函数,顾名思义,是用来量化模型预测结果“损失”或“误差”大小的函数。在神经网络训练过程中,损失函数通过将预测值与实际值进行比较,计算出一个数值(通常为非负实数),该数值反映了模型在当前状态下的预测性能。这个数值越小,表示模型的预测结果越接近真实值,即模型的性能越好。

  • 在PyTorch的nn(神经网络模块)中提供了很多的损失函数,如下:

    from torch import nn  # 导入神经网络模块
    __all__ = ['L1Loss', 'NLLLoss', 'NLLLoss2d', 'PoissonNLLLoss', 'GaussianNLLLoss', 'KLDivLoss',
               'MSELoss', 'BCELoss', 'BCEWithLogitsLoss', 'HingeEmbeddingLoss', 'MultiLabelMarginLoss',
               'SmoothL1Loss', 'HuberLoss', 'SoftMarginLoss', 'CrossEntropyLoss', 'MultiLabelSoftMarginLoss',
               'CosineEmbeddingLoss', 'MarginRankingLoss', 'MultiMarginLoss', 'TripletMarginLoss',
               'TripletMarginWithDistanceLoss', 'CTCLoss']
    # 调用方法 ——> nn.损失函数名
    

一、回归模型中常用的损失函数

1、平均绝对误差损失(L1Loss)

  • L1 Loss,也称为平均绝对误差(Mean Absolute Error, MAE),是深度学习中常用的一种损失函数,主要用于衡量模型预测结果与真实标签之间的平均绝对误差。以下是关于L1 Loss的详细解释:
  • 定义与公式
    • L1 Loss定义为模型预测值与真实值之间差的绝对值的平均。对于一个大小为 N 的样本集合,L1 Loss的公式如下:
      在这里插入图片描述
  • 特点与优势
    • 1.鲁棒性:与 L2 Loss(均方误差)相比,L1 Loss对于异常值(outliers)的容忍性更高,因此在某些需要考虑异常值的任务中,如目标检测、人脸识别等领域,L1 Loss被广泛应用。
    • 2.稳定梯度:L1 Loss的梯度在误差较小时较为稳定,不会因误差的微小变化而导致梯度的大幅波动,这有助于模型的稳定训练。
    • 3.稀疏性:在某些情况下,L1 Loss更容易得到稀疏解,即更多的预测值为0,这在特征选择等任务中可能具有优势。
  • 应用场景:L1 Loss主要用于回归任务中,是监督学习中衡量模型预测性能的重要指标之一

2、均方误差损失(MSELoss也称L2Loss)

  • 定义与公式

    • MSELoss通过计算预测值与真实值之间差异的平方的平均值来衡量模型的预测性能。其数学表达式为:
      在这里插入图片描述
  • 优点与局限性

  • 优点:

    • 1.简单直观:MSELoss的计算方式简单,易于理解和实现。
    • 2.优化友好:在梯度下降等优化算法中,MSELoss的梯度计算也相对简单,有助于模型的快速收敛。
  • 局限性:

    • 1.对异常值敏感:由于MSE Loss是平方误差,因此当数据中存在异常值时,这些异常值可能会对损失函数产生较大的影响,从而导致模型性能下降。
    • 2.不考虑误差方向:MSELoss只考虑误差的大小,而不考虑误差的方向,这可能导致在某些情况下模型的预测结果偏离真实值的方向。
  • 应用场景:MSELoss因其简单直观的特点,在多种回归问题中得到了广泛应用,例如:房价预测、股票价格预测、时间序列预测等

3、SmoothL1Loss

  • SmoothL1Loss是一种在深度学习中常用的损失函数,特别是在目标回归问题中。它结合了L1 Loss和L2 Loss的优点,提供了一种平滑的损失度量方式。
  • SmoothL1Loss的公式过于复杂,只需要记住它是结合了L1 Loss和L2 Loss两个损失函数
  • 特点与优势
    • 1.平滑性:SmoothL1Loss在差异较小时采用L2 Loss的平方形式,这使得损失函数在这一点附近更加平滑,有助于模型的稳定训练。
    • 2.鲁棒性:当差异较大时,SmoothL1Loss采用L1 Loss的形式,这有助于减少异常值(离群点)对模型训练的影响,使得模型更加鲁棒。
    • 3.平衡性:SmoothL1Loss通过结合L1 Loss和L2 Loss的优点,既能在差异较小时提供稳定的梯度(如L2 Loss),又能在差异较大时保持较小的梯度(如L1 Loss),从而在两者之间取得平衡。
  • 应用场景
    • SmoothL1Loss广泛应用于目标检测边界框回归等任务中。在这些任务中,预测值和真实值之间的差异可能很大,同时需要模型对异常值具有一定的鲁棒性。SmoothL1Loss正好满足了这些需求,因此在这些领域得到了广泛应用。

二、分类模型中常用的损失函数

1、负对数似然损失(NLLLoss)

  • 定义与公式
    • NLLLoss用于度量模型预测的类别概率分布与实际类别分布之间的差距。对于每个样本,NLLLoss计算预测的类别的概率与真实类别的概率的负对数似然值,最终将所有样本的损失值求平均得到总损失。其计算公式如下:
      在这里插入图片描述
  • 特点与优势
    • 直观性:NLLLoss直接反映了模型预测的概率分布与实际分布之间的差异,损失值越小,说明模型预测越准确。
    • 适用性:NLLLoss特别适用于多分类问题,能够很好地衡量模型在多个类别上的预测性能。
    • 灵活性:在PyTorch等深度学习框架中,NLLLoss可以通过设置不同的参数来适应不同的需求,如是否对损失值进行平均或求和等。
  • 应用场景:NLLLoss广泛应用于各种深度学习任务中,特别是多分类问题

2、二元交叉熵损失(BCELoss)

  • 定义与公式
    • BCELoss通过计算模型输出的概率分布与实际标签之间的交叉熵损失来评估模型的性能。对于每个样本,BCELoss的公式如下:
      在这里插入图片描述
  • 特点与优势
    • 适用于二分类问题:BCELoss特别适用于处理只有两个类别的分类问题,如文本情感分析(积极/消极)、病患诊断(患病/未患病)等。
    • 直接优化分类准确率:BCELoss直接衡量预测概率与真实标签之间的差异,通过最小化该差异来优化模型的分类性能。
    • 平滑且易于求导:BCELoss的函数曲线平滑,求导过程相对简单,有利于在训练过程中使用梯度下降等优化算法进行参数更新。
  • 应用场景:BCELoss广泛应用于各类二分类任务中,例如:
    • 文本分类:如情感分析、垃圾邮件检测等。
    • 图像识别:如医学影像分析中的病患诊断。
    • 生物信息学:如基因表达数据的分类等。

3、交叉熵损失(CrossEntropyLoss)

  • 定义与公式

    • 对于多分类问题,假设有C个类别,CrossEntropyLoss的公式可以表示为:
      在这里插入图片描述
  • 特点与优势

    • 1.直观性:交叉熵损失函数直接衡量了预测概率分布与真实概率分布之间的差异,具有直观性。
    • 2.优化友好:交叉熵损失函数的梯度计算相对简单,有助于在训练过程中使用梯度下降等优化算法进行参数更新。
    • 3.适用于多分类问题:交叉熵损失函数是处理多分类问题的标准方法,与softmax激活函数结合使用,能够有效地提高模型的分类性能。
  • 应用场景:CrossEntropyLoss广泛应用于各类分类任务中, 例如:

    • 图像分类:如手写数字识别、物体识别等。
    • 自然语言处理:如文本分类、情感分析等。
    • 生物信息学:如基因序列分类等。

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

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

相关文章

XML映射器-动态sql

01-动态sql 1.实现动态条件SQL 第一种方法在sql语句中加入where 11其他条件都加and就行,这样就可以根据if条件来判断要传递的参数可以有几个 第二种方法用where标签给if语句包起来 where标签的作用如下图 第三种方法用trim标签解释如下图 用choose也可以实现条件查询如下图,…

【数据结构与算法 | 灵神题单 | 自底向上DFS篇】力扣508, 1026, 951

1. 力扣508:出现次数最多的子树元素和 1.1 题目: 给你一个二叉树的根结点 root ,请返回出现次数最多的子树元素和。如果有多个元素出现的次数相同,返回所有出现次数最多的子树元素和(不限顺序)。 一个结…

在Ubuntu中编译含有JSON的文件出现报错

在ubuntu中进行JSON相关学习的时候,我发现了一些小问题,决定与大家进行分享,减少踩坑时候出现不必要的时间耗费 截取部分含有JSON部分的代码进行展示 char *str "{ \"title\":\"JSON Example\", \"author\&…

Web植物管理系统-下位机部分

本节主要展示上位机部分,采用BSP编程,不附带BSP中各个头文件的说明,仅仅是对main逻辑进行解释 main.c 上下位机通信 通过串口通信,有两位数据验证头(verify数组中保存对应的数据头 0xAA55) 通信格式 上位发送11字节…

保护您的企业免受网络犯罪分子侵害的四个技巧

在这个日益数字化的时代,小型企业越来越容易受到网络犯罪的威胁。网络犯罪分子不断调整策略,并使用人工智能来推动攻击。随着技术的进步,您的敏感数据面临的风险也在增加。 风险的不断增大意味着,做好基本工作比以往任何时候都更…

Java--stream流、方法引用

Stream流 - Stream流的好处 - 直接阅读代码的字面意思即可完美展示无关逻辑方式的语义 - Stream流把真正的函数式编程风格引入到Java中 - 代码简洁 - Stream流的三类方法 - 获取Stream流 - 创建一条流水线,并把数据放到流水线上准备进行操作 - 中间方法 - 流水线上的操作 - 一次…

【代码随想录训练营第42期 Day60打卡 - 图论Part10 - Bellman_ford算法系列运用

目录 一、Bellman_ford算法的应用 二、题目与题解 题目一:卡码网 94. 城市间货物运输 I 题目链接 题解:队列优化Bellman-Ford算法(SPFA) 题目二:卡码网 95. 城市间货物运输 II 题目链接 题解: 队列优…

MySQL高阶1783-大满贯数量

题目 找出每一个球员赢得大满贯比赛的次数。结果不包含没有赢得比赛的球员的ID 。 结果集 无顺序要求 。 准备数据 Create table If Not Exists Players (player_id int, player_name varchar(20)); Create table If Not Exists Championships (year int, Wimbledon int, F…

Unity 高亮插件HighlightPlus介绍

仅对官方文档进行了翻译 注意:官方文档本身就落后实际,但对入门仍很有帮助,核心并没有较大改变,有的功能有差异,以实际为准.(目前我已校正了大部分差异,后续我会继续维护该文档) 为什么为该插件做翻译?功能强大,使用简单,且还在维护. 基于此版本的内置渲染管线文档 快速开始…

C语言之预处理详解(完结撒花)

目录 前言 一、预定义符号 二、#define 定义常量 三、#define定义宏 四、宏与函数的对比 五、#和## 运算符 六、命名约定 七、#undef 八、条件编译 九、头文件的包含 总结 前言 本文为我的C语言系列的最后一篇文章,主要讲述了#define定义和宏、#和##运算符、各种条件…

9.18作业

提示并输入一个字符串&#xff0c;统计该字符串中字母、数字、空格、其他字符的个数并输出 代码展示 #include <iostream>using namespace std;int main() {string str;int countc 0; // 字母计数int countn 0; // 数字计数int count 0; // 空格计数int counto 0;…

IEEE-754 32位十六进制数 转换为十进制浮点数

要将 IEEE-754 32位十六进制数 转换为 十进制浮点数&#xff0c;可以使用LabVIEW中的 Type Cast 函数。以下是一些具体步骤&#xff0c;以及相关实例的整理&#xff1a; 实现步骤&#xff1a; 输入十六进制数&#xff1a;在LabVIEW中&#xff0c;首先需要创建一个输入控制器&am…

2024最新软件测试面试题【1000道题含答案】

1、自动化代码中,用到了哪些设计模式? 单例设计模式 工厂模式PO设计模式数据驱动模式面向接口编程设计模式 2、什么是断言( Assert) ? 断言Assert用于在代码中验证实际结果是不是符合预期结果&#xff0c;如果测试用例执行失败会抛出异常并提供断言日志 3、什么是web自动化…

C++之继承(通俗易懂版)

前言&#xff1a;我们都知道C是一门支持过程化编程&#xff0c;面向对象的高级语言&#xff0c;既然是面向对象的语言&#xff0c;那么对于对象而言&#xff0c;对象会有很多中相同的属性&#xff0c;举个例子:你和你老师&#xff0c;你们都有着共同的属性和身份&#xff0c;例…

Longman Dictionary of Contemporary English (朗文当代高级英语辞典)

Longman Dictionary of Contemporary English {朗文当代高级英语辞典} 1. Longman Dictionary of Contemporary English1.1. school References 1. Longman Dictionary of Contemporary English https://www.ldoceonline.com/ 1.1. school https://www.ldoceonline.com/dicti…

C++: 高效使用智能指针的8个建议

前言&#xff1a;智能指针是C11的新特性&#xff0c;它基于RAII实现&#xff0c;可以自动管理内存资源&#xff0c;避免内存泄漏的发生&#xff0c;但是智能指针也并不是万能的&#xff0c;如果不正确使用智能指针&#xff0c;也会导致内存泄漏的发生&#xff0c;因此&#xff…

嵌入式人工智能项目及人工智能应用项目——大合集列表查阅

本文的项目合集列表可能更新不及时&#xff08;会及时更新&#xff09;&#xff0c;可查阅实时更新的链接如下。 嵌入式人工智能及人工智能应用项目合集实时更新链接如下&#xff1a; 阿齐嵌入式人工智能及人工智能应用项目合集 (kdocs.cn)https://www.kdocs.cn/l/cc97tuieys4…

MacOS安装MAT教程

MAT下载地址MAT下载地址MAT下载地址MAT下载地址 如果不知道你的芯片类型, 可以执行如下命令 uname -m

Fiddler抓包工具实战

文章目录 &#x1f7e2; Fiddler入门到精通&#x1f449;主要功能&#x1f449;使用场景 &#x1f7e2; 一、Fiddler抓包和F12抓包对比&#x1f7e2; 二、Fiddler的核心功能&#x1f7e2; 三、Fiddler的工作原理&#x1f7e2; 四、Fiddler功能配置使用&#x1f449;规则设置&am…

力扣 11题 盛最多水的容器

前言&#xff1a;这道题其实挺有意思的&#xff0c;前段时间在刷视频的时候看都了很多博主都在讲解这道题&#xff0c;最近在写一些算法的东西&#xff0c;我就顺势刷到了这道题。在这里写一写我自己的对这道题的理解。 题目详见&#xff1a;https://leetcode.cn/problems/con…