什么是交叉熵?


Answers:


230

交叉熵通常用于量化两个概率分布之间的差异。通常,“真实”分布(您的机器学习算法正在尝试匹配的分布)以单热点分布表示。

例如,假设对于特定的训练实例,标签为B(可能的标签A,B和C中的标签)。因此,此培训实例的一个热点分布是:

Pr(Class A)  Pr(Class B)  Pr(Class C)
        0.0          1.0          0.0

您可以将上述“真实”分布解释为意味着训练实例具有0%的概率成为A类,100%的概率成为B类和0%的概率成为C类。

现在,假设您的机器学习算法可以预测以下概率分布:

Pr(Class A)  Pr(Class B)  Pr(Class C)
      0.228        0.619        0.153

预测分布与真实分布有多接近?这就是交叉熵损失所决定的。使用以下公式:

交叉熵损失公式

p(x)所需概率和q(x)实际概率在哪里。总和超过三个类别A,B和C。在这种情况下,损失为0.479

H = - (0.0*ln(0.228) + 1.0*ln(0.619) + 0.0*ln(0.153)) = 0.479

因此,这就是您的预测与真实分布有“错误”或“遥不可及”的程度。

交叉熵是许多可能的损失函数之一(另一个流行的函数是SVM铰链损失)。这些损失函数通常写为J(θ),可在梯度下降中使用,梯度下降是一种将参数(或系数)移向最佳值的迭代算法。在下面的公式中,您将替换J(theta)H(p, q)。但请注意,您需要首先计算H(p, q)相对于参数的导数。

梯度下降

因此,直接回答您的原始问题:

仅仅是描述损失函数的一种方法吗?

正确的交叉熵描述了两个概率分布之间的损失。它是许多可能的损失函数之一。

然后,我们可以使用例如梯度下降算法来找到最小值。

是的,交叉熵损失函数可以用作梯度下降的一部分。

进一步阅读:我的其他与TensorFlow相关的答案之一。


因此,交叉熵用每个示例X的概率之和来描述损失
。–神学家

因此,我们可以将误差描述为两个向量之间的夹角(余弦相似度/角距离),而不是将误差描述为交叉熵吗?
theateist '02

1
显然这不是最佳解决方案,但从理论上讲,我只是想知道是否可以cosine (dis)similarity通过角度描述误差,然后尝试将角度最小化。
theateist '02

2
@Stephen:如果您看一下我给出的示例,p(x)则将是每个类的真实概率列表,即 [0.0, 1.0, 0.0。同样,q(x)是每个类别的预测概率的列表[0.228, 0.619, 0.153]H(p, q)则为- (0 * log(2.28) + 1.0 * log(0.619) + 0 * log(0.153))0.479。注意,使用Python np.log()函数是很常见的,实际上是自然的日志。没关系
stackoverflowuser2010

1
@HAr:对于真实标签的一键编码,我们只关心一个非零类。然而,交叉熵可以比较任何两个概率分布;其中之一不必具有一概的概率。
stackoverflowuser2010

2

简而言之,交叉熵(CE)是您的预测值与真实标签的距离的量度。

此处的叉指计算两个或多个要素/真实标签(如0、1)之间的熵。

熵一词本身是指随机性,因此它的大值意味着您的预测与真实标签相差甚远。

因此,更改权重以降低CE,从而最终减少预测标签与真实标签之间的差异,从而提高准确性。


1

在上述帖子中,添加最简单形式的交叉熵损失称为二进制交叉熵(用于二进制分类的损失函数,例如,进行逻辑回归),而广义版本则是分类交叉熵(用于作为用于多类分类问题的损失函数(例如,使用神经网络)。

想法保持不变:

  1. 当训练实例的目标标签的模型计算(softmax)类别概率接近于1时(例如,用一热编码表示),则相应的CCE损失减小为零

  2. 否则,它会随着与目标类别相对应的预测概率变小而增加。

下图说明了这一概念(从图中可以看出,当y和p都为高或同时都为低时,即表示一致,则BCE变为低):

在此处输入图片说明

交叉熵与计算两个概率分布之间的距离的相对熵KL散度密切相关。例如,在两个离散的pmf之间,下图显示它们之间的关系:

在此处输入图片说明

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.