本文由系列文章Cross-、KL整理/翻译。 我在编译过程中加入了一些自己的看法。 欢迎讨论/指正/点赞!
#***文章大纲***#
1. 熵(Entropy)
1.1 混乱程度,不确定性,还是信息量?
1.2 计算编码长度
1.3 直接计算熵
1.4 熵的直观解释
2. 交叉熵(Cross-Entropy)
2.1 交叉熵损失函数?二分类交叉熵?
2.2 熵的公式
2.3 熵的估计
2.4 交叉熵 >= 熵
2.5 交叉熵作为损失函数
2.6 二分类交叉熵
1. ()1.1 混乱程度、不确定性或信息量?
不同的人对熵有不同的解释:混乱程度、不确定性、惊奇程度、不可预测性、信息量等等。面对如此多的解释,刚接触时难免会感到困惑。 在本文的第一部分,我们先来了解一下什么是熵?
信息论中熵的概念最早由香农提出。 目的是找到一种高效/无损地编码信息的方法:效率是通过编码数据的平均长度来衡量的。 平均长度越小,效率越高; 同时,还必须满足“无损”的条件,即编码后原始信息不能丢失。 这样,香农提出了熵的定义:无损编码事件信息的最小平均编码长度。
1.2 计算编码长度
上面提到了熵的定义:无损编码事件信息的最小平均编码长度。 编码长度很容易理解,但是它从哪里来的最小,又从哪里来的平均呢? 我们用一个例子来说明:假设我们对东京的天气信息使用二进制编码,传输到纽约。 东京 有 4 种可能的天气状况。 相应的概率如下所示。 每种可能性都需要 1 个代码。 东京的天气 总共需要 4 个代码。 我们使用3种编码方式来比较一下编码长度。 不难发现,方法3的编码长度是最小的,而且是平均意义上的最小。 方法 3 获胜的原因是它对高可能性事件(Fine、)使用短代码,对低可能性事件(Rainy、Snow)使用长代码。 表中的三种方法就像尝试过程。 我们是否可以直接计算服从某种概率分布的事件的最小平均编码长度? 也就是说,熵可以直接计算吗?
1.3 直接计算熵
假设一个信息事件有8种可能的状态,每种状态的可能性相等,即概率为12.5%=1/8。 我们需要多少位来编码 8 个值? 1位可以编码2个值(0或1),2位可以编码2×2=4个值(00,01,10,11),那么8个值需要3位,2×2×2 =8(000,001,010,011,100,101,110,111)。
我们不能减少任何 1 位,因为这会产生歧义,而且我们也不希望使用超过 3 位来编码 8 个可能的值。 综上所述,对于具有N个等可能状态的信息,每个状态的可能性P = 1/N,对该信息进行编码所需的最小编码长度为:
那么平均最小长度即熵的计算公式为:
其中 P(i) 是第 i 个信息状态的可能性。
回顾上面东京天气编码的例子,熵 = 1 * 50% + 2 * 25% + 3 * 12.5% + 3 * 12.5% = 1.75
1.4 熵的直观解释
那么这些对熵的描述和解释(混乱程度、不确定性、惊讶程度、不可预测性、信息量等)代表什么呢?
如果熵比较大(即平均编码长度较长),则说明该信息有较多的可能状态,每种状态对应的概率比较低; 因此,每当一个新的信息到来时,我们很难对其做出准确的预测,即存在较大程度的混乱/不确定性/不可预测性。
而当一条罕见的信息到达时,它比一条普通的信息拥有更多的信息,因为它排除了许多其他的可能性,并告诉我们某条信息。 在天气示例中,下雨发生的概率为 12.5%。 当收到此信息时,我们将不确定性(Fine、、Snow)降低了 87.5%; 如果我们收到 Fine (50%) 的消息,我们只是将 降低了 50%。
2.交叉熵(Cross-)2.1 交叉熵损失函数? 二元分类交叉熵?
熟悉机器学习的人都知道,分类模型中使用交叉熵作为损失函数。 他们一定也对吴恩达机器学习视频中猫分类器使用的二元交叉熵印象深刻,但交叉熵到底是什么? 在本文的第二部分,让我们一起来了解交叉熵。 从字面上看,交叉熵分为两部分:“交叉”和“熵”。 首先,我们回顾一下熵的公式。
2.2 熵公式
由上可知,离散变量i的概率分布P(i)已知,则熵公式可以表示为:
同理,对于连续变量x的概率分布P(x),熵公式可以表示为:
在熵的公式中,对于离散变量和连续变量,我们计算负可能性的对数的期望,它代表事件的理论平均最小编码长度。 因此,熵的公式也可以表示为如下,公式中的x~P表示我们使用概率分布P来计算期望,熵可以简写为H:
我再说一遍重要的事情:“熵是服从一定概率分布的事件的理论最小平均编码长度。” 只要我们知道任何事件的概率分布,我们就可以计算它的熵; 那么如果我们不知道事件分布的概率,想要计算熵,该怎么办呢? 然后我们来估计一下熵。 熵估计的过程自然会产生交叉熵。
2.3 熵的估计
如果我们现在需要预测东京的天气,我们不可能在真实天气发生之前就知道天气的概率分布; 但为了下面讨论的目的,我们需要假设在观察东京一段时间的天气后,我们可以得到真实的概率分布 P 。
在观察之前,我们只有估计的概率分布Q。利用估计的概率分布,我们可以计算估计的熵:
如果Q是实概率分布,根据上式,我们就得到了对东京天气信息进行编码的最小平均长度; 然而,估计的概率分布在我们的公式中引入了两部分不确定性:
由于估计的概率分布Q影响了上述两部分(期望和编码长度),因此得到的结果很可能大错特错,因此结果与真实熵之间的比较是没有意义的。 就像香农的目标一样,我们希望编码长度尽可能短,因此我们需要将我们的编码长度与理论最小编码长度(熵)进行比较。 假设经过观察,我们得到了真实的概率分布P。在天气预报中,我们可以用P来计算平均编码长度。 实际编码长度是根据Q计算出来的,这个计算的结果就是P和Q的交叉熵。这样,实际编码长度和理论最小编码长度就具有比较意义。
2.4 交叉熵>=熵
交叉熵用H(P,Q)表示,即用P计算期望,用Q计算编码长度; 因此 H(P,Q) 不一定等于 H(Q,P),除非在 P=Q 的情况下,H(P,Q) = H(Q,P) = H(P)。
有一点很微妙但很重要:对于期望,我们使用真实的概率分布P来计算; 对于编码长度,我们使用假设的概率分布Q来计算,因为它估计是用来编码信息的。 因为熵是理论平均最小编码长度,所以交叉熵只能大于或等于熵。 换句话说,如果我们的估计是完美的,即Q = P,那么H(P,Q) = H(P),否则,H(P,Q) > H(P)。
至此,交叉熵和熵之间的关系应该就比较清楚了。 让我们看看为什么使用交叉熵作为分类损失函数。
2.5 交叉熵作为损失函数
假设一个动物照片数据集中有5种动物,每张照片中只有一种动物,并且每张照片的标签都是one-hot编码。
第一张照片是狗的概率是100%,是其他动物的概率是0; 第二张照片是狐狸的概率是100%,是其他动物的概率是0。其他照片也是如此; 因此,我们可以计算出,每张照片的熵为0。换句话说,每一张用one-hot编码标记的照片都有100%的确定性,这与其他描述概率的方式不同:狗的概率为90%,狗的概率为10%一只猫。
假设有两个机器学习模型对第一张照片进行预测:Q1和Q2,第一张照片的真实标签是[1,0,0,0,0]。
两个模型的预测效果如何? 可以单独计算交叉熵:
交叉熵将模型的预测结果与数据的真实标签进行比较。 随着预测越来越准确,交叉熵的值变得越来越小。 如果预测完全正确,则交叉熵的值为0。因此,在训练分类模型时,可以使用交叉熵作为损失函数。
2.6 二分类交叉熵
在二元分类模型中,只有两种类型的标签:是和否; 在这种情况下,可以使用二元交叉熵作为损失函数。 假设数据集中只有猫和狗的照片,那么交叉熵公式中只包含两种可能性:
还因为:
因此交叉熵可以表示为:
使用以下定义:
二分类的交叉熵可以写成下面的形式,看起来比较熟悉。
“一篇文章看懂”系列有两个初衷:一是记录/分享自己工作学习中的收获,二是帮助初学者对相关概念有更清晰的理解。 “一篇文章看懂”难免有些夸张。 欢迎您对文章中的观点进行讨论/指正/点赞!