当前位置: 首页 > news >正文

为什么要用“交叉熵”做损失函数


大家好啊,我是董董灿。

今天看一个在深度学习中很枯燥但很重要的概念——交叉熵损失函数。

作为一种损失函数,它的重要作用便是可以将“预测值”和“真实值(标签)”进行对比,从而输出 loss 值,直到  loss 值收敛,可以认为神经网络模型训练完成。

那么这个所谓的“交叉熵”到底是什么,为什么它可以用来作为损失函数呢?

1、熵与交叉熵

“交叉熵”包含了“交叉”和“熵”这两部分。

关于“熵”的描述在理解熵的本质一文中有更详细的说明。总的来说,熵可以用来衡量一个随机变量的不确定性,数学上可表示为:

H(i) = - ∑ P(i) * log(P(i))

对于上面的公式,我们稍微变一下形,将负号和 log(P(i)) 看做一个变量,得到:

PP(i) = -log(p(i))

那么熵的公式就可以写作:

H(i) = ∑ P(i) * PP(i)

此时熵的公式中,P(i) 和 PP(i) 是服从相同的概率分布。因此,熵H(i)就变成了事件 PP(i) 发生的数学期望,通俗理解为均值。

熵越大,表示事件发生的不确定性越大。

而交叉熵是用于比较两个概率分布之间的差异,对于两个概率分布 P 和 Q 而言,交叉熵定义为:

H(i) = ∑ P(i) * Q(i)

此时,P(i) 和 Q(i) 服从两种不同的概率分布,交叉熵的“交叉”就体现在这。

其中 P(i) 为真实分布,也就是训练过程中标签的分布;Q(i) 为预测分布,也就是模型每轮迭代输出的预测结果的分布。

交叉熵越小,表示两个概率分布越接近。

从而模型预测结果就越接近真实标签结果,说明模型训练收敛了。

关于更细节的数学原理,可以查看熵的本质,不过我们也可以不用深究,理解上述结论就可以。

2、交叉熵作为损失函数

假设有一个动物图像数据集,其中有五种不同的动物,每张图像中只有一只动物。

图片

我们将每张图像都使用 one-hot 编码来标记动物。对one-hot编码不清楚的可以移步这里有个你肯定能理解的one-hot。

图片

上图是对动物分类进行编码后的表格,我们可以将一个one-hot 编码视为每个图像的概率分布,那么:

第一个图像是狗的概率分布是 1.0 (100%)。

图片

对于第二张图是狐狸的概率分布是1.0(100%)。

图片

以此类推,此时,每个图像的熵都为零。

图片

换句话说,one-hot 编码标签 100% 确定地告诉我们每张图像有哪些动物:第一张图片不可能 90% 是狗,10% 是猫,因为它100%是狗。

因为这是训练的标签,是固定下来的确定分布。

现在,假设有一个神经网络模型来对这些图像进行预测,在神经网络执行完一轮训练迭代后,它可能会对第一张图像(狗)进行如下分类:

图片

该分类表明,第一张图像越 40%的概率是狗,30%的概率是狐狸,5%的概率是马,5%的概率是老鹰,20%的概率是松鼠。

但是,单从图像标签上看,它100%是一只狗,标签为我们提供了这张图片的准确的概率分布。

图片

那么,此时如何评价模型预测的效果呢?

我们可以计算利用标签的one-hot编码作为真实概率分布 P,模型预测的结果作为 Q 来计算交叉熵:

图片

结果明显高于标签的零熵,说明预测结果并不是很好。

继续看另一个例子。

假设模型经过了改良,在完成一次推理或者一轮训练后,对第一张图得到了如下的预测,也就是说这张图有98%的概率是狗,这个标签的100%已经差的很少了。

图片

我们依然计算交叉熵:

图片

可以看到交叉熵变得很低,随着预测变得越来越准确,交叉熵会下降,如果预测是完美的,它就会变为零。

基于此理论,很多分类模型都会利用交叉熵作为模型的损失函数。

在机器学习中,由于多种原因(比如更容易计算导数),对数 log 的计算大部分情况下是使用基数 e 而不是基数 2 ,对数底的改变不会引起任何问题,因为它只改变幅度。

图片


最近开通另一个计算机视觉从入门到调优的专栏,感兴趣的小伙伴可以查看:计算机视觉从入门到调优

相关文章:

为什么要用“交叉熵”做损失函数

大家好啊,我是董董灿。 今天看一个在深度学习中很枯燥但很重要的概念——交叉熵损失函数。 作为一种损失函数,它的重要作用便是可以将“预测值”和“真实值(标签)”进行对比,从而输出 loss 值,直到 loss 值收敛,可以…...

【Android】Android apk 逆向编译

链接:https://pan.baidu.com/s/14r5s9EJwQgeLK5cCb1Gq1Q 提取码:qdqt 解压jadx 在 lib 文件内找到 jadx-gui-1.4.7.jar 打开cmd 执行 :java -jar jadx-gui-1.4.7.jar示列:...

04-详解SpringBoot自动装配的原理,依赖属性配置的实现,源码分析

自动装配原理 依赖属性配置 提供Bean用来封装配置文件中对应属性的值 Data public class Cat {private String name;private Integer age; }Data public class Mouse {private String name;private Integer age; }cartoon:cat:name: "图多盖洛"age: 5mouse:name: …...

[100天算法】-不同路径 III(day 73)

题目描述 在二维网格 grid 上,有 4 种类型的方格:1 表示起始方格。且只有一个起始方格。 2 表示结束方格,且只有一个结束方格。 0 表示我们可以走过的空方格。 -1 表示我们无法跨越的障碍。 返回在四个方向(上、下、左、右&#…...

【c++随笔12】继承

【c随笔12】继承 一、继承1、继承的概念2、3种继承方式3、父类和子类对象赋值转换4、继承中的作用域——隐藏5、继承与友元6、继承与静态成员 二、继承和子类默认成员函数1、子类构造函数 二、子类拷贝构造函数3、子类的赋值重载4、子类析构函数 三、单继承、多继承、菱形继承1…...

Excel中使用数据验证、OFFSET实现自动更新式下拉选项

在excel工作簿中,有两个Sheet工作表。 Sheet1: Sheet2(数据源表): 要实现Sheet1中的“班级”内容,从数据源Sheet2中获取并形成下拉选项,且Sheet2中“班级”内容更新后,Sheet1中“班…...

Android修行手册 - 可变参数中星号什么作用(冷知识)

点击跳转>Unity3D特效百例点击跳转>案例项目实战源码点击跳转>游戏脚本-辅助自动化点击跳转>Android控件全解手册点击跳转>Scratch编程案例点击跳转>软考全系列 👉关于作者 专注于Android/Unity和各种游戏开发技巧,以及各种资源分享&…...

Python与ArcGIS系列(三)视图缩放

目录 0 简述1 在所有图层中缩放至所选要素2 在单独图层中缩放至所选要素3 改变地图范围0 简述 本篇介绍如何利用arcpy实现缩放视图到所选要素以及改变地图范围功能。 对于以及创建的选择集数据,通常需要进行缩放以更好地显示所选要素,要素缩放可分为两种:第一种是在所有图层…...

[ASP]数据库编辑与管理V1.0

本地测试:需要运行 ASP专业调试工具(自己搜索下载) 默认登陆口令:admin 修改口令:打开index.asp找到第3行把admin"admin"改成其他,如admin"abc123" 程序功能齐全,代码精简…...

MyBatis Plus整合Redis实现分布式二级缓存

MyBatis缓存描述 MyBatis提供了两种级别的缓存, 分别时一级缓存和二级缓存。一级缓存是SqlSession级别的缓存,只在SqlSession对象内部存储缓存数据,如果SqlSession对象不一样就无法命中缓存,二级缓存是mapper级别的缓存&#xff…...

如何帮助 3D CAD 设计师实现远程办公

当 3D CAD 设计师需要远程办公时,他们可能需要更强的远程软件,以满足他们的专业需求。比如高清画质,以及支持设备重定向、多显示器支持等功能。3D CAD 设计师如何实现远程办公?接下来我们跟随 Platinum Tank Group 的故事来了解一…...

如何在 Idea 中修改文件的字符集(如:UTF-8)

以 IntelliJ IDEA 2023.2 (Ultimate Edition) 为例,如下: 点击左上角【IntelliJ IDEA】->【Settings…】,如下图: 从弹出页面的左侧导航中找到【Editor】->【File Encodings】,并将 Global Encoding、Project E…...

【C++】单例模式【两种实现方式】

目录 一、了解单例模式前的基础题 1、设计一个类,不能被拷贝 2、设计一个类,只能在堆上创建对象 3、设计一个类,只能在栈上创建对象 4、设计一个类,不能被继承 二、单例模式 1、单例模式的概念 2、单例模式的两种实现方式 …...

php的api接口token简单实现

<?php // 生成 Token function generateToken() {$token bin2hex(random_bytes(16)); // 使用随机字节生成 tokenreturn $token; } // 存储 Token&#xff08;这里使用一个全局变量来模拟存储&#xff09; $tokens []; // 验证 Token function validateToken($token) {gl…...

CCNA课程实验-13-PPPoE

目录 实验条件网络拓朴需求 配置实现基础配置模拟运营商ISP配置ISP的DNS配置出口路由器OR基础配置PC1基础配置 出口路由器OR配置PPPOE拨号创建NAT(PAT端口复用) PC1测试结果 实验条件 网络拓朴 需求 OR使用PPPoE的方式向ISP发送拨号的用户名和密码&#xff0c;用户名&#xf…...

cocosCreator 之 Bundle使用

版本&#xff1a; v3.4.0 语言&#xff1a; TypeScript 环境&#xff1a; Mac Bundle简介 全名 Asset Bundle(简称AB包)&#xff0c;自cocosCreator v2.4开始支持&#xff0c;用于作为资源模块化工具。 允许开发者根据项目需求将贴图、脚本、场景等资源划分在 Bundle 中&am…...

分类网络搭建示例

搭建CNN网络 本章我们来学习一下如何搭建网络&#xff0c;初始化方法&#xff0c;模型的保存&#xff0c;预训练模型的加载方法。本专栏需要搭建的是对分类性能的测试&#xff0c;所以这里我们只以VGG为例。 请注意&#xff0c;这里定义的只是一个简陋的版本&#xff0c;后续一…...

为 Ubuntu 虚拟机构建 SSH 服务器

以校园网环境和VMware为例&#xff0c;关键步骤如下&#xff1a; 安装 SSH 服务&#xff1a; 打开 Ubuntu 虚拟机。打开终端。输入命令 sudo apt-get update 更新软件包列表。输入命令 sudo apt-get install openssh-server 安装 SSH 服务。 配置 SSH 服务&#xff1a; 编辑配…...

SpringBoot--中间件技术-2:整合redis,redis实战小案例,springboot cache,cache简化redis的实现,含代码

SpringBoot整合Redis 实现步骤 导pom文件坐标 <!--redis依赖--> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId> </dependency>yaml主配置文件&#xff0c;配置…...

linux rsyslog配置文件详解

1.rsyslog配置文件简介 linux rsyslog配置文件/etc/rsyslog.conf分为三部分:MODULES、GLOBAL DIRECTIVES、RULES ryslog模块说明 模块说明MODULES指定接收日志的协议和端口。若要配置日志服务器,则需要将相应的配置项注释去掉。GLOBAL DIRECTIVES主要用来配置日志模版。指定…...

JAVA:SpringBoot 实现图片防盗链的技术指南

1、简述 防盗链(Hotlink Protection)是一种保护网站资源不被其他网站直接引用的技术,特别是在图片、视频等静态资源方面。防盗链的核心思想是检查请求的来源(Referer),只允许来自指定域名的请求访问资源。 策略 原理 防护强度 Referer 检查 验证请求来源域名 低(Refere…...

【Chips】从“打两拍”到“异步FIFO”:跨时钟域同步方案的选择逻辑与实战边界

1. 跨时钟域同步的挑战与核心问题 第一次接触跨时钟域设计时&#xff0c;我盯着示波器上那些不稳定的波形整整发呆了半小时。当时正在调试一个简单的按键消抖电路&#xff0c;按键信号从20MHz的IO时钟域传递到100MHz的系统时钟域&#xff0c;结果发现每隔几次就会产生误触发。这…...

macOS资源下载完全指南:从入门到精通的网络资源嗅探解决方案

macOS资源下载完全指南&#xff1a;从入门到精通的网络资源嗅探解决方案 【免费下载链接】res-downloader 视频号、小程序、抖音、快手、小红书、直播流、m3u8、酷狗、QQ音乐等常见网络资源下载! 项目地址: https://gitcode.com/GitHub_Trending/re/res-downloader 网络…...

在VMware虚拟机里用CentOS 7.5手把手搭建OpenVPN 2.4.12服务器(附完整证书生成与防火墙配置)

在虚拟化环境中构建安全通信通道的技术实践 虚拟化技术为现代IT基础设施提供了灵活性和隔离性&#xff0c;而在这类环境中建立安全的通信通道则是许多开发者和运维人员的刚需。本文将聚焦于如何在VMware虚拟化平台上&#xff0c;基于CentOS 7.5系统构建一套完整的加密通信解决…...

OpenClaw 微信通道配置与部署速查

一、前置核查&#xff08;必做&#xff09;版本适配微信&#xff1a;iOS≥8.0.70、安卓≥8.0.69&#xff0c;未达标则更新至最新版。OpenClaw&#xff1a;需为最新稳定版&#xff0c;执行openclaw --version验证&#xff0c;异常则重新获取部署包。环境与权限网络&#xff1a;开…...

Qwen3.5-9B-AWQ-4bit Proteus电路仿真辅助:原理图分析与代码生成

Qwen3.5-9B-AWQ-4bit Proteus电路仿真辅助&#xff1a;原理图分析与代码生成 1. 电子工程师的新助手 作为一名电子工程师&#xff0c;你是否经常遇到这样的场景&#xff1a;面对复杂的电路原理图&#xff0c;需要花费大量时间分析各个模块的功能&#xff1b;或者在Proteus中设…...

5*5窗口的高斯滤波模板

本文介绍了一个55高斯模板的生成过程。首先以标准差σ3创建初始模板矩阵&#xff0c;通过双重循环计算每个位置的高斯函数值。随后对模板进行归一化处理&#xff0c;确保系数总和为1。最后将归一化后的模板进行1024倍定点化处理&#xff0c;便于后续数字信号处理应用。该代码实…...

从理论到仿真:Simulink在无穷大电源与同步发电机三相短路分析中的实践

1. 电力系统短路分析的基础概念 第一次接触电力系统短路分析时&#xff0c;我也被各种专业术语搞得一头雾水。简单来说&#xff0c;短路分析就是研究电力系统在发生故障时的电流变化情况。想象一下家里的电路突然短路时&#xff0c;保险丝会"啪"的一声跳闸&#xff0…...

01-17-01 API Level与版本管理机制

01-17-01 API Level与版本管理机制 什么是API Level API Level是Android系统的版本号&#xff0c;每个Android版本都有唯一的API Level。 源码定义 // Build.java public class Build {public static class VERSION {/*** 设备的Android版本*/public static final int SDK_INT …...

百川2-13B-4bits量化模型+OpenClaw:自动化测试报告生成器

百川2-13B-4bits量化模型OpenClaw&#xff1a;自动化测试报告生成器 1. 为什么需要自动化测试报告生成 每次代码提交后&#xff0c;看着CI/CD流水线里密密麻麻的JUnit测试报告&#xff0c;我都会陷入一种"数据过载"的焦虑。特别是当测试用例失败时&#xff0c;需要…...