回归的Tensorflow交叉熵?

机器算法验证 回归 张量流 交叉熵
2022-02-12 05:52:35

在回归的背景下,交叉熵成本是否有意义?(与分类相反)如果是这样,你能通过 tensorflow 举一个玩具例子吗?如果不是,为什么不呢?

我正在阅读 Michael Nielsen 的 神经网络和深度学习中的交叉熵,它似乎可以自然地用于回归和分类,但我不明白你如何在 tensorflow 中有效地应用它,因为损失函数采用 logits (我也不太了解),它们列在此处的分类下

4个回答

tf.nn.sigmoid_cross_entropy_with_logits不,将 TensorFlow 函数用于回归任务是没有意义的。在 TensorFlow 中,“交叉熵”是“分类交叉熵”的简写(或行话)。分类交叉熵是对概率的操作。回归问题试图预测连续的结果,而不是分类。

术语“交叉熵”有点误导,因为有任意数量的交叉熵损失函数;但是,将这种特殊损失称为“交叉熵”损失是机器学习中的惯例。

如果我们超越您链接到的 TensorFlow 函数,那么当然有许多可能的交叉熵函数。这是因为交叉熵的一般概念是关于两个概率分布的比较。根据您希望比较的两个概率分布,您可能会得到与典型的分类交叉熵损失不同的损失。例如,具有一些变化的均值但对角协方差固定的高斯目标的交叉熵减少到均方误差。在这些问题中更详细地概述了交叉熵的一般概念:

@Sycorax 给出的答案是正确的。然而,值得一提的是,在输出值在 [0,1] 范围内的回归任务中使用(二进制)交叉熵是一种有效且合理的做法。实际上,它用于图像自动编码器(例如这里本文)。您可能有兴趣在这个答案中看到一个简单的数学证明,说明为什么它在这种情况下有效

深度学习框架经常混合模型损失,并通过 来引用具有 softmax 非线性的多项式模型的交叉熵cross_entropy,这是具有误导性的。通常,您可以为任意模型定义交叉熵

对于均值不同但对角协方差固定的高斯模型,它等价于 MSE。对于一般协方差,交叉熵将对应于平方马氏距离对于指数分布,交叉熵损失看起来像 其中是连续的但非负数。所以的,交叉熵可以用于回归。

fθ(x)ylogfθ(x),
y

不幸的是,@Sycorax 目前接受的答案虽然详细,但不正确。

实际上,通过分类交叉熵进行回归的一个主要例子——Wavenet——已经在 TensorFlow中实现

原则是您将输出空间离散化,然后您的模型仅预测相应的 bin;有关声音建模领域的示例,请参见论文的第 2.2 节。因此,虽然从技术上讲,模型执行分类,但最终解决的任务是回归。

一个明显的缺点是,您会丢失输出分辨率。但是,这可能不是问题(至少我认为 Google 的人工助手发出了非常人性化的声音),或者您可以进行一些后期处理,例如在最可能的 bin 和它的两个邻居之间进行插值。

另一方面,与通常的单线性单元输出相比,这种方法使模型更加强大,即允许表达多模态预测或评估其置信度。请注意,尽管后者可以通过其他方式自然地实现,例如通过在变分自动编码器中具有显式(对数)方差输出。

无论如何,这种方法不能很好地扩展到更多维的输出,因为输出层的大小呈指数增长,使其成为计算和建模问题。