二进制交叉熵惩罚一个热向量的所有分量

hal*_*o02 5 classification machine-learning multilabel-classification cross-entropy one-hot-encoding

我了解到,在两个类的情况下,二进制交叉熵与分类交叉熵相同。

此外,对我来说,很明显softmax是什么。
因此,我看到分类交叉熵只是惩罚了应该为1的一个分量(概率)。

但是,为什么不能或者不应该在一个热向量上使用二进制交叉熵呢?

Normal Case for 1-Label-Multiclass-Mutual-exclusivity-classification:
################
pred            = [0.1 0.3 0.2 0.4]
label (one hot) = [0   1   0   0]
costfunction: categorical crossentropy 
                            = sum(label * -log(pred)) //just consider the 1-label
                            = 0.523
Why not that?
################
pred            = [0.1 0.3 0.2 0.4]
label (one hot) = [0   1   0   0]
costfunction: binary crossentropy
                            = sum(- label * log(pred) - (1 - label) * log(1 - pred))
                            = 1*-log(0.3)-log(1-0.1)-log(1-0.2)-log(1-0.4)
                            = 0.887
Run Code Online (Sandbox Code Playgroud)

我看到在二进制交叉熵中,是目标类,并且对应于以下一键编码:

target class zero 0 -> [1 0]
target class one  1 -> [0 1]
Run Code Online (Sandbox Code Playgroud)

总而言之:为什么我们只为预测类别计算/总结负对数似然率。我们为什么不对其他SHOULD-BE-ZERO- / NOT-THAT-CLASS类进行惩罚?

如果使用二进制交叉熵到一个热向量。预期零标签的概率也将受到惩罚。

Max*_*xim 5

请参阅对类似问题的回答。简而言之,二元交叉熵公式对于 one-hot 向量没有意义。可以对两个或多个类应用softmax交叉熵,也可以使用 中的(独立)概率向量label,具体取决于任务。

但是为什么我不能或不应该在 one-hot 向量上使用二元交叉熵呢?

您计算的是4 个独立特征的二元交叉熵:

pred   = [0.1 0.3 0.2 0.4]
label  = [0   1   0   0]
Run Code Online (Sandbox Code Playgroud)

模型推断预测第一个特征以 10% 的概率打开,第二个特征以 30% 的概率打开,依此类推。目标标签的解释方式如下:除第二个功能外,所有功能均关闭。请注意,这[1, 1, 1, 1]也是一个完全有效的标签,即它不是 one-hot 向量,并且pred=[0.5, 0.8, 0.7, 0.1]是一个有效的预测,即总和不必等于 1。

换句话说,您的计算是有效的,但针对完全不同的问题:多标签非排他二元分类。

另请参阅tensorflow 中 softmax 和 sigmoid 交叉熵损失函数之间的差异