【深度学习】K-L 散度,JS散度,Wasserstein距离
度量两个分布之间的差异
(一)K-L 散度
K-L 散度在信息系统中称为相对熵,可以用来量化两种概率分布 P 和 Q 之间的差异,它是非对称性的度量。在概率学和统计学上,我们经常会使用一种更简单的、近似的分布来替代观察数据或太复杂的分布。K-L散度能帮助我们度量使用一个分布来近似另一个分布时所损失的信息量。一般情况下,P 表示数据的真实分布,Q 表示数据的理论分布,估计的模型分布或者 P 的近似分布。
(二)K-L 散度公式
Note:KL 散度仅当概率 \(P\) 和 \(Q\) 各自总和均为1,且对于任何 \(i\) 皆满足 \(Q(i)>0\) , \(P(i)>0\) 时,才有定义。
\[
D_{KL}(P||Q) = - \sum_i P(i) \ln \frac{Q(i)}{P(i)} = \sum_i P(i) \ln \frac{P(i)}{Q(i)}
\]
(三)使用 K-L 散度对比两种分布
假设真实分布为 \(P\),\(P\) 的两个近似分布为 \(Q_1, Q_2\),对于这两个近似分布我们应该选择哪一个?K-L 散度可以解决这个问题:如果 \(D_{KL}(P||Q_1) < D_{KL}(P||Q_2)\),那么我们选择 \(Q_1\) 作为 \(P\) 的近似分布。
(四)散度并非距离
我们不能把 K-L 散度看作是两个分布之间距离的度量。首先距离度量需要满足对称性,但是 K-L 散度不具备对称性,即:
\[
D_{KL}(P||Q) \neq D_{KL}(Q||P)
\]
(五)问答环节
Q1:信息熵,交叉熵,相对熵的区别是什么?
A1:(1)信息熵,即熵,是编码方案完美时的最短平均编码长度;(2)交叉熵,即 Cross Entropy,是编码方案不一定完美时(对概率分布的估计不一定正确)的平均编码长度,在神经网络中常用作损失函数;(3)相对熵,即 K-L 散度,是编码方案不一定完美时,平均编码长度相对于最短平均编码长度的增加值。简单推理:

Q2:为什么在深度学习中使用 Cross Entropy 损失函数,而不是 K-L 散度?
A2:首先,损失函数的功能是衡量由样本计算所得的分布与目标分布之间的差异。在分布差异计算中,K-L散度是最合适的。但在实际中,某一事件的标签是已知不变的(比如猫狗分类中,猫的标签是1,那么数据集中所有关于猫的标签都要标记为1),即目标分布的熵为常数。根据公式:K-L散度 - 目标分布熵 = 交叉熵(这里的 - 代表裁剪),所以我们不用计算K-L散度,只需计算交叉熵就可以得到模型分布与目标分布的损失值。
换句话说,通常一个标签都是设置为 one-hot 模式,即我们常说的硬分布,\(\log1=0\),所以一般都是只用交叉熵。如果标签不是这样的硬分布,而是软分布(比如有两张猫的图片,一张预测为0.6,另一张预测为0.8),K-L散度才能发挥比较好的作用。
Q3:K-L散度和JS散度存在什么问题?有什么解决方法?
A3:如果两个分布 \(P\) 和 \(Q\) 相离很远,甚至完全没有重叠,那么 K-L 散度值是没有意义的,而 JS 散度值是一个常数,意味着梯度为0,即发生了梯度消失,这在学习算法中是非常严重的问题。Wasserstein距离 (又名推土机距离)的提出就是为了解决这个问题,它的优越性在于即使两个分布没有重叠,Wasserstein 距离仍然能够反映它们的远近。以下图为例:

以上是二维空间中的两个分布 \(P_1\) 和 \(P_2\),\(P_1\) 在线段 AB 上均匀分布,\(P_2\) 在线段 CD 上均匀分布,通过参数 \(\theta\) 控制两个分布的距离远近,由以上公式容易得到:
K-L 散度:
\[
D_{KL}(P_1||P_2)=
\begin{cases}
+ \infin & \text{if} & \theta \neq 0 \\
0 & \text{if} & \theta = 0 \\
\end{cases}
\]
JS 散度:
\[
JS(P_1||P_2)=
\begin{cases}
\log2 & \text{if} & \theta \neq 0 \\
0 & \text{if} & \theta = 0 \\
\end{cases}
\]
Wasserstein 距离:
\[
W(P_0, P_1) = |\theta|
\]
观察以上公式可知,K-L 散度和 JS 散度取值是突变的,要么最大要么最小,Wasserstein 距离却是平滑的。如果我们要用梯度下降法优化 \(\theta\) 这个参数,前两者根本提供不了梯度,Wasserstein 距离却可以。类似地,在高维空间中如果两个分布不重叠或者重叠部分可忽略,则 KL 和 JS 既反映不了远近,也提供不了梯度,但是Wasserstein却可以提供有意义的梯度。
References:
[1] 如何理解K-L散度(相对熵)
[2] 相对熵——维基百科
【深度学习】K-L 散度,JS散度,Wasserstein距离的更多相关文章
- 【python深度学习】KS,KL,JS散度 衡量两组数据是否同分布
目录 KS(不需要两组数据相同shape) JS散度(需要两组数据同shape) KS(不需要两组数据相同shape) 奇怪之处:有的地方也叫KL KS距离,相对熵,KS散度 当P(x)和Q(x)的相 ...
- 信息论相关概念:熵 交叉熵 KL散度 JS散度
目录 机器学习基础--信息论相关概念总结以及理解 1. 信息量(熵) 2. KL散度 3. 交叉熵 4. JS散度 机器学习基础--信息论相关概念总结以及理解 摘要: 熵(entropy).KL 散度 ...
- 【GAN与NLP】GAN的原理 —— 与VAE对比及JS散度出发
0. introduction GAN模型最早由Ian Goodfellow et al于2014年提出,之后主要用于signal processing和natural document proces ...
- KL散度与JS散度
1.KL散度 KL散度( Kullback–Leibler divergence)是描述两个概率分布P和Q差异的一种测度.对于两个概率分布P.Q,二者越相似,KL散度越小. KL散度的性质:P表示真实 ...
- Python深度学习读书笔记-1.什么是深度学习
人工智能 什么是人工智能.机器学习与深度学习(见图1-1)?这三者之间有什么关系?
- KL散度、JS散度、Wasserstein距离
1. KL散度 KL散度又称为相对熵,信息散度,信息增益.KL散度是是两个概率分布 $P$ 和 $Q$ 之间差别的非对称性的度量. KL散度是用来 度量使用基于 $Q$ 的编码来编码来自 $P$ 的 ...
- 深度学习中交叉熵和KL散度和最大似然估计之间的关系
机器学习的面试题中经常会被问到交叉熵(cross entropy)和最大似然估计(MLE)或者KL散度有什么关系,查了一些资料发现优化这3个东西其实是等价的. 熵和交叉熵 提到交叉熵就需要了解下信息论 ...
- KL与JS散度学习[转载]
转自:https://www.jianshu.com/p/43318a3dc715?from=timeline&isappinstalled=0 https://blog.csdn.net/e ...
- 深度学习-Wasserstein GAN论文理解笔记
GAN存在问题 训练困难,G和D多次尝试没有稳定性,Loss无法知道能否优化,生成样本单一,改进方案靠暴力尝试 WGAN GAN的Loss函数选择不合适,使模型容易面临梯度消失,梯度不稳定,优化目标不 ...
随机推荐
- win10 安装cuda和cudnn
首先通过nvidia-smi 查看自己的显卡驱动对应的cuda版本. 参考:https://blog.csdn.net/qq_40212975/article/details/89963016 再去官 ...
- table+分页+模糊查询
这个分页超级棒嘞. 网页链接:http://www.cssmoban.com/cssthemes/7528.shtml
- gitlab-CI作业-yml
stages: - build - deploy before_script: - echo "Restore NuGet Packages..." - echo "do ...
- salt-api 获取服务器信息,minion批量执行cmd命令
import requests import json try: import cookielib except: import http.cookiejar as cookielib # 使用url ...
- Docker-Nginx,发布前端服务
1.安装环境: yum install -y yum-utils \ device-mapper-persistent-data \ lvm2 yum-config-manager \ --add-r ...
- IT兄弟连 HTML5教程 HTML5表单 小结及习题
小结 HTML表单提交的方法有get方法和post方法,get方法的作用是从指定的资源请求数据,post方法的作用是向指定的资源提交要被处理的数据.HTML表单一直都是Web的核心技术之一,有了它我们 ...
- 分享学习 PHP 源码的方法
每天抽一点时间来看看 PHP 源码方面的书,说实话,无法在调试器下观察 PHP 运行状态的上下文实在是一件痛苦的事情.不过还好不是一无所获,虽然内容比较多,但是掌握方法挨着看下去还是 ...
- 上海街头灵魂摄影师:勤劳de小懒熊
上海中年大叔,街头摄影师,眼光比较独特,题材不限于: 酒吧晚上醉酒躺尸的.喝多亲嘴的.拉拉les的.流泪告别的.地铁露肉的.短裤露沟的. 尺度不大,但比较真实,艺术来源于生活,比那些摆拍的有意思. 大 ...
- ASP.NET MVC教程二:ASP.NET MVC应用程序结构详解
在上一篇文章中,讲解了一些MVC的概念,并且创建了第一个ASP.NET MVC项目,这篇文章将讲解ASP.NET MVC程序中的代码解构,新创建的MVC应用程序解构如下图所示: 一.App_Data ...
- GO-切片拷贝以及赋值
一.拷贝 package main import "fmt" func main(){ //copy函数,把一个切片copy到另一个切片之上 var a [1000]int=[10 ...