【pytorch19】交叉熵

news2024/9/22 17:22:39

分类问题的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.coloradmin.cn/o/1901583.html

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

相关文章

使用 ESP32-WROOM + DHT11 做个无屏温湿度计

最近梅雨天,有个房间湿度很大,而我需要远程查看温湿度,所以无所谓有没有显示屏,某宝上的温湿度计都是带屏的,如果连WIFI查看温湿度操作也比较麻烦,还需要换电池,实在不能满足我的需求&#xff0…

聊天广场(Vue+WebSocket+SpringBoot)

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

python自动化办公之cryptography加密解密

目录 用到的库 实现效果 代码部分 1、加密2024.txt文件 2、解密2024.txt文件 用到的库 cryptography 实现效果 加密文件和解密文件 代码部分 1、加密2024.txt文件 # 加密 from cryptography.fernet import Fernet # 生成加密密钥 keyFernet.generate_key() cipher_s…

robotframework-appiumLibrary 应用 - 实现 app 自动化

1、安装appiumLibrary第三方库 运行pip命令:pip install robotframework-appiumlibrary 若已安装,需要更新版本可以用命令:pip install -U robotframework-appiumlibrary 2、安装app自动化环境。 参考我的另外一篇专门app自动化环境安装的…

baomidou多数据源切换注解@DS没有效果

baomidou多数据源切换注解DS没有效果 <dependency><groupId>com.baomidou</groupId><artifactId>dynamic-datasource-spring-boot-starter</artifactId><version>3.1.1</version> </dependency> ##原因 方法上有Transaction…

Android Studio Run窗口中文乱码解决办法

Android Studio Run窗口中文乱码解决办法 问题描述&#xff1a; AndroidStudio 编译项目时Run窗口中文乱码&#xff0c;如图&#xff1a; 解决方法&#xff1a; 依次打开菜单&#xff1a;Help--Edit Custom VM Options&#xff0c;打开studio64.exe.vmoptions编辑框&#xf…

2.1 tmux和vim

文章目录 前言概述tmuxvim总结 前言 开始学习的时间是 2024.7.6 ,13&#xff1a;47 概述 最好多使用&#xff0c;练成条件反射式的 直接使用终端的工具&#xff0c;可以连接到服务器&#xff0c;不需要使用本地的软件 tmux 这个主要有两个功能&#xff0c;第一个功能是分…

macOS查看系统日志的方法

1、command空格键打开搜索框&#xff0c;输入‘控制台’并打开 2、选择日志报告&#xff0c;根据日期打开自己需要的文件就可以

【vue组件库搭建05】vitePress中使用vue/antd/demo预览组件

一、vitepress使用vue及antd组件 1.安装antd之后在docs\.vitepress\theme\index.ts引入文件 // https://vitepress.dev/guide/custom-theme import { h } from vue import type { Theme } from vitepress import DefaultTheme from vitepress/theme import ./style.css impor…

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

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

大厂面试官赞不绝口的后端技术亮点【后端项目亮点合集(2)】

本文将持续更新~~ hello hello~ &#xff0c;这里是绝命Coding——老白~&#x1f496;&#x1f496; &#xff0c;欢迎大家点赞&#x1f973;&#x1f973;关注&#x1f4a5;&#x1f4a5;收藏&#x1f339;&#x1f339;&#x1f339; &#x1f4a5;个人主页&#xff1a;绝命C…

【MYSQL】InnoDB引擎为什么选可重复读作为默认隔离级别

InnoDB引擎为什么选可重复读作为默认隔离级别 一般的DBMS系统&#xff0c;默认都会使用读提交&#xff08;Read-Comitted&#xff0c;RC&#xff09;作为默认隔离级别&#xff0c;如Oracle、SQL Server等&#xff0c;而MySQL却使用可重复读&#xff08;Read-Repeatable&#x…

一级指针 二级指针

目录 一级指针 二级指针 通过二级指针打印原数据 一级指针 一级指针就是存放变量的指针 代码演示&#xff1a; #include<stdio.h> int main() {int a 10;int* pa &a;return 0; } pa就是一级指针变量&#xff0c;是变量就会有地址&#xff0c;因为变量都是在…

Spring Boot 中的监视器是什么?有什么作用?

前言&#xff1a; 监听器相信熟悉 Spring、Spring Boot 的都知道&#xff0c;但是监视器又是什么&#xff1f;估计很多人一脸懵的状态&#xff0c;本篇分享一下 Spring Boot 的监视器。 Spring Boot 系列文章传送门 Spring Boot 启动流程源码分析&#xff08;2&#xff09; …

四端口千兆以太网交换机与 SFP 扩展功能

在数字化时代&#xff0c;网络基础设施的重要性日益凸显&#xff0c;它是企业和个人取得成功的关键支撑。配备 SFP 插槽的 4 端口千兆以太网交换机提供了一种灵活且可扩展的网络解决方案&#xff0c;能够应对快速的数据传输、低延迟以及不断增长的带宽需求。本篇文章深入探讨了…

轻松设置:服务器域名配置全攻略

目录 前置条件 在阅读本篇内容之前&#xff0c;请先确保以下物料已准备好&#xff1a; 一台公网服务器&#xff0c;服务正常运行申请完成的域名&#xff0c;在对应域名服务商后台正常DNS解析域名备案完成可选条件&#xff1a;有https访问请求时&#xff0c;需要申请SSL证书 …

Spring源码十三:非懒加载单例Bean

上一篇Spring源码十二&#xff1a;事件发布源码跟踪中&#xff0c;我们介绍了Spring中是如何使用观察者设计模式的思想来实现事件驱动开发的&#xff1a;实际上就是将所有监听器注册到广播器中&#xff0c;并通过监听该事件的监听器来处理时间的。结合前面十二篇文章我们将Spri…

关于linux服务器更改镜像后连接不上vscode问题

问题样子解决办法直接看 问题样子 问题描述&#xff1a;从centos换到ubantu后&#xff0c;xshell能直接连接上&#xff08;没有更改ssh配置信息&#xff09;&#xff0c;但是vscode连不上&#xff08;配置文件因为端口号和ip是一样的&#xff0c;也没法改&#xff09; 猜测…

这款新的 AI 语音助手击败了 OpenAI,成为 ChatGPT 最受期待的功能之一

OpenAI 推迟了 ChatGPT 令人印象深刻的语音模式&#xff0c;这让许多 AI 聊天机器人的粉丝感到不安&#xff0c;但他们现在可能已经被挖走了。法国人工智能开发商 Kyutai 推出了一款名为 Moshi 的实时语音 AI 助手。 Moshi 旨在通过语音&#xff08;如 Alexa 或 Google Assista…

207 课程表

题目 你这个学期必须选修 numCourses 门课程&#xff0c;记为 0 到 numCourses - 1 。 在选修某些课程之前需要一些先修课程。 先修课程按数组 prerequisites 给出&#xff0c;其中 prerequisites[i] [ai, bi] &#xff0c;表示如果要学习课程 ai 则 必须 先学习课程 bi 。 …