KL散度,交叉熵

一、前言

在机器学习的论文里,KL散度是一个很常见的概念,但自己对这一概念总是很模糊,因此遍查资料做一总结。

二、信息熵

一条信息的信息量与其不确定性有直接关系。可以认为,信息量就等于不确定性的多少。如何量化信息量的度量呢?
如果要你猜一个我心中所想的0到9的数字,假设他们的出现是等概率的,那么为了减少猜测次数,我们总是对半猜,则可能的顺序可能为4(小了),7(大了),6(正确)。因此3~4次就能得到结果。所以,信息量的比特数和所有可能情况的对数函数log(以2为底)有关。log10=0.301。
则将0到9出现的概率分别标记为 p1,p2,……p10,则准确的信息量应该是
H = -(p1logp1+p2logp2+……p10logp10)
称为“信息熵”(Entropy)。因此,对于任意一个随机变量X,它的熵定义如下
H ( X ) = − ∑ P ( x ) l o g P ( x ) H(X) = -\sum P(x)logP(x) H(X)=P(x)logP(x)

三、相对熵与交叉熵

相对熵,KL散度是同一个东西。它是用来衡量两个取值为正数的函数的相似性,定义如下
K L ( f ( x ) ∣ ∣ g ( x ) ) = ∑ f ( x ) l o g f ( x ) g ( x ) KL(f(x) || g(x)) = \sum f(x)log\frac{f(x)}{g(x)} KL(f(x)g(x))=f(x)logg(x)f(x)
对于此公式本身,只要知道以下三条结论即可

  1. 对于两个完全相同的函数,它们的相对熵等于零
  2. 相对熵越大,两个函数的差异越大;反之,相对熵越小则两个函数的差异越小
  3. 对于概率分布或者概率密度函数,如果取值均大于零,相对熵可以度量两个随机分布的差异性。

上面的公式拆开即为
K L ( f ( x ) ∣ ∣ g ( x ) ) = ∑ f ( x ) l o g f ( x ) g ( x ) = ∑ f ( x ) l o g ( f ( x ) ) − ∑ f ( x ) ) l o g ( g ( x ) ) = ( − ∑ f ( x ) ) l o g ( g ( x ) ) ) − ( − ∑ f ( x ) l o g ( f ( x ) ) ) = ( − ∑ f ( x ) l o g ( g ( x ) ) ) − H ( x ) = 交 叉 熵 − 信 息 熵 \begin{aligned} KL(f(x) || g(x)) & = \sum f(x)log\frac{f(x)}{g(x)} \\ & = \sum f(x)log(f(x)) - \sum f(x))log(g(x)) \\ & = (- \sum f(x))log(g(x))) - (-\sum f(x)log(f(x))) \\ & = (-\sum f(x)log(g(x))) - H(x) \\ & = {\color{Red} 交叉熵 - 信息熵} \\ \end{aligned} KL(f(x)g(x))=f(x)logg(x)f(x)=f(x)log(f(x))f(x))log(g(x))=(f(x))log(g(x)))(f(x)log(f(x)))=(f(x)log(g(x)))H(x)=

但是需要注意的是相对熵是不对称的,即
K L ( f ( x ) ∣ ∣ g ( x ) ) ≠ K L ( g ( x ) ∣ ∣ f ( x ) ) KL(f(x) || g(x)) \neq KL(g(x)||f(x)) KL(f(x)g(x))=KL(g(x)f(x))
这样使用起来不是很方便,为了让它对称就有了一种新的相对熵的计算方法
J S ( f ( x ) ∣ ∣ g ( x ) ) = 1 2 [ K L ( f ( x ) ∣ ∣ g ( x ) ) + K L ( g ( x ) ∣ ∣ f ( x ) ) ] JS(f(x)||g(x)) = \frac{1}{2}[KL(f(x)||g(x)) + KL(g(x)||f(x))] JS(f(x)g(x))=21[KL(f(x)g(x))+KL(g(x)f(x))]

KL散度可以用在对原图像的编码解码中的。

四、交叉熵在分类中的应用

通过上一部分我们得知交叉熵的数学表达式为
H ( f , g ) = − ∑ f ( x ) l o g ( g ( x ) ) H(f,g) = -\sum f(x)log(g(x)) H(f,g)=f(x)log(g(x))

则对于二分类问题的交叉熵数学表达式为
H ( f , g ) = − ( g ( x ) l o g ( f ( x ) ) + ( 1 − g ( x ) ) l o g ( 1 − f ( x ) ) ) H(f,g) = -(g(x)log(f(x)) + (1 - g(x))log(1 - f(x))) H(f,g)=(g(x)log(f(x))+(1g(x))log(1f(x)))
在全连接层的最后接的激函数softmaxsigmoid后接入交叉熵成本函数。
f(x)设置为真实样本,而将g(x)设置为预测值

例如我们要根据某个人的身高,体重,容貌,学识来判断他是一名小学生(0),中学生(1)还是大学生(2)。使用softmax得到它的概率最大值(同时预测三个)。

预测值目标值
0.6 0.6 0.40 1 2
0.4 0.3 0.31 0 0
0.3 0.4 0.30 1 0

损失:这里计算的log是以自然对数算的,知道是怎么算的就行了,没有必要纠结于常数

以第一个batch样本为例计算
loss = -(0 * log(0.6) + 1 * log(0.6) + 2 * (log0.4)) = 2.343
则平均损失为
loss = loss / 3 = 0.781

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

贱贱的剑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值