前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >一文搞懂交叉熵在机器学习中的使用,透彻理解交叉熵背后的直觉

一文搞懂交叉熵在机器学习中的使用,透彻理解交叉熵背后的直觉

作者头像
AI科技大本营
发布于 2018-07-23 09:51:56
发布于 2018-07-23 09:51:56
2.8K0
举报

作者 | 田思洋(北京科技大学在读博士生,主要研究方向图像识别,表面检测)

▌关于交叉熵在loss函数中使用的理解

交叉熵(cross entropy)是深度学习中常用的一个概念,一般用来求目标与预测值之间的差距。以前做一些分类问题的时候,没有过多的注意,直接调用现成的库,用起来也比较方便。最近开始研究起对抗生成网络(GANs),用到了交叉熵,发现自己对交叉熵的理解有些模糊,不够深入。遂花了几天的时间从头梳理了一下相关知识点,才算透彻的理解了,特地记录下来,以便日后查阅。

信息论

交叉熵是信息论中的一个概念,要想了解交叉熵的本质,需要先从最基本的概念讲起。

1 信息量

首先是信息量。假设我们听到了两件事,分别如下:

事件A:巴西队进入了2018世界杯决赛圈。

事件B:中国队进入了2018世界杯决赛圈。

仅凭直觉来说,显而易见事件B的信息量比事件A的信息量要大。究其原因,是因为事件A发生的概率很大,事件B发生的概率很小。所以当越不可能的事件发生了,我们获取到的信息量就越大。越可能发生的事件发生了,我们获取到的信息量就越小。那么信息量应该和事件发生的概率有关。

假设X是一个离散型随机变量,其取值集合为χ,概率分布函数

,定义事件

的信息量为:

由于是概率所以

的取值范围是[0,1],绘制为图形如下:

可见该函数符合我们对信息量的直觉

2 熵

考虑另一个问题,对于某个事件,有n种可能性,每一种可能性都有一个概率p(xi)。

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

注:文中的对数均为自然对数

我们现在有了信息量的定义,而熵用来表示所有信息量的期望,即:

其中n代表所有的n种可能性,所以上面的问题结果就是

然而有一类比较特殊的问题,比如投掷硬币只有两种可能,字朝上或花朝上。买彩票只有两种可能,中奖或不中奖。我们称之为0-1分布问题(也叫二项分布),对于这类问题,熵的计算方法可以简化为如下算式:

3 相对熵(KL散度)

相对熵又称KL散度,如果我们对于同一个随机变量 x 有两个单独的概率分布 P(x) 和 Q(x),我们可以使用 KL 散度(Kullback-Leibler (KL) divergence)来衡量这两个分布的差异

维基百科对相对熵的定义

In the context of machine learning, DKL(P‖Q) is often called the information gain achieved if P is used instead of Q.

即如果用P来描述目标问题,而不是用Q来描述目标问题,得到的信息增量。

机器学习中,P往往用来表示样本的真实分布,比如[1,0,0]表示当前样本属于第一类。Q用来表示模型所预测的分布,比如[0.7,0.2,0.1]

直观的理解就是如果用P来描述样本,那么就非常完美。而用Q来描述样本,虽然可以大致描述,但是不是那么的完美,信息量不足,需要额外的一些“信息增量”才能达到和P一样完美的描述。如果我们的Q通过反复训练,也能完美的描述样本,那么就不再需要额外的“信息增量”,Q等价于P。

KL散度的计算公式:

(3.1)

n为事件的所有可能性。

DKL的值越小,表示q分布和p分布越接近。

4 交叉熵

对式3.1变形可以得到:

等式的前一部分恰巧就是p的熵,等式的后一部分,就是交叉熵:

在机器学习中,我们需要评估label和predicts之间的差距,使用KL散度刚刚好,即

,由于KL散度中的前一部分

不变,故在优化过程中,只需要关注交叉熵就可以了。所以一般在机器学习中直接用交叉熵做loss,评估模型。

▌机器学习中交叉熵的应用

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

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

这里的m表示m个样本的,loss为m个样本的loss均值。

MSE在逻辑回归问题中比较好用,那么在分类问题中还是如此么?

让我们来看一下不同loss的函数曲线:

首先所有节点输出都用的softmax

分别拿一个样本来做示例,首先是使用MSE的loss

其中

都是常数,loss简化为:

,

绘图如下

显然,这个函数是非凸的,对优化问题来讲,不太好优化,容易陷入局部极值点。

再来看使用交叉熵的loss

由于one-hot标签的特殊性,一个1,剩下全是0,loss可以简化为:

绘制曲线如下:

曲线是一个凸函数,自变量的取值范围是[0,1]。凸函数便于梯度下降反向传播,便于优化。所以一般针对分类问题采用交叉熵作为loss函数

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

这里的单类别是指,每一张图像样本只能有一个类别,比如只能是狗或只能是猫。

交叉熵在单分类问题上基本是标配的方法

上式为一张样本的loss计算方法。式2.1中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为类别数。

▌总结

路漫漫,要学的东西还有很多啊。

参考:

  • https://www.zhihu.com/question/65288314/answer/244557337
  • https://en.wikipedia.org/wiki/Kullback%E2%80%93Leibler_divergence
  • https://jamesmccaffrey.wordpress.com/2013/11/05/why-you-should-use-cross-entropy-error-instead-of-classification-error-or-mean-squared-error-for-neural-network-classifier-training/

来源:田思洋的CSDN博客 https://blog.csdn.net/tsyccnh/article/details/79163834 作者GitHub地址: https://github.com/tsycnh

——【完】——

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-07-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AI科技大本营 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
深度学习 | 交叉熵损失函数
任何事件都会承载着一定的信息量,包括已经发生的事件和未发生的事件,只是它们承载的信息量会有所不同。如昨天下雨这个已知事件,因为已经发生,是既定事实,那么它的信息量就为0。如明天会下雨这个事件,因为未有发生,那么这个事件的信息量就大。
Justlovesmile
2021/12/14
2.7K0
一文理解机器学习中的各种熵
自信息公式 事件的不确定性越大(概率 pi 越小),自信息 I(pi) 越大。 比如买彩票,中彩票的自信息大,而不中彩票的自信息小。
echobingo
2018/08/09
8540
一文理解机器学习中的各种熵
你是否有过疑问:为啥损失函数很多用的都是交叉熵(cross entropy)?
我们都知道损失函数有很多种:均方误差(MSE)、SVM的合页损失(hinge loss)、交叉熵(cross entropy)。这几天看论文的时候产生了疑问:为啥损失函数很多用的都是交叉熵(cross entropy)?其背后深层的含义是什么?如果换做均方误差(MSE)会怎么样?下面我们一步步来揭开交叉熵的神秘面纱。
zenRRan
2019/05/13
6.9K0
你是否有过疑问:为啥损失函数很多用的都是交叉熵(cross entropy)?
交叉熵
仅凭直觉来说,显而易见事件B的信息量比事件A的信息量要大。究其原因,是因为事件A发生的概率很大,事件B发生的概率很小。
小小杨
2021/10/13
4940
详解机器学习中的熵、条件熵、相对熵、交叉熵
目录 信息熵 条件熵 相对熵 交叉熵 总结 一 信息熵 (information entropy) 熵 (entropy) 这一词最初来源于热力学。1948年,克劳德·爱尔伍德·香农将热力学中的熵引入信息论,所以也被称为香农熵 (Shannon entropy),信息熵 (information entropy)。本文只讨论信息熵。首先,我们先来理解一下信息这个概念。信息是一个很抽象的概念,百度百科将它定义为:指音讯、消息、通讯系统传输和处理的对象,泛指人类社会传播的一切内容。那信息可以被量化么?可以的!
磐创AI
2018/04/24
1.8K0
详解机器学习中的熵、条件熵、相对熵、交叉熵
机器学习----交叉熵(Cross Entropy)如何做损失函数
意义:N为样本数量。公式表示为每一个真实值与预测值相减的平方去平均值。均值平方差的值越小,表明模型越好。 对于回归问题,均方差的损失函数的导数是局部单调的,可以找到最优解。但是对于分类问题,损失函数可能是坑坑洼洼的,很难找到最优解。故均方差损失函数适用于回归问题。
一枕眠秋雨
2024/04/04
13.5K0
机器学习----交叉熵(Cross Entropy)如何做损失函数
深度学习基础知识(三)--交叉熵损失函数
在监督学习进行训练的过程中,我们学习的目的是得到输入到输出的映射关系,在给定 后,预测出 ,期望 尽可能的接近 ,也就是 和 的差距尽可能小。而损失函数就是衡量 和 之间差距的指标,通过损失函数指明模型优化的方向。
languageX
2022/06/01
2.3K0
聊一聊损失函数
损失函数,具体来说就是计算神经网络每次迭代的前向计算结果与真实值的差距,从而指导下一步的训练向正确的方向进行。下面主要介绍一些常见的损失函数:均方差损失函数和交叉熵损失函数。
EmoryHuang
2022/10/31
6020
从香农熵到手推KL散度:一文带你纵览机器学习中的信息论
IT派 - {技术青年圈} 持续关注互联网、大数据、人工智能领域 信息论是应用数学的一个分支,主要研究的是对一个信号包含信息的多少进行量化。它最初被发明是用来研究在一个含有噪声的信道上用离散的字母表来发送消息,例如通过无线电传输来通信。而本文主要探讨信息熵在 AI 或机器学习中的应用,一般在机器学习中,我们可以将信息论应用在连续型变量上,并使用信息论的一些关键思想来描述概率分布或者量化概率分布之间的相似性。 因此在机器学习中,通常要把与随机事件相关信息的期望值进行量化,此外还要量化不同概率分布之间的相似性
IT派
2018/03/27
9080
从香农熵到手推KL散度:一文带你纵览机器学习中的信息论
从香农熵到手推KL散度:一文带你纵览机器学习中的信息论
选自Medium 作者:Frank Preiswerk 机器之心编译 参与:Nurhachu Null、蒋思源 信息论与信息熵是 AI 或机器学习中非常重要的概念,我们经常需要使用它的关键思想来描述概率分布或者量化概率分布之间的相似性。在本文中,我们从最基本的自信息和信息熵到交叉熵讨论了信息论的基础,再由最大似然估计推导出 KL 散度而加强我们对量化分布间相似性的理解。最后我们简要讨论了信息熵在机器学习中的应用,包括通过互信息选择决策树的特征、通过交叉熵衡量分类问题的损失和贝叶斯学习等。 信息论是应用数学的
机器之心
2018/05/10
1.2K0
机器学习基础——详解机器学习损失函数之交叉熵
我在看paper的时候发现对于交叉熵的理解又有些遗忘,复习了一下之后,又有了一些新的认识。故写下本文和大家分享。
TechFlow-承志
2020/03/05
1.1K0
机器学习基础——详解机器学习损失函数之交叉熵
损失函数,基于概率分布度量的损失函数,信息量,信息熵的作用
​Loss 在使用似然函数最大化时,其形式是进行连乘,但是为了便于处理,一般会套上log,这样便可以将连乘转化为求和,求和形式更容易求偏导,应用到梯度下降中求最优解;
zhangjiqun
2024/12/14
1770
损失函数,基于概率分布度量的损失函数,信息量,信息熵的作用
【数学基础】机器学习中的几个熵
相对熵又叫KL散度,也叫做信息增益,如果我们对于同一个随机变量,有两个单独的概率分布和,我们可以用KL散度来衡量这两个分布的差异。
zenRRan
2020/02/24
1K0
交叉熵--损失函数
语言模型的性能通常用交叉熵和复杂度(perplexity)来衡量。交叉熵的意义是用该模型对文本识别的难度,或者从压缩的角度来看,每个词平均要用几个位来编码。复杂度的意义是用该模型表示这一文本平均的分支数,其倒数可视为每个词的平均概率。
zhangjiqun
2024/12/14
1390
交叉熵--损失函数
机器学习各种熵:从入门到全面掌握
作者: 黄海安 编辑: 陈人和 概述 信息熵是信息论和机器学习中非常重要的概念,应用及其广泛,各种熵之间都存在某些直接或间接的联系,本文试图从宏观角度将各种熵穿插起来,方便理解。本文首先讲解机器学习算法中常用的各种熵的概念、公式、推导,并且联系机器学习算法进行说明熵的应用,最后是简单总结。希望通过本文能够全面的梳理熵的各方面知识,由于本人水平有限,如写的不好地方,敬请原谅! 机器学习常用熵定义 熵是什么?熵存在的意义是啥?为什么叫熵?这是3个非常现实的问题。
机器学习算法工程师
2018/03/30
1.9K0
机器学习各种熵:从入门到全面掌握
交叉熵 KL散度
熵这个概念在信息表示中就是“信息含量”,有时候我们常会说“这句话信息含量好多啊”,这也是一种熵的体现。对于一个事件来说,熵越大,也就是信息含量越大,其能实现的可能性越小,反之则亦然。
用户10713522
2023/08/17
1710
揭示相对熵和交叉熵的本质
在第4章4.4.3节介绍损失函数的时候,列出了几项常见的损失函数,其中就有神经网络中常用的以相对熵和交叉熵构建的损失函数。那么什么是相对熵和交叉熵呢?下面就分别进行介绍。
老齐
2022/01/27
1.1K0
揭示相对熵和交叉熵的本质
理解熵与交叉熵
熵、交叉熵是机器学习中常用的概念,也是信息论中的重要概念。它应用广泛,尤其是在深度学习中。本文对交叉熵进行系统的、深入浅出的介绍。文章中的内容在已经出版的《机器学习与应用》(清华大学出版社,雷明著)中有详细的介绍。
SIGAI学习与实践平台
2019/03/01
2.4K0
理解熵与交叉熵
【BK】一文了解交叉熵(CrossEntropyLoss)
在使用pytorch深度学习框架,计算损失函数的时候经常会遇到这么一个函数:nn.CrossEntropyLoss()。该损失函数结合了nn.LogSoftmax()和nn.NLLLoss()两个函数。它在做分类(具体几类)训练的时候是非常有用的。在训练过程中,对于每个类分配权值,可选的参数权值应该是一个1D张量。当你有一个不平衡的训练集时,这是是非常有用的。那么针对这个函数,下面将做详细的介绍。
ShuYini
2020/01/02
5.9K0
深度学习中常用的损失函数loss有哪些?
这是专栏《AI初识境》的第11篇文章。所谓初识,就是对相关技术有基本了解,掌握了基本的使用方法。
小草AI
2019/07/08
23.6K1
深度学习中常用的损失函数loss有哪些?
相关推荐
深度学习 | 交叉熵损失函数
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档