手把手带你了解机器学习的交叉熵

255 阅读8分钟

订阅并收到免费指南--用Python进行数据可视化的终极指南

*表示需要

电子邮件地址*

几天前,我的一个开始探索深度学习的朋友问我:"嘿,伙计,你能解释一下这个 _交叉熵_这东西?"。现在,这是一个艰难的问题,因为这个话题在我这里从来没有设置过吧。

我的自我怀疑开始了,所以在我心里,这个问题实际上听起来更像是 "你能向自己解释_交叉熵_吗?"。即使在我的会议演讲中,我通常也会避免提及它。每当我开始谈论它时,我都会感到困惑和纠结。

Ultimate Guide to Machine Learning with Python

这捆电子书是专门为 初学者制作的。
,从Python基础知识到机器学习算法在生产中的部署,一切都在这里。
今天就成为机器学习的超级英雄 吧

你知道爱因斯坦说过 "如果你不能 说明 简单,就说明你对它的理解不够深刻。",所以我的焦虑也开始了。然而,经过几次反复,我可以向我的朋友解释这个概念,甚至自己也能更好地掌握它。

我真的很高兴,我成功地把它拉了下来。她开玩笑地说:"你应该写一篇关于它的博文。",我认为这其实是一个好主意。因此,在这篇文章中,你将了解什么是交叉熵,以及我们如何在机器学习/深度学习中使用它。

在这篇文章中,我们涵盖了。

1.为什么我们需要交叉熵?

2.熵的直觉

3.了解交叉熵

4.KL分歧

5.二元交叉熵

1.为什么我们需要交叉熵?

一般来说,机器学习和深度学习模型的通常目标是解决分类和回归问题。当我们在谈论分类时,模型在训练过程中学习如何将输入映射到概率预测。

你可能已经知道,在监督学习的训练过程中,模型在逐步调整其参数,使预测结果更接近预期值,即更接近地面真相。例如,让我们考虑一个包含3类图像的数据集:蛇、飞机和Samuel L. Jackson。

Cross-Entropy Classes

每张图片都是用单次编码来标记的,这意味着类别是相互排斥的。

类别标签
[1 0 0]
平面[0 1 0]
Samuel L. Jackson[0 0 1]

现在,当我们在训练一个模型时,我们将给图像作为输入,作为输出,我们将得到一个概率数组。在这个特殊的例子中,如果我们把一张飞机的图像放入我们的模型中,我们将得到三个数字的输出,每个数字代表一个类别的概率,即_y'=[ 0.4, 0.5, 0.1 ]_。这与预期值_y = [ 0 1 0 ]_不同。

然而,这给我们留下了几个问题,如 "变得更好究竟意味着什么?","告诉我_y'_离_y_有多远的措施或数量是什么?"以及 "我应该在模型中对参数进行多大调整?"。交叉熵 是一个可能的解决方案,一个可能的工具。它告诉我们,我们的模型做得有多糟糕,也就是说,它告诉我们应该朝哪个 "方向 "调整模型的参数。

2.熵的直觉

早在1948年,数学家和电气工程师克劳德-香农(Claude Shannon)就试图找出在不丢失任何信息的情况发送信息的方法。他从平均信息长度的角度来考虑,也就是说,他试图用最小的比特数来编码一个信息。

除此之外,他还假设解码器应该能够无损地恢复该信息,也就是说,根本应该有任何信息损失。这就是他在《通信的数学理论 》一文中发明了熵的概念。

Entropy Intuition

被定义为每次传输的最小平均编码大小,在这个过程中,信源可以有效地将信息发送到目的地而不丢失任何信息。在数学上,我们可以使用概率分布来定义熵(表示为_H_)。如果我们谈论的是分类变量,这个公式看起来是这样的。

当我们考虑定量变量时,我们使用积分形式。

_x_是一个定量变量,而_P(x)_是概率密度函数

3.了解交叉熵

希望你能猜到我们要讲的内容。在我们文章开头的例子中,作为输出,我们得到了输入的哪一类图像的概率,例如,我们得到了 概率分布。这可以被看作是我们的编码工具

基本上,我们使用概率分布作为对输入进行编码的手段。我们的最佳工具是熵,在这种情况下,分布_y_。然而,我们有分布 y'。这意味着_交叉熵_可以定义为我们使用错误的编码工具_y'_来编码_y_的信息所需的比特数。在数学上,这可以这样写。

写这个表达式的另一种方法是用期望值

_H(y, y')_表示使用_y_的期望值和使用_y'_的编码大小。由此,我们可以得出结论,H(y, y')和_H(y', y)不一样的,除了当_y=y' 时,例如,这种计算成为熵本身。现在,熵是理论上的最小平均尺寸,交叉熵高于或等于熵,但不低于这个值。

总而言之,熵是我们想在输出上得到的最佳分布。然而,我们得到一些其他的分布--_交叉_熵,它总是比熵大。现在,我们需要做的是得到它们之间的差异,这样我们就可以改进我们的模型。这里我们需要再引入一个术语Kullback-Leibler分歧

4.KL背离

这个术语是由Solomon Kullback和Richard Leibler在1951年提出的,是两个分布之间的定向发散。Kullback更喜欢歧视信息这个词。Kullback在1959年出版的《信息论与统计学》一书中大量讨论了这个话题。本质上,KL发散是_交叉熵_和熵之间的区别。它可以这样写下来。

我们可以说,它衡量的是如果我们用_y'_而不是_y_来编码输出,我们平均需要的额外比特数。这个值永远不会是负的,通过优化 交叉熵,我们试图尽可能地接近0。这意味着,通过最小化 交叉熵,我们就是最小化KL发散。

KL Divergence VIsual

从一开始就对我们的例子进行总结。在我们的训练过程中,我们把塞缪尔-杰克逊的图像放在我们的输出中。然而,我们并没有得到正确的标签,而是得到了图像的每个类别的一些概率。例如,我们得到的不是_y = [ 0 0 1 ],而是像这样的_y' = [ 0.1 0.2 0.7 ]

因为我们不想得到 这意味着我们得到的不是完美编码(熵)y,而是不完美编码(交叉熵)y'。使用这些值,我们计算KL分歧,我们的目标是最小化这个值。这就是我们如何知道如何修改我们模型的参数。

5.二元交叉熵

到目前为止,我们所涉及的是一种叫做分类交叉熵的东西,因为我们考虑了一个有多个类别的例子。然而,我们确信你已经听说过二元交叉熵这个术语。当我们在谈论二元交叉熵时,我们实际上是在谈论有两个类的分类交叉熵。这意味着我们的两个分布是互斥的,例如,分布y可以写成。

这又意味着我们可以把交叉熵写成。

一个你在大学期间可能会看到的公式。

总结

在这篇文章中,我们涵盖了交叉熵这一有点复杂的话题。我们探讨了的性质,如何将这一概念延伸到交叉熵中,以及什么是 KL发散。除此以外,我们能够见证二元交叉熵与普通交叉熵非常相似。总的来说,我们看到了为什么我们使用这个概念来计算损失,以及我们如何使用它作为工具来使我们的模型更好

谢谢你的阅读!

Ultimate Guide to Machine Learning with Python

这捆电子书是专门为 初学者制作的。
,从Python基础知识到机器学习算法在生产中的部署,一切都在这里。
今天就成为机器学习的超级英雄 吧

Nikola M. Zivkovic

Nikola M. Zivkovic

尼古拉-M-日夫科维奇是 书籍的作者。 机器学习终极指南面向程序员的深度学习.他热爱知识分享,是一位经验丰富的演讲者。你可以看到他在 聚会、会议上发言 ,也可以在诺维萨德大学担任客座讲师。

分享。