逻辑损失和交叉熵损失的区别

Posted

技术标签:

【中文标题】逻辑损失和交叉熵损失的区别【英文标题】:Difference between Logistic Loss and Cross Entropy Loss 【发布时间】:2020-06-15 09:40:00 【问题描述】:

我对二元分类场景中的逻辑损失和交叉熵损失感到困惑。 根据*** (https://en.wikipedia.org/wiki/Loss_functions_for_classification),逻辑损失定义为:

在哪里v=y*y_hat

交叉熵损失定义为:

来自*** (https://en.wikipedia.org/wiki/Loss_functions_for_classification):

很容易检查逻辑损失和二元交叉熵损失(Log loss)实际上是相同的(直到乘法常数 1/log(2))

但是,当我用一些代码对其进行测试时,我发现它们并不相同。这是python代码:

from numpy import exp
from math import log

def cross_entropy_loss(y, yp):
    return -log(1-yp) if y==0 else -log(yp)

def logistic_loss(y, yp):
    return log(1+exp(-y*yp))/log(2)

y, yp = 0, 0.3  # y= 0, 1 for cross_entropy_loss
l1 = cross_entropy_loss(y, yp)
y, yp = -1, 0.3  # y = -1, 1 for logistic loss
l2 = logistic_loss(y, yp)
print(l1, l2, l1/l2)

y, yp = 1, 0.9
l1 = cross_entropy_loss(y, yp)
l2 = logistic_loss(y, yp)
print(l1, l2, l1/l2)

输出表明,损失值既不相同,它们之间的比率也不恒定:

0.35667494393873245 1.2325740743522222 0.2893740436056004
0.10536051565782628 0.49218100325603786 0.21406863523949665

有人能解释一下为什么它们“实际上是一样的”吗?

【问题讨论】:

这能回答你的问题吗? math.stackexchange.com/questions/1074276/… @ccl 我试图理解这个答案。我很困惑那个答案中的逻辑损失方程只是交叉熵损失,而不是我上面提到的那个。 【参考方案1】:

在***中 v 被定义为

v = -yf(x)。

***中没有定义的是 \haty (即预测的标签)。应该定义为(逻辑函数):

\haty = 1/(1+exp(-f(x)))。

通过将上述定义代入***的逻辑损失公式,您应该能够恢复交叉熵损失。请注意,交叉熵损失方程(您在上面介绍过)是针对 y=0,1 制定的,而***文章中的方程式针对 y=-1,1。

【讨论】:

以上是关于逻辑损失和交叉熵损失的区别的主要内容,如果未能解决你的问题,请参考以下文章

Keras 和 TensorFlow 中所有这些交叉熵损失之间有啥区别?

TensorFlow中如何选择交叉熵损失?

机器学习算法面试为什么逻辑回归的损失函数是交叉熵?

交叉熵损失函数和focal loss

谈谈交叉熵损失函数

[损失函数]——交叉熵