(转)KL散度的理解
KL散度(KL divergence)
全称:Kullback-Leibler Divergence。
用途:比较两个概率分布的接近程度。
在统计应用中,我们经常需要用一个简单的,近似的概率分布 f * 来描述。
观察数据 D 或者另一个复杂的概率分布 f 。这个时候,我们需要一个量来衡量我们选择的近似分布 f * 相比原分布 f 究竟损失了多少信息量,这就是KL散度起作用的地方。
熵(entropy)
想要考察信息量的损失,就要先确定一个描述信息量的量纲。
在信息论这门学科中,一个很重要的目标就是量化描述数据中含有多少信息。
为此,提出了熵的概念,记作 H 。
一个概率分布所对应的熵表达如下:
如果我们使用 log 2 作为底,熵可以被理解为:我们编码所有信息所需要的最小位数(minimum numbers of bits)。
需要注意的是:通过计算熵,我们可以知道信息编码需要的最小位数,却不能确定最佳的数据压缩策略。怎样选择最优数据压缩策略,使得数据存储位数与熵计算的位数相同,达到最优压缩,是另一个庞大的课题。
KL散度的计算
现在,我们能够量化数据中的信息量了,就可以来衡量近似分布带来的信息损失了。
KL散度的计算公式其实是熵计算公式的简单变形,在原有概率分布 p 上,加入我们的近似概率分布 q ,计算他们的每个取值对应对数的差:
换句话说,KL散度计算的就是数据的原分布与近似分布的概率的对数差的期望值。
在对数以2为底时, log 2 ,可以理解为“我们损失了多少位的信息”。
写成期望形式:
更常见的是以下形式:
现在,我们就可以使用KL散度衡量我们选择的近似分布与数据原分布有多大差异了。
散度不是距离
因为KL散度不具有交换性,所以不能理解为“距离”的概念,衡量的并不是两个分布在空间中的远近,更准确的理解还是衡量一个分布相比另一个分布的信息损失(infomation lost)。
使用KL散度进行优化
通过不断改变预估分布的参数,我们可以得到不同的KL散度的值。
在某个变化范围内,KL散度取到最小值的时候,对应的参数是我们想要的最优参数。
这就是使用KL散度优化的过程。
神经网络进行的工作很大程度上就是“函数的近似”(function approximators)。
因此我们可以使用神经网络学习很多复杂函数,学习过程的关键就是设定一个目标函数来衡量学习效果。
也就是通过最小化目标函数的损失来训练网络(minimizing the loss of the objective function)。
而KL散度可以作为正则化项(regularization term)加入损失函数之中,即使用KL散度来最小化我们近似分布时的信息损失,让我们的网络可以学习很多复杂的分布。
一个典型应用是VAE(变分自动编码)。
(转)KL散度的理解的更多相关文章
- KL散度的理解(GAN网络的优化)
原文地址Count Bayesie 这篇文章是博客Count Bayesie上的文章Kullback-Leibler Divergence Explained 的学习笔记,原文对 KL散度 的概念诠释 ...
- KL散度相关理解以及视频推荐
以下内容基于对[中字]信息熵,交叉熵,KL散度介绍||机器学习的信息论基础这个视频的理解,请务必先看几遍这个视频. 假设一个事件可能有多种结果,每一种结果都有其发生的概率,概率总和为1,也即一个数据分 ...
- 【原】浅谈KL散度(相对熵)在用户画像中的应用
最近做用户画像,用到了KL散度,发现效果还是不错的,现跟大家分享一下,为了文章的易读性,不具体讲公式的计算,主要讲应用,不过公式也不复杂,具体可以看链接. 首先先介绍一下KL散度是啥.KL散度全称Ku ...
- PRML读书会第十章 Approximate Inference(近似推断,变分推断,KL散度,平均场, Mean Field )
主讲人 戴玮 (新浪微博: @戴玮_CASIA) Wilbur_中博(1954123) 20:02:04 我们在前面看到,概率推断的核心任务就是计算某分布下的某个函数的期望.或者计算边缘概率分布.条件 ...
- 浅谈KL散度
一.第一种理解 相对熵(relative entropy)又称为KL散度(Kullback–Leibler divergence,简称KLD),信息散度(information divergence) ...
- 非负矩阵分解(1):准则函数及KL散度
作者:桂. 时间:2017-04-06 12:29:26 链接:http://www.cnblogs.com/xingshansi/p/6672908.html 声明:欢迎被转载,不过记得注明出处哦 ...
- KL散度、JS散度、Wasserstein距离
1. KL散度 KL散度又称为相对熵,信息散度,信息增益.KL散度是是两个概率分布 $P$ 和 $Q$ 之间差别的非对称性的度量. KL散度是用来 度量使用基于 $Q$ 的编码来编码来自 $P$ 的 ...
- 相对熵(KL散度)
https://blog.csdn.net/weixinhum/article/details/85064685 上一篇文章我们简单介绍了信息熵的概念,知道了信息熵可以表达数据的信息量大小,是信息处理 ...
- ELBO 与 KL散度
浅谈KL散度 一.第一种理解 相对熵(relative entropy)又称为KL散度(Kullback–Leibler divergence,简称KLD),信息散度(information dive ...
随机推荐
- python知识点总结02(不定时更新)
请用至少两种方式实现m与n值交换m=10,n=5 # 方式一 temp = 0 m = 10 n = 5 print(f'方式一交换前,m:{},n:{}') temp = m m = n n = t ...
- Linux 学习笔记 5 文件的下载、压缩、解压、初步认识yum
写在前面 上节我们通过简单的几组命令,已经完全的实现了文件的移动.删除.更名.以及复制,我们最常用的基本玩法,本节将带着大家学习压缩.解压的相关步骤. Linux 学习笔记 4 创建.复制.移动.文件 ...
- Python用PIL将PNG图像合成gif时如果背景为透明时图像出现重影的解决办法
最近在用PIL合成PNG图像为GIF时,因为需要透明背景,所以就用putpixel的方法替换背景为透明,但是在合成GIF时,图像出现了重影,在网上查找了GIF的相关资料:GIF相关资料 其中有对GIF ...
- 图解Go语言的context了解编程语言核心实现源码
基础筑基 基于线程的编程语言中的一些设计 ThreadGroup ThreadGroup是基于线程并发的编程语言中常用的一个概念,当一个线程派生出一个子线程后通常会加入父线程的线程组(未指定线程组的情 ...
- linux各目录及重要目录的详细介绍
1 目录说明 根目录 (/) /bin bin是Binary的缩写, 这个目录存放着最经常使用的命令,比如ls,cat,mkdir等 /dev dev是Device(设备)的缩写, 该目录下存放的是L ...
- Keil uVision4的简单使用
1. 项目创建 打开安装好的Keil uVision4可以看到如下界面 选择New uVision Project来创建一个新项目 选择项目存放的位置并为项目文件命名 选择要进行模拟仿真的设备(此处以 ...
- FastJSON将Java对象转为json,日期显示时间戳未格式化解决办法
JSON版本:FastJson Java 对象转换为 JSON 格式 定义以下 Person JavaBean: public class Person { @JSONField(name = &qu ...
- [转]Linux制作启动盘
假设你想备份一个叫做 /home/joeuser/ 的目录,但是不想包括子目录 /home/joeuser/junk/,因为其中包括的都是不必要的文件.你想创建一个叫做 backup.iso 的映像, ...
- python如何计算程序(代码块)的运行时间?
1.引入time模块 2.调用time模块的time()函数 :用来获取当前的时间,返回的单位是秒 # 引入一个time模块, * 表示time模块的所有功能, # 作用: 可以统计程序运行的时间 f ...
- Friday the Thirteenth 黑色星期五 USACO 模拟 超级简单做法
1003: 1.1.3 Friday the Thirteenth 黑色星期五 时间限制: 1 Sec 内存限制: 128 MB提交: 8 解决: 8[提交] [状态] [讨论版] [命题人:外部 ...