详解机器学习损失函数之交叉熵

本文探讨了机器学习中的熵概念,从信息量、信息熵、相对熵(KL散度)到交叉熵的详细解释。通过分析熵在信息论中的应用,以及在模型训练中选择交叉熵作为损失函数的原因,揭示了模型评估和优化的本质。
摘要由CSDN通过智能技术生成

本文始发于个人公众号:TechFlow,原创不易,求个关注


今天这篇文章和大家聊聊机器学习领域的熵。

我在看paper的时候发现对于交叉熵的理解又有些遗忘,复习了一下之后,又有了一些新的认识。故写下本文和大家分享。

熵这个概念应用非常广泛,我个人认为比较经典的一个应用是在热力学当中,反应一个系统的混乱程度。根据热力学第二定律,一个孤立系统的熵不会减少。比如一盒乒乓球,如果把盒子掀翻了,乒乓球散出来,它的熵增加了。如果要将熵减小,那么必须要对这个系统做功,也就是说需要有外力来将散落的乒乓球放回盒子里,否则乒乓球的分布只会越来越散乱。

开创了信息论的香农大佬灵光一闪,既然自然界微观宏观的问题都有熵,那么信息应该也有。于是他开创性地将熵这个概念引入信息论领域,和热力学的概念类似,信息论当中的熵指的是信息量的混乱程度,也可以理解成信息量的大小。


信息量


举个简单的例子,以下两个句子,哪一个句子的信息量更大呢?

  1. 我今天没中彩票
  2. 我今天中彩票了

从文本上来看,这两句话的字数一致,描述的事件也基本一致,但是显然第二句话的信息量要比第一句大得多,原因也很简单,因为中彩票的概率要比不中彩票低得多。

相信大家也都明白了,一个信息传递的事件发生的概率越低,它的信息量越大。我们用对数函数来量化一个事件的信息量:

I ( X ) = − l o g ( P ( X ) ) I(X)=-log(P(X)) I(X)=log(P(X))

因为一个事件发生的概率取值范围在0到1之间,所以log(p(X))的范围是负无穷到0,我们加一个负号将它变成正值。画成函数大概是下面这个样子:


信息熵


我们上面的公式定义的是信息量,但是这里有一个问题,我们定义的只是事件X的一种结果的信息量。对于一个事件来说,它可能的结果可能不止一种。我们希望定义整个事件的信息量,其实也很好办,我们算下整个事件信息量的期望即可,这个期望就是信息熵。

期望的公式我们应该都还记得:

E ( X ) = ∑ P ( X ) X E(X)=\sum P(X)X E(X)=P(X)X

我们套入信息量的公式可以得到信息熵H(x):

H ( X ) = − ∑ i = 1 n P ( x i ) l o g ( P ( x i ) ) H(X)=-\sum_{i=1}^nP(x_i)log(P(x_i)) H(X)=i=1nP(xi)log(P(xi))


相对熵(KL散度)


在我们介绍相对熵之前,我们先试着思考一个问题,我们为什么需要相对熵这么一个概念呢?

原因很简单,因为我们希望测量我们训练出来的模型和实际数据的差别,相对熵的目的就是为了评估和验证模型学习的效果。也就是说相对熵是用来衡量两个概率分布的差值的,我们用这个差值来衡量模型预测结果与真实数据的差距。明白了这点之后,我们来看相对熵的定义:

D K L ( P ∣ ∣ Q ) = ∑ i = 1 n P ( x i ) l o g ( P ( x i ) Q ( x i ) ) D_{KL}(P||Q)= \sum_{i=1}^nP(x_i)log(\frac{P(x_i)}{Q(x_i)}) DKL(PQ)=i=1nP(xi)log(Q(xi)P(xi))

如果把 ∑ i = 1 n x i \sum_{i=1}^nx_i i=1nxi看成是一个事件的所有结果,那 x i x_i xi可以理解成一个事件的一个结果。那么所有的 P ( x i ) P(x_i) P(xi) Q ( x i ) Q(x_i) Q(xi)就可以看成是两个关于事件X的概率分布。 P ( x i ) P(x_i) P(xi)样本真实的分布,我们可以求到。而 Q ( x i ) Q(x_i) Q(xi)是我们模型产出的分布。KL散度越小,表示这两个分布越接近,说明模型的效果越好。

光看上面的KL散度公式可能会云里雾里,不明白为什么能反应P和Q两个分布的相似度。因为这个公式少了两个限制条件:

∑ i = 1 n P ( x i ) = 1 , ∑ i = 1 n Q ( x i ) = 1 \sum_{i=1}^nP(x_i)=1, \quad \sum_{i=1}^nQ(x_i)=1 i=1nP(xi)=1,i=1nQ(xi)=1

对于单个 P ( x i ) P(x_i) P(xi)来说,当然 Q ( x i ) Q(x_i) Q(xi)越大 P ( x i ) l o g ( P ( x i ) Q ( x i ) ) P(x_i)log(\frac{P(x_i)}{Q(x_i)}) P(xi)log(Q(xi)P(xi))越小。但由于所有的 Q ( x i ) Q(x_i) Q(xi)的和是1,当前的i取的值大了,其他的i取的值就要小。

我们先来直观地感受一下,再来证明。

我们假设 x i x_i xi只有0和1两个取值,也就是一个事件只有发生或者不发生。我们再假设 P ( x = 0 ) = P ( x = 1 ) = 0.5 P(x=0)=P(x=1)=0.5 P(x=0)=P(x=1)=0.5,我们画一下 P ( x i ) l o g ( P ( x i ) Q ( x i ) ) P(x_i)log(\frac{P(x_i)}{Q(x_i)}) P(xi)log(Q(xi)P(xi))的图像:

和我们预料的一样,函数随着 Q ( x i ) Q(x_i) Q(xi)的递增而递减。但是这只是一个x的取值,别忘了,我们相对熵计算的是整个分布,那我们加上另一个x的取值会发生什么呢?

从函数图像上,我们很容易看出,当Q(x)=0.5的时候,KL散度取最小值,最小值为0。我们对上面的公式做一个变形:

D K L ( P ∣ ∣ Q ) = ∑ i = 1 n P ( x i ) l o g ( P ( x i ) Q ( x i ) ) = ∑ i = 1 n P ( x i ) l o g ( P ( x i ) ) − ∑ i = 1 n P ( x i ) l o g ( Q ( x i ) ) D_{KL}(P||Q)= \sum_{i=1}^nP(x_i)log(\frac{P(x_i)}{Q(x_i)})=\sum_{i=1}^nP(x_i)log(P(x_i)) - \sum_{i=1}^nP(x_i)log(Q(x_i)) DKL(

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值