损失函数理解(二)——交叉熵损失

损失函数的目的是为了定量描述不同模型(例如神经网络模型和人脑模型)的差异。

交叉熵,顾名思义,与熵有关,先把模型换成熵这么一个数值,然后用这个数值比较不同模型之间的差异。

为什么要做这一步转换,原因是要直接比较两个模型,前提是两个模型是同一种类型,比如都是高斯分布,我们可以比较均值和方差。但现实中,我们要比较的两种模型往往不是同一种类型,甚至我们都不知道是什么类型。所以我们通过熵实现不同类型概率模型的公度


熵的前置知识

1. 信息量

衡量一个信息有没有信息量,不是看这个消息你知不知道,关键是看能带来多少确定性,也可以说能消除多少不确定性。

例如有8支队伍参加比赛,其中一支队伍名为“AI小队”。理论上来说,“AI小队”夺冠概率为1/8。但如果告诉你“AI小队”夺冠了,夺冠概率从1/8变为百分之百;但如果告诉你“AI小队”进入总决赛了,夺冠概率从1/8变为1/2,但直观上感觉这个信息量不如夺冠信息的信息量高。

通过上述例子我们大概能明白不同的信息,含有的信息量是不同的。那如何定义信息量呢?


***题外话***

所谓定义,就是人为规定它的意义,给出一个表达式,至于这个表达式为什么这么写而不那么写,原因是最先提出的人就是这么写的,并且逻辑得到了自洽,后人为了统一标准,便沿用了这个定义。你也可以给出自己的定义,但为了让体系自洽,可能其他与该定义相关的表达式就要重写。


首先,从直观上来说,一件事发生的概率越低,其包含的信息量越大;反之一件事发生的概率越大,包含的信息量越少。例如,我告诉你太阳每天东升西落,这对你来说没有任何信息量,因为这件事情的概率是1;但假如我告诉你下一期双色球中奖号码是某某某(假如是正确的话),那这个消息的信息量就很大了。因此信息量与事件发生的概率是相关的。

其次,假如一个事件可以被分解成多个事件,该事件的信息量等于多个事件信息量的和。现在我们假设f(x)是信息量的一个表达式,根据上面举的例子,该表达式应该满足如下要求:

f(AI小队夺冠(进决赛且赢得决赛)) = f(AI小队进入决赛)+f(AI小队进入决赛后还赢了决赛)

f(\frac{1}{8})=f(\frac{1}{4} \times \frac{1}{2})=f(\frac{1}{4})+f(\frac{1}{2})

乘法变加法,熟悉的感觉,是log!!!信息量能不能定义成log(P_{i})呢,其中P_{i}为事件i发生的概率。如此以来第二个条件满足了,但是这样的话信息量会随着事件发生概率的增大而增大,那怎么办呢?加个负号。

所以如果我们把一个事件的信息量定义为如下公式,逻辑就能自洽

H_{i}=-log(P_{i})

通常我们log以2为底,计算出的信息量的单位是比特(bit)。原因是计算机是二进制的,我们的信息量衡量了一个信息的最短编码(不理解的同学可忽略)。

2.熵

通过上面的分析,我们给出了信息量的定义。信息量可以理解成一个事件从原来的不确定性变得确定难度有多大,信息量比较大说明难度比较高。熵的理解也类似,不过熵衡量的不是某个具体事件,而是一个系统中所有的事件,即一个系统从原来的不确定到确定,其难度有多大。

我们可以把一场比赛看作一个系统。假如两个实力相近的队伍比赛,两只队伍胜利的概率都是\frac{1}{2},那这两只队伍赢球的信息量都是:

I=-log_{2}\frac{1}{2}=1

但如果是两只实力悬殊的队伍比赛,队伍A胜利的概率是99%,队伍B胜利的概率为1%,那两只队伍赢球的信息量分别为:

I_{A}=-log_{2}\frac{99}{100}\approx 0.0145

I_{B}=-log_{2}\frac{1}{100}\approx 6.6439

那球赛的熵是两只队伍赢球的信息量的加和么?

显然不是,因为如果是加和的话,实力悬殊队伍的比赛结果相对来说是确定的,大概率是实力强的队伍赢得比赛,所以它的不确定性是低的,但此时它的熵却是高的,所以熵并不是信息量的简单加和。

我们需要考虑每个事件对系统贡献的信息量,事件只有发生了,才会贡献信息量,所以系统的熵定义为信息量的期望:

H:= E(I)\\\\=\sum _{i=1}^{m}p_{i}I_{i}\\\\=\sum _{i=1}^{m}p_{i}(-log_{2}p_{i})\\\\=-\sum _{i=1}^{m}p_{i}\cdot log_{2}p_{i}

3.相对熵(KL散度)

我们的目的是要比较两个模型,最简单的方法就是把概率模型的熵计算出来然后直接比较熵的数值,但并不是所有概率模型我们都能求熵。因此引出另外一个概念——相对熵,也叫KL散度,其定义如下:

D_{KL}(P||Q)\\\\:=\sum _{i=1}^{m}p_{i}\cdot (I_{Q_{i}}-I_{P_{i}})\\\\=\sum _{i=1}^{m}p_{i}\cdot((-log_{2}q_{i})-(-log_{2}p_{i}))\\\\=\sum _{i=1}^{m}p_{i}\cdot(-log_{2}q_{i})-\sum _{i=1}^{m}p_{i}\cdot(-log_{2}p_{i})\\\\=H(P,Q)-H(P)

KL散度等于0表明两个分布是一样的,不等于0表示两者有差别。其中QP分别表示两个概率分布,D_{KL}(P||Q)表示以P为基准(P在前),用Q近似P式损失了多少信息,I_{Q_{i}}表示某个事件在系统Q中的信息量,H(P,Q)表示交叉熵,H(P)表示概率分布P的熵,我们以P为基准的话,这个值是不会变的。

由公式可知,H(P,Q)H(P)都是大于0的,但是两者谁更大呢?这是很重要的,因为如果KL散度大于零,要使得KL越接近于0,就得让交叉熵越小;如果KL散度小于0,要使得KL散度越接近于0,就得让交叉熵越大。

吉布斯不等式已经证明KL散度是恒大于等于0的(感兴趣的小伙伴可自行检索证明过程),那现在我们如果想让概率分布Q接近P,只需要最小化两者的交叉熵即可,也就是说交叉熵可作为损失函数对模型进行优化


通过前置知识,我们引出了交叉熵,并且明白了为什么交叉熵可以衡量两个概率分布之间的差异,也就是说可以用作损失函数。那么在神经网络中,我们该如何利用交叉熵呢?首先我们回顾一下交叉熵的定义:

H(P,Q)=\sum _{i=1}^{m}p_{i}\cdot(-log_{2}q_{i})

我们只需要用训练神经网络场景中的变量替换公式中的变量即可。

m表示分类的个数,在判断图像是不是猫的二分类任务中,i的取值只有两个,即i=1表示图像是猫,i=2表示图像不是猫;对应的,p_{i}表示每个事件发生的概率,即当前图像是猫的概率和不是猫的概率,在模型训练场景中,我们以人脑中的概率模型为基准,即以标签为基准,所以p_{1}=yp_{2}=(1-y),其中y表示人类给图像的标签,是猫为1,不是猫为0;q则对应模型预测的当前图像是猫的概率,即\widehat{y},而不是猫的概率就是(1-\widehat{y}),所以交叉熵用于神经网络中的形式如下:

H=-[y\cdot log_{2}\widehat{y}+(1-y)\cdot log_{2}(1-\widehat{y})]

当然这里是二分类的情况,如果是多分类,交叉熵可进一步写为:

H=-\sum _{i=1}^{m}y_{i}\cdot log(\widehat{y_{i}})

其中i表示类别数,y_{i}表示是类别i的概率(标签),\widehat{y_{i}}表示模型预测的是类别i的概率。


至此,我们通过信息量和熵引出交叉熵,并介绍了交叉熵是如何用于损失计算的,希望能够对有需要的伙伴提供帮助,如果文中有歧义或者有错误的地方,欢迎大家在评论区指出!

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

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

相关文章

Kubernetes的Replica Set和ReplicaController有什么区别

ReplicaSet 和 ReplicationController 是 Kubernetes 中用于管理应用程序副本的两种资源,它们有类似的功能,但 ReplicaSet 是 ReplicationController 的增强版本。 以下是它们的主要区别: 1. 功能的演进 ReplicationController 是 Kubernete…

信息系统运行管理员教程3--信息系统设施运维

第3章 信息系统设施运维 信息系统设施是支撑信息系统业务活动的信息系统软硬件资产及环境。 第1节 信息系统设施运维的管理体系 信息系统设施运维的范围包含信息系统涉及的所有设备及环境,主要包括基础环境、硬件设备、网络设备、基础软件等。 信息系统设施运维…

如何通过Python实现自动化任务:从入门到实践

在当今快节奏的数字化时代,自动化技术正逐渐成为提高工作效率的利器。无论是处理重复性任务,还是管理复杂的工作流程,自动化都能为我们节省大量时间和精力。本文将以Python为例,带你从零开始学习如何实现自动化任务,并通过一个实际案例展示其强大功能。 一、为什么选择Pyt…

Spring Boot 与 MyBatis Plus 整合 KWDB 实现 JDBC 数据访问

​ 引言 本文主要介绍如何在 IDEA 中搭建一个使用 Maven 管理的 Spring Boot 应用项目工程,并结合在本地搭建的 KWDB 数据库(版本为:2.0.3)来演示 Spring Boot 与 MyBatis Plus 的集成,以及对 KWDB 数据库的数据操作…

Java锁等待唤醒机制

在 Java 并发编程中,锁的等待和唤醒机制至关重要,通常使用 wait()、notify() 和 notifyAll() 来实现线程间的协调。本文将详细介绍这些方法的用法,并通过示例代码加以说明。 1. wait()、notify() 与 notifyAll() 在 Java 中,Obj…

 UNIX网络编程笔记:TCP客户/服务器程序示例

服务器实例 有个著名的项目&#xff0c;tiny web&#xff0c;本项目将其改到windows下&#xff0c;并使用RAII重构&#xff0c;编写过程中对于内存泄漏确实很头疼&#xff0c;还没写完&#xff0c;后面会继续更&#xff1a; #include <iostream> #include <vector&g…

AI Agent开发大全第四课-提示语工程:从简单命令到AI对话的“魔法”公式

什么是提示语工程&#xff1f;一个让AI“听话”的秘密 如果你曾经尝试过用ChatGPT或者其他大语言模型完成任务&#xff0c;那么你一定遇到过这样的情况&#xff1a;明明你的问题是清晰的&#xff0c;但答案却离题万里&#xff1b;或者你认为自己提供的信息足够详尽&#xff0c…

系统架构设计知识体系总结

1.技术选型 1.什么是技术选型&#xff1f; 技术选型是指评估和选择在项目或系统开发中使用的最合适的技术和工具的过程。这涉及考虑基于其能力、特性、与项目需求的兼容性、可扩展性、性能、维护和其他因素的各种可用选项。技术选型的目标是确定与项目目标相符合、能够有效解…

基于3DMax与Vray引擎的轻量级室内场景渲染实践

欢迎踏入3DMAX室内渲染的沉浸式学习之旅!在这个精心设计的实战教程中,我们将携手揭开3DMAX与Vray这对黄金搭档在打造现实室内场景时的核心奥秘。无论您是渴望入门的3D新手,还是追求极致效果的专业设计师,这里都将为您呈现从场景蓝图构建到光影魔法施加的完整技术图谱。我们…

逻辑卷,vdo,(阿里加速器)

一、逻辑卷 10 20 30 1.逻辑卷的2个特点 &#xff08;1&#xff09;逻辑卷可以将多个分区或者磁盘整合成一个更大的逻辑磁盘&#xff0c;然后可以从逻辑磁盘上划分出分区&#xff08;逻辑磁盘的大小等于整合的物理磁盘大小之和。&#xff09; &#xff08;2&#xff09;能…

检索增强生成(2)本地PDF 本地嵌入模型

from langchain_community.document_loaders import PyPDFLoader from pathlib import Pathdef load_local_pdf(file_path):if not Path(file_path).exists():raise FileNotFoundError(f"文件 {file_path} 不存在&#xff01;")loader PyPDFLoader(file_path)try:do…

安全守护:反光衣检测技术的革新之路

视觉分析助力船上工人反光衣检测 在现代工业生产与作业环境中&#xff0c;安全始终是首要考虑的因素。对于水上作业&#xff0c;如船舶维护、海上施工等场景&#xff0c;工人穿戴反光衣是预防事故、提高可见性的重要措施。然而&#xff0c;传统的人工检查方式不仅效率低下&…

【Scrapy】Scrapy教程8——处理子链接

通过前面几篇文章,已经了解了如何去爬取网页内容并存储到数据库,但是目前只是存储了一个页面的内容,现在想要获取每篇文章链接内的文章内容,我们来看看怎么获取。 生成新请求 首先我们肯定要先拿到链接,所以第一步都获取文章标题和链接肯定少不了,然后再爬取获取到到子…

Centos6配置yum源

Centos6配置yum源 为Centos6配置CentOS Vault源—防止yum源过期为Centos6配置epel源为Centos6配置ELRepo源---已ELRepo被官方清空Centos6安装dockerdocker配置国内镜像加速 为Centos6配置CentOS Vault源—防止yum源过期 参考&#xff1a;https://mirrors.ustc.edu.cn/help/cen…

“智改数转”新风口,物联网如何重构制造业竞争力?

一、政策背景 为深化制造业智能化改造、数字化转型、网络化联接&#xff0c;江苏省制定了《江苏省深化制造业智能化改造数字化转型网络化联接三年行动计划&#xff08;2025&#xff0d;2027年&#xff09;》&#xff0c;提出到2027年&#xff0c;全省制造业企业设备更新、工艺…

制作Oracle11g Docker 镜像

基于Linux系统&#xff0c;宿主主机要设置如下环境变量&#xff0c;oracle为64位版本 dockerfile中需要的数据库安装包可从csdn下载内找到 #!/bin/bash # 在宿主机上运行以设置Oracle所需的内核参数 # 这些命令需要root权限cat > /etc/sysctl.d/99-oracle.conf << EO…

从GTC2025首次量子日看英伟达量子AI融合算力网络前景与趋势

GTC2025 Quantum Day 最新内容全部汇总: 技术名称描述合作伙伴/开发者应用场景/目标量子模拟器优化方案NVIDIA与IonQ、D-Wave合作,针对量子模拟器进行性能优化,提升量子计算任务效率。IonQ、D-Wave量子算法开发、复杂系统模拟混合量子-经典计算架构结合量子计算与经典GPU加速…

UE4学习笔记 FPS游戏制作12 添加第二把枪,制作枪的父类,动态生成物体,切换武器

我们添加一个发射器类型的枪 我们目前有了一个Rifle的枪械蓝图&#xff0c;我们在添加Launcher时&#xff0c;需要为他们添加一个父类&#xff0c;将公共方法放到父类里&#xff0c;方法体由子类实现 添加父类 方法1 新建一个Gun的蓝图&#xff0c;Gun继承Actor&#xff0c;…

【原创首发】开源基于AT32 SIP/VOIP电话

前言 本次为了反馈各位粉丝的关注&#xff0c;特此分享 AT32_VOIP 工程&#xff0c;此功能其实跟我之前发过的《STM32F429的VOIP功能》是一样的&#xff0c;只是用了AT32F437。 其实那个工程是一个比较Demo中的Demo&#xff0c;很多功能和硬件依赖性太大了。后面项目中发现AT…

通俗易懂搞懂@RequestParam 和 @RequestBody

&#x1f4cc; 博主简介: &#x1f4bb; 努力学习的 23 级科班生一枚 &#x1f680;&#x1f3e0; 博主主页 &#xff1a; &#x1f4ce; 灰阳阳&#x1f4da; 往期回顾 &#xff1a;Session和Cookie我不允许你不懂&#x1f4ac; 每日一言&#xff1a; 「流水不争先&#xff0c…