了解交叉熵损失

Mat*_*att 4 python machine-learning neural-network loss-function

我看到很多关于 CEL 或二元交叉熵损失的解释,其中基本事实是 0 或 1,然后你会得到一个如下函数:

def CrossEntropy(yHat, y):
    if yHat == 1:
      return -log(y)
    else:
      return -log(1 - y)
Run Code Online (Sandbox Code Playgroud)

然而,当你的 yHat 不是离散的 0 或 1 时,我对 BCE 如何工作感到困惑。例如,如果我想查看 MNIST 数字的重建损失,其中我的基本事实是 0 < yHat < 1,并且我的预测是也在同一范围内,这如何改变我的功能?

编辑:

抱歉,让我为我的困惑提供更多背景信息。在关于 VAE 的 PyTorch 教程中,他们使用 BCE 来计算重建损失,其中 yhat (据我所知,不是离散的)。看:

https://github.com/pytorch/examples/blob/master/vae/main.py

该实现有效......但我不明白在这种情况下如何计算 BCE 损失。

xdu*_*ch0 5

交叉熵测量任意两个概率分布之间的距离。在您所描述的(VAE)中,MNIST 图像像素被解释为像素“开/关”的概率。在这种情况下,您的目标概率分布根本不是狄拉克分布(0 或 1),而是可以具有不同的值。请参阅维基百科上的交叉熵定义

以上述内容为参考,假设您的模型输出某个像素 0.7 的重建。这实质上表明您的模型估计 p(pixel=1) = 0.7,因此 p(pixel=0) = 0.3。
如果目标像素仅为 0 或 1,则该像素的交叉熵将是 -log(0.3)(如果真实像素为 0)或 -log(0.7)(较小的值(如果真实像素为 1)
。如果真实像素为 1,则完整公式为 -(0*log(0.3) + 1*log(0.7)),否则为 -(1*log(0.3) + 1*log(0.7))。

假设您的目标像素实际上是 0.6!这实质上是说像素打开的概率为 0.6,关闭的概率为 0.4。
这只是将交叉熵计算更改为 -(0.4*log(0.3) + 0.6*log(0.7))。

最后,您可以简单地对图像上的这些每像素交叉熵进行平均/求和。