(CS231n课程笔记)深度学习之损失函数详解(SVM loss,Softmax,熵,交叉熵,KL散度)

news2025/1/4 1:13:48

学完了线性分类,我们要开始对预测结果进行评估,进而优化权重w,提高预测精度,这就要用到损失函数。

损失函数(Loss Function)是机器学习模型中的一个关键概念,用于衡量模型的预测结果与真实标签之间的差距。损失函数的目标是通过提供一个差距的度量,帮助模型进行优化,最终减少预测误差。不同的任务(如分类、回归等)会使用不同的损失函数来反映不同类型的误差。

1.SVM loss(铰链损失函数或合页损失函数)

  SVM(支持向量机)的损失函数通常指的是铰链损失函数(Hinge Loss Function),它用于最大化分类边界的同时最小化分类错误。目标是找到一个超平面将数据点分为两类。对于一个线性可分问题,SVM 会选择能够最大化正类与负类之间的分类间隔(Margin)的超平面。对于线性不可分问题,SVM 通过加入惩罚项来允许一定的错误分类。

铰链损失函数的形式为:

公式的含义为:(分类中其他标签的得分 — 该标签的得分 + 1)与0对比选出最大的数。我们还以上一讲的例子来解释。

线性分类器得分如上图,我们来计算汽车的损失值:

结果为0,说明预测结果很好,汽车的得分要大于其他标签的得分,并且大于一定的范围。经过损失函数能够对预测结果进行一定的评估。

2.Softmax激活函数

Softmax 函数将神经网络的输出转化为一个概率分布,使每个输出在 (0, 1) 之间,且所有输出之和为 1。其公式如下:

  • zi​ 是模型输出的第 i类的得分(logits)。
  • Softmax 函数将这些得分转换为属于每个类别的概率,如下图。

尽管 Softmax 不是损失函数,但它通常与交叉熵损失函数(Cross-Entropy Loss)结合使用,形成一个完整的多类分类模型的损失计算流程。

Softmax vs SVM

  • Softmax:主要用于多类分类任务。Softmax 是一个激活函数,通常与交叉熵损失函数结合使用,来进行多分类任务的训练。Softmax 将模型输出的 logits 转换为概率分布,确保每个类别的概率在 0 到 1 之间,且所有类别的概率之和为 1。模型通过最小化交叉熵损失来提高分类准确率。

  • SVM(支持向量机):SVM 是一种基于最大化分类间隔的分类算法。它尝试找到一个超平面(或决策边界),以最大化正类和负类之间的间隔。SVM 使用的是铰链损失(Hinge Loss),目的是找到能够最大化分类间隔的最优决策边界,通常用于二分类问题,但也可以通过扩展用于多分类任务。

下面的三种损失函数都是建立在softmax函数处理之后的:

3.交叉熵损失函数(Cross-Entropy Loss):衡量预测的真实度

交叉熵是用来衡量两个概率分布之间的距离,特别是在分类任务中用来评估预测的概率分布与真实的分布之间的差异。假设真实分布为 P,预测分布为 Q,那么交叉熵的公式为:其公式为:

交叉熵衡量的是模型预测分布 Q和真实分布 P 之间的差异,预测越接近真实分布,交叉熵越小。

4.墒(熵,Entropy):衡量预测难度

熵是信息论中的概念,度量的是一个系统或分布的不确定性或混乱程度。熵越高,表示系统的混乱程度越大,信息越难以预测。对于离散随机变量 X 其熵定义为:

5.KL 散度(Kullback-Leibler Divergence, KL Divergence):衡量预测与真实的差距

KL 散度用于衡量两个概率分布之间的相对熵差异。它衡量的是预测分布 Q 偏离真实分布 P 的程度。KL 散度的公式为:

KL 散度表示的是,当我们用分布 Q来近似真实分布 P 时,会丢失多少信息。它可以看作是交叉熵与熵的差值:

三者之间关系如何

熵衡量的是一个分布自身的不确定性,交叉熵衡量的是真实分布和预测分布之间的距离,而 KL 散度则是交叉熵减去真实分布的熵,表示了两个分布之间的相对差异。KL 散度用于度量一个分布相对于另一个分布的差异。

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

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

相关文章

【数据结构篇】~链表算法题3(环形链表)

链表算法题3(环形链表) 环形链表的证明1. 环形链表I​1) 思路2)代码实现 2. 环形链表II​1) 思路11) 思路22)代码实现 环形链表的证明 1. 环形链表I​ https://leetcode.cn/problems/linked-list-cycle/description/ 1) 思路 判断…

拥控算法BBR入门1

拥塞控制算法只与本地有关 一个TCP会话使用的拥塞控制算法只与本地有关。 两个TCP系统可以在TCP会话的两端使用不同的拥塞控制算法 Bottleneck Bandwidth and Round-trip time Bottleneck 瓶颈 BBR models the network to send as fast as the available bandwidth and is 2…

Qt容器类控件——QGroupBox和QTabWidget

文章目录 QGroupBox又来点餐QTabWidget使用演示 QGroupBox 容器类控件即里面可以容纳其他的控件 QGroupBox叫做分组框,可以把其他控件放在里面作为一组 QGroupBox的存在,只是为了让界面更好看一点,并不实现实质性的功能。 当界面较复杂的时候…

C++ 类的默认成员函数-构造函数

个人主页:Jason_from_China-CSDN博客 所属栏目:C系统性学习_Jason_from_China的博客-CSDN博客 所属栏目:C知识点的补充_Jason_from_China的博客-CSDN博客 概念概述 默认成员函数就是用户没有显式实现,编译器会自动生成的成员函数称…

【openGauss】检查工具gs_check,gs_checkperf的应用

1. gs_check (1)检查指定项(以CheckCPU为例) 在执行gs_check -i CheckCPU时如果出现如下报错是因为没有为集群配置过免密,即使当前环境为单机也要求要配置ssh互信,有两种解决办法 办法一:配置…

kali里面搭建docker容器

注意事项:kali版本,镜像源 (1)权限为管理员: sudo su (2) 更新软件包列表并升级已安装的软件包 apt-get update apt-get upgrade 出错了,应该是更新源出问题了。 (3)更换镜像源&am…

【springboot】实现文件上传和下载

目录 1. 新建一个springboot项目2. 配置文件application.propertiesapplication.yml 3. 控制类实现文件上传和下载4. 测试 1. 新建一个springboot项目 新建一个springboot项目&#xff0c;选择web&#xff0c;默认即可. 主要pom配置文件如下&#xff1a; <parent><gr…

Ubuntu2404使用docker安装Oracle23_ai_Free

Oracle 安装docker安装部署 官网&#xff1a;Oracle23AI 功能亮点 AI战略搜索 Oracle AI Vector Search专为人工智能&#xff08;AI&#xff09;工作负载而设计&#xff0c;允许您基于语义而不是关键字查询数据。 JSON 关系二元性 数据可以作为 JSON 文档或关系表透明地访问和…

十大排序之:冒泡排序

目录 一、简介 实现过程 时间复杂度 二、代码实现 函数声明 Swap函数 单趟 多趟 测试 优化 一、简介 冒泡排序是一种简单的排序算法&#xff0c;它重复地比较相邻的两个元素&#xff0c;如果顺序错误就交换它们&#xff0c;直到没有元素需要交换为止。这个过程类…

Python | Leetcode Python题解之第414题第三大的数

题目&#xff1a; 题解&#xff1a; class Solution:def thirdMax(self, nums: List[int]) -> int:a, b, c None, None, Nonefor num in nums:if a is None or num > a:a, b, c num, a, belif a > num and (b is None or num > b):b, c num, belif b is not No…

Cpp快速入门语法(下)(2)

文章目录 前言一、函数重载概念与使用C为何支持函数重载&#xff1f; 二、引用概念语法特性权限(常引用)使用场景与指针的区别 三、内联函数四、auto关键字(C11)五、基于范围的for循环(C11)六、指针空值nullptr(C11)总结 前言 承前启后&#xff0c;正文开始&#xff01; 一、函…

C++ | Leetcode C++题解之第414题第三大的数

题目&#xff1a; 题解&#xff1a; class Solution { public:int thirdMax(vector<int> &nums) {int *a nullptr, *b nullptr, *c nullptr;for (int &num : nums) {if (a nullptr || num > *a) {c b;b a;a &num;} else if (*a > num &&am…

一般在写SQL时需要注意哪些问题,可以提高查询的效率?

很多人写SQL按照自己喜好&#xff0c;没有规则意识&#xff0c;这对于自主查询影响不大&#xff0c;你爱怎么搞就怎么搞&#xff0c;一旦涉及到提交任务或团队共享&#xff0c;就不能乱写了&#xff0c;会浪费资源影响到开发效率&#xff0c;严重的甚至会服务器瘫痪。 提几个关…

深度学习之图像数据集增强(Data Augmentation)

文章目录 一、 数据增强概述二、python实现传统数据增强参考文献 一、 数据增强概述 数据增强&#xff08;Data Augmentation&#xff09;是一种技术&#xff0c;通过对现有数据进行各种变换和处理来生成新的训练样本&#xff0c;从而增加数据集的多样性和数量。这些变换可以是…

dubbo三

dubbo dubbo架构各层说明 URL举例解析 消费者引用服务过程 项目初始化

世界排名第一的数码照片和图形放大软件PhotoZoom Pro 9

BenVista PhotoZoom Pro 9 是世界排名第一的数码照片和图形放大和缩小软件解决方案。 PhotoZoom Pro 9 配备了我们全新的 S-Spline Max AI 图像调整大小技术&#xff0c;可产生比以往任何时候都更高质量的图像放大。 您所要做的就是指定您想要的图像大小&#xff0c;它实际上是…

【3D打印】使用simplify 3D切片更改Gcode手动断电续打、掉电、未打完继续打印、补救

一、问题描述 有些时候会遇到3D打印机没料但机器还在继续打、掉电重启后未正常恢复打印、挤出机端没有料但断料检测未触发等情况。我们又不想打印放弃&#xff0c;但又想继续之前的进度打印。 这时候我们需要更改3D打印文件的Gcode参数来进行继续打印。 至于什么是Gcode&…

电磁阀,线性电磁阀信号驱动隔离变送器

电磁阀,线性电磁阀信号驱动隔离变送器 定义:用模拟信号控制电磁阀门开关驱动的信号隔离产品,广泛用于流量控制,加料控制. 电磁阀开驱动隔离变送器为一进一出系列,型号是:JSD TAP-1001系列 该电磁阀驱动设备具有以下特点:特征&#xff1a; ◆低成本,PA66阻燃外壳,国际标准DIN35导…

程序设计题(41-48)

第四十一题 题目 #include <stdio.h> #include <math.h> double fun(double x , int n) {}main() { void NONO ();printf("%f\n", fun(0.3,10));NONO();getchar(); }void NONO () {/* 本函数用于打开文件&#xff0c;输入数据&#xff0c;调用函数&am…