今天,我们介绍机器学习里非常常用的一个概念,KL 散度,这是一个用来衡量两个概率分布的相似性的一个度量指标。我们知道,现实世界里的任何观察都可以看成表示成信息和数据,一般来说,我们无法获取数据的总体,我们只能拿到数据的部分样本,根据数据的部分样本,我们会对数据的整体做一个近似的估计,而数据整体本身有一个真实的分布(我们可能永远无法知道),那么近似估计的概率分布和数据整体真实的概率分布的相似度,或者说差异程度,可以用 KL 散度来表示。

KL 散度,最早是从信息论里演化而来的,所以在介绍 KL 散度之前,我们要先介绍一下信息熵。信息熵的定义如下:

H=−∑i=1Np(xi)log⁡p(xi)" role="presentation">H=−∑i=1Np(xi)logp(xi)H=−∑i=1Np(xi)log⁡p(xi)

p(xi)" role="presentation" style="position: relative;">p(xi)p(xi) 表示事件 xi" role="presentation" style="position: relative;">xixi 发生的概率,信息熵其实反映的就是要表示一个概率分布需要的平均信息量。

在信息熵的基础上,我们定义 KL 散度为:

DKL(p||q)=∑i=1Np(xi)⋅(log⁡p(xi)−log⁡(q(xi))" role="presentation">DKL(p||q)=∑i=1Np(xi)⋅(logp(xi)−log(q(xi))DKL(p||q)=∑i=1Np(xi)⋅(log⁡p(xi)−log⁡(q(xi))

或者表示成下面这种形式:

DKL(p||q)=∑i=1Np(xi)⋅log⁡p(xi)q(xi)" role="presentation">DKL(p||q)=∑i=1Np(xi)⋅logp(xi)q(xi)DKL(p||q)=∑i=1Np(xi)⋅log⁡p(xi)q(xi)

DKL(p||q)" role="presentation" style="position: relative;">DKL(p||q)DKL(p||q) 表示的就是概率 q" role="presentation" style="position: relative;">qq 与概率 p" role="presentation" style="position: relative;">pp 之间的差异,很显然,散度越小,说明 概率 q" role="presentation" style="position: relative;">qq 与概率 p" role="presentation" style="position: relative;">pp 之间越接近,那么估计的概率分布于真实的概率分布也就越接近。

KL 散度可以帮助我们选择最优的参数,比如 p(x)" role="presentation" style="position: relative;">p(x)p(x) 是我们需要估计的一个未知的分布,我们无法直接得知 p(x)" role="presentation" style="position: relative;">p(x)p(x) 的分布,不过我们可以建立一个分布 q(x|θ)" role="presentation" style="position: relative;">q(x|θ)q(x|θ) 去估计 p(x)" role="presentation" style="position: relative;">p(x)p(x),为了确定参数 θ" role="presentation" style="position: relative;">θθ,虽然我们无法得知 p(x)" role="presentation" style="position: relative;">p(x)p(x) 的真实分布,但可以利用采样的方法,从 p(x)" role="presentation" style="position: relative;">p(x)p(x) 中采样 N" role="presentation" style="position: relative;">NN 个样本,构建如下的目标函数:

DKL(p||q)=∑i=1N{log⁡p(xi)−log⁡q(xi|θ)}" role="presentation">DKL(p||q)=∑i=1N{logp(xi)−logq(xi|θ)}DKL(p||q)=∑i=1N{log⁡p(xi)−log⁡q(xi|θ)}

因为我们要预估的是参数 θ" role="presentation" style="position: relative;">θθ,上面的第一项 log⁡p(xi)" role="presentation" style="position: relative;">logp(xi)log⁡p(xi) 与参数 θ" role="presentation" style="position: relative;">θθ 无关,所以我们要优化的其实是 −log⁡q(xi|θ)" role="presentation" style="position: relative;">−logq(xi|θ)−log⁡q(xi|θ),而这个就是我们熟悉的最大似然估计。

机器学习:Kullback-Leibler Divergence (KL 散度)的更多相关文章

  1. paper 23 :Kullback–Leibler divergence KL散度(2)

    Kullback–Leibler divergence KL散度 In probability theory and information theory, the Kullback–Leibler ...

  2. KL散度(Kullback–Leibler divergence)

    KL散度是度量两个分布之间差异的函数.在各种变分方法中,都有它的身影. 转自:https://zhuanlan.zhihu.com/p/22464760 一维高斯分布的KL散度 多维高斯分布的KL散度 ...

  3. 交叉熵cross entropy和相对熵(kl散度)

    交叉熵可在神经网络(机器学习)中作为损失函数,p表示真实标记的分布,q则为训练后的模型的预测标记分布,交叉熵损失函数可以衡量真实分布p与当前训练得到的概率分布q有多么大的差异. 相对熵(relativ ...

  4. 【原】浅谈KL散度(相对熵)在用户画像中的应用

    最近做用户画像,用到了KL散度,发现效果还是不错的,现跟大家分享一下,为了文章的易读性,不具体讲公式的计算,主要讲应用,不过公式也不复杂,具体可以看链接. 首先先介绍一下KL散度是啥.KL散度全称Ku ...

  5. 浅谈KL散度

    一.第一种理解 相对熵(relative entropy)又称为KL散度(Kullback–Leibler divergence,简称KLD),信息散度(information divergence) ...

  6. ELBO 与 KL散度

    浅谈KL散度 一.第一种理解 相对熵(relative entropy)又称为KL散度(Kullback–Leibler divergence,简称KLD),信息散度(information dive ...

  7. KL散度的理解(GAN网络的优化)

    原文地址Count Bayesie 这篇文章是博客Count Bayesie上的文章Kullback-Leibler Divergence Explained 的学习笔记,原文对 KL散度 的概念诠释 ...

  8. KL散度与JS散度

    1.KL散度 KL散度( Kullback–Leibler divergence)是描述两个概率分布P和Q差异的一种测度.对于两个概率分布P.Q,二者越相似,KL散度越小. KL散度的性质:P表示真实 ...

  9. KL散度非负性证明

    1 KL散度 KL散度(Kullback–Leibler divergence) 定义如下: $D_{K L}=\sum\limits_{i=1}^{n} P\left(x_{i}\right) \t ...

  10. 两个多维高斯分布之间的KL散度推导

    在深度学习中,我们通常对模型进行抽样并计算与真实样本之间的损失,来估计模型分布与真实分布之间的差异.并且损失可以定义得很简单,比如二范数即可.但是对于已知参数的两个确定分布之间的差异,我们就要通过推导 ...

随机推荐

  1. 32. Longest Valid Parentheses最长有效括号

    参考: 1. https://leetcode.com/problems/longest-valid-parentheses/solution/ 2. https://blog.csdn.net/ac ...

  2. Spring注解之 @SuppressWarnings注解

    简介:java.lang.SuppressWarnings是J2SE5.0中标准的Annotation之一.可以标注在类.字段.方法.参数.构造方法,以及局部变量上.作用:告诉编译器忽略指定的警告,不 ...

  3. python中RabbitMQ的使用(交换机,广播形式)

    简介 如果要让每个接收端都能收到消息,此时需要将消息广播出去,需要使用交换机. 工作原理 消息发送端先将消息发送给交换机,交换机再将消息发送到绑定的消息队列,而后每个接收端都能从各自的消息队列里接收到 ...

  4. 记录一下ES6扩展运算符(三点运算符)...的用法

    ...运算符用于操作数组,有两种层面 1. 第一个叫做 展开运算符(spread operator),作用是和字面意思一样,就是把东西展开.可以用在array和object上都行. 比如: let a ...

  5. Java Web(四) 过滤器Filter

    Filter概述 Filter意为滤镜或者过滤器,用于在Servlet之外对request或者response进行修改.Filter提出了过滤链的概念.一个FilterChain包括多个Filter. ...

  6. TCP/UDP工作流程图

     说到socket必须要贴的图: TCP工作流程:  UDP工作流程:

  7. unity中实现三个Logo图片进行若隐若现的切换并有延时切换图片的效果

    public GameObject canvas; private Transform logoParent; private Transform Logo_logo; //logo一 private ...

  8. 启动项目时出现java.io.EOFException异常。

    错误: 2018-4-18 10:55:54 org.apache.catalina.session.StandardManager doLoad 严重: IOException while load ...

  9. Saiku部分函数解析(八)

    Saiku函数解析 1.   now()  :  获取当前日期 直接使用即可 2. IIF(logic_exp, string, string): IIF判断,logic_exp是逻辑表达式,结果为t ...

  10. 解决WDCP3环境gbk网站编码程序乱码问题

    因为默认WDCP V3版本环境编码格式是UTF-8版本,如果我们程序采用的是GBK编码肯定都会有乱码问题. 我们到WDCP后台,"网站管理"-"PHP设置",看 ...