我应该对二元预测使用分类交叉熵还是二元交叉熵损失?

机器算法验证 机器学习 神经网络 损失函数 张量流 交叉熵
2022-02-02 03:46:16

首先,我意识到如果我需要执行二进制预测,我必须通过执行一次热编码来创建至少两个类。它是否正确?但是,二元交叉熵是否仅适用于只有一类的预测?如果我要使用通常在大多数库(如 TensorFlow)中发现的分类交叉熵损失,会有显着差异吗?

事实上,分类交叉熵和二元交叉熵之间的确切区别是什么?我从未在 TensorFlow 中看到过二进制交叉熵的实现,所以我认为分类交叉熵的实现可能也一样好。

4个回答

Bernoulli的分类交叉熵损失的一个特例m=2

L(θ)=1ni=1nj=1myijlog(pij)=1ni=1n[yilog(pi)+(1yi)log(1pi)]

其中索引样本/观察值,索引类,是样本标签(LSH 的二进制,RHS 上的单热向量)和是对样本的预测。ijypij(0,1):jpij=1i,j


我写“伯努利交叉熵”是因为这种损失来自伯努利概率模型。没有“二进制分布”。“二进制交叉熵”并不能告诉我们二进制的东西是否是标签的单热向量,或者作者是否对每次试验(成功或失败)使用二进制编码。这不是一般惯例,但它清楚地表明这些公式来自特定的概率模型。传统的行话以这种方式不清楚。k2

分类任务分为三种:

  1. 二进制分类:两个专属类
  2. 多类分类:两个以上专属类
  3. 多标签分类:只是非排他类

在这里,我们可以说

  • 在 (1) 的情况下,您需要使用二元交叉熵。
  • 在(2)的情况下,您需要使用分类交叉熵。
  • 在(3)的情况下,您需要使用二元交叉熵。

您可以将多标签分类器视为多个独立二元分类器的组合如果这里有 10 个类,则分别有 10 个二元分类器。每个二元分类器都是独立训练的。因此,我们可以为每个样本生成多标签。如果要确保必须至少获取一个标签,则可以选择具有最低分类损失函数的标签,或使用其他指标。

我想强调的是,多类分类与多标签分类不同相反,多标签分类器借鉴了二元分类器的思想!

二元交叉熵用于多标签分类,而分类交叉熵用于多类分类,其中每个示例属于一个类。

二元交叉熵是分类交叉熵的一个特例,有 2 个类(class=1 和 class=0)。如果我们以这种方式制定二元交叉熵,那么我们可以在这里使用通用的交叉熵损失公式:每个类的 Sum(y*log y)。请注意这与二元交叉熵有何相同之处。

对于多标签分类,思路是一样的。但不是说 3 个标签来表示 3 个类,而是用 6 个标签来表示每个类的存在或不存在(class1=1、class1=0、class2=1、class2=0、class3=1 和 class3=0)。然后,损失是这 6 个类别中每个类别的交叉熵损失的总和。