通用的说,熵(Entropy)被用于描述一个系统中的不确定性(the uncertainty of a system)。在不同领域熵有不同的解释,比如热力学的定义和信息论也不大相同。要想明白交叉熵(Cross Entropy)的意义,可以从熵(Entropy) -> KL散度(Kullback-Leibler Divergence) -> 交叉熵这个顺序入手。

先给出一个“接地气但不严谨”的概念表述:

  • 熵:可以表示一个事件A的自信息量,也就是A包含多少信息。
  • KL散度:可以用来表示从事件A的角度来看,事件B有多大不同。
  • 交叉熵:可以用来表示从事件A的角度来看,如何描述事件B。

一句话总结的话:KL散度可以被用于计算代价,而在特定情况下最小化KL散度等价于最小化交叉熵。而交叉熵的运算更简单,所以用交叉熵来当做代价。

信息量

任何事件都会承载着一定的信息量,包括已经发生的事件和未发生的事件,只是它们承载的信息量会有所不同。如昨天下雨这个已知事件,因为已经发生,既定事实,那么它的信息量就为0。如明天会下雨这个事件,因为未有发生,那么这个事件的信息量就大。从上面例子可以看出信息量是一个与事件发生概率相关的概念,而且可以得出,事件发生的概率越小,其信息量越大。这也很好理解,狗咬人不算信息,人咬狗才叫信息嘛。

我们已知某个事件的信息量是与它发生的概率有关,那我们可以通过如下公式计算信息量:

h(x)=−log⁡2p(x)h(x)=-\log _{2} p(x)h(x)=−log2​p(x)

熵(Entropy)

我们知道:当一个事件发生的概率为 p(x),p(x),p(x), 那么它的信息量是 −log⁡2p(x)-\log_2p(x)−log2​p(x) ,那么如果我们把这个事件的所有可能性罗列出来, 就可以求得该事件信息量的期望,即信息量的期望就是熵, 所以熵的公式为:

假设事件 XXX 共有n种可能, 发生 xix_{i}xi​ 的概率为 p(xi),p\left(x_{i}\right),p(xi​), 那么该事件的熵 H(X)H(X)H(X) 为:
H(X)=−∑i=1np(xi)log⁡(p(xi))H(X)=-\sum_{i=1}^{n} p\left(x_{i}\right) \log \left(p\left(x_{i}\right)\right)H(X)=−i=1∑n​p(xi​)log(p(xi​))

KL散度

我们上面说的是对于一个随机变量x的事件A的自信息量,如果我们有另一个独立的随机变量x相关的事件B,该怎么计算它们之间的区别?

此处我们介绍默认的计算方法:KL散度,有时候也叫KL距离,一般被用于计算两个分布之间的不同。看名字似乎跟计算两个点之间的距离也很像,但实则不然,因为KL散度不具备有对称性。在距离上的对称性指的是A到B的距离等于B到A的距离。

举个不恰当的例子,事件A:张三今天买了2个土鸡蛋,事件B:李四今天买了6个土鸡蛋。我们定义随机变量x:买土鸡蛋,那么事件A和B的区别是什么?有人可能说,那就是李四多买了4个土鸡蛋?这个答案只能得50分,因为忘记了"坐标系"的问题。换句话说,对于张三来说,李四多买了4个土鸡蛋。对于李四来说,张三少买了4个土鸡蛋。选取的参照物不同,那么得到的结果也不同。更严谨的说,应该是说我们对于张三和李四买土鸡蛋的期望不同,可能张三天天买2个土鸡蛋,而李四可能因为孩子满月昨天才买了6个土鸡蛋,而平时从来不买。

KL散度的数学定义:

对于离散事件我们可以定义事件A和B的差别为:
DKL(A∥B)=∑iPA(xi)log⁡(PA(xi)PB(xi))=∑iPA(xi)log⁡(PA(xi))−PA(xi)log⁡(PB(xi))D_{K L}(A \| B)=\sum_{i} P_{A}\left(x_{i}\right) \log \left(\frac{P_{A}\left(x_{i}\right)}{P_{B}\left(x_{i}\right)}\right)=\sum_{i} P_{A}\left(x_{i}\right) \log \left(P_{A}\left(x_{i}\right)\right)-P_{A}\left(x_{i}\right) \log \left(P_{B}\left(x_{i}\right)\right)DKL​(A∥B)=i∑​PA​(xi​)log(PB​(xi​)PA​(xi​)​)=i∑​PA​(xi​)log(PA​(xi​))−PA​(xi​)log(PB​(xi​))
对于连续事件,那么我们只是把求和改为求积分而已
DKL(A∥B)=∫a(x)log⁡(a(x)b(x))D_{K L}(A \| B)=\int a(x) \log \left(\frac{a(x)}{b(x)}\right)DKL​(A∥B)=∫a(x)log(b(x)a(x)​)

从公式中可以看出:

  • 如果 PA=PBP_{A}=P_{B}PA​=PB​ ,即两个事件分布完全相同, 那么KL散度等于0。
  • 减号左边的就是事件A的熵,请记住这个发现。 如果颠倒一下顺序求 DKL(B∣∣A),D_{K L}(B|| A),DKL​(B∣∣A), 那么就需要使用B的熵, 答案就不一样了。所以KL散度来计算两个分布A与B的时候是不是对称的,有 “坐标系" 的问题, DKL(A∥B)≠DKL(B∥A)D_{K L}(A \| B) \neq D_{K L}(B \| A)DKL​(A∥B)​=DKL​(B∥A)

在机器学习中,A往往用来表示样本的真实分布,B用来表示模型所预测的分布,那么KL散度就可以计算两个分布的差异,也就是Loss损失值。

交叉熵

先上结论: KL散度 = 交叉熵 - 熵(注意正负号),DKL(A∥B)=−S(A)+H(A,B)D_{K L}(A \| B)=-S(A)+H(A, B)DKL​(A∥B)=−S(A)+H(A,B)

对比一下这是KL散度的公式:
DKL(A∥B)=∑iPA(xi)log⁡(PA(xi)PB(xi))=∑iPA(xi)log⁡(PA(xi))−PA(xi)log⁡(PB(xi))D_{K L}(A \| B)=\sum_{i} P_{A}\left(x_{i}\right) \log \left(\frac{P_{A}\left(x_{i}\right)}{P_{B}\left(x_{i}\right)}\right)=\sum_{i} P_{A}\left(x_{i}\right) \log \left(P_{A}\left(x_{i}\right)\right)-P_{A}\left(x_{i}\right) \log \left(P_{B}\left(x_{i}\right)\right)DKL​(A∥B)=i∑​PA​(xi​)log(PB​(xi​)PA​(xi​)​)=i∑​PA​(xi​)log(PA​(xi​))−PA​(xi​)log(PB​(xi​))这是熵的公式:
S(A)=−∑iPA(xi)log⁡PA(xi)S(A)=-\sum_{i} P_{A}\left(x_{i}\right) \log P_{A}\left(x_{i}\right)S(A)=−i∑​PA​(xi​)logPA​(xi​)这是交叉熵公式:
H(A,B)=−∑iPA(xi)log⁡(PB(xi))H(A, B)=-\sum_{i} P_{A}\left(x_{i}\right) \log \left(P_{B}\left(x_{i}\right)\right)H(A,B)=−i∑​PA​(xi​)log(PB​(xi​))

如果 S(A)S(A)S(A) 是一个常量, 那么 KL散度和交叉熵是等价的。在机器学习中, 为了让学到的模型分布更贴近真实数据分布, 我们最小化 模型数据分布 与 训练 数据之间的KL散度,而因为训练数据的分布是固定的,即S是常数,因此最小化KL散度等价于最小化交叉熵。

reference
https://www.zhihu.com/question/65288314/answer/230209104
https://www.zhihu.com/question/65288314/answer/244557337

深入理解机器学习中的信息熵、KL散度、交叉熵相关推荐

  1. 炼数成金数据分析课程---16、机器学习中的分类算法(交叉内容,后面要重点看)...

    炼数成金数据分析课程---16.机器学习中的分类算法(交叉内容,后面要重点看) 一.总结 一句话总结: 大纲+实例快速学习法 主要讲解常用分类算法(如Knn.决策树.贝叶斯分类器等)的原理及pytho ...

  2. 你真的理解机器学习中偏差 - 方差之间的权衡吗?

    作者:chen_h 微信号 & QQ:862251340 微信公众号:coderpai 简书地址:http://www.jianshu.com/p/f143... 我认为对偏差 - 方差之间的 ...

  3. 透彻理解机器学习中极大似然估计MLE的原理(附3D可视化代码)

    文章目录 相关资料 一.什么是概率,什么是似然 二.极大似然估计 Maximum Likelihood Estimation (MLE) 的含义 2.1 机器学习中的极大化似然函数 2.2 极大似然估 ...

  4. [机器学习必知必会]如何理解机器学习中的正则化

    正则化综述 机器学习中经常会在损失函数 中加入正则项,称之为正则化(Regularize). 目的:防止模型过拟合 原理:在损失函数上加上某些规则(限制),缩小解空间,从而减少求出过拟合解的可能性 例 ...

  5. (Latent Space)理解机器学习中的潜在空间

    原文链接:https://zhuanlan.zhihu.com/p/369946876 搬运自 https://towardsdatascience.com/understanding-latent- ...

  6. 高斯过程是什么?从视觉上理解机器学习中的高斯过程——Gaussian Process

    --如何将一组小型构建块转变为解决回归问题的灵活的工具. 目录 Introduction 简介 Multivariate Gaussian distributions 多元高斯分布 Marginali ...

  7. 深入理解机器学习中的:目标函数,损失函数和代价函数

    参考知乎回答整理:https://www.zhihu.com/question/52398145 主要参考:https://www.zhihu.com/question/52398145/answer ...

  8. matlab计算kl散度命令,熵,交叉熵,KL散度公式与计算实例

    交叉熵(Cross Entropy)和KL散度(Kullback–Leibler Divergence)是机器学习中极其常用的两个指标,用来衡量两个概率分布的相似度,常被作为Loss Function ...

  9. 数学之美:信息的度量和作用 KL散度 自信息 熵 相对熵 KL divergence entropy

    当上述公式中概率相等时会推出,H刚好等于5比特. 自信息: 一条信息的信息量与该信息的不确定性有关.如果想要搞懂一件非常不清楚的事,就需要了解大量的信息,相反如果一件事我们已经了如指掌,那就不需要太多 ...

  10. 垃圾邮件分类快速理解机器学习中的朴素贝叶斯(Naive Bayes)

    贝叶斯方法是一个历史悠久,有着坚实的理论基础的方法,同时处理很多问题时直接而又高效,很多高级自然语言处理模型也可以从它演化而来.因此,学习贝叶斯方法,是研究自然语言处理问题的一个非常好的切入口. 其实 ...

最新文章

  1. java 引用传递_详解java的值传递、地址传递、引用传递
  2. 四、创建第一个springboot项目
  3. 内网安全新趋势之应对移动设备的威胁
  4. blog搬家通知---------------------------------------
  5. jni releative
  6. 一个虐你千百遍的问题:“RPC好,还是RESTful好?”
  7. MapHack源代码
  8. python的输出语句
  9. 线性时间选择(C++):求第k小的数
  10. 《CSS实战案例汇总》悬浮按钮样式
  11. jsoup获取图片并下载
  12. html js 合并单元格合并单元格,htmljs合并单元格 excel怎样合并单元格
  13. 2018中国国际大数据大会  助力大数据与实体经济深度融合
  14. 有域名有服务器没有网站可以备案吗,只有域名没有服务器可以备案吗
  15. “趁年轻,赶快上路吧。”
  16. IL汇编语言介绍(译)
  17. uTorrent设置,防止出现磁盘负荷100%
  18. 游戏代理加盟需要什么条件?
  19. c++ 隐藏和显示标题栏
  20. castle典范英语 storm_fb08 新版典范英语1-9年级 PDF文档+MP3音频 含练习册及教学参考...

热门文章

  1. Unity AssetBundle加载的理解
  2. linux中vi编辑后如何保存,[转]Linux vi 编辑后如何保存
  3. git merge 暂存区_经典好文:一篇文章,教你学会Git
  4. python token flask_flask 实现token机制
  5. python struct 45s_python32版本,struct.error: argument for 's' must be a bytes object - 小众知识...
  6. vue前期项目搭建所需要安装的插件,idea操作
  7. deque python_python3 deque(双向队列)的详细介绍
  8. struts1(一)流程分析
  9. Spring中的jar包详解
  10. 工作那些事(四)大公司VS小公司