交叉熵损失函数,KL散度, Focal loss

交叉熵损失函数(Cross-Entropy Loss)

交叉熵损失函数,涉及两个概念,一个是损失函数,一个是交叉熵。

首先,对于损失函数。在机器学习中,损失函数就是用来衡量我们模型的预测结果与真实结果之间“差距”的函数。这个差距越小,说明模型的表现越好;差距越大,说明模型表现越差。我们训练模型的目标,就是通过不断调整模型的参数,来最小化这个损失函数。以一个生活化的例子举例,想象一下你在教一个孩子识别猫和狗。孩子每次猜对或猜错,你都会给他一个“评分”。如果他猜对了,评分就很高(损失很小);如果他猜错了,评分就可能很低(损失很大)。

在明白完损失函数后,就要理解交叉熵了,在理解交叉熵之前我们又要了解何为。熵在信息论中是衡量一个随机变量不确定性(或者说信息量)的度量。不确定性越大,熵就越大。根据信息论中的香农定理,我们可以得出熵的计算公式为:

其中,P(xi)是事件xi发生的概率。- log(P(xi)) 表示信息量,根据公式我们可以知道信息量大小与概率成负相关,概率越小的时间其信息量越大,如飞机失事;概率越大的时间其信息量越小,如太阳从东边升起。

谈完熵之后,我们来开始理解何为交叉熵?

交叉熵是衡量两个概率分布之间“相似性”的度量。更准确地说,它衡量的是,当我们使用一个非真实的概率分布 Q 来表示一个真实的概率分布 P 时,所需要付出的“代价”或“信息量”。交叉熵的计算公式为:

注意,这里的 P(xi​) 通常是one-hot编码形式,即在分类问题中,只有真实类别对应的 P(xi​) 为1,其他为0。

二分类交叉熵

在二分类问题中,当你的模型需要判断一个输入是A类还是B类(比如是猫还是狗,是垃圾邮件还是正常邮件)时,你会使用二分类交叉熵

  • 真实标签 (y) 通常用0或1表示。例如,猫是1,狗是0。
  • 模型预测概率 (\widehat{y}) 模型输出的属于类别1的概率,通常通过Sigmoid激活函数得到,范围在0到1之间。

二分类交叉熵公式为:

直观理解:

  • 如果真实标签 y=1(比如是猫):损失函数变为 −log(\widehat{y}​)。此时,如果 \widehat{y}​ 接近1(模型预测是猫的概率很高),log(\widehat{y}) 就接近0,损失就小;如果 \widehat{y}​ 接近0(模型预测是猫的概率很低),log(\widehat{y}​) 就变成一个很大的负数,损失就大。
  • 如果真实标签 y=0(比如是狗):损失函数变为 −log(1−\widehat{y})。此时,如果 \widehat{y} 接近0(模型预测是狗的概率很高),1−\widehat{y}​ 接近1,log(1−\widehat{y}) 接近0,损失就小;如果 \widehat{y}​ 接近1(模型预测是狗的概率很低),1−\widehat{y} 接近0,log(1−\widehat{y}​) 变成一个很大的负数,损失就大。

多分类交叉熵

当你的模型需要判断一个输入是N个类别中的哪一个(比如是猫、狗、还是鸟)时,你会使用多分类交叉熵。

  • 真实标签 (y) 通常是one-hot编码。例如,猫是 [1,0,0],狗是 [0,1,0],鸟是 [0,0,1]。
  • 模型预测概率 (\widehat{y}) 模型输出的属于每个类别的概率分布,通常通过Softmax激活函数得到,所有概率之和为1。

多分类交叉熵的公式为:

其中,N 是类别的数量,yi​ 是真实标签中第 i 个类别的指示(0或1),\widehat{y}​i​ 是模型预测第 i 个类别的概率。

直观理解:

  • 由于真实标签 y 是one-hot编码,只有真实类别 k 对应的 yk​ 是1,其他 yi​ 都是0。所以,这个求和公式实际上只计算了真实类别对应的预测概率的负对数。
  • 举例:如果真实标签是猫 [1,0,0],模型预测是 [0.8(猫),0.1(狗),0.1(鸟)]。 损失 =−(1⋅log(0.8)+0⋅log(0.1)+0⋅log(0.1))=−log(0.8)。 如果模型预测是 [0.1(猫),0.8(狗),0.1(鸟)]。 损失 =−(1⋅log(0.1)+0⋅log(0.8)+0⋅log(0.1))=−log(0.1)。 显然,−log(0.1) 比 −log(0.8) 要大很多,说明模型预测猫的概率很低时,损失会很大,这符合我们的直觉。

KL散度(Kullback-Leibler Divergence)

KL散度和交叉熵很像,只不过交叉熵是硬标签,KL散度是软标签,因此KL散度也称为相对熵,是衡量两个概率分布 P 和 Q 之间差异的非对称度量。它量化了当使用概率分布 Q 来近似概率分布 P 时所损失的信息量。KL散度主要用于拉近真实分布和近似分布的表达,去让近似分布尽可能接近真实分布,因为越近似,其除法越近于1,log()越接近于0。其计算公式为:

其中,P为真实分布 ,Q为近似分布 。我们将其展开,可得到以下公式:

可以看到当P(xi)为1时,这时就变成交叉熵了。

KL散度特性

  • 非负性(涉及数学的非负性证明):KL​(P∣∣Q)≥0(因为P和Q不相等的话,即P/Q>1),只有当 P 和 Q 是完全相同的分布时(此时P/Q = 1),KL​(P∣∣Q)=0。
  • 非对称性:KL​(P∣∣Q) 不等于 KL​(Q∣∣P) 。KL​(P∣∣Q)是惩罚 Q 在 P 概率高的地方给出低概率。KL​(Q∣∣P)惩罚 Q 在 P 概率低的地方给出高概率。
  • 度量的是“信息损失” 它衡量的是当你用 Q 来编码 P 时,额外需要多少比特的信息。

交叉熵损失函数和KL散度总结

  • 交叉熵损失函数适用于分类任务,基于硬标签,目的是衡量模型预测的概率分布与真实标签的概率分布之间的“距离”。它的目标是让模型对真实类别的预测概率尽可能高。
  • KL散度适用于衡量两个概率分布之间的差异,是非对称的,多用于概率模型,用于强制模型学习到的分布与某个先验分布接近,或衡量两个复杂分布之间的相似性。

Focal loss 

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

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

相关文章

149.WEB渗透测试-MySQL基础(四)

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 内容参考于: 易锦网校会员专享课 上一个内容:148.WEB渗透测试-MySQL基础(三) 非关系型数据库: &a…

c/c++中程序内存区域的划分

c/c程序内存分配的几个区域: 1.栈区:在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放,栈内存分配运算内置于处理器的指令集中,效率很高但是分配的内存容量有…

构建稳定的金字塔模式生态:从自然法则到系统工程

在自然界中,金字塔结构广泛存在于生态系统之中,表现为营养级能量金字塔、生物量金字塔和数量金字塔等形式。这种结构不仅形象地描述了生态能量流转的规律,也体现出生态系统中“稳定性”与“层级性”的天然法则。在现代软件架构、企业组织、平…

Vue 3.0双向数据绑定实现原理

Vue3 的数据双向绑定是通过响应式系统来实现的。相比于 Vue2,Vue3 在响应式系统上做了很多改进,主要使用了 Proxy 对象来替代原来的 Object.defineProperty。本文将介绍 Vue3 数据双向绑定的主要特点和实现方式。 1. 响应式系统 1.1. Proxy对象 Vue3 …

TIP-2021《SRGAT: Single Image Super-Resolution With Graph Attention Network》

推荐深蓝学院的《深度神经网络加速:cuDNN 与 TensorRT》,课程面向就业,细致讲解CUDA运算的理论支撑与实践,学完可以系统化掌握CUDA基础编程知识以及TensorRT实战,并且能够利用GPU开发高性能、高并发的软件系统&#xf…

大语言模型与多模态模型比较

一、核心差异:输入数据类型与模态融合 输入数据类型 LLM:仅处理文本数据,例如文本分类、机器翻译、问答等任务,通过大规模语料库学习语言规律。 LMM:支持文本、图像、音频、视频等多种模态输入,例如根据图…

Apache HttpClient 5 用法-Java调用http服务

Apache HttpClient 5 核心用法详解 Apache HttpClient 5 是 Apache 基金会推出的新一代 HTTP 客户端库&#xff0c;相比 4.x 版本在性能、模块化和易用性上有显著提升。以下是其核心用法及最佳实践&#xff1a; 一、添加依赖 Maven 项目&#xff1a; <dependency><…

基于 Spark 的流量统计

一、引言 在互联网行业&#xff0c;流量统计是分析网站或应用用户行为、评估业务表现、优化资源分配以及制定营销策略的关键环节。借助 Apache Spark 强大的分布式数据处理能力&#xff0c;我们可以高效地对大规模的流量数据进行统计分析&#xff0c;获取有价值的洞察。本文将…

Python模块化编程进阶指南:从基础到工程化实践

一、模块化编程核心原理与最佳实践 1.1 模块化设计原则 根据企业级项目实践&#xff0c;模块化开发应遵循以下核心原则&#xff1a; ​​单一职责原则​​&#xff1a;每个模块只承担一个功能域的任务&#xff08;如用户认证模块独立于日志模块&#xff09;​​接口隔离原则…

锐捷交换机STP环路日志信息解读

因公司网络组建使用锐捷全系列交换机&#xff0c;近期设备巡检时发现部分日志提示信息&#xff0c; 接入交换机NBS3100-24GT4SFP-V2&#xff0c;设备频繁打出STP Blocking的日志信息。 误以为是环路导致&#xff0c;故进行实验测试&#xff0c;来验证环路情况下会如何报日志。…

使用Python调用DeepSeek的示例

使用Python调用DeepSeek API的示例代码,包括API密钥的获取、基本请求的发送以及响应处理。请确保你已经注册了DeepSeek账号并获取了API密钥。 文章目录 前言一、获取API密钥二、python示例代码三、代码说明四、注意事项五、扩展功能总结前言 提示:这里可以添加本文要记录的大…

mysql的not exists走索引吗

在MySQL中&#xff0c;​NOT EXISTS子句是否使用索引取决于子查询中关联字段是否建立了合适的索引。以下是关键点总结&#xff1a; ​索引的作用​&#xff1a; 当子查询的关联字段&#xff08;例如B.a_id&#xff09;存在索引&#xff08;如普通B-tree索引&#xff09;时&…

Python线性回归:从理论到实践的完整指南

Python线性回归&#xff1a;从理论到实践的完整指南 线性回归是数据科学和机器学习中最基础且最重要的算法之一。本文将深入探讨如何使用Python实现线性回归&#xff0c;从理论基础到实际应用&#xff0c;帮助读者全面理解这一重要的统计学和机器学习方法。 什么是线性回归&a…

鸿蒙OSUniApp 实现的二维码扫描与生成组件#三方框架 #Uniapp

UniApp 实现的二维码扫描与生成组件 前言 最近在做一个电商小程序时&#xff0c;遇到了需要扫描和生成二维码的需求。在移动应用开发中&#xff0c;二维码功能已经成为标配&#xff0c;特别是在电商、社交和支付等场景下。UniApp作为一个跨平台开发框架&#xff0c;为我们提供…

Westlake-Omni 情感端音频生成式输出模型

简述 github地址在 GitHub - xinchen-ai/Westlake-OmniContribute to xinchen-ai/Westlake-Omni development by creating an account on GitHub.https://github.com/xinchen-ai/Westlake-Omni Westlake-Omni 是由西湖心辰&#xff08;xinchen-ai&#xff09;开发的一个开源…

uv python 卸载

又是查了半天 官网wiki没有 网上一堆傻子胡说 uv提示也不对 AI还在这尼玛胡编乱造 开始 我原来装了这几个环境 uv python list 现在python3.7.7不需要了&#xff0c;卸载&#xff0c;直接 uv python uninstall 3.7.7 去找你自己要卸载的版本号&#xff0c;不需要整个包名复制…

使用哈希表封装myunordered_set和myunordered_map

文章目录 使用哈希表封装myunordered_set和myunordered_map实现出复用哈希表框架&#xff0c;并支持insert支持迭代器的实现constKey不能被修改unordered_map支持[ ]结语 我们今天又见面啦&#xff0c;给生活加点impetus&#xff01;&#xff01;开启今天的编程之路&#xff01…

后端框架(2):Java的反射机制

什么是java反射机制&#xff1f; 回顾之前java程序如何使用类 1.分析&#xff0c;确定类名&#xff0c;属性名&#xff0c;方法......创建类 2.创建类的对象 3.使用 一切都是已知的。 在程序开发中&#xff0c;在哪儿需要使用哪个类的对象&#xff0c;就在那儿创建这个类对象…

ch10 课堂参考代码

ch10 最小生成树 生成树&#xff1a;对于 n 个结点 m 条边的无向图 G&#xff0c;由全部 n 个结点和其中 n - 1 条边构成的无向连通子图称为 G 的一棵生成树。 如果图 G 原本就不连通&#xff0c;则不存在生成树&#xff0c;只存在生成森林。 最小生成树&#xff08;Minimum…

费曼技巧及提高计划

费曼技巧及提高计划 一、什么是费曼技巧&#xff1f; 费曼技巧&#xff08;Feynman Technique&#xff09;由诺贝尔物理学奖得主理查德费曼提出&#xff0c;是一种通过“以教代学”来彻底理解复杂概念的学习方法。其核心逻辑是&#xff1a; “如果你不能简单解释一件事&#x…