【pytorch19】交叉熵

分类问题的loss

  • MSE
  • Cross Entropy Loss
  • Hinge Loss (SVN用的比较多)
    • ∑ i m a x ( 0 , 1 − y i ∗ h θ ( x i ) ) \sum_imax(0,1-y_i*h_\theta(x_i)) imax(0,1yihθ(xi))

Entropy(熵)

  • Uncertainty(也叫不确定性)
  • measure of surprise(惊喜度)
  • higher entropy = less info
    • E n t r o p y = − ∑ i P ( i ) log ⁡ P ( i ) Entropy=-\sum_iP(i)\log P(i) Entropy=iP(i)logP(i)

Entropy就是熵,也叫做不确定性,从某种程度上讲是惊喜度

比如你长得很帅,我说你很帅,这句话的内容就比较少,uncertainty就比较低,entropy比较高

比如某个人能力很差,但是有一天中了大奖,这个消息的Uncertainty就比较高,信息量就比较大,就是说没有能力但是却突然很有钱了,意味着这句话很惊喜,Uncertainty比较高,entropy比较低

entropy定义为每个i的probability再乘以log probability

具体的例子
在这里插入图片描述

熵稳定效应是指在信息论中,熵越高的系统越不稳定,而熵越低的系统越稳定。

每个数字的中奖概率相同时,这个分布的熵比较高,因为不确定性大(不知道哪个数字会中奖)

a为[0.1,0.1,0.1,0.7]的时候,4这个数字的中奖率比较高,其他数字的中奖率只有0.1。此时的熵是比较低的。这是因为熵是衡量随机变量不确定性的度量,而在这个分布中,数字4的中奖概率远高于其他数字,这意味着结果的不确定性较低,因为数字4的中奖几乎是确定的。

a为[0.001,0.001,0.001,0.999]的时候,非常极端的情况,前面都不可能中奖,这个熵非常低,因为几乎可以确定第四个结果会发生

Cross Entropy (交叉熵)

Entropy:指的是一个分布,比如说p本身的一个稳定性
Cross Entropy (交叉熵):一般指的是两个分布,衡量两个分布的稳定性

在这里插入图片描述

第一步可以推导为第二步 H ( p ) H(p) H(p)再加上 D k l ( p ∣ q ) D_{kl}(p|q) Dkl(pq) D k l ( p ∣ q ) D_{kl}(p|q) Dkl(pq)这一部分是kl divergence,也叫KL散度,是真正衡量两个概率分布差异的方法

举例,两个高斯分布
在这里插入图片描述
重叠部分比较少,因此它的kl散度比较高,假设是2

完全重合,kl散度就接近于0了

根据定义如果P和Q相等,cross Entropy = Entropy

如果采用01编码比如说[0,1,0,0]只有第二项是1,所以是1log1,所以entropy是0 ,一般分类问题都是01编码,对于01编码来说,这个H§的entropy就等于0,然后根据H(p,q)推导之后的式子,如果H( p )等于0的话,H(p,q)就等于 D k l ( p ∣ q ) D_{kl}(p|q) Dkl(pq),也就意味着当我们去优化P和Q的交叉熵的时候,如果是01编码相当于直接优化P和Q的KL散度,KL散度刚好衡量的是两个分布重叠的情况,如果用网络预测出θ条件的分布,还有一个真实的分布,这两个分布的kl散度接近于0的话,意味着P=Q,恰好是我们需要的情况

cross entropy 对于01编码来说就是kl散度,而kl散度又说明了,如果交叉熵接近于0那kl散度就接近于0,意味着p和q的分布越来越近,恰好是我们要优化的目标

二分类问题

二分类问题的交叉熵如何运算
在这里插入图片描述
首先H(P,Q)是P乘以log Q再求和的问题

在这里插入图片描述

只有cat和dog两种分类,所以只有两种求和,但是由于P(dog)=1-P(cat),也就是说非猫即狗,这里假设P(cat)是y,Q(cat)是p,那式子就可以改写为y和p的式子,因为PQ分布使用的是01编码,所以y就是实际的值,p就是模型预测出的概率分布,由于二分类问题,非猫即狗,最后就会得出上图中y和p的表达式

如何解释这个y和p的表达式

如果y等于1的话,式子等于H(P,Q)=-log p,要最小化这个式子,有负号所以要最大化log p,即最大化p,最大化输入x,y=1的概率
如果y等于0的话,式子等于H(P,Q)=-log(1-p),要最小化这个式子,有负号所以要最大化log(1-p),就是要最小化p,最小化输入x,y=1的概率,即最大化输入x,y=0的概率(切记这里是二分类,不是0就是1)

例子:
在这里插入图片描述
当前的实例时一只小狗,P值就是真实分布,Q值就是模型预测分布,经过softmax预测是对的,但是可能性不高,看一下交叉熵约等于0.9

如果变成图右下角的情况就非常理想,狗的概率就非常高,这时交叉熵是0.02,也就是说变好了,交叉熵也从0.9下降到了0.02,说明了 p θ p_{θ} pθ越来越逼近 p r p_{r} pr

可以看出与MSE一样,都能够很好的迫使我们的预测朝着我们想要的方向去进行

总结

在这里插入图片描述
为什么分类问题不适用MSE,而使用Cross Entropy?

  1. 如果使用sigmoid和mse搭配的话,很容易出现sigmoid饱和的情况,会出现梯度弥散
  2. cross entropy概率的梯度信息更大,更容易收敛的更快,比如说当前label趋近于1,如果q的分布没有靠近1的话,例如在左端,就会发现loss会非常大,所以梯度会很大,会收敛的很快,当接近于1的时候,梯度就开始慢慢变小
  3. 如果发现cross entropy不行也可以试mse,因为mse的梯度求导更加简单

在这里插入图片描述
神经网络的结构,最后一层(可以横着看)叫logit,后面经过softmax层再经过cross entropy做计算,对于pytorch来说灰色部分是由一个现成的网络结构的,如果把softmax和cross entropy分开的话会出现一个数据不稳定的情况,所以一般不建议大家直接自己用softmax来处理,最好直接得到logit的输出以后,用pytorch一次完成不要自己去处理,因为会出现数据不稳定的情况

实例
在这里插入图片描述
F.cross_entropy函数中必须使用logits,因为pytorch中已经把softmax和log打包再一起了,如果传入pred_log就意味着再做一遍softmax,会导致数据非常小

如果一定要自己计算的话用F.nll_loss就行,但是这里就必须传入softmax之后的数据

F.cross_entropy函数等于softmax操作+log操作+F.nll_loss操作

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

解决obsidian加粗中文字体显示不突出的问题

加粗字体显示不突出的原因:默认字体的加粗版本本来就不突出 解决方法:改成显示突出的类型Microsoft YaHei UI 【效果】 修改前:修改后: 其他方法: 修改css(很麻烦,改半天也不一定奏效&#…

容器:stack

以下是关于stack容器的一些总结: stack容器比较简单,主要包括: 1、构造函数:stack [staName] 2、添加、删除元素: push() 、pop() 3、获取栈顶元素:top() 4、获取栈的大小:size() 5、判断栈是否为空&#x…

Codeforces Round 903 (Div. 3)A~F

A.Dont Try to Count 输入样例: 12 1 5 a aaaaa 5 5 eforc force 2 5 ab ababa 3 5 aba ababa 4 3 babb bbb 5 1 aaaaa a 4 2 aabb ba 2 8 bk kbkbkbkb 12 2 fjdgmujlcont tf 2 2 aa aa 3 5 abb babba 1 19 m mmmmmmmmmmmmmmmmmmm输出样例: 3 1 2 -1 1 0…

django之url路径

方式一&#xff1a;path 语法&#xff1a;<<转换器类型:自定义>> 作用&#xff1a;若转换器类型匹配到对应类型的数据&#xff0c;则将数据按照关键字传参的方式传递给视图函数 类型&#xff1a; str: 匹配除了”/“之外的非空字符串。 /test/zvxint: 匹配0或任何…

【IO】文件操作

&#x1f970;&#x1f970;&#x1f970;来都来了&#xff0c;不妨点个关注叭&#xff01; &#x1f449;博客主页&#xff1a;欢迎各位大佬!&#x1f448; 文章目录 1. 文件1.1 认识文件1.2 分清操作的是内存还是硬盘1.3 路径1.3.1 目录结构1.3.2 相对和绝对路径 1.4 文本文件…

计算机网络——数据链路层(以太网扩展、虚拟局域网、高速以太网)

在许多情况下&#xff0c;我们希望把以太网的覆盖范围扩展。本节先讨论在物理层把以太网扩展&#xff0c;然后讨论在数据链路层把以太网扩展。这种扩展的以太网在网络层看来仍然是一个网络。 在物理层扩展以太网 现在&#xff0c;扩展主机和集线器之间的距离的一种简单方法就是…

Spring源码十四:Spring生命周期

上一篇我们在Spring源码十三&#xff1a;非懒加载单例Bean中看到了Spring会在refresh方法中去调用我们的finishBeanFactoryInitialization方法去实例化&#xff0c;所有非懒加载器单例的bean。并实例化后的实例放到单例缓存中。到此我们refresh方法已经接近尾声。 Spring的生命…

【前端实现】在父组件中调用公共子组件:注意事项逻辑示例 + 将后端数组数据格式转换为前端对象数组形式 + 增加和删除行

【前端】在父组件中调用公共子组件的实现方法 写在最前面一、调用公共子组件子组件CommonRow.vue父组件ParentComponent.vue 二、实现功能1. 将后端数组数据格式转换为前端对象数组形式2. 增加和删除row 三、小结 &#x1f308;你好呀&#xff01;我是 是Yu欸 &#x1f30c; 2…

【论文解读】AGENTLESS:揭开基于LLM的软件工程代理的神秘面纱,重塑软件工程自动化新基线

&#x1f4dc; 文献卡 英文题目: Agentless: Demystifying LLM-based Software Engineering Agents;作者: Chunqiu Steven Xia; Yinlin Deng; Soren Dunn; Lingming ZhangDOI: 10.48550/arXiv.2407.01489摘要翻译: 大型语言模型&#xff08;LLM&#xff09;的最新进展显著推进…

nginx(三)—从Nginx配置熟悉Nginx功能

一、 Nginx配置文件结构 ... #全局块events { #events块... }http #http块 {... #http全局块server #server块{ ... #server全局块location [PATTERN] #location块{...}location [PATTERN] {...}}server{...}... #http全局块 …

智慧矿山建设规划方案(121页Word)

智慧矿山建设项目方案摘要 一、项目背景及现状分析 项目背景 随着信息技术的迅猛发展&#xff0c;智慧化、数字化已成为矿山行业转型升级的必然趋势。智慧矿山建设项目旨在通过集成先进的信息技术手段&#xff0c;实现对矿山生产、管理、安全等全过程的智能化监控与管理&…

Python统计实战:时间序列分析之一元线性回归预测和指数曲线预测

为了解决特定问题而进行的学习是提高效率的最佳途径。这种方法能够使我们专注于最相关的知识和技能&#xff0c;从而更快地掌握解决问题所需的能力。 &#xff08;以下练习题来源于《统计学—基于Python》。请在Q群455547227下载原始数据。&#xff09; 练习题 下表是某只股票…

大数的排列组合公式C代码

我们知道&#xff0c;计算排列A(n,m)和组合C(n,m)可以用先求阶乘的方式实现&#xff0c;但是当数很大时求阶乘很容易溢出&#xff0c;所以这里给出非阶乘的方式求排列组合 求排列 分母和分子可以抵消&#xff0c;最后代码如下 unsigned long long A(int n, int m) {unsigned…

代码随想录-Day49

300. 最长递增子序列 给你一个整数数组 nums &#xff0c;找到其中最长严格递增子序列的长度。 子序列 是由数组派生而来的序列&#xff0c;删除&#xff08;或不删除&#xff09;数组中的元素而不改变其余元素的顺序。例如&#xff0c;[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的 …

进程控制-fork函数

一个进程&#xff0c;包括代码、数据和分配给进程的资源。 fork &#xff08;&#xff09;函数通过系统调用创建一个与原来进程几乎完全相同的进程&#xff0c;也就是两个进程可以做完全相同的事&#xff0c;但如果初始参数或者传入的变量不同&#xff0c;两个进程也可以做不同…

第十六章 Qt的文件处理操作详解

目录 一、基本文件操作 二、二进制文件读写 三、文本文件读写 四、操作例子 1、QTextStream的流操作符 一、基本文件操作 文件操作是应用程序必不可少的部分。Qt 作为一个通用开发库,提供了跨平台的文件操作能力。在所有的 I/O 设备中,文件 I/O 是最重要的部分之…

InfluxDB时序数据库基本使用介绍

1、概要介绍 1.1、时序数据库使用场景 所谓时序数据库就是按照一定规则的时间序列进行数据读写操作的数据库。它们常被用于以下业务场景&#xff1a; 物联网IOT场景&#xff1a;可用于IOT设备的指标、状态监控数据存取。IT建设场景&#xff1a;可用于服务器、虚拟机、容器的…

linux下的网络编程

网络编程 1. 网络基础编程知识1.1网络字节序问题1.2 常用socket编程接口1.2.1 sockaddr1.2.2 ip地址转换函数1.2.4 socket()1.2.3 bind()1.2.4 listen()1.2.5 accept()1.2.6 connect() 1.3 以udp为基础的客户端连接服务器的demo1.4 以udp为基础的的服务器聊天室功能demo1.5 基于…

解决vscode配置C++编译带有中文名称报错问题

在新电脑上安装vscode运行带有中文路径和中文名称的C代码时遇到报错 根据别人的教程将laugh.json文件中"program": "${fileDirname}\\${fileBasenameNoExtension}.exe",改成了"program": "${fileDirname}\\output\\test.exe",&#x…

聊天广场(Vue+WebSocket+SpringBoot)

由于心血来潮想要做个聊天室项目 &#xff0c;但是仔细找了一下相关教程&#xff0c;却发现这么多的WebSocket教程里面&#xff0c;很多都没有介绍详细&#xff0c;代码都有所残缺&#xff0c;所以这次带来一个比较完整得使用WebSocket的项目。 目录 一、效果展示 二、准备工…