在回归(相对于分类)的上下文中,交叉熵成本是否有意义?如果是这样,您可以通过TensorFlow给出一个玩具示例吗?如果没有,为什么不呢?
我正在阅读迈克尔·尼尔森(Michael Nielsen)的《神经网络和深度学习》中的交叉熵,它似乎可以自然地用于回归和分类,但是我不知道您如何在TensorFlow中有效地应用它。损失函数采用logit(我也不是很了解),它们在此处归类
在回归(相对于分类)的上下文中,交叉熵成本是否有意义?如果是这样,您可以通过TensorFlow给出一个玩具示例吗?如果没有,为什么不呢?
我正在阅读迈克尔·尼尔森(Michael Nielsen)的《神经网络和深度学习》中的交叉熵,它似乎可以自然地用于回归和分类,但是我不知道您如何在TensorFlow中有效地应用它。损失函数采用logit(我也不是很了解),它们在此处归类
Answers:
不,像tf.nn.sigmoid_cross_entropy_with_logits
在回归任务中那样使用TensorFlow函数没有任何意义。在TensorFlow中,“交叉熵”是“分类交叉熵”的简写(或专业术语)。分类交叉熵是对概率的一种运算。回归问题试图预测连续的结果,而不是分类。
术语“交叉熵”有点误导,因为存在任何数量的交叉熵损失函数。但是,在机器学习中,将这种特殊损失称为“交叉熵”损失是一种惯例。
如果我们不仅仅关注链接到的TensorFlow函数,那么当然还有许多可能的交叉熵函数。这是因为交叉熵的一般概念是关于两个概率分布的比较。根据您要比较的两个概率分布,可能会得出与典型的分类交叉熵损失不同的损失。例如,高斯目标的交叉熵具有一些变化的平均值但固定的对角协方差,可以减小为均方误差。这些问题更详细地概述了交叉熵的一般概念:
@Sycorax给出的答案是正确的。但是,值得一提的是,在输出值在[0,1]范围内的回归任务中使用(二进制)交叉熵是正确有效的做法。实际上,它用于图像自动编码器(例如,此处和本文)。您可能会想在此答案中看到一个简单的数学证明,说明其在这种情况下为何起作用。
不幸的是,@ Sycorax截至目前已接受的答案虽然很详细,但却是错误的。
事实上,通过分类交叉熵回归的一个很好的例子- Wavenet -已经实施的TensorFlow。
原理是,您离散化输出空间,然后模型仅预测相应的仓位。看到的第2.2节纸为在声音建模域的例子。因此,在技术上模型进行分类时,最终要解决的任务是回归。
一个明显的缺点是,您将失去输出分辨率。但是,这可能不是问题(至少我认为Google的人工助手的声音很人性化),或者您可以进行一些后处理,例如在最可能的bin与它的两个邻居之间进行插值。
另一方面,与通常的单线性单位输出相比,此方法使模型更强大,即允许表达多模式预测或评估其置信度。注意,尽管后者可以自然地通过其他方式来实现,例如通过像变分自动编码器那样具有显式(对数)方差输出。
无论如何,这种方法不能很好地扩展到更高维度的输出,因为输出层的大小会以指数方式增长,从而导致计算和建模问题。
由于现在我不同意先前接受的答案,因此我重新考虑了这个问题。交叉熵损失可用于回归分析(尽管并不常见)。
归结为一个事实,即交叉熵是仅在比较两个概率分布时才有意义的概念。您可以考虑将神经网络输出正态分布的均值和标准差作为其预测。然后,由于对错误的预测更有信心,因此将受到更严厉的惩罚。所以是的,这是有道理的,但前提是您要以某种方式输出分布。@SiddharthShakya在对我的原始问题的评论中的链接显示了这一点。