分类模型为什么使用交叉熵作为损失函数

推导过程

让推理更有体感,进行下面假设:

  1. 假设要对进行图片识别分类
  2. 假设模型输出 y y y,是一个几率,表示是猫的概率

训练资料如下:

x n x^n xn类别 y ^ n \widehat{y}^n y n
x 1 x^1 x11
x 2 x^2 x21
x 3 x^3 x30

注: x 1 x^1 x1是第一组训练资料它是属于猫,因为我们使用one-hot来表示目标类别,所以 y ^ i n \widehat{y}^n_i y in要么等于0,要么等于1

损失函数怎么定义比较好?我们优先想到的是判断结果是否和真实值相等

L o s s = [ f ( x 1 ) ≠ y ^ 1 ] + [ f ( x 2 ) ≠ y ^ 2 ] + [ f ( x 3 ) ≠ y ^ 3 ] Loss=[f(x^1) \neq \widehat{y}^1]+[f(x^2) \neq \widehat{y}^2]+[f(x^3) \neq \widehat{y}^3] Loss=[f(x1)=y 1]+[f(x2)=y 2]+[f(x3)=y 3]
f ( x n ) = { 1 , y n > 0.5 0 , y n < = 0.5 f(x^n)= \begin{dcases} 1 , y^n > 0.5 \\ 0 ,y^n <=0.5 \end{dcases} f(xn)={1yn>0.50yn<=0.5
只需要找到 w ∗ , b ∗ = arg ⁡ m i n w , b L ( w , b ) w^*,b^*=\arg\underset{w,b}{min}L(w,b) w,b=argw,bminL(w,b) 使得Loss最小即可
但是上面的 f ( x n ) f(x^n) f(xn)无法进行微分,不能计算梯度

所以重新寻找Loss函数:
L o s s = f ( x 1 ) + f ( x 2 ) + ( 1 − f ( x 3 ) ) = y 1 + y 2 + ( 1 − y 3 ) Loss=f(x^1)+f(x^2)+(1-f(x^3))= y^1+y^2+(1-y^3) Loss=f(x1)+f(x2)+(1f(x3))=y1+y2+(1y3)
Loss越大说明和训练集越相似,效果越好,我们希望找到一个 w ∗ , b ∗ = arg ⁡ m a x w , b L ( w , b ) w^*,b^*=\arg\underset{w,b}{max}L(w,b) w,b=argw,bmaxL(w,b) 使得Loss最大

但是Loss多大算大?我们还是希望找到一个最小Loss,最好趋近于0
所以对Loss再次变形,对Loss加一个 负 l n ln ln,我们就可以求Loss的最小值了
w ∗ , b ∗ = arg ⁡ m a x w , b L ( w , b ) = arg ⁡ m i n w , b − l n L ( w , b ) w^*,b^*=\arg\underset{w,b}{max}L(w,b)=\arg\underset{w,b}{min}-lnL(w,b) w,b=argw,bmaxL(w,b)=argw,bminlnL(w,b)

推导:
L o s s = − [ l n f ( x 1 ) + l n f ( x 2 ) + ( 1 − l n f ( x 3 ) ) ] Loss=-[lnf(x^1)+lnf(x^2)+(1-lnf(x^3))] Loss=[lnf(x1)+lnf(x2)+(1lnf(x3))]

因为 y ^ i n \widehat{y}^n_i y in要么等于0,要么等于1,所以可得: { l n f ( x n ) = y ^ n l n f ( x n ) + ( 1 − y ^ n ) l n ( 1 − l n f ( x n ) ) 1 − l n f ( x n ) = y ^ n l n f ( x n ) + ( 1 − y ^ n ) l n ( 1 − l n f ( x n ) ) \begin{dcases} lnf(x^n)=\widehat{y}^nlnf(x^n)+(1-\widehat{y}^n)ln(1-lnf(x^n)) \\ 1-lnf(x^n)=\widehat{y}^nlnf(x^n)+(1-\widehat{y}^n)ln(1-lnf(x^n)) \end{dcases} {lnf(xn)=y nlnf(xn)+(1y n)ln(1lnf(xn))1lnf(xn)=y nlnf(xn)+(1y n)ln(1lnf(xn))

= − [ y ^ 1 l n f ( x 1 ) + ( 1 − y ^ 1 ) l n ( 1 − l n f ( x 1 ) ) + y ^ 2 l n f ( x 2 ) + ( 1 − y ^ 2 ) l n ( 1 − l n f ( x 2 ) ) + y ^ 3 l n f ( x 3 ) + ( 1 − y ^ 3 ) l n ( 1 − l n f ( x 3 ) ) ] =-[\widehat{y}^1lnf(x^1)+(1-\widehat{y}^1)ln(1-lnf(x^1))+\widehat{y}^2lnf(x^2)+(1-\widehat{y}^2)ln(1-lnf(x^2))+\widehat{y}^3lnf(x^3)+(1-\widehat{y}^3)ln(1-lnf(x^3))] =[y 1lnf(x1)+(1y 1)ln(1lnf(x1))+y 2lnf(x2)+(1y 2)ln(1lnf(x2))+y 3lnf(x3)+(1y 3)ln(1lnf(x3))]

= − ∑ [ y ^ n l n f ( x n ) + ( 1 − y ^ n ) l n ( 1 − l n f ( x n ) ) ] =-\sum[\widehat{y}^nlnf(x^n)+(1-\widehat{y}^n)ln(1-lnf(x^n))] =[y nlnf(xn)+(1y n)ln(1lnf(xn))]

设: p ( x ) p(x) p(x)为二项分布,其中 p ( 1 ) = y ^ n p(1)=\widehat{y}^n p(1)=y n p ( 0 ) = 1 − y ^ n p(0)=1-\widehat{y}^n p(0)=1y n
设: q ( x ) q(x) q(x)为二项分布,其中 q ( 1 ) = f ( x n ) q(1)=f(x^n) q(1)=f(xn) q ( 0 ) = 1 − f ( x n ) q(0)=1-f(x^n) q(0)=1f(xn)
= − ∑ i = 1 N p ( x ) l n ( q ( x ) ) =-\displaystyle\sum_{i=1}^Np(x)ln(q(x)) =i=1Np(x)ln(q(x))
= ∑ i = 1 N p ( x ) l n ( 1 q ( x ) ) =\displaystyle\sum_{i=1}^Np(x)ln(\frac{1}{q(x)}) =i=1Np(x)ln(q(x)1)

**交叉熵(cross entropy)**的数学公式如下:
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/9dcfc80e77e349bdb2f256cbb4097b49.png

  • 如果我们把模型输出和真实值看做是一个二项分布的话,那么Loss的最终定义就是这两个二项分布越接近越好

交叉熵可在神经网络中作为损失函数,p表示真实标记的分布,q则为训练后的模型的预测标记分布,交叉熵损失函数可以衡量p与q的相似性。交叉熵作为损失函数还有一个好处是使用sigmoid函数在梯度下降时能避免均方误差损失函数学习速率降低的问题,因为学习速率可以被输出的误差所控制。

问题

为什么不使用平均方差作为Loss函数呢?

  1. 假设 L o s s = 1 2 ∑ ( f ( x n ) − y ^ n ) 2 Loss=\frac{1}{2}\sum(f(x^n)-\widehat{y}^n)^2 Loss=21(f(xn)y n)2
  2. 假设用的是sigmoid函数

求导之后:
在这里插入图片描述
注: f ( x ) f(x) f(x)的导数是 f ( x ) ( 1 − f ( x ) ) f(x)(1-f(x)) f(x)(1f(x))
对于红色字体中的式子来说:
当y=1,f(x) = 1的时候,gradient=0,那么暂停训练是合理的
但y=1,f(x) = 0,这个时候和实际值有差距,应该继续训练,但gradient=0了
在这里插入图片描述

分类如果超过2维怎么办?

如果还是使用one-hot来表示目标类别,那么输出变为了多个,经过softmax函数之后都是0~1之间的数,把它看做是概率,就是N个二项式概率分布的相似度求和。

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

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

相关文章

【AUTOSAR 基础软件】软件组件的建立与使用(“代理”SWC)

基础软件往往需要建立一些“代理”SWC来完成一些驱动的抽象工作&#xff08;Complex_Device_Driver_Sw或者Ecu_Abstraction_Sw等&#xff09;&#xff0c;或建立Application Sw Component来补齐基础软件需要提供的功能实现。当面对具体的项目时&#xff0c;基础软件开发人员还可…

【Linux】sed编辑器二

一、处理多行命令 sed编辑器有3种可用于处理多行文本的特殊命令。 N&#xff1a;加入数据流中的下一行&#xff0c;创建一个多行组进行处理&#xff1b;D&#xff1a;删除多行组中的一行&#xff1b;P&#xff1a;打印多行组中的一行。 1、next命令&#xff1a;N 单行next命…

HTML5 网站模板

HTML5 网站模板 参考 HTML5 Website Templates

数据链路层-STP

生成树协议STP&#xff08;Spanning Tree Protocol&#xff09; 它的实现目标是&#xff1a;在包含有物理环路的网络中&#xff0c;构建出一个能够连通全网各节点的树型无环逻辑拓扑。 选举根交换机&#xff1a; 选举根端口&#xff1a; 选举指定端口&#xff1a; 端口名字&…

前端学习-事件流,事件捕获,事件冒泡以及阻止冒泡以及相应案例(二十八)

目录 前言 事件流与两个阶段说明 说明 事件捕获 目标 说明 事件冒泡 目标 事件冒泡概念 简单理解 阻止冒泡 目标 语法 注意 综合示例代码 总结 前言 梳洗罢&#xff0c;独倚望江楼。过尽千帆皆不是&#xff0c;斜晖脉脉水悠悠。肠断白蘋洲 事件流与两个阶段说明…

Cognitive architecture 又是个什么东东?

自Langchain&#xff1a; https://blog.langchain.dev/what-is-a-cognitive-architecture/ https://en.wikipedia.org/wiki/Cognitive_architecture 定义 A cognitive architecture refers to both a theory about the structure of the human mind and to a computational…

【Qt】QThread总结

目录 成员函数创建方式方式一方式二方式三注意 example总结参考文章 成员函数 创建方式 方式一 QThread 静态成员create auto thd QThread::create([]{});方式二 继承QThread类&#xff0c;重写run run函数它作为线程的入口&#xff0c;也就是线程从run()开始执行&#…

CVE-2025-22777 (CVSS 9.8):WordPress | GiveWP 插件的严重漏洞

漏洞描述 GiveWP 插件中发现了一个严重漏洞&#xff0c;该插件是 WordPress 最广泛使用的在线捐赠和筹款工具之一。该漏洞的编号为 CVE-2025-22777&#xff0c;CVSS 评分为 9.8&#xff0c;表明其严重性。 GiveWP 插件拥有超过 100,000 个活跃安装&#xff0c;为全球无数捐赠平…

计算机类-C语言课程/书籍推荐

课程&#xff1a; 1.【零基础入门C / C语言-王桂林老师】 https://www.bilibili.com/video/BV1pv411e7v7/?share_sourcecopy_web&vd_source48ead52c9fed3570e765fd86b2873086 理论实操都很到位 2.【C语言进阶】 https://www.bilibili.com/video/BV13J411M7ph/?share_s…

【Linux】网络层

目录 IP协议 协议头格式 网段划分 2中网段划分的方式 为什么要进行网段划分 特殊的IP地址 IP地址的数量限制 私有IP地址和公有IP地址 路由 IP协议 在通信时&#xff0c;主机B要把数据要给主机C&#xff0c;一定要经过一条路径选择&#xff0c;为什么经过路由器G后&…

HarmonyOS:@LocalBuilder装饰器: 维持组件父子关系

一、前言 当开发者使用Builder做引用数据传递时&#xff0c;会考虑组件的父子关系&#xff0c;使用了bind(this)之后&#xff0c;组件的父子关系和状态管理的父子关系并不一致。为了解决组件的父子关系和状态管理的父子关系保持一致的问题&#xff0c;引入LocalBuilder装饰器。…

Elasticsearch—索引库操作(增删查改)

Elasticsearch中Index就相当于MySQL中的数据库表 Mapping映射就类似表的结构。 因此我们想要向Elasticsearch中存储数据,必须先创建Index和Mapping 1. Mapping映射属性 Mapping是对索引库中文档的约束&#xff0c;常见的Mapping属性包括&#xff1a; type&#xff1a;字段数据类…

MySQL进阶突击系列(05)突击MVCC核心原理 | 左右护法ReadView视图和undoLog版本链强强联合

2024小结&#xff1a;在写作分享上&#xff0c;这里特别感谢CSDN社区提供平台&#xff0c;支持大家持续学习分享交流&#xff0c;共同进步。社区诚意满满的干货&#xff0c;让大家收获满满。 对我而言&#xff0c;珍惜每一篇投稿分享&#xff0c;每一篇内容字数大概6000字左右&…

使用 Python 实现自动化办公(邮件、Excel)

目录 一、Python 自动化办公的准备工作 1.1 安装必要的库 1.2 设置邮件服务 二、邮件自动化处理 2.1 发送邮件 示例代码 注意事项 2.2 接收和读取邮件 示例代码 三、Excel 自动化处理 3.1 读取和写入 Excel 文件 示例代码 3.2 数据处理和分析 示例代码 四、综合…

jQuery CSS 类

jQuery CSS 类 引言 在网页设计和开发中&#xff0c;CSS&#xff08;层叠样式表&#xff09;起着至关重要的作用&#xff0c;它负责定义网页的布局、颜色、字体等视觉效果。jQuery&#xff0c;作为一个快速、小巧且功能丰富的JavaScript库&#xff0c;极大地简化了HTML文档的…

rk3568 内核态OOM内存泄漏memleak使用

1&#xff0c;配置&#xff0c;修改\kernel\arch\arm64\configs\rockchip_linux_defconfig&#xff0c;修改后查看.config. larkubuntu:~/Public/rk356x-linux/rk356x-linux/kernel$ cat .config | grep -i kmemleak CONFIG_HAVE_DEBUG_KMEMLEAKy CONFIG_DEBUG_KMEMLEAKy CONFI…

金融项目实战 02|接口测试分析、设计以及实现

目录 ⼀、接口相关理论 二、接口测试 1、待测接口&#xff1a;投资业务 2、接口测试流程 3、设计用例理论 1️⃣设计方法 2️⃣工具 4、测试点提取 5、测试用例&#xff08;只涉及了必测的&#xff09; 1️⃣注册图⽚验证码、注册短信验证码 2️⃣注册 3️⃣登录 …

Kotlin 中 forEach 的 return@forEach 的使用误区

forEach 对于从Java开发转到Kotlin的开发者来说&#xff0c;returnforEach可能具有迷惑性。假如没有仔细了解过这个语法的使用&#xff0c;真的就被它的表象迷惑了。 因为它看上去真的实在太像【跳出forEach循环】了&#xff01;&#xff01;&#xff01; 然而&#xff0c;实际…

指令的修饰符

指令的修饰符 参考文献&#xff1a; Vue的快速上手 Vue指令上 Vue指令下 Vue指令的综合案例 文章目录 指令的修饰符指令修饰符 结语 博客主页: He guolin-CSDN博客 关注我一起学习&#xff0c;一起进步&#xff0c;一起探索编程的无限可能吧&#xff01;让我们一起努力&…

EFCore HasDefaultValueSql

今天小伙伴在代码中遇到了有关 HasDefaultValue 的疑问&#xff0c;这里整理澄清下... 在使用 Entity Framework Core (EFCore) 配置实体时&#xff0c;HasDefaultValue 方法会为数据库列设置一个默认值。该默认值的行为取决于以下条件&#xff1a; 1. 配置 HasDefaultValue 的…