一文弄懂交叉熵损失

Posted 愤怒的可乐

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一文弄懂交叉熵损失相关的知识,希望对你有一定的参考价值。

引言

今天来好好地捋一捋交叉熵损失(Cross Entropy Loss)。
从信息熵入手,再到极大似然估计,然后引入KL散度,最后来看KL散度与交叉熵的关系。
虽然文章有点长,但相信看完本文,你一定会对交叉熵损失有更高一层的领悟。

信息熵

信息的价值在于消除事件的不确定性,那事件的不确定性要怎么度量呢?答案就是信息熵(information entropy)。

比如你告诉别人你中了500万彩票,别人会大吃一惊,因为他被消除了大量的不确定性。但如果你告诉别人你没中彩票,别人基本熵没有反应,因为他估计你这小子十有八九不会中彩票。相当于你几乎没有消除他对你没有中彩票这件事的不确定性。或者说你传达的信息量太少。我们知道概率只能在0到1之间,也就是说,最好在概率为1的时候,信息量为0,且概率越小,信息量越大。后来人们发现,对数函数很符合这样的规律,某个事件的信息量与概率的关系是 i = log ⁡ ( 1 p ) i = \\log(\\frac1p) i=log(p1),这里的对数是以2为底的, p p p是事件发生的概率。

上面最后这个式子是怎么来的呢?以抛硬币游戏为例,如果有一枚理想的硬币,其出现正面和反面的概率相等,假设我们相隔很远,只能通过电位信号(0或1)进行交流,如何把这个硬币的结果告诉我呢。显然,此时只需要发送一个信号就可以,用1表示正面,用0表示反面。信息的价值在于消除事件的不确定性,传递一枚硬币结果的信息,帮我们消除了它是哪一个面的不确定性。

我们再来看一个转盘游戏,这个转盘被均等地分为8个区域,如果我们要把转盘的结果发送出去,那么需要多少个信号呢?答案是3个信号。

在这两个例子中,我们发现一件事情,把一个游戏系统中所有可能出现的等概率事件数量取以2为底的对数,就是我们要传递事件结果所需要的信号数量。比如在抛硬币游戏中是 log ⁡ 2 ( 2 ) = 1 \\log_2(2)=1 log2(2)=1,在转盘游戏中是 log ⁡ 2 ( 8 ) = 3 \\log_2(8)=3 log2(8)=3​​。这个数量就是信息量

信息量 = log ⁡ ( N ) \\text信息量=\\log(N) 信息量=log(N),这里的 N N N是等可能事件数量。

可以把这种度量不确定性的信息量称为信息熵,但严格来说这并不是香农所说的信息熵,这只是信息熵的一个特例,即所有的事件是等可能的。我们遇到的更多情况是事件发生的可能性不一样的系统。 比如现实生活中就无法制作出来正反面概率都是50%的硬币。

实际上,我们总是可以把一个事件的概率值转换为一个等可能事件系统中发生某个事件的概率。举例来说,我们总是可以把一个概率值转换为“在N个球中随机摸一个球”这个等可能事件系统中摸出某个球的概率。

假设中彩票大奖的概率很低,只有两千万分之一,我们可以把这个概率值转换为在两千万个球中摸出中奖球的概率。在这个摸球系统中,就有两千万个等可能事件。所以只需要用1除以概率值就可以想象出等可能事件系统中事件等数量,即 N = 1 p N=\\frac1p N=p1​。

假设我们有一个动了手脚的不均匀硬币,它正面朝上的概率是0.8,反面朝上的概率是0.2。

如上图,反面朝上0.2的概率可以想象有5个球的摸球系统中摸出某个球的概率。

而正面朝上0.8的概率可以想象成在有1.25个球的系统中摸出某个球的概率。我们通过想象把一个非等概率事件的系统拆成了两个等概率事件的系统。

而面对等概率事件系统,我们就可以很容易地计算它们的信息量。再把这两个想象出来的摸球系统的信息量加起来,就是这个不均匀硬币的信息量: log ⁡ 5 + log ⁡ 1.25 \\log 5 + \\log 1.25 log5+log1.25,由于这两个我们想象出来的等概率系统本身出现的概率也不一样,因此我们需要分别乘上它们出现的概率,得 0.2 ⋅ log ⁡ 5 + 0.8 ⋅ log ⁡ 1.25 0.2 \\cdot \\log 5 + 0.8 \\cdot \\log 1.25 0.2log5+0.8log1.25

如果我们用符号去抽象这些具体的值,就是
p 1 ⋅ log ⁡ 1 p 1 + p 2 ⋅ log ⁡ 1 p 2 (1) p_1 \\cdot \\log \\frac1p_1 + p_2 \\cdot \\log \\frac1p_2 \\tag1 p1logp11+p2logp21(1)
对于有更多事件的一般情况,我们可以这么表示:
∑ i p i log ⁡ 1 p i (2) \\sum_i p_i \\log \\frac1p_i \\tag2 ipilogpi1(2)
我们整理下这个式子
∑ i p i log ⁡ 1 p i = ∑ i ( p i ⋅ ( log ⁡ 1 − log ⁡ p i ) ) = ∑ i − p i log ⁡ p i = − ∑ i p i log ⁡ p i (3) \\beginaligned \\sum_i p_i \\log \\frac1p_i &= \\sum_i (p_i \\cdot (\\log1 - \\log p_i)) \\\\ &= \\sum_i - p_i \\log p_i \\\\ &= - \\sum_i p_i \\log p_i \\endaligned \\tag3 ipilogpi1=i(pi(log1logpi))=ipilogpi=ipilogpi(3)

就得到了香农所提出的信息熵公式 − ∑ i p i log ⁡ p i -\\sum_i p_i \\log p_i ipilogpi

我们可以看出,信息熵实际熵就是我们给每个概率值想象出来的某球系统的信息量的平均值,或者说是信息量的期望。

如果我们要比较两个概率模型的距离,最简单的办法就是把它们的信息熵都算出来,直接比较两个结果就好了。但是问题是,在机器学习中,我们往往不知道训练样本的概率模型。此时呢,我们就需要用到相对熵,也称为KL散度(KL Divergence)。

但是在这之前,为了知识的完整性,我们需要了解极大似然估计的概念。

极大似然估计

极大似然估计里面有三个概念,极大、似然和估计。通俗来说,就是用已知的样本结果信息,去反推最有可能导致这些样本结果出现的模型参数值。

反推说的是一种推理、估计,我们无法保证完全能从已知样本去推出产生这些样本的概率分布,只能说是一种估计。似然值说的是,真实样本已经看到,假设有很多(概率)模型,每个模型产生这些真实样本的可能性就叫似然值。极大似然估计就是选择似然值最高的模型来估计真实(概率)模型。

还是以抛硬币为例,我们记硬币的正面为H(Head),反面为T(Tail)。

假设我们不知道这个硬币产生正反面的概率,但是我们可以做10次实验,假设产生这样一组结果:HHHHHHHTTT。即前7次是正面,后3次是反面。

假设有三个产生这组结果的模型(概率分布),

  • 模型A产生正面的概率 p = 0.1 p=0.1 p=0.1,产生反面的概率就是 1 − p = 0.9 1-p=0.9 1p=0.9
  • 模型B产生正面的概率 p = 0.7 p=0.7 p=0.7,产生反面的概率是 1 − p = 0.3 1-p=0.3 1p=0.3
  • 模型 C C C产生正面的概率 p = 0.8 p=0.8 p=0.8,产生反面的概率是 1 − p = 0.2 1-p=0.2 1p=0.2

计算某个概率模型产生这组结果的可能性是可以计算出来的,公式为:
P ( C 1 , C 2 , ⋯   , C 10 ∣ θ ) = ∏ i = 1 10 P ( C i ∣ θ ) (4) P(C_1,C_2,\\cdots,C_10|\\theta) = \\prod_i=1^10 P(C_i|\\theta) \\tag4 P(C1,C2,,C10θ)=i=110P(Ciθ)(4)
其中 C i ∈ 0 , 1 C_i \\in \\0,1\\ Ci0,1是第 i i i次抛硬币的结果,整个式子说的是由参数 θ \\theta θ确定的模型同时发生 C 1 , C 2 , ⋯   , C 10 C_1,C_2,\\cdots,C_10 C1以上是关于一文弄懂交叉熵损失的主要内容,如果未能解决你的问题,请参考以下文章

交叉熵损失函数

交叉熵损失函数关于交叉熵损失函数的一些理解

交叉熵损失函数关于交叉熵损失函数的一些理解

理解「交叉熵」损失函数(包含自信息信息熵KL散度交叉熵概念整理)

均方差交叉熵及公式推导

交叉熵损失函数修正Huber损失极大似然估计负对数似然似然与交叉熵KL散度