熵、交叉熵和KL散度的基本概念和交叉熵损失函数的通俗介绍

让我们试着去理解最广泛使用的损失函数-交叉熵。

交叉熵(也称为对数损失)是分类问题中最常用的损失函数之一。但是,由于当今庞大的库和框架的存在以及它们的易用性,我们中的大多数人常常在不了解熵的核心概念的情况下着手解决问题。所以,在这篇文章中,让我们看看熵背后的基本概念,把它与交叉熵和KL散度联系起来。我们还将查看一个使用损失函数作为交叉熵的分类问题的示例。

什么是熵?

为了开始了解熵到底指的是什么,让我们深入了解信息理论的一些基础知识。在这个数字时代,信息是由位(0和1)组成的。在通信时,有些位是有用的,有些是多余的,有些是错误的,等等。当我们传递信息时,我们希望尽可能多地向接收者传递有用的信息。

在Claude Shannon的论文“通信数学理论(1948)”中,他指出传输1位信息意味着将接收者的不确定性降低2倍。

让我们看看他是什么意思。例如,假设一个地方的天气是随机的,每天都有50-50个晴天或下雨的机会。 

 现在,如果一个气象站告诉你明天会下雨,那么他们已经把你的不确定性降低了2倍。起初,有两种可能性相同,但在收到气象站的最新消息后,我们只有一种可能性。在这里,气象台给我们发送了一点有用的信息,不管他们如何编码这些信息,这都是真的。

即使发送的消息是“未雨绸缪”的,每个字符占用一个字节,消息的总大小对应40位,但它们仍然只传递1位有用信息。

假设天气有8种可能的状态,所有的可能性都一样。 

 现在,当气象台给你第二天的天气时,他们会把你的不确定性降低8倍。由于每个事件都有1/8的机会发生,因此折减系数为8。 

 但如果可能性不一样呢?比如说,75%的几率是晴天,25%的几率是雨天。 

 现在,如果气象台说第二天会下雨,那么你的不确定性就降低了4倍,这是2位信息。不确定性的降低只是事件概率的倒数。在这种情况下,25%的反比是4,对数(4)到基2等于2。所以,我们得到了2位有用的信息。 

 如果气象台说第二天会是晴天,那么我们就能得到0.41位有用的信息。那么,我们平均要从气象站得到多少信息呢?

好吧,有75%的可能性明天会是晴天,这给了你0.41比特的信息,25%的可能性明天会下雨,这给了你2比特的信息,这相当于, 

 我们平均每天从气象站得到0.81位信息。所以,我们刚才计算的是熵。这是一个很好的衡量事件有多不确定的指标。它是由, 

熵的方程现在完全有意义了。它测量你每天学习天气时得到的平均信息量。一般来说,它给出了我们从一个给定概率分布的样本中得到的平均信息量,它告诉我们概率分布是多么不可预测。

如果我们生活在一个每天都是晴天的沙漠中间,平均来说,我们每天从气象站得不到多少信息。熵将接近于零。另一方面,如果天气变化很大,熵就会大得多。

交叉熵

现在,我们来谈谈交叉熵。它只是平均消息长度。考虑到8种可能的天气条件的相同示例,所有这些条件都同样可能,每个条件都可以使用3位编码。 

 这里的平均消息长度是3,这就是交叉熵。但现在,假设你生活在一个阳光充足的地区,那里的天气概率分布如下: 

 每天有35%的可能性是晴天,只有1%的可能性是雷雨。所以,我们可以计算这个概率分布的熵,

Entropy = -(0.35 * log(0.35) + 0.35 * log(0.35) + 0.1 * log(0.1) + 0.1 * log(0.1) + 0.04 * log(0.04) + 0.04 * log(0.04) + 0.01 * log(0.01) + 0.01 * log(0.01))

Entropy = 2.23 bits

注意,这里使用的二元的记录。

所以,平均来说,气象台发送3位,但收信人只能得到2.23个有用的位。我们可以做得更好。

例如,让我们这样更改代码: 

 我们现在只使用2位表示晴天或部分晴天,3位表示多云和大部分多云,4位表示小雨和中雨,5位表示大雨和雷雨。天气的编码方式是明确的,如果你链接多条信息,只有一种方法可以解释比特序列。例如,01100只能表示部分晴天,然后是小雨。所以,如果我们计算电台每天发送的平均比特数,

35%*2 + 35%*2 + 10%*3 + 10%* 3+ 4%*4 + 4%*4 + 1%*5 + 1%*5 = 2.42 bits

这是我们的新的和改进的交叉熵,比之前的3位要好。现在,假设我们在不同的地方使用相同的代码,那里的天气正好相反,而且大部分时间都在下雨。 

我们计算交叉熵,

1%*2 + 1%*2 + 4%*3 + 4%* 3+ 10%*4 + 10%*4 + 35%*5 + 35%*5 = 4.58 bits

我们得到4.58比特。大约是熵的两倍。平均而言,电台发送4.58位,但只有2.23位对接收者有用。它发送的信息是每条消息所需信息的两倍。这是因为我们使用的代码对天气分布做了一些隐含的假设。例如,当我们对晴天使用2位消息时,我们隐式地预测晴天的概率为25%。这是因为负二元对数(0.25)给出2。

同样,我们计算所有的天气条件。

 分母中2的幂对应于用于传输消息的位数。现在,很明显,预测的分布q与真实的分布p有很大的不同。

因此,现在我们可以将交叉熵表示为真概率分布p和预测概率分布q的函数,其表示为:

 

 

注意,我们示例中使用的是以2为基数的。

如你所见,它看起来与熵方程非常相似,除了我们在这里使用预测概率的对数。如果我们的预测是完美的,即预测分布等于真分布,那么交叉熵就是简单的熵。但是,如果分布不同,那么交叉熵将比熵大一些位。交叉熵超过熵的量称为相对熵,或者更常见的称为Kullback-Leibler散度(KL散度)。简而言之, 

 从上面的例子,我们得到K-L散度=交叉熵 - 熵=4.58–2.23=2.35位。

应用

现在,让我们在应用程序中使用交叉熵。考虑到我们正在训练一个图像分类器来对外观基本相似的不同动物进行分类,例如浣熊、小熊猫、狐狸等等。 

 因此,对于可能的7个类中的每一个,分类器估计一个概率,这称为预测分布。由于这是一个有监督的学习问题,我们知道真实的分布。

在上面的例子中,我拍摄了一只浣熊的图像,所以在真实分布中,它的概率是100%,其他的概率是0。我们可以用这两种分布之间的交叉熵作为代价函数,称之为交叉熵损失。

这只是我们前面看到的方程,除了它通常使用自然对数而不是二元对数。这对于训练来说并不重要,因为二元对数(x)等于自然对数(x)/log(2),其中分母是常数。

因此,当类概率被称为一个热向量时(这意味着一个类有100%,其余的都是0),那么交叉熵就是真类估计概率的负对数。

在这个例子中,交叉熵=1*log(0.3)=-log(0.3)=1.203

现在,当真类的预测概率接近0时,代价将变得非常大。但当预测概率接近1时,成本函数接近于0。

由于得到的损失较多(由于预测的分布太低),我们需要为每一类训练更多的例子来减少损失量。

结论

我们以气象站更新次日天气为例,了解香农信息论的概念。然后我们把它与熵和交叉熵联系起来。最后,我们以一个例子来说明交叉熵损失函数的实际应用。希望本文能澄清熵、交叉熵和KL散度背后的基本概念及其相互关系。

 

本文转载自:https://zhuanlan.zhihu.com/p/150774518

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


python方向·数据分析   ·自然语言处理nlp   案例:中文分词·社交网络分析      案例:人物关系分析·人工智能·深度学习·计算机视觉案例:行人检测·网络爬虫·量化交易          案例:多因子策略模型 
原文地址http://blog.sina.com.cn/s/blog_574a437f01019poo.html昨天实验室一位刚进组的同学发邮件来问我如何查找学术论文,这让我想起自己刚读研究生时茫然四顾的情形:看着学长们高谈阔论领域动态,却不知如何入门。经过研究生几年的耳濡目染,现在终于能自信地知道去哪儿了解最新科研
ptb数据集是语言模型学习中应用最广泛的数据集,常用该数据集训练RNN神经网络作为语言预测,tensorflow对于ptb数据集的读取也定义了自己的函数库用于读取,在python1.0定义了models文件用于导入ptb库函数,然而当python升级后,导入models文件时就会出现:ModuleNotFountError错误,这时需
 Newtonsoft.JsonNewtonsoft.Json是.Net平台操作Json的工具,他的介绍就不多说了,笔者最近在弄接口,需要操作Json。以某个云计算平台的Token为例,边操作边讲解。Json转为Model将Model转为Json将LINQ转为JSONLinq操作命名空间、类型、方法大全 Json转为Model 
NLP(NaturalLanguageProcessing)自然语言处理是人工智能的一个子领域,它是能够让人类与智能机器进行沟通交流的重要技术手段,同时也是人工智能中最为困难的问题之一。因此,NLP的研究处处充满魅力和挑战,也因此被称为人工智能“皇冠上的明珠”。目前各家主流深度学习框架,都开放了相应
做一个中文文本分类任务,首先要做的是文本的预处理,对文本进行分词和去停用词操作,来把字符串分割成词与词组合而成的字符串集合并去掉其中的一些非关键词汇(像是:的、地、得等)。再就是对预处理过后的文本进行特征提取。最后将提取到的特征送进分类器进行训练。一、什么是自然语言处
NLP(NaturalLanguageProcessing)自然语言处理是人工智能的一个子领域,它是能够让人类与智能机器进行沟通交流的重要技术手段,同时也是人工智能中最为困难的问题之一。因此,NLP的研究处处充满魅力和挑战,也因此被称为人工智能“皇冠上的明珠”。目前各家主流深度学习框架,都开放了相应
编者注:文中超链接如果不能访问可以点击“阅读原文”访问本文原页面;可以参考2018年5月21-24日伦敦Strata数据会议上的教学辅导课《使用spaCy和SparkNLP进行自然语言理解》。本系列博客的目地是通过使用两个领先的生产级语言处理库(JohnSnowLabs的ApacheSparkNLP和Explosion
NLP文本相似度相似度相似度度量:计算个体间相似程度相似度值越小,距离越大,相似度值越大,距离越小最常用--余弦相似度:​一个向量空间中两个向量夹角的余弦值作为衡量两个个体之间差异的大小余弦值接近1,夹角趋于0,表明两个向量越相似如果向量a和b不是二维而是n维​
0.原文NLP系列(6)_从NLP反作弊技术看马蜂窝注水事件-寒小阳-CSDN博客https://blog.csdn.net/han_xiaoyang/article/details/842057011.马蜂窝是否有大量抄袭点评1.1先用词袋模型快速筛选一批相似点评词袋子模型是一种非常经典的文本表示。顾名思义,它就是将字符串视为
地址:https://gitbook.cn/books/5c7888e1a19247277cb5c313/index.html深度学习优势总结:手工特征耗时耗力,还不易拓展自动特征学习快,方便拓展深度学习提供了一种通用的学习框架,可用来表示世界、视觉和语言学信息深度学习既可以无监督学习,也可以监督学习在DeepNLP
本文将分享发表在2018年的NAACL上,outstandingpaper。论文链接ELMo。该论文旨在提出一种新的词表征方法,并且超越以往的方法,例如word2vec、glove等。论文贡献点能捕捉到更复杂的语法、语义信息。能更好的结合上下文内容,对多义词做更好的表征。(以往的词表征方法,例如word2ve
时间:2016年1月。出处:http://blog.csdn.net/longxinchen_ml/article/details/50597149http://blog.csdn.net/han_xiaoyang/article/details/50616559声明:版权所有,转载请联系作者并注明出处##1.引言贝叶斯方法是一个历史悠久,有着坚实的理论基础的方法,同时处理很多问题时
NLP的工程化,不是一个个算法的累积,也不是一个个任务的独立优化,而应该是系统工程,综合考虑语言、计算、场景等多种因素,不断演进融合,寻求效果满意解的过程。根据赫伯特.西蒙(图灵奖和诺贝尔奖双料得主)的有限理性模型,受到所处环境的高度复杂性和有限的信息加工能力限制,因此NLP应用
继NLP之后,我又开了ML这个大坑。这是因为NLP涉及到太多的ML模型,仅仅拿过来用的话,我实现的HanLP已经快到个人极限了。而模型背后的原理、如何优化、如何并行化等问题,都需要寻根求源才能解决。所以我找了个书单自学,电子书为主,顺便分享出来。 ML书单│  李航.统计学习方法.
少玩ai,人工智能,nlp,tensorflow之类的玄学,多学学基础,三大浪漫,C++,搞开发,千万不要变成调参侠
 0.introductionGAN模型最早由IanGoodfellowetal于2014年提出,之后主要用于signalprocessing和naturaldocumentprocessing两方面,包含图片、视频、诗歌、一些简单对话的生成等。由于文字在高维空间上不连续的问题(即任取一个wordembedding向量不一定能找到其所对应的文字),GA
自然语言处理Firstatall 因为本人换系统之前都在用oneNote,在ubuntu上部署不便,所以将一些常用的信息写成博客 本文主要引用Ruder大神的NLP-proress做了一下翻译和提取原文地址:传送门1.前沿技术StateoftheArt 机器学习和自然语言处理(NLP)的研究近来发展
北风网-人工智能就业班培训链接:https://pan.baidu.com/s/128DJgMY9G-fjzRAxq1QO-w  提取码:ngwi课程体系阶段一、人工智能基础-高等数学必知必会本阶段主要从数据分析、概率论和线性代数及矩阵和凸优化这四大块讲解基础,旨在训练大家逻辑能力,分析能力。拥有良好的数学基础,有利