机器学习之交叉熵

交叉熵(Cross-Entropy)是机器学习中用于衡量预测分布与真实分布之间差异的一种损失函数,特别是在分类任务中非常常见。它源于信息论,反映了两个概率分布之间的距离。


交叉熵的数学定义

对于分类任务,假设我们有:

  • 一个真实的分布 y,用独热编码表示,例如 y=[0,1,0] 表示属于第二类。
  • 一个预测的概率分布\hat{y},例如 \hat{y} = [0.1, 0.7, 0.2],表示模型预测属于各类的概率。

交叉熵的公式为:

其中:

  • yi是真实分布中第 i 类的值(独热编码下只有一个为 1,其余为 0)。
  • \hat{y}_i 是模型预测的第 i 类的概率。

由于 y 是独热编码,交叉熵可以简化为:

其中 c 是真实类别的索引。


交叉熵的直观理解

  1. 信息论解释

    • 交叉熵可以理解为用预测分布\hat{y} 去编码真实分布 y 的代价。
    • 如果预测越接近真实分布(即预测概率\hat{y}_c 越接近 1),交叉熵越小,模型表现越好。
  2. 惩罚机制

    • 如果模型的预测概率 \hat{y}_c 很低(接近 0),交叉熵会给出很大的惩罚。
    • 这促使模型更自信地预测正确类别。

交叉熵的应用场景

  1. 二分类问题: 对于二分类任务,真实标签 y∈{0,1},模型预测 \hat{y} \in [0, 1]。交叉熵损失为:

  2. 多分类问题: 对于 K 类分类任务,交叉熵损失为:

    其中 y_k 表示第 k 类的真实标签,\hat{y}_k 表示模型对第 k 类的预测概率。

  3. 目标检测和语义分割: 交叉熵通常与其他损失(如 IoU、Dice Loss)结合使用,以处理多任务学习。


交叉熵的优点

  1. 数学性质优良:损失函数连续且可微,适合梯度下降优化。
  2. 自然适用于概率分布:直接用概率度量模型的预测质量。
  3. 对错误预测的敏感性:能有效惩罚错误分类,提高模型对分类任务的优化效果。

交叉熵的缺点

  1. 对预测不平衡的敏感性

    • 如果某些类别的样本数很少,模型可能忽视这些类别。
    • 解决方法:可以结合加权交叉熵(Weighted Cross-Entropy)。
  2. 对异常值的敏感性:当预测概率非常接近 0 时,交叉熵的惩罚会非常大,可能导致数值不稳定。


交叉熵与其它损失的关系

  1. 与均方误差(MSE)

    • MSE 更适合回归任务,而交叉熵适合分类任务。
    • 对于分类任务,MSE 可能导致梯度消失,影响优化效果。
  2. 与 KL 散度:交叉熵是 KL 散度的一部分,衡量预测分布与真实分布的差异。


实现示例

二分类问题的交叉熵损失(Python + PyTorch)
import torch
import torch.nn as nn# 假设真实标签和预测概率
y_true = torch.tensor([1, 0, 1], dtype=torch.float32)  # 真实标签
y_pred = torch.tensor([0.8, 0.2, 0.6], dtype=torch.float32)  # 预测概率# 定义二分类交叉熵损失
loss_fn = nn.BCELoss()
loss = loss_fn(y_pred, y_true)
print(f"Binary Cross-Entropy Loss: {loss.item():.4f}")
多分类问题的交叉熵损失
# 假设真实标签和预测概率
y_true = torch.tensor([1, 0, 2])  # 真实标签(类别索引)
y_pred = torch.tensor([[0.3, 0.6, 0.1],[0.1, 0.2, 0.7],[0.8, 0.1, 0.1]])  # 预测概率# 定义多分类交叉熵损失
loss_fn = nn.CrossEntropyLoss()
loss = loss_fn(y_pred, y_true)
print(f"Multi-class Cross-Entropy Loss: {loss.item():.4f}")

交叉熵是分类任务中的核心损失函数之一,其优异的性质和强大的优化能力使其在机器学习的各个领域得到了广泛应用。

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

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

相关文章

Scala的泛型界限

泛型界限 上限 泛型的上限,下限。对类型的更加具体的约束! 如果给某个泛型设置了上界:这里的类型必须是上界 如果给某个泛型设置了下界:这里的类型必须是下界

vscode中同时运行两个python文件(不用安装插件)

如何在vscode中同时运行两个python文件呢?今天在工作中遇到了这个问题。 查了网上的方法是安装coder runner插件,后来发现自身就有这个功能。所以记录一下,方便后续查找: 这是我的第一个文件,点击右上角的运行旁边的小箭头,有一…

python rabbitmq实现简单/持久/广播/组播/topic/rpc消息异步发送可配置Django

windows首先安装rabbitmq 点击参考安装 1、环境介绍 Python 3.10.16 其他通过pip安装的版本(Django、pika、celery这几个必须要有最好版本一致) amqp 5.3.1 asgiref 3.8.1 async-timeout 5.0.1 billiard 4.2.1 celery 5.4.0 …

XML Schema 复合类型 - 混合内容

XML Schema 复合类型 - 混合内容 XML Schema 是一种用于定义 XML 文档结构和内容的语言。在 XML Schema 中,复合类型是一种包含其他元素和/或属性的复杂类型。混合内容(Mixed Content)是复合类型的一种特殊形式,它允许元素包含其…

nano编辑器的使用

nano 是一个非常简单易用的命令行文本编辑器,它常用于在 Linux 或类 Unix 系统中快速编辑文件,特别适用于需要修改配置文件或快速编辑文本的场景。以下是一些常见的 nano 使用技巧和基本操作。 1. 打开文件 要使用 nano 编辑文件,打开终端并…

Numpy基本介绍

目录 1、Numpy的优势 1.1、ndarray介绍 1.2、ndarray与Python原生list运算效率对比 1.3、ndarray的优势 1.3.1、内存块风格 1.3.2、ndarray支持并行化运算(向量化运算) 1.3.3、效率远高于纯Python代码 2、N维数组-ndarray 2.1、ndarray的属性 2.2、ndarray的形状 2…

XXE练习

pikachu-XXE靶场 1.POC:攻击测试 <?xml version"1.0"?> <!DOCTYPE foo [ <!ENTITY xxe "a">]> <foo>&xxe;</foo> 2.EXP:查看文件 <?xml version"1.0"?> <!DOCTYPE foo [ <!ENTITY xxe SY…

正则表达式在线校验(RegExp) - 加菲工具

正则表达式在线校验 - 加菲工具 打开网站 加菲工具 选择“正则表达式在线校验” 或者直接打开https://www.orcc.online/tools/regexp 输入待校验的源文本与正则表达式&#xff0c;点击“校验”按钮 需要注意检验后的内容可能存在多空格&#xff0c;可以拉下去看看~

java后端环境配置

因为现在升学了&#xff0c;以前本来想毕业干java的&#xff0c;很多java的环境配置早就忘掉了&#xff08;比如mysql maven jdk idea&#xff09;&#xff0c;想写个博客记录下来&#xff0c;以后方便自己快速搭建环境 JAVA后端开发配置 环境配置jdkideamavenMySQLnavicate17…

51c嵌入式~合集3

我自己的原文哦~ https://blog.51cto.com/whaosoft/12847563 一、UCIe 2.0 日前&#xff0c;通用芯粒互连&#xff08;UCIe&#xff09;产业联盟最新公布了 UCIe 2.0 规范&#xff0c;支持可管理性标准化系统架构&#xff0c;并全面解决了系统级封装&#xff08;SiP&#x…

解决电脑网速慢问题:硬件检查与软件设置指南

电脑网速慢是许多用户在使用过程中常见的问题&#xff0c;它不仅会降低工作效率&#xff0c;还可能影响娱乐体验。导致电脑网速慢的原因多种多样&#xff0c;包括硬件问题、软件设置和网络环境等。本文将从不同角度分析这些原因&#xff0c;并提供提高电脑网速的方法。 一、检查…

6、AI测试辅助-测试报告编写(生成Bug分析柱状图)

AI测试辅助-测试报告编写&#xff08;生成Bug分析柱状图&#xff09; 一、测试报告1. 创建测试报告2. 报告补充优化2.1 Bug图表分析 3. 风险评估 总结 一、测试报告 测试报告内容应该包含&#xff1a; 1、测试结论 2、测试执行情况 3、测试bug结果分析 4、风险评估 5、改进措施…

【C++ 】for 循环系统深入解析与实现法比较

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 &#x1f4af;前言&#x1f4af;for 循环的基本语法格式语法格式&#xff1a;格式一&#xff1a;单行语句的 for 循环格式二&#xff1a;多行语句的 for 循环循环流程图实例代码 for 循环中变量初始化的作…

Protobuf: 初识

protobuf是什么 简单来讲&#xff0c;ProtoBuf&#xff08;全称为ProtocolBuffer&#xff09;是让结构数据序列化的⽅法&#xff0c;其具有以下特点&#xff1a; • 语⾔⽆关、平台⽆关&#xff1a;即ProtoBuf⽀持Java、C、Python等多种语⾔&#xff0c;⽀持多个平台。 • ⾼效…

CSS 语法

CSS 语法 CSS(层叠样式表)是一种用于描述HTML或XML文档样式的样式表语言。它允许您将样式信息与文档内容分离,从而更有效地控制网页的布局和外观。本文将详细介绍CSS的基本语法和结构,帮助您更好地理解和应用CSS。 CSS的基本结构 CSS由一系列的规则组成,每个规则包含一…

Vue3安装配置、开发环境搭建(组件安装卸载)(图文详细)

Vue3安装配置、开发环境搭建(组件安装卸载)&#xff08;图文详细&#xff09; 本文目录&#xff1a; 一、vue的主要安装使用方式 二、node.js安装和配置 1、支持运行 Node.js的平台 2、Node.js 版本开发发布时间表&#xff08;日期可能会有变化&#xff09; 3、下载安装n…

Oracle 适配 OpenGauss 数据库差异语法汇总

背景 国产化进程中&#xff0c;需要将某项目的数据库从 Oracle 转为 OpenGauss &#xff0c;项目初期也是规划了适配不同数据库的&#xff0c;MyBatis 配置加载路径设计的是根据数据库类型加载指定文件夹的 xml 文件。 后面由于固定了数据库类型为 Oracle 后&#xff0c;只写…

Vue进阶之状态管理,解锁项目开发超能力

一、概念 状态管理是指对应用程序中状态的管理。在软件领域&#xff0c;状态是指在某个特定时刻&#xff0c;应用程序的数据和行为表现。 以一个简单的购物网站为例&#xff0c;购物车中的商品列表、用户的登录状态等都是状态。状态管理主要涉及这些状态如何被存储、更新和在…

操作系统(16)I/O软件

前言 操作系统I/O软件是负责管理和控制计算机系统与外围设备&#xff08;例如键盘、鼠标、打印机、存储设备等&#xff09;之间交互的软件。 一、I/O软件的定义与功能 定义&#xff1a;I/O软件&#xff0c;也称为输入/输出软件&#xff0c;是计算机系统中用于管理和控制设备与主…

WPF+MVVM案例实战与特效(四十二)- 打造炫酷彩虹字体控件,让你的应用闪耀起来

文章目录 1、引言2、案例实现1、依赖属性2、代码解释3、转换器实现3、控件使用4、运行效果4、总结1、引言 在WPF 应用程序中,视觉效果往往是吸引用户注意力的关键。一个小小的字体控件,如果能够以彩虹般的色彩展示文本,不仅能让界面更加生动,还能为用户提供独特的交互体验…