1.介绍:

当我们开发一个分类模型的时候,我们的目标是把输入映射到预测的概率上,当我们训练模型的时候就不停地调整参数使得我们预测出来的概率和真是的概率更加接近。

这篇文章我们关注在我们的模型假设这些类都是明确区分的,假设我们是开发一个二分类模型,那么对应于一个输入数据,我们将他标记为要么绝对是正,要么绝对是负。比如,我们输入的是一张图片,来判断这张图片是苹果还是梨子。

在训练过程中,我们可能输入了一张图片表示的是苹果,那么对于这张输入图片的真实概率分布为y=(苹果:1,梨子:0),但是我们的模型可能预测出来的是另一种概率分布y`(苹果:0.4,梨子:0.6),然后我们发现了在这张输入图片上的真实概率分布和预测出来的概率分布差别很大,所以我们要调整参数,来使得这两个分布更加接近。

但是我们怎么定义这个接近呢?也就是我们如何去衡量y,y`的接近程度?

在这里我们介绍一下一种衡量方式交叉熵(Cross-Entropy),然后说明一下为什么这种方式适用于分类问题。

2.熵(Entropy):

熵的概念来自物理中的热力学,表示热力学系统中的无序程度,我们说的熵是信息论中的熵,表示对不确定性的测量,熵越高,能传输的信息越多,熵越少,传输的信息越少。举个例子说,当你站在一条公路旁边,看着车流来来往往,然后,你想告诉你的朋友每个车型号,但是只有一个二进制的信道,仅仅可以传输0,1序列,然后这个通讯相当的昂贵,十元1bit。你需要很多个二进制序列来表示每一个车型号。那么你该怎么来编码这些车的型号呢?会使用相同长度的bit来表示丰田Camry和奥迪Q7么? 当然不会了,因为你知道丰田Camry比奥迪Q7普遍多了,所以你会用更少的bit来编码丰田。换成数学的角度来看,其实就是我们把这个随便经过一个车,把这个车是丰田Camry还是奥迪Q7看成随机事件,用随机变量X表示,所以我们在做的就是用X的分布来减少我们发送的bit的平均长度。

也就是我们现在有了观测到的概率分布y,y_i = P(X=x_i)。我们要使用平均最小的bit,所以我们应该为x_i 分配log(1/y_i) 个比特。对所有的x_i 我们都有一个对应的最小需要分配的bit长度,那么我们对这个log(1/y_i)求期望也就得到了X的熵的定义了:

3.交叉熵(Cross-Entropy):

假如说我们用这个分布来作为我们来对事件编码的一个工具,熵就衡量了我们用这个正确的分布y来对事件编码所能用的最小的bit 长度,我们不能用更短的bit来编码这些事件或者符号了。

相对的,交叉熵是我们要对y这个分布去编码,但是我们用了一些模型估计分布y`。这里的话通过y`这个分布我们得到的关于x_i的最小编码长度就变成了log(1/y`_i),但是呢,我们的期望仍是关于真是分布y的。所以交叉熵的定义就变成了:

交叉熵是大于等于熵的,因为我们使用了错误的分布y`会带来更多的bit使用。当y和y`相等的时候,交叉熵就等于熵了。

4.KL 松散度(KL Divergence):

KL松散度和交叉熵的区别比较小,KL松散度又叫做相对熵,从定义很好看出区别:

这个意思就是说我们要编码一个服从y分布的随机变量,假设我们使用了一些数据估计出来这个随机变量的分布是y`,那么我们需要用比真实的最小bit多多少来编码这个随机变量。这个值是大于等于0的,并且当,y和y`相等的时候才为0。注意这里对交叉熵求最小和对KL松散度求最小是一样的。也就是我们要调整参数使得交叉熵和熵更接近,KL松散度越接近0,也就是y`越接近y。

5.预测:

通过上面的描述和介绍,我们应该很高兴使用交叉熵来比较两个分布y,y`之间的不同,然后我们可以用所有训练数据的交叉熵的和来作为我们的损失,假如用n来表示我们训练数据的数量,则损失loss为:

来对这个函数求最小值我们就可以求到最好的参数来使得y和y`最接近。

6.似然(Likelihood):

我们来看看另一种关于两个分布之间差异的测量标准–似然,这种标准更加直接,似然越大说明两个分布越接近,在分类问题中,我们会选择那些多数时候预测对了的模型。因为我们总是假设所有的数据点都是独立同分布的,对于所有数据的似然就可以定义为所有单个数据点的似然的乘积:

对于第n个数据他的似然怎么算呢?其实很简单,就是简单的y*y,来看一下我们最初的那个例子y={苹果:1,梨子:0},y`={苹果:0.4,梨子:0.6},所以似然就等于:

所以这里我们是不是可以考虑一下使用极大似然估计法来求最优参数呢?也就是求似然函数的极大值点。我们来对这个似然函数动一点点手脚。

我们知道对数函数使连续单调函数,我们要求似然函数的极大值等同于我们要求对数似然函数的极大值,然后我们取一个负,就等同于求负对数似然函数的极小值:

这样,我们就可以把似然函数中的累积连乘变成累加了。而且我们知道我们的观测结果y中两个元素必有一个元素是1,另一个元素是0.则对数似然函数为:

然后我们看看所有的数据的负对数似然:

看着有没有一点眼熟?这就是我们上面的所有数据的交叉熵:

7.总结:

当我们做一个分类模型的时候,我们需要一种方法去衡量真实概率分布y和预测概率分布y`之间的差异,然后在训练过程中调整参数来减小这个差异。在这篇文章中我们可以看到交叉熵是一种不错的可行的选择,通过上面的这些等式可以看到,我们求交叉熵的极小值也就等同于我们求负对数似然的极小值。

熵(Entropy),交叉熵(Cross-Entropy),KL-松散度(KL Divergence)的更多相关文章

  1. [转]熵(Entropy),交叉熵(Cross-Entropy),KL-松散度(KL Divergence)

    https://www.cnblogs.com/silent-stranger/p/7987708.html 1.介绍: 当我们开发一个分类模型的时候,我们的目标是把输入映射到预测的概率上,当我们训练 ...

  2. 熵、交叉熵、相对熵(KL 散度)意义及其关系

    熵:H(p)=−∑xp(x)logp(x) 交叉熵:H(p,q)=−∑xp(x)logq(x) 相对熵:KL(p∥q)=−∑xp(x)logq(x)p(x) 相对熵(relative entropy) ...

  3. 最大似然估计 (Maximum Likelihood Estimation), 交叉熵 (Cross Entropy) 与深度神经网络

    最近在看深度学习的"花书" (也就是Ian Goodfellow那本了),第五章机器学习基础部分的解释很精华,对比PRML少了很多复杂的推理,比较适合闲暇的时候翻开看看.今天准备写 ...

  4. 深度学习中交叉熵和KL散度和最大似然估计之间的关系

    机器学习的面试题中经常会被问到交叉熵(cross entropy)和最大似然估计(MLE)或者KL散度有什么关系,查了一些资料发现优化这3个东西其实是等价的. 熵和交叉熵 提到交叉熵就需要了解下信息论 ...

  5. [ch03-02] 交叉熵损失函数

    系列博客,原文在笔者所维护的github上:https://aka.ms/beginnerAI, 点击star加星不要吝啬,星越多笔者越努力. 3.2 交叉熵损失函数 交叉熵(Cross Entrop ...

  6. 交叉熵理解:softmax_cross_entropy,binary_cross_entropy,sigmoid_cross_entropy简介

    cross entropy 交叉熵的概念网上一大堆了,具体问度娘,这里主要介绍深度学习中,使用交叉熵作为类别分类. 1.二元交叉熵 binary_cross_entropy 我们通常见的交叉熵是二元交 ...

  7. 『TensorFlow』分类问题与两种交叉熵

    关于categorical cross entropy 和 binary cross entropy的比较,差异一般体现在不同的分类(二分类.多分类等)任务目标,可以参考文章keras中两种交叉熵损失 ...

  8. 【转】TensorFlow四种Cross Entropy算法实现和应用

    http://www.jianshu.com/p/75f7e60dae95 作者:陈迪豪 来源:CSDNhttp://dataunion.org/26447.html 交叉熵介绍 交叉熵(Cross ...

  9. 交叉熵(Cross-Entropy) [转载]

    交叉熵(Cross-Entropy) 交叉熵是一个在ML领域经常会被提到的名词.在这篇文章里将对这个概念进行详细的分析. 1.什么是信息量? 假设X是一个离散型随机变量,其取值集合为X,概率分布函数为 ...

随机推荐

  1. Java常用类(三)之StringBuffer与StringBuidler

    前言 前面一篇给大家介绍了String类,这个我们经常会用到的一个类,那这一篇给大家分享的是StringBuffer与StringBuidler.等下我也会比较他们三个之间的区别 一.StringBu ...

  2. 超级简单的retrofit使用自签名证书进行HTTPS请求的教程

    1. 前言 HTTPS越来越成为主流,谷歌从 2017 年起,Chrome 浏览器将也会把采用 HTTP 协议的网站标记为「不安全」网站:苹果从 2017 年 iOS App 将强制使用 HTTPS: ...

  3. Servlet 笔记-过滤器

    Servlet 过滤器可以动态地拦截请求和响应,以变换或使用包含在请求或响应中的信息. 可以将一个或多个 Servlet 过滤器附加到一个 Servlet 或一组 Servlet.Servlet 过滤 ...

  4. SPARK 创建新任务

    1.应用程序创建 SparkContext 的实例 sc 2.利用 SparkContext 的实例来创建生成 RDD 3.经过一连串的 transformation 操作,原始的 RDD 转换成为其 ...

  5. 读书笔记之《深入理解Java虚拟机》不完全学习总结

    写在前面: 之所以称作不完全总结,因为我其实没有完完全全地看完此书,但是涵盖了大部分重要章节:同时以下总结是我自己认为很重要知识,细枝末节处难免遗漏,还请详细参考原著. 转载请注明原文出处:http: ...

  6. 容器与Docker简介(三)Docker相关术语——微软微服务电子书翻译系列

    本节列出了在更加深入Docker之前应该熟悉的术语和定义. 有关详细的定义,请参阅Docker提供的术语表. 容器镜像(Container image):具有创建容器所需要的所有依赖和信息的包. 镜像 ...

  7. Linux下Crontab定时任务的使用教程 以及 无法执行定时任务的解决方案

     前言 本文学习思路:Linux的corntab定时任务的使用教程  --> 定时任务无效的解决方案  Linux的corntab定时任务的使用教程 1. 首先,输入命令 打开crontab定时 ...

  8. js日期倒计时效果

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  9. session设置过期的方法(转载)

    这篇文章主要介绍了php中实现精确设置session过期时间的方法,需要的朋友可以参考下   大多数据情况下我们对于session过期时间使用的是默认设置的时间,而对于一些有特殊要求的情况下我们可以设 ...

  10. HDU 6112 今夕何夕

    今夕何夕 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...