一 信息量

信息论当中的熵指的是信息量的混乱程度,也可以理解成信息量的大小。

举个简单的例子,以下两个句子,哪一个句子的信息量更大呢?

  1. 我今天没中彩票
  2. 我今天中彩票了

从文本上来看,这两句话的字数一致,描述的事件也基本一致,但是显然第二句话的信息量要比第一句大得多,原因也很简单,因为中彩票的概率要比不中彩票低得多。一个低概率的结果与一个高概率的结果相比,低概率的结果带来的信息量更大。

我们用对数函数来量化一个事件的信息量:

因为一个事件发生的概率取值范围在0到1之间,所以log(p(X))的范围是负无穷到0,我们加一个负号将它变成正值。画成函数大概是下面这个样子:

二 信息熵

现在我知道一个事件产生某个结果的自信息,我想知道这个事件平均带来多少自信息。对自信息s进行加权平均是很直观的。现在的问题是选择什么权重?因为我知道每个结果的概率,所以用概率作为权重是有意义的,因为这是每个结果应该发生的概率

我们上面的公式定义的是信息量,但是这里有一个问题,我们定义的只是事件X的一种结果的信息量。对于一个事件来说,它可能的结果可能不止一种。我们希望定义整个事件的信息量,其实也很好办,我们算下整个事件信息量的期望即可,这个期望就是信息熵。

期望的公式我们应该都还记得:

套入信息量的公式可以得到信息熵H(x):

对于某个事件,有n种可能性,每一种可能性都有一个概率p(xi) ,这样就可以计算出某一种可能性的信息量。举一个例子,假设你拿出了你的电脑,按下开关,会有三种可能性,下表列出了每一种可能的概率及其对应的信息量。

所以上面的问题结果就是 :

三 交叉熵

现在,如果每个结果的实际概率为 pi 却有人将概率估计为 qi怎么办。在这种情况下,每个事件都将以pi的概率发生,但是公式里的自信息就要改成qi(因为人们以为结果的概率是qi)。现在,在这种情况下,加权平均自信息就变为了交叉熵c,它可以写成:

交叉熵总是大于熵,并且仅在以下情况下才与熵相同 pi = qi,你可以观看 https://www.desmos.com/calculator/zytm2sf56e 的插图来帮助理解

交叉熵损失

    

紫色线代表蓝色曲线下的面积,估计概率分布(橙色线),实际概率分布(红色线)

在上面我提到的图中,你会注意到,随着估计的概率分布偏离实际/期望的概率分布,交叉熵增加,反之亦然。因此,我们可以说,最小化交叉熵将使我们更接近实际/期望的分布,这就是我们想要的。这就是为什么我们尝试降低交叉熵,以使我们的预测概率分布最终接近实际分布的原因。因此,我们得到交叉熵损失的公式为:

在只有两个类的二分类问题的情况下,我们将其命名为二分类交叉熵损失,以上公式变为:

从期望角度上理解来说,信息熵计算的是log(p)在p上的期望,交叉熵则是log(q)在p上的期望;换句话说,信息熵为事件的信息量关于其事件发生的概率分布的期望值,那么交叉熵可以认为是事件的信息量关于真实概率分布的期望值

四 交叉熵的应用

1.为什么要用交叉熵做loss函数?

在线性回归问题中,常常使用MSE(Mean Squared Error)作为loss函数,比如:

这里的m表示m个样本的,loss为m个样本的loss均值。
MSE在线性回归问题中比较好用,那么在逻辑分类问题中还是如此么?

2.交叉熵在单分类问题中的使用

这里的单类别是指,每一张图像样本只能有一个类别,比如只能是狗或只能是猫。
交叉熵在单分类问题上基本是标配的方法

上式为一张样本的loss计算方法,n代表着n种类别。

举例说明,比如有如下样本

对应一个batch的loss就是

m为当前batch的样本数

3.交叉熵在多分类问题中的使用

这里的多类别是指,每一张图像样本可以有多个类别,比如同时包含一只猫和一只狗
和单分类问题的标签不同,多分类的标签是n-hot。

有一张图,即有青蛙,又有老鼠,所以是一个多分类问题

值得注意的是,这里的Pred不再是通过softmax计算的了,这里采用的是sigmoid。将每一个节点的输出归一化到[0,1]之间。所有Pred值的和也不再为1。换句话说,就是每一个Label都是独立分布的,相互之间没有影响。所以交叉熵在这里是单独对每一个节点进行计算,每一个节点只有两种可能值,所以是一个二项分布。前面说过对于二项分布这种特殊的分布,熵的计算可以进行简化。
同样的,交叉熵的计算也可以简化,即

注意,上式只是针对一个节点的计算公式。这一点一定要和单分类loss区分开来。
例子中可以计算为:

单张样本的loss即为loss=loss猫+loss蛙+loss鼠

每一个batch的loss就是:

m为当前batch中的样本量,n为类别数。

单分类时,每张图片的损失是一个交叉熵,交叉熵针对的是所有类别(所有类别概率和是1)。 多分类时,每张图片的损失是N个交叉熵之和(N为类别数),交叉熵针对的是单个类别(单个类别概率和是1)。

[机器学习]理解熵,交叉熵和交叉熵的应用相关推荐

  1. 熵、相对熵、交叉熵等理解

    ** 信息量 ** 假设我们听到了两件事,分别如下: 事件A:巴西队进入了2018世界杯决赛圈. 事件B:中国队进入了2018世界杯决赛圈. 仅凭直觉来说,显而易见事件B的信息量比事件A的信息量要大. ...

  2. 【交叉熵损失函数】关于交叉熵损失函数的一些理解

    目录 0. 前言 1.损失函数(Loss Function) 1.1 损失项 1.2 正则化项 2. 交叉熵损失函数 2.1 softmax 2.2 交叉熵 0. 前言 有段时间没写博客了,前段时间主 ...

  3. LESSON 10.110.210.3 SSE与二分类交叉熵损失函数二分类交叉熵损失函数的pytorch实现多分类交叉熵损失函数

    在之前的课程中,我们已经完成了从0建立深层神经网络,并完成正向传播的全过程.本节课开始,我们将以分类深层神经网络为例,为大家展示神经网络的学习和训练过程.在介绍PyTorch的基本工具AutoGrad ...

  4. 平均符号熵的计算公式_交叉熵(Cross Entropy)从原理到代码解读

    交叉熵(Cross Entropy)是Shannon(香浓)信息论中的一个概念,在深度学习领域中解决分类问题时常用它作为损失函数. 原理部分:要想搞懂交叉熵需要先清楚一些概念,顺序如下:==1.自信息 ...

  5. 熵、联和熵与条件熵、交叉熵与相对熵是什么呢?来这里有详细解读!

    熵是一个很常见的名词,在物理上有重要的评估意义,自然语言处理的预备知识中,熵作为信息论的基本和重点知识,在这里我来记录一下学习的总结,并以此与大家分享. 信息论基本知识 1.熵 2.联和熵与条件熵 3 ...

  6. 信息论复习笔记(1):信息熵、条件熵,联合熵,互信息、交叉熵,相对熵

    文章目录 1.1 信息和信息的测量 1.1.1 什么是信息 1.1.1 信息怎么表示 1.2 信息熵 1.3 条件熵和联合熵 The Chain Rule (Relationship between ...

  7. 熵、联合熵、相对熵、交叉熵、JS散度、互信息、条件熵

    封面镇楼 目录 一.熵 二.联合熵 三.相对熵(KL散度) 四.交叉熵 五.JS散度 六.互信息 七.条件熵 八.总结 一.熵 对于离散型随机变量,当它服从均匀分布时,熵有极大值.取某一个值的概率为1 ...

  8. 熵、条件熵、联合熵、互信息的理解

    熵 在信息论中,熵(entropy)是表示随机变量不确定性的度量,如果一个事件是必然发生的,那么他的不确定度为0,不包含信息.假设 X X X是一个取有限个值的离散随机变量,其概率分布为: P ( X ...

  9. kl距离 java_信息量、熵、最大熵、联合熵、条件熵、相对熵、互信息。

    一直就对机器学习中各种XX熵的概念比较模糊,现在总结一下自己的学习心得. 信息量 先说一下信息量的概念,其实熵就是信息量的集合. 摘抄个例子: 英文有26个字母,假设每个字母出现的概率是一样的,每个字 ...

  10. 【熵与特征提取】从近似熵,到样本熵,到模糊熵,再到排列熵,究竟实现了什么?(第一篇)——近似熵及其MATLAB实现

    在特征提取领域,近似熵.样本熵.排列熵和模糊熵是比较经常出现的概念. 首先一句话总结一下:这几个熵值都是用来表征信号序列复杂程度的无量纲指标,熵值越大代表信号复杂度越大.信号复杂程度的表征在机械设备状 ...

最新文章

  1. centos7上开启单用户模式
  2. Jon Person教你如何用.NET/.NETCF写GPS应用程序。
  3. 寄存器分配图着色_富士苹果促进着色技术八大要点!是时候看看了!
  4. #define | enum(enumerator)
  5. leetcode 81. 搜索旋转排序数组 II(二分查找)
  6. 程序员如何学习更好的知识_如何保持学习并成为更好的程序员
  7. Mac安装metasploit-framework【亲测有用】
  8. java 中反射的使用_java中反射的基本使用
  9. python如何导入hotp库_Google Authenticator在Python中的实现
  10. hashmap扩容_原创 | 我说我了解集合类,面试官竟然问我为啥HashMap的负载因子不设置成1!?
  11. EXCEL制作行政区地图,小O地图EXCEL版发布新版本
  12. STM32基础8--通用定时器(PWM控制LED)
  13. win10如何扩大c盘空间【系统天地】
  14. Unity3D学习——使用PUN写一个聊天功能
  15. UNIX网络编程---守护进程和inetd超级服务器(十三)
  16. MOOC 哈工大苏小红C语言 第七周练兵区——编程题
  17. SKlearn中的函数学习总结(持续更新)
  18. 最简单DIY基于ESP8266的智能彩灯②(在网页用按键和滑动条控制RGB灯)
  19. 洛谷 P2350 [HAOI2012]外星人(素因子分解,欧拉函数)
  20. IDEA全局搜索快捷键(ctrl+shift+F)失效修复

热门文章

  1. 腾讯 Omi 团队发布 mps - 原生小程序插上 JSX 、Less 和 Cloud 的翅膀
  2. Jmeter中使用循环如何保证数据不重复
  3. CoreOS上的Fleet,第二部分
  4. 2.平凡之路-初识MyBatis
  5. LoRa创始成员“叛逃” NB-IoT要一统物联网?
  6. Oracle工具之--ASM与文件系统及跨网络传输文件
  7. ListBox实现拖拽排序功能
  8. Redhat安装tftp的方法
  9. Video : 将使用AD认证的SharePoint网站配置为表单方式登录
  10. taskspawn函数 linux,vxworks的启动任务taskSpawn