当前位置: 首页 > news >正文

KL divergence(KL 散度)详解

本文用一种浅显易懂的方式说明KL散度。
参考资料

KL散度本质上是比较两个分布的相似程度。

现在给出2个简单的离散分布,称为分布1和分布2.

分布1有3个样本,
其中A的概率为50%, B的概率为40%,C的概率为10%

分布2也有3个样本:
其中A的概率为50%,B的概率为10%,C的概率为40%。

现在想比较分布1和分布2的相似程度。

直观看上去分布1和分布2中样本A的概率是一样的,仅仅B和C的概率换了一下。
分布应该是相似的,但是如何量化来看呢。

可以这样做,用分布1的各个样本的概率和分布2样本概率做比值,相加再求平均。

现假设分布1的概率分布为P,分布2的概率分布为Q,
那么P(A) = 0.5, P(B)=0.4, P( C) = 0.1
Q(A) = 0.5, Q(B) = 0.1, Q( C) = 0.4,

各样本概率做比值之后为:
P(A)/Q(A) + P(B)/Q(B) + P( C)/Q( C) = 1+4+1/4
再对3个样本取平均: (1+4+1/4) / 3 = 1.75
这就是我们想要的分布1和分布2的相似度。

不过有一个问题,
可以看到P(B)和Q(B), P( C)和Q( C)仅仅概率做了交换,它们的相似度大小应该是一样的(仅仅方向不一样),
也就是说P(B)/Q(B), P( C)/Q( C)的绝对值应该是一样的,符号不一样。
但是现在,哪个分子大哪个结果就大,这是不应该的,

想要这样一个函数来解决这个问题,
f(4) = y
f(1/4) = -y,
这里的4为P(B)/Q(B), 1/4为P( C)/Q( C),
经过f(x)后得到的应该是同样的相似度大小,只是方向不一样,一个是变大的方向,一个是变小的方向,用负号表示方向的不同。

那么什么样的函数能满足f(x)呢,
可以取几个值画一下,你会发现,这个f(x)就是log(x)。

那么现在把刚才的相似度修改一下,
把简单的P(x)/Q(x)换成log(P(x) / Q(x)).
于是变为: ∑ 1 n l o g P ( x ) Q ( x ) / n \sum_{1}^{n} log\frac{P(x)}{Q(x)} / n 1nlogQ(x)P(x)/n

对样本取平均值表示每个样本的weight都是1/n,
不要取这么平均,把weight改为P(x),

那么就得到 ∑ 1 n P ( x ) l o g P ( x ) Q ( x ) \sum_{1}^{n} P(x) log\frac{P(x)}{Q(x)} 1nP(x)logQ(x)P(x)

这就是我们熟悉的KL散度,它比较的是分布P和分布Q的相似度。
“||”右边的Q表示是reference分布。

K L ( P ∣ ∣ Q ) = ∑ 1 n P ( x ) l o g P ( x ) Q ( x ) KL(P||Q) = \sum_{1}^{n} P(x) log\frac{P(x)}{Q(x)} KL(P∣∣Q)=1nP(x)logQ(x)P(x)

http://www.lryc.cn/news/310196.html

相关文章:

  • AzerothCore@FreeBSD安装记录
  • vue .env配置环境变量
  • ThreadLocal介绍
  • 【Linux系统化学习】线程概念
  • Redis集群模式
  • 执行go get xxx报错
  • MATLAB基础语法与实践
  • 智能边缘小站 CloudPond(低延迟、高带宽和更好的数据隐私保护)
  • 回归预测 | Matlab实现RIME-BP霜冰算法优化BP神经网络多变量回归预测
  • LeetCode15:三数之和
  • 【详识JAVA语言】面向对象程序三大特性之三:多态
  • nginx(三)实现反向代理客户端 IP透传
  • 深入Java日志框架及其最佳实践
  • threejs显示本地硬盘上的ply文件,通过webapi
  • 代码随想录day10(2)字符串:反转字符串Ⅱ (leetcode541)
  • 【MySQL】_联合查询基础表
  • InnoDB存储引擎对MVCC的实现
  • 【精选】Java项目介绍和界面搭建——拼图小游戏 中
  • C++ //练习 10.16 使用lambda编写你自己版本的biggies。
  • 【misc | CTF】BUUCTF 二维码
  • OSCP靶场--Resourced
  • Vue路由(黑马程序员)
  • 【Java程序员面试专栏 算法思维】一 高频面试算法题:排序算法
  • sql注入之sqli-labs-less-1 错误注入
  • React withRouter的使用及源码实现
  • c++之旅——第四弹
  • Mysql整理-主从复制
  • 100个百万阅读公众号爆文案例
  • UnityAPI的学习——Transform类
  • (全部习题答案)研究生英语读写教程基础级教师用书PDF|| 研究生英语读写教程提高级教师用书PDF